¿Cuál es el propósito de derivar las claves de encriptación y autorización de la clave maestra?

2

Estamos usando AES-CBC y HMAC para cifrar y autenticar nuestros mensajes (usando el método de cifrar y luego autenticar).

A veces veo soluciones (como esta ) que derivan claves de cifrado y autorización de una sola clave maestra AES:

K enc = AES (K master , P + "1")

K auth = AES (K master , P + "2")

Preguntas

¿De alguna manera mejora la seguridad (en caso de que P y el algoritmo de derivación sean conocidos por el atacante)? Si es así, ¿derivar K enc de K master es realmente un paso necesario?

    
pregunta Dmitry Zaytsev 25.03.2014 - 17:05
fuente

1 respuesta

3

El uso de la misma clave para dos algoritmos distintos conlleva el riesgo de interacciones. Un ejemplo extremo es cuando utiliza AES / CBC para el cifrado y CBC-MAC como algoritmo MAC: si usa la misma clave para ambos, entonces es bastante obvio que el MAC se puede resolver de manera trivial. Para AES / CBC + HMAC, el gut feeling de la mayoría de los criptógrafos es que los dos algoritmos son lo suficientemente "diferentes" entre sí para que estas interacciones no se produzcan, pero se coloca una definición matemática precisa bajo ese término Parece desafiante.

Básicamente, este es un territorio que no se pisa, así que no lo hagas. Derivar una clave de cifrado y una clave MAC a partir de una clave maestra dada, utilizando una Función de derivación de claves , es el método prudente y seguro : garantiza que no se produzcan interacciones mortales. Ya que tiene algún código HMAC, use HKDF para dicha derivación: es fácil de implementar y ha recibido la bendición de muchos criptógrafos.

Alternativamente , es posible que desee deshacerse de CBC y HMAC, y en su lugar use un modo de cifrado autenticado que combina cifrado y MAC con la misma clave. Estos son modos especializados en los que las interacciones se han analizado a fondo y se han resuelto todos los detalles desagradables. GCM y EAX son utilizables sin problemas legales, y están bien; GCM también es un estándar NIST y está comenzando a usarse ampliamente (por ejemplo, como parte de SSL / TLS ).

    
respondido por el Tom Leek 25.03.2014 - 19:19
fuente

Lea otras preguntas en las etiquetas