web-dev-qa-db-fra.com

Le chiffrement / déchiffrement ne fonctionne pas bien entre deux versions d'OpenSL différentes

J'ai téléchargé et compilé openssl-1.1.0.

Je peux chiffrer et déchiffrer en utilisant le même exe de openssl (tel quel ici )

me@ubuntu:~/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:
me@ubuntu:~/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

Ce openssl utilise: libcrypto.so.1.1, libssl.so.1.1

Lorsque j'essaie de décrypter avec le openssl installé sur mon ubuntu, qui utilise: /lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

Je reçois une erreur:

me@ubuntu:~/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:

Qu'est-ce qui peut provoquer cela? Merci

28
hudac

Le résumé par défaut a été changé de MD5 à SHA256 dans Openssl 1.1

Essayez d'utiliser - md md5

cgs@ubuntu:~$ echo "it-works!" > file.txt
cgs@ubuntu:~$ 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:
cgs@ubuntu:~$ 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!

Les moches détails:

Le mot de passe saisi n'est pas utilisé tel quel par aes (ou tout autre chiffrement) mais la commande en déduit implicitement une clé. La dérivation de clé utilise le résumé de message qui a été modifié dans openssl 1.1 tilisez SHA256 et non MD5 comme résumé par défaut.

Dans le cas où vous voulez garder un mot de passe simple et ne pas commencer à jouer avec la saisie martiale (-K, -iv), forcez simplement le même résumé avec - md

89
idog

J'ai testé le cryptage et le décryptage AES avec la version 1.1.0a (téléchargée depuis openssl.org) et la version 1.0.2g-fips (depuis mon ubuntu 16.04)

Lorsque vous utilisez le -p option activée avec 2 versions différentes de openssl, l'IV et la clé sont différents:

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

Je soupçonne une dérivation différente de la clé et de l'IV basée sur le sel avec les 2 versions.

Si vous souhaitez vous débarrasser de cette erreur de décryptage, vous pouvez supprimer le -salt option et utilisez les options -K pour la clé et -iv dans votre commande openssl.

3
oliv

Ce problème peut également survenir entre OpenSSL 1.1 et LibreSSL. Dans ce cas, et dans d'autres cas où des résumés de messages plus sécurisés sont disponibles, vous devez éviter d'utiliser -md md5 pour crypter les nouveaux fichiers car l'algorithme MD5 présente de nombreuses vulnérabilités.

Vous devriez plutôt utiliser -md sha256 ou un autre résumé de message plus sécurisé pris en charge par toutes les versions. -md md5 ne devrait être utilisé que pour décrypter les anciens fichiers, et ils devraient idéalement être rechiffrés à l'aide de sha256. Ceci est également mentionné dans la FAQ OpenSSL :

Un résumé de message est utilisé pour créer la clé de cryptage/décryptage à partir d'une phrase secrète entrée par l'utilisateur. Dans OpenSSL 1.1.0, nous sommes passés de MD5 à SHA-256. Nous l'avons fait dans le cadre d'un changement global pour nous éloigner de l'algorithme MD5 désormais non sécurisé et cassé. Si vous avez d'anciens fichiers, utilisez le drapeau "-md md5" pour les déchiffrer.


Pour vérifier quels résumés de messages sont pris en charge par les différentes versions que vous utilisez, exécutez openssl help:

LibreSSL 2.2.7 (inclus avec 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