¿Cuál es el punto de ajuste de clave AES (con cifrado web JSON)?

12

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?

    
pregunta gregmac 05.02.2015 - 18:47
fuente

4 respuestas

6

Si necesita almacenar una gran cantidad de datos, la ventaja de envolver la clave dentro de una capa de encriptación significa que si necesita cambiar la clave más adelante, no tendrá que volver a cifrar todos sus datos. Simplemente cambia el KEK (Clave de cifrado de clave) y vuelve a cifrar el CEK sin tener que transferir todo el texto cifrado nuevamente.

Por ejemplo, digamos que estaba usando JSON para transmitir datos a su servidor para un almacenamiento seguro. Puede transmitir todos estos datos utilizando A256KW y su servidor en el otro extremo simplemente almacena esto.

Es decir, se transfiere lo siguiente y luego se almacena en el lado del servidor:

Encrypted key (CEK):  66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA   
                 IV:  X5ZL8yaOektXmfny                                         
         Ciphertext:  brz-Lg                                                   
 Authentication Tag:  xG-EvM-9hrw0XRiuRW7HrA       

Si necesitaba cambiar la clave, simplemente podría llevar el CEK al cliente, descifrar con el KEK anterior y cifrar el CEK con la nueva clave y luego enviarlo al servidor para actualizar todos los registros relevantes.

Solo para fines de transmisión a corto plazo, esto no es importante y sería más fácil utilizar Direct para una carga útil más pequeña.

    
respondido por el SilverlightFox 06.02.2015 - 16:08
fuente
4

KW le permite establecer un secreto a largo plazo, pero aún así usar un CEK diferente para cada mensaje, esto es importante para algunos casos de uso, pero no para todos.

En el caso de usar JWE para enviar un solo mensaje a múltiples destinatarios que tienen claves de largo plazo diferentes, esto es esencial ya que necesita envolver el CEK varias veces una vez para cada destinatario.

JWE admite varios casos de uso avanzados, pero el uso común es cifrar JWT entre dos partes mediante direct.

Cuando estábamos desarrollando JWE, algunas personas querían apoyar solo la opción KW y abandonar la optimización directa. Al final del día terminamos con dos opciones dependiendo del caso de uso. Direct crea tokens más pequeños y es más fácil de implementar. Si no necesitas KW, entonces no te preocupes.

    
respondido por el John Bradley 27.05.2016 - 02:18
fuente
0

Hay una razón para usar el ajuste de clave AES. Una vez que hayas cifrado algo, la clave es la parte débil. Todos los intentos de obtener los datos requieren conocer la clave. Dado que la clave y el software de cifrado / descifrado no están cifrados, un atacante podría robar su clave y usarla. Ese es el punto de ajuste de clave, ayuda a proteger su clave.

    
respondido por el John Smith 06.02.2015 - 04:29
fuente
-2

El uso de ajuste de clave consiste en crear una clave de sesión única que genere una inicialización aleatoria e incruste la clave pública que se usa para cifrar el contenido del mensaje que la otra parte descifrará desenvolviendo la clave pública con el clave de sesión y use su clave privada para descifrar el mensaje.

    
respondido por el Marco 02.10.2018 - 18:37
fuente

Lea otras preguntas en las etiquetas