Estoy usando OpenSSL 1.0.1e-fips en RHEL 6.9.
He cifrado un archivo con este comando:
openssl enc -aes-256-gcm -a -e -in plaintext -out ciphertext
Luego descifro el archivo cifrado con este comando:
openssl enc -aes-256-gcm -a -d -in ciphertext
Este comando produce esta salida:
test text
bad decrypt
El archivo se ha descifrado correctamente (es decir, el contenido del archivo era de hecho "texto de prueba"), pero OpenSSL informa "descifrado incorrecto". Esto sucede incluso si especifico explícitamente una función hash para usar (por ejemplo,-md sha512).
¿Por qué recibo el mensaje "descifrado incorrecto"?
Respuesta1
Ninguna versión de OpenSSL admite ningún modo AEAD (que incluye GCM) junto con la aplicación de línea de comandos "enc". Todas las versiones actualmente compatibles de OpenSSL mostrarán un mensaje de error si intenta cifrar/descifrar utilizando dicho modo:
$ openssl enc -aes-256-gcm -a -e -in plaintext -out ciphertext
enc: AEAD ciphers not supported
OpenSSL 1.0.1 es una versión muy antigua de OpenSSL y actualmente no es compatible con el proyecto (aunque puede que sí lo sea con Red Hat). Las versiones muy antiguas de OpenSSL no tenían la verificación AEAD que produce la advertencia anterior e intentaron cifrar/descifrar de todos modos, pero de forma incorrecta. Lo más significativo es que el comando "enc" no sabe cómo manejar la "etiqueta" de un modo AEAD (de ahí el mensaje de "descifrado incorrecto" que ve). La etiqueta es fundamental para la seguridad ya que verifica la integridad del texto cifrado.
Puede parecer que el comando ha funcionado, pero no es así. Básicamente, no uses el modo GCM con el comando enc.