Clave de 256 bits en AES 128 misma salida que la clave de 256 bits en AES 256

2

Tengo dos bibliotecas criptográficas diferentes que creé, una está en java y usa las bibliotecas criptográficas java incorporadas estándar.

El otro utiliza openssl y se ha envuelto en java a través del JNI.

Actualmente estoy reemplazando el código de la biblioteca java predeterminada con el código de la biblioteca openssl, y verificando los cifrados unos contra otros para asegurar que no se rompa nada para mi usuario final. Tengo curiosidad, porque solo se garantiza que Java admita claves de 128 bits con su implementación de PBKDF2, por lo que estoy usando AES CBC 128 con java. Originalmente había codificado para AES CBC 256 en openssl, sin pensar.

Lo que siento curiosidad es lo siguiente: cuando ingresé una clave de 256 bits en AES CBC 128 de java, obtuve la misma salida que obtuve para el AES CBC 256 de openssl. Cuando ingresé una clave de 128 bits en AES CBC 128 , Obtuve una salida diferente que cuando ingresé la misma clave en el AES CBC 256 de openssl (usé el mismo 16 bytes IV en todas las pruebas)

Supongo que los dos esquemas de cifrado diferentes generarían resultados completamente diferentes, por lo que estoy confundido en cuanto a por qué sucede esto. Pensé que tenía una mejor comprensión del cifrado de lo que parece que realmente tengo.

Le pido disculpas si este es un resultado dolorosamente obvio, todavía soy algo nuevo en criptografía.

    
pregunta JBires 17.07.2014 - 00:47
fuente

1 respuesta

10

"AES-128" significa "AES usado con una clave de 128 bits". "AES-256" significa "AES usado con una clave de 256 bits". Por definición, debe usar una clave de 128 bits con AES-128 y una clave de 256 bits con AES-256.

¿Qué sucede cuando le da una clave de 256 bits a AES-128, o una clave de 128 bits a AES-256? Por todos los derechos, debería estallar en tu cara. Sin embargo, algunas implementaciones son más tolerantes. Algunas implementaciones se ajustarán automáticamente al tamaño de clave proporcionado; en ese caso, cuando coloca una clave de 256 bits en AES-128, la implementación de AES-128 se transforma en una implementación de AES-256 (AES-128, AES-192 y AES-256 son muy similares internamente; se diferencian solo por el número de rondas, por lo que tiene sentido que compartan la mayor parte de su código). Algunas otras implementaciones ignorarán su "longitud de clave" y tomarán los bytes que creen que necesitan; p.ej. le da una clave de 256 bits a un AES-128, y solo se utilizan los primeros 128 bits. Ya que estás haciendo cosas fuera de especificación, este es el reino del error, y todo vale.

    
respondido por el Thomas Pornin 17.07.2014 - 01:05
fuente

Lea otras preguntas en las etiquetas