El uso de una tecla para múltiples propósitos se considera mal estilo en general. No implica directamente una vulnerabilidad. Violando este principio de vez en cuando, si es conveniente para el diseño del protocolo.
La razón más importante para esto es que, si usa la misma clave para varios esquemas, debe considerar las interacciones entre los diferentes esquemas. Con las claves independientes no tienes que preocuparte por esto.
Otra preocupación es que un esquema podría romperse, permitiendo la recuperación de claves. Esa recuperación de clave luego rompe todas las partes de su protocolo que usaron esa clave. Por ejemplo, si implementas un mal algoritmo de MAC, una ruptura contra ese algoritmo podría no solo romper la autenticación, sino también la confidencialidad de tu mensaje.
Algunos ejemplos prácticos:
- El uso de AES-CBC para el cifrado junto con AES-CBC-MAC está totalmente dañado si usa la misma clave.
- El uso de AES para el cifrado junto con HMAC-MD5 / SHA-1 / SHA-2 no tiene interacciones conocidas. Es improbable que existan tales interacciones.
-
AES-CCM es un modo que utiliza AES-CTR para el cifrado y AES-CBC-MAC como MAC. Este modo es demostrablemente tan fuerte como el propio AES.
Estos ejemplos muestran que la seguridad práctica de una combinación de este tipo puede variar desde totalmente rota hasta una seguridad segura.
El enfoque adecuado es comenzar con una clave maestra y usar una función de derivación de clave, como HKDF, para derivar claves individuales. Estas claves son independientes, evitando interacciones entre los diferentes esquemas. No es posible recuperar la clave maestra de las claves individuales, por lo que una ruptura contra una parte del sistema no rompe todo lo demás en base a esa clave maestra.