¿OpenSSL falla en los vectores de prueba NIST AES-128-ECB?

8

Tengo problemas para que el texto cifrado de OpenSSL coincida con los vectores de prueba del NIST.

Ejemplo: en "ecb_e_m.txt" de enlace , la primera prueba es (en hexadecimal)

Key        = 00000000000000000000000000000000

Plaintext  = 00000000000000000000000000000000

Ciphertext = C34C052CC0DA8D73451AFE5F03BE297F

Guardo el texto sin formato (en binario) en un archivo llamado pt, y ejecuto

openssl aes-128-ecb -nosalt -K 00000000000000000000000000000000 -p -nopad -in pt -out ct

Al mirar el contenido de ct, contiene

66 E9 4B D4 EF 8A 2C 3B 88 4C FA 59 CA 34 2B 2E

¿Qué estoy haciendo mal?

He usado los vectores de prueba de ECB de 128 bits de esta página: enlace , y el texto cifrado que genera OpenSSL para estos SÍ concuerda con el texto cifrado dado.

    
pregunta Colin 31.08.2012 - 23:11
fuente

1 respuesta

7

El archivo ecb_e_m.txt es para "Pruebas de Monte Carlo". Estos se describen en el archivo katmct.pdf adjunto, sección 4:

  

Cada prueba de Monte Carlo consta de cuatro millones de ciclos a través de la implementación del algoritmo candidato. Estos ciclos se dividen en cuatrocientos grupos de 10,000 iteraciones cada uno. Cada iteración consiste en procesar un bloque de entrada a través del algoritmo candidato, lo que resulta en un bloque de salida. En el ciclo 10.000 en una iteración, se asignan nuevos valores a las variables necesarias para la siguiente iteración. Los resultados de cada ciclo de cifrado o descifrado número 10,000 se registran e incluyen por el remitente en el archivo correspondiente.

Entonces, si usa la tecla K = 00 ... 00 y comienza con el texto T = 00 ... 00 , encripte T , luego encripte nuevamente el resultado del encriptado, luego encripte nuevamente, y así sucesivamente, hasta que se realicen 10000 encriptaciones sucesivas, luego obtendrá el valor en el vector de prueba NIST (C3 4C 05 ...). (Confirmo este valor con mi propio código).

La línea de comando que da, con OpenSSL, realiza solo el cifrado uno y produce un resultado distinto, el que obtiene (y que también puedo confirmar con mi propio código).

    
respondido por el Thomas Pornin 01.09.2012 - 02:55
fuente

Lea otras preguntas en las etiquetas