12 septiembre, 2024

OpenSSL Legacy - Lo entendemos realmente?

Como respuesta muy ligera y sin explicaciones, algunos analistas y administradores sugieren usar la opción legacy para la creación de certificados en el formato PKCS#12 (PFX) sin realmente entender el riesgo que se esta asumiendo.

undefined

 

Profundizando el parámetro LEGACY

OpenSSL 3.0 movió varios algoritmos obsoletos o inseguros a un módulo de biblioteca interno llamado legacy provider (proveedor heredado). No se carga de forma predeterminada, por lo que las aplicaciones (o los runtime) que usan OpenSSL para operaciones criptográficas no pueden usar dichos algoritmos al cargar certificados, etc. 

Se recomienda encarecidamente NO USAR de estos algoritmos legacy.


Si la aplicación utiliza certificados de cliente almacenados en un archivo cifrado con un cifrado heredado como RC2-40-CBC, es posible "modernizar" el archivo del certificado volviéndolo a cifrar usando openssl.


Por ejemplo, cargar un archivo PKCS12 que utiliza el cifrado RC2-40-CBC para el cifrado produce un error como


OpenSSL::PKCS12::PKCS12Error PKCS12_parse: unsupported

Esto significa que si utilizo archivos de certificados y claves en formato PFX o PEM que se crearon en versiones de OpenSSL 1.1 o anteriores, es posible que estén codificados con algoritmos que ya no son compatibles con OpenSSL 3.0.

En el modo legacy, el algoritmo predeterminado para el cifrado de certificados es RC2_CBC o 3DES_CBC dependiendo de si el cifrado RC2 está habilitado en la compilación. El algoritmo predeterminado para el cifrado de clave privada es 3DES_CBC. Si no se especifica la opción heredada, entonces el proveedor heredado no se carga y el algoritmo de cifrado predeterminado para certificados y claves privadas es AES_256_CBC con PBKDF2 para la derivación de claves.

 

Que le pasa al Windows con los PKCS#12 ??

En diversas versiones de Windows (especialmente en 2012 o anteriores) al intentar importar un archivo de certificados PFX, al ingresar la clave para su importación nos aparece el error de "The password you entered is incorrect" 😕

 

Esto se debe que Windows no esta soportando por default el algoritmo de cifrado que le metimos al PFX 🙈 , básicamente esa sería la traducción del error.

 

Acá es donde empiezan varios de los problemas, en que hacemos prueba y error (o copy paste como locos) sin entender. Antes de ir de cabeza a generar con parámetros legacy, se debe crear el PFX con el siguiente comando colocando explícitamente los algoritmos de cifrado.


openssl pkcs12 -export -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -nomac -inkey exported.key -in exported.crt -out New.pfx

Pero no estamos especificando algoritmos deprecados? Si, pero Windows es la única forma de importarlo ya que no soporta algoritmos mas nuevos 😔

Otra alternativa es importar el .pfx a una versión más reciente de Windows (como Windows 10 o 2016). Importante, mientras se importa, marcar el certificado como exportable. Esto le permite exportar el certificado posteriormente con el algoritmo 3DES-SHA1 anterior o sin contraseña para proteger la clave privada.

 

Pero necesito crearlo igualmente

Asumiendo el riesgo que se utiliza algoritmos de cifrados deprecados (porque ya fueron vulnerados) y te gusta correr en el peligro ...

 

El comando de OpenSSL para generar PFX con legacy provider es:


openssl pkcs12 -export -out output_file.pfx -inkey file_with_key.key -in file_cert.crt -legacy

 

Detalle de Algoritmos considerados Legacy según OpenSSL

[incluidos hasta última actualización del Post]

Algoritmos de Cifrado Simétrico

DES (Data Encryption Standard)

des-cbc, des-cfb, des-ofb, des-ecb

Inseguro debido a la longitud de su clave de 56 bits

Triple DES (3DES)

des-ede, des-ede-cbc, des-ede3, des-ede3-cbc, des-cfb1, des-cfb8, des-cfb64, des-ofb64

Considerado inseguro debido a ataques de cumpleaños (birthday attack) y el agotamiento de su espacio de claves

RC2

rc2-cbc, rc2-ecb, rc2-cfb, rc2-ofb

Algoritmo de cifrado de bloque con vulnerabilidades

RC4

rc4, rc4-40

Un cifrado de flujo desaconsejado debido a múltiples vulnerabilidades, especialmente en TLS.

IDEA

idea-cbc, idea-ecb, idea-cfb, idea-ofb

Algoritmo de cifrado de bloque que ha caído en desuso

Algoritmos de Hashing

MD2

 

Muy inseguro, vulnerable a ataques de colisión y preimágenes

MD4

 

Vulnerable a ataques de colisión, considerado obsoleto

MD5

 

Vulnerable a ataques de colisión, no recomendado para criptografía

RIPEMD-160

 

Algoritmo de hash menos común y considerado débil comparado con SHA-2

WHIRLPOOL

 

Aunque menos conocido, se considera menos robusto que SHA-3

SHA-1

 

Vulnerable a colisiones y ataques de preimágenes parciales, aunque aún se usa en algunos casos legacy

Algoritmos Asimétricos y de Firma Digital

RSA

rsa

Con claves < 2048 bits

DSA

dsa, dsaWithSHA1

Con claves < 2048 bits y desaconsejado frente a ECDSA

ElGamal

elgamal

Algoritmo menos utilizado y reemplazado por opciones más modernas

DH (Diffie-Hellman)

dh

Con claves < 2048 bits

ECDSA

 

Algunas curvas elípticas más antiguas que no son seguras, aunque la mayoría están en uso

GOST

 

Algoritmos como gost89, gost94, gost-mac son específicos de Rusia y menos utilizados internacionalmente, con varios aspectos de seguridad cuestionados



Referencias

  • https://www.practicalnetworking.net/practical-tls/openssl-3-and-legacy-providers/
  • https://help.heroku.com/88GYDTB2/how-do-i-configure-openssl-to-allow-the-use-of-legacy-cryptographic-algorithms#:~:text=OpenSSL%203.0%20moved%20several%20deprecated,%2C%20creating%20message%20digests%2C%20etc.
  • https://stackoverflow.com/questions/69343254/the-password-you-entered-is-incorrect-when-importing-pfx-files-to-windows-cer 
  • https://docs.openssl.org/3.0/man1/openssl-pkcs12/

0 comments:

Publicar un comentario