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
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
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.
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
…