linux - para - openssl windows 10
El cifrado/descifrado no funciona bien entre dos versiones de OpenSL diferentes (3)
He descargado y compilado
openssl-1.1.0
.
Puedo encriptar y desencriptar usando el mismo exe de
openssl
(como está
here
)
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
Este
openssl
utiliza:
libcrypto.so.1.1, libssl.so.1.1
Cuando intento descifrar con el
openssl
instalado en mi ubuntu, que usa:
/lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
Me sale un error:
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é puede causar esto? Gracias
El resumen predeterminado se cambió de MD5 a SHA256 en Openssl 1.1
Intenta usar -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!
Los detalles feos:
La contraseña ingresada no se usa como es por aes (u otro cifrado) pero el comando deriva implícitamente una clave de ella. La derivación de clave utiliza un resumen de mensaje que se cambió en openssl 1.1. Use SHA256 no MD5 como resumen predeterminado.
En caso de que desee mantener una contraseña simple, y no comenzar a jugar con la clave marcial (-K, -iv), simplemente fuerce el mismo resumen con -md
Este problema también puede ocurrir entre OpenSSL 1.1 y LibreSSL.
En este caso, y en otros casos donde hay resúmenes de mensajes más seguros disponibles, debe evitar usar
-md md5
para cifrar archivos nuevos ya que el algoritmo MD5 tiene vulnerabilidades extensas.
En su lugar, debe usar
-md sha256
o algún otro resumen de mensaje más seguro compatible con todas las versiones.
-md md5
solo debe usarse para descifrar archivos antiguos, y lo ideal es que se vuelvan a cifrar con sha256.
Esto también se menciona en
las preguntas frecuentes de OpenSSL
:
Se utiliza un resumen de mensaje para crear la clave de cifrado / descifrado a partir de una frase de contraseña ingresada por humanos. En OpenSSL 1.1.0 cambiamos de MD5 a SHA-256. Hicimos esto como parte de un cambio general para alejarnos del algoritmo MD5 ahora inseguro y roto. Si tiene archivos antiguos, use el indicador "-md md5" para descifrarlos.
Para verificar qué resúmenes de mensajes son compatibles con las diferentes versiones que tiene en juego, ejecute la
openssl help
:
LibreSSL 2.2.7 (incluido 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
…
Probé el cifrado y descifrado AES con la versión 1.1.0a (descargada de openssl.org) y la versión 1.0.2g-fips (de mi ubuntu 16.04)
Cuando se usa la opción
-p
con 2 versiones diferentes de
openssl
, el IV y la clave son diferentes:
$ 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:
Sospecho una derivación diferente de clave y IV basada en la sal con las 2 versiones.
Si desea deshacerse de este error de descifrado, puede eliminar la opción
-salt
y usar las opciones
-K
para la clave y
-iv
en su comando openssl.