Il digest predefinito è stato modificato da MD5 a SHA256 in Openssl 1.1
Prova a usare -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!
I brutti dettagli:
La password immessa non viene utilizzata così com'è da aes (o altra crittografia) ma il comando deriva implicitamente una chiave da essa. La derivazione della chiave utilizza il digest del messaggio che è stato modificato in openssl 1.1 Usa SHA256 non MD5 come digest predefinito.
Nel caso in cui desideri mantenere una password semplice e non iniziare a fare scherzi con la digitazione marziale (-K, -iv), forza semplicemente lo stesso digest con -md
Ho testato la crittografia e decrittografia AES con la versione 1.1.0a (scaricata da openssl.org) e la versione 1.0.2g-fips (dal mio Ubuntu 16.04)
Quando si utilizza il -p
opzione attiva con 2 diverse versioni di openssl
, IV e chiave sono diversi:
$ 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:
Sospetto una diversa derivazione di chiave e IV basata sul sale con le 2 versioni.
Se vuoi eliminare questo errore di decrittazione, puoi rimuovere il -salt
e usa le opzioni -K
per la chiave e -iv
nel tuo comando openssl.
Questo problema può verificarsi anche tra OpenSSL 1.1 e LibreSSL. In questo caso, e in altri casi in cui sono disponibili digest di messaggi più sicuri, dovresti evitare di utilizzare -md md5
per crittografare nuovi file poiché l'algoritmo MD5 presenta ampie vulnerabilità.
Dovresti invece usare -md sha256
o qualche altro digest di messaggi più sicuro supportato da tutte le versioni. -md md5
dovrebbe essere utilizzato solo per decrittografare i vecchi file e idealmente dovrebbero essere nuovamente crittografati utilizzando sha256. Questo è menzionato anche nelle FAQ di OpenSSL:
Un digest del messaggio viene utilizzato per creare la chiave di crittografia/decrittografia da una passphrase inserita dall'utente. In OpenSSL 1.1.0 siamo passati da MD5 a SHA-256. Lo abbiamo fatto come parte di un cambiamento generale per allontanarci dall'algoritmo MD5 ormai insicuro e non funzionante. Se hai vecchi file, usa il flag "-md md5" per decifrarli.
Per verificare quali riassunti dei messaggi sono supportati dalle diverse versioni che hai in gioco, esegui openssl help
:
LibreSSL 2.2.7 (incluso con 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
…