GNU/Linux >> Linux Esercitazione >  >> Linux

La crittografia/decrittografia non funziona bene tra due diverse versioni di openssl

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
…

Linux
  1. Come estrarre i registri tra due timestamp?

  2. Cosa hanno in comune i diversi Bsd?

  3. Come realizzare un tubo bidirezionale tra due programmi?

  4. Come utilizzare due diverse versioni di Wine sulla stessa installazione?

  5. apt-get install per diverse versioni di Python

Come passare tra diverse versioni di comandi in Linux

FIX:Google Chrome non funziona su Kali Linux

Estrarre il testo tra due righe specifiche?

SET GLOBAL max_allowed_packet non funziona

Perché Bash `(())` non funziona all'interno di `[[]]`?

Perché il mio collegamento simbolico non funziona?