Estoy viendo JSON Web Encryption (JWE) y am dejó un poco confundido acerca de por qué usaría ajuste de clave AES .
El documento incluso habla sobre el uso de haciendo coincidir las fortalezas del algoritmo clave :
Los algoritmos de fuerzas emparejadas deben usarse juntos siempre que posible. Por ejemplo, cuando AES Key Wrap se usa con una clave dada tamaño, se recomienda utilizar el mismo tamaño de clave cuando AES GCM también usado. Si los algoritmos de cifrado de clave y cifrado de contenido son diferente, la seguridad efectiva está determinada por el más débil de los dos algoritmos.
Esencialmente me pregunto por qué usarías el ajuste de clave AES en absoluto.
Ejemplo
Entonces, para una comparación de ejemplo, utilizando un algoritmo de cifrado A256GCM necesito una clave de 256 bits. Para ser fácil, mi clave será "secret0123456789secret0123456789" y estoy codificando "Test".
DIR
Uso del algoritmo de clave directa (DIR) (al usar mi clave como clave de contenido), obtengo:
eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..Vlf_WdLm-spHbfJe.RxMPrw.5VC8Y_qSPdSubbGNGyfn6A
Esto se descompone como:
JWE Header: {"alg":"dir","enc":"A256GCM"}
Encrypted key (CEK): (blank)
IV: Vlf_WdLm-spHbfJe
Ciphertext: RxMPrw
Authentication Tag: 5VC8Y_qSPdSubbGNGyfn6A
A256KW
Al combinar el algoritmo de ajuste de clave con el algoritmo de cifrado, usaré un clave AES de 256 bits , que produce:
eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMjU2R0NNIn0.66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA.X5ZL8yaOektXmfny.brz-Lg.xG-EvM-9hrw0XRiuRW7HrA
Esto se descompone como:
JWE Header: {"alg":"A256KW","enc":"A256GCM"}
Encrypted key (CEK): 66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA
IV: X5ZL8yaOektXmfny
Ciphertext: brz-Lg
Authentication Tag: xG-EvM-9hrw0XRiuRW7HrA
Según tengo entendido, la clave de contenido se cifra utilizando Clave web JSON ( JWK) , pero esencialmente lo que esto está haciendo es:
- creando una clave de cifrado de contenido de 256 bits (CEK)
- cifrar los datos reales con este CEK (y un IV al azar)
- cifrando el CEK con mi clave suministrada
El CEK cifrado, IV y los datos cifrados forman parte del objeto JWE resultante (todo codificado en base64url).
Direct JWE produce una carga útil más pequeña que se envía por cable, y supongo que es un poco más rápido tanto para cifrar como para descifrar porque se está saltando un paso.
¿El uso de ajuste de clave AES produce mayor seguridad y, en caso afirmativo, por qué? Si no es así, ¿por qué lo usaría en lugar de solo el cifrado de contenido directo?