GNU/Linux >> Znalost Linux >  >> Linux

Šifrování/dešifrování nefunguje dobře mezi dvěma různými verzemi openssl

Výchozí výtah byl změněn z MD5 na SHA256 v Openssl 1.1

Zkuste použít -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!

Ošklivé detaily:

Zadané heslo není použito tak, jak je aes (nebo jiné šifrování), ale příkaz z něj implicitně odvozuje klíč. Odvození klíče používá výtah zpráv, který byl změněn v openssl 1.1. Jako výchozí výtah použijte SHA256, nikoli MD5.

V případě, že chcete zachovat jednoduché heslo a nezačínat si zahrávat s bojovým klíčem (-K,-iv), vynuťte stejný výtah pomocí -md


Testoval jsem šifrování a dešifrování AES s verzí 1.1.0a (staženo z openssl.org) a verzí 1.0.2g-fips (z mého ubuntu 16.04)

Při použití -p možnost zapnuta se 2 různými verzemi openssl , IV a klíč se liší:

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

Mám podezření na jinou derivaci klíče a IV na základě soli se 2 verzemi.

Pokud se chcete této chyby dešifrování zbavit, můžete odstranit -salt a použijte možnosti -K pro klíč a -iv v příkazu openssl.


K tomuto problému může dojít také mezi OpenSSL 1.1 a LibreSSL. V tomto případě a v dalších případech, kdy jsou k dispozici bezpečnější výtahy zpráv, byste se měli vyhnout použití -md md5 k šifrování nových souborů, protože algoritmus MD5 má rozsáhlé zranitelnosti.

Místo toho byste měli použít -md sha256 nebo nějaký jiný bezpečnější přehled zpráv podporovaný všemi verzemi. -md md5 by měly být použity pouze pro dešifrování starých souborů a v ideálním případě by měly být znovu zašifrovány pomocí sha256. Toto je také zmíněno v OpenSSL FAQ:

Výpis zprávy se používá k vytvoření šifrovacího/dešifrovacího klíče z přístupové fráze zadané člověkem. V OpenSSL 1.1.0 jsme přešli z MD5 na SHA-256. Udělali jsme to jako součást celkové změny, abychom se vzdali nyní nezabezpečeného a nefunkčního algoritmu MD5. Pokud máte staré soubory, použijte k jejich dešifrování příznak "-md md5".

Chcete-li zkontrolovat, které výtahy zpráv jsou podporovány různými verzemi, které máte ve hře, spusťte openssl help :

LibreSSL 2.2.7 (součástí systému 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. Jak extrahovat protokoly mezi dvěma časovými razítky?

  2. Co mají různé BSD společného?

  3. Jak vytvořit obousměrné potrubí mezi dvěma programy?

  1. Extrahovat text mezi dva konkrétní řádky?

  2. SET GLOBAL max_allowed_packet nefunguje

  3. Proč Bash `(())` nefunguje uvnitř `[[]]`?

  1. chmod nefunguje

  2. Proč můj symbolický odkaz nefunguje?

  3. yum install gcc-g++ už v CentOs 6.4 nefunguje