GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

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 unverändert von aes (oder einer anderen Verschlüsselung) verwendet, aber der Befehl leitet daraus implizit einen Schlüssel ab. Die Schlüsselableitung verwendet den Nachrichten-Digest, der in Openssl 1.1 geändert wurde. Verwenden Sie SHA256 und nicht MD5 als Standard-Digest.

Falls Sie das einfache Passwort behalten und nicht mit dem Keying martial (-K,-iv) herumspielen wollen, erzwingen Sie einfach denselben Digest mit -md


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

Bei Verwendung des -p Option an mit 2 verschiedenen Versionen von openssl , IV und 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 unterschiedliche Ableitung von Schlüssel und IV basierend auf dem Salz bei den 2 Versionen.

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


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 vermeiden neue Dateien zu verschlüsseln, da der MD5-Algorithmus umfangreiche Schwachstellen aufweist.

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

Ein Message Digest wird verwendet, um den Verschlüsselungs-/Entschlüsselungsschlüssel aus einer von Menschen eingegebenen Passphrase zu erstellen. In OpenSSL 1.1.0 haben wir von MD5 auf SHA-256 umgestellt. Wir haben dies als Teil einer allgemeinen Änderung getan, um uns vom 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 Nachrichtenauszüge von den verschiedenen Versionen, die Sie im Spiel haben, unterstützt werden :

LibreSSL 2.2.7 (in macOS 10.13 High Sierra enthalten):

$ 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. Wie extrahiert man Protokolle zwischen zwei Zeitstempeln?

  2. Wie erstelle ich eine bidirektionale Pipe zwischen zwei Programmen?

  3. Gemeinsame Linien zwischen zwei Dateien?

  4. Text zwischen zwei bestimmten Zeilen extrahieren?

  5. SET GLOBAL max_allowed_packet funktioniert nicht

So wechseln Sie zwischen verschiedenen Versionen von Befehlen in Linux

Dateiverschlüsselung und -entschlüsselung leicht gemacht mit GPG

Dateiverschlüsselung und -entschlüsselung mit ccrypt

FIX:Google Chrome funktioniert nicht unter Kali Linux

Was ist der Unterschied zwischen root und sudo?

chmod funktioniert nicht