GNU/Linux >> Belajar Linux >  >> Linux

Enkripsi/dekripsi tidak berfungsi dengan baik di antara dua versi openssl yang berbeda

Intisari default diubah dari MD5 ke SHA256 di Openssl 1.1

Coba gunakan -md md5

[email protected]:~$ echo "it-works!" > file.txt
[email protected]:~$ LD_LIBRARY_PATH=~/openssl-1.1.0/ openssl-1.1.0/apps/openssl aes-256-cbc -a -salt -in ~/file.txt -out ~/file.txt.enc -md md5
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
[email protected]:~$ LD_LIBRARY_PATH=~/openssl-1.0.1f/ openssl-1.0.1f/apps/openssl aes-256-cbc -a -in ~/file.txt.enc -d
enter aes-256-cbc decryption password:
it-works!

Detail jeleknya:

Kata sandi yang dimasukkan tidak digunakan sebagaimana adanya oleh aes (atau enkripsi lainnya) tetapi perintah secara implisit mendapatkan kunci darinya. Derivasi kunci menggunakan intisari pesan yang diubah di openssl 1.1 Gunakan SHA256 bukan MD5 sebagai intisari default.

Jika Anda ingin membuatnya tetap sederhana, dan tidak mulai mengotak-atik keying bela diri (-K,-iv) cukup paksa intisari yang sama dengan -md


Saya menguji enkripsi dan dekripsi AES dengan versi 1.1.0a (diunduh dari openssl.org) dan versi 1.0.2g-fips (dari ubuntu 16.04 saya)

Saat menggunakan -p aktif dengan 2 versi berbeda dari openssl , IV dan kuncinya berbeda:

$ LD_LIBRARY_PATH=~/openssl-1.1.0a/ ~/openssl-1.1.0a/apps/openssl aes-256-cbc -a -p -salt -in file -out file.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
salt=6A80B2A3B4CFE048
key=637E17094DF7892A7AFC14957EAA13991DFFD3273A2459EDA613F3AD8A406C38
iv =6AC7CE5C9AADC6C46C633BF5124DAFBF

$ openssl aes-256-cbc -a -d -p -in file.enc -out file.dec
enter aes-256-cbc decryption password:
salt=6A80B2A3B4CFE048
key=6220AF2E25CB0B5D9994A0A1B05503D82AC5B0B4C9015E241CACBF8BF62DAC77
iv =2DC04EF29AA57478EBE606DF87277EA6
bad decrypt
140557073118872:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:592:

Saya menduga penurunan kunci dan IV yang berbeda berdasarkan garam dengan 2 versi.

Jika Anda ingin menghilangkan kesalahan dekripsi ini, Anda dapat menghapus -salt opsi dan gunakan opsi -K untuk kunci dan -iv dalam perintah openssl Anda.


Masalah ini juga dapat terjadi antara OpenSSL 1.1 dan LibreSSL. Dalam kasus ini, dan dalam kasus lain di mana intisari pesan yang lebih aman tersedia, Anda harus menghindari penggunaan -md md5 untuk mengenkripsi file baru karena algoritma MD5 memiliki kerentanan yang luas.

Anda sebaiknya menggunakan -md sha256 atau intisari pesan lain yang lebih aman yang didukung oleh semua versi. -md md5 hanya boleh digunakan untuk mendekripsi file lama, dan idealnya file tersebut harus dienkripsi ulang menggunakan sha256. Ini juga disebutkan dalam FAQ OpenSSL:

Intisari pesan digunakan untuk membuat kunci enkripsi/dekripsi dari frasa sandi yang dimasukkan manusia. Di OpenSSL 1.1.0 kami mengubah dari MD5 ke SHA-256. Kami melakukan ini sebagai bagian dari perubahan keseluruhan untuk beralih dari algoritme MD5 yang sekarang tidak aman dan rusak. Jika Anda memiliki file lama, gunakan tanda "-md md5" untuk mendekripsinya.

Untuk memeriksa intisari pesan mana yang didukung oleh berbagai versi yang Anda mainkan, jalankan openssl help :

LibreSSL 2.2.7 (disertakan dengan macOS 10.13 High Sierra):

$ openssl help
…
Message Digest commands (see the `dgst' command for more details)
gost-mac          md4               md5               md_gost94
ripemd160         sha               sha1              sha224
sha256            sha384            sha512            streebog256
streebog512       whirlpool
…

OpenSSL 1.1f:

$ openssl help
…
Message Digest commands (see the `dgst' command for more details)
blake2b512        blake2s256        gost              md4
md5               rmd160            sha1              sha224
sha256            sha384            sha512
…

Linux
  1. Bagaimana Cara Mengekstrak Log Antara Dua Cap Waktu?

  2. Bagaimana Cara Membuat Pipa Dua Arah Antara Dua Program?

  3. Garis Umum Antara Dua File?

  1. Ekstrak Teks Antara Dua Baris Tertentu?

  2. SET GLOBAL max_allowed_packet tidak berfungsi

  3. Mengapa Bash `(())` tidak berfungsi di dalam `[[]]`?

  1. Apa perbedaan antara root dan sudo?

  2. chmod tidak berfungsi

  3. yum install gcc-g++ tidak berfungsi lagi di CentOs 6.4