it-swarm.com.de

Verschlüsselung / Entschlüsselung funktioniert zwischen zwei verschiedenen OpenSL-Versionen nicht gut

Ich habe openssl-1.1.0 Heruntergeladen und kompiliert.

Ich kann mit der gleichen Exe von openssl ver- und entschlüsseln (wie hier )

[email protected]:~/openssl-1.1.0$ LD_LIBRARY_PATH=. ./apps/openssl aes-256-cbc -a -salt -in file.txt -out file.txt.enc
enter aes-256-cbc encryption password: 123
Verifying - enter aes-256-cbc encryption password:
[email protected]:~/openssl-1.1.0$ LD_LIBRARY_PATH=. apps/openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec
enter aes-256-cbc decryption password: 123

Dieses openssl verwendet: libcrypto.so.1.1, libssl.so.1.1

Wenn ich versuche, mit dem auf meinem Ubuntu installierten openssl zu entschlüsseln, wird Folgendes verwendet: /lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

Ich erhalte einen Fehler:

[email protected]:~/openssl-1.1.0$ openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec2
enter aes-256-cbc decryption password: 123
bad decrypt
140456117421728:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:

Was kann das verursachen? Vielen Dank

28
hudac

Der Standard-Digest wurde in Openssl 1.1 von MD5 auf SHA256 geändert

Versuchen Sie es mit - 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!

Die hässlichen Details:

Das eingegebene Passwort wird nicht wie es ist von aes (oder einer anderen Verschlüsselung) verwendet, aber der Befehl leitet implizit einen Schlüssel daraus ab. Die Schlüsselableitung verwendet einen Message Digest, der in openssl 1.1 geändert wurde. Verwenden Sie SHA256 und nicht MD5 als Standard-Digest.

Wenn Sie das Passwort einfach halten und nicht mit dem Keying Martial (-K, -iv) herumspielen möchten, erzwingen Sie den gleichen Digest mit - md

89
idog

Ich habe die AES-Verschlüsselung und -Entschlüsselung mit Version 1.1.0a (heruntergeladen von openssl.org) und Version 1.0.2g-fips (von meinem Ubuntu 16.04) getestet.

Bei Verwendung des -p Option an mit 2 verschiedenen Versionen von openssl, das IV und der Schlüssel sind unterschiedlich:

$ 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:

Ich vermute eine andere Herleitung von Schlüssel und IV basierend auf dem Salz mit den 2 Versionen.

Wenn Sie diesen Entschlüsselungsfehler beseitigen möchten, können Sie das -salt Option und verwenden Sie die Optionen -K für den Schlüssel und -iv in Ihrem openssl Befehl.

3
oliv

Dieses Problem kann auch zwischen OpenSSL 1.1 und LibreSSL auftreten. In diesem Fall und in anderen Fällen, in denen sicherere Nachrichtenauszüge verfügbar sind, sollten Sie die Verwendung von -md md5 Zur Verschlüsselung neuer Dateien vermeiden, da der MD5-Algorithmus umfangreiche Sicherheitslücken aufweist.

Sie sollten stattdessen -md sha256 Oder einen anderen sichereren Message Digest verwenden, der von allen Versionen unterstützt wird. -md md5 Sollte nur zum Entschlüsseln alter Dateien verwendet werden und sie sollten idealerweise mit sha256 neu verschlüsselt werden. Dies wird auch in den OpenSSL-FAQ erwähnt :

Ein Message Digest wird verwendet, um den Verschlüsselungs-/Entschlüsselungsschlüssel aus einer vom Menschen eingegebenen Passphrase zu erstellen. In OpenSSL 1.1.0 haben wir von MD5 auf SHA-256 gewechselt. Wir haben dies als Teil einer allgemeinen Änderung getan, um uns von dem jetzt unsicheren und kaputten MD5-Algorithmus zu entfernen. Wenn Sie alte Dateien haben, verwenden Sie das Flag "-md md5", um sie zu entschlüsseln.


Führen Sie openssl help Aus, um zu überprüfen, welche Message Digests von den verschiedenen Versionen unterstützt werden, die Sie im Spiel haben:

LibreSSL 2.2.7 (enthalten in 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
…
2
Aaron Brager