OpenSSL aes-128-cfb no produce el tamaño esperado

Aug 17 2020

Intento implementar aes-128-cfb yo mismo para aprender. Para confirmar si mi implementación es correcta, quiero verificarla con una biblioteca conocida como OpenSSL. Pero luego noté algo extraño cuando trato de usar OpenSSL para cifrar.

Tengo archivo cleartext.txtcon el siguiente contenido:

This is cleartext that will be used to encrypt with OpenSSL.

Entonces ejecuto este comando

openssl enc -aes-128-cfb -in cleartext.txt -K 48656c6c6f20576f726c642041455321 -iv 72616e646f6d20313662797465206976 -out output.txt

Lo extraño es que el archivo de salida contiene solo 60 bytes. El bloque AES tiene 16 bytes. El tamaño de salida esperado en bytes debe ser múltiplo de 16. 60 no es múltiplo de 16.

¿Me perdí algo importante aquí?

Respuestas

2 kelalaka Aug 17 2020 at 22:02

Porque CFB no requiere un relleno similar al modo de operación CTR y OFB. Estos modos crean bloques de cifrado y uno usa la cantidad necesaria de ellos.

  • En el caso del openssl enc -K -ivIV no se escribe en el archivo de salida output.txt. Por lo tanto, tiene el mismo tamaño que el texto sin formato en bytes; 61bytes cada uno para mi archivo. En este caso, debe manipular la vía intravenosa. Dado que también está proporcionando la vía intravenosa, asegúrese de que no se vuelva a utilizar. De lo contrario, se puede producir un arrastre de cuna en el modo CTR o la reutilización de la clave de OTP.

  • En el caso de -k/-kfile/-pass, The IV y Key se derivan del método de derivación de claves mediante el uso de la contraseña del usuario y la sal aleatoria de 8 bytes.

    OpenSSL primero escribe el archivo mágico de Salted__sal de 8 bytes y luego el texto cifrado en el archivo. Ahora el tamaño de salida es tu magic size + salt size + data-size. En mi sistema, 8+8+61 = 77bytes.

    • Si se utiliza el modo ECB

      openssl enc -aes-128-ecb -in cleartext.txt -k -pass -out output.txt
      

    entonces el tamaño es de 80bytes debido al relleno. ¡Por supuesto, ECB no usa el IV y uno debería olvidar este modo!

    • El modo CBC tiene resultados similares con ECB.

    • El tamaño de IV derivado puede cambiar de acuerdo con el algoritmo de cifrado utilizado, como el cifrado de bloque de 8 bytes TDES y Blowfish requiere un IV de 8 bytes y los cifrados de bloque de 16 bytes como AES y Twofish requiere un IV de 16 bytes.

Al usar la contraseña, se debe tener cuidado con la entropía de la contraseña y el método de derivación de clave utilizado. Se recomienda utilizar una contraseña de Diceware y al menos PBKDF2 para la derivación de claves. OpenSSL proporciona varios métodos para la derivación de claves