¿Cómo reducir el tamaño de una clave establecida con Diffie-Hellman?

4

Cuando genero una clave con el método Diffie Hellman (DH), la clave compartida establecida tendrá el mismo tamaño que la prima que se usa. Por lo que he leído, debería haber al menos 2000 bits para el DH clásico, algunos dicen incluso más.

Pero normalmente se necesitan 256 o 512 bits para un esquema simétrico.

He escuchado que debería ser suficiente con solo marcar la clave establecida para reducir el tamaño, pero algunos usan una función de derivación de claves.

Ahora me pregunto cuál es la forma estándar de hacer esto. ¿También es más seguro usar una función de derivación de claves?

Apreciaría si pudiera nombrar los métodos que se utilizan y si pudiera leer más sobre dichos métodos.

    
pregunta Raphael Ahrens 12.08.2013 - 10:13
fuente

1 respuesta

7

Diffie-Hellman permite que dos partes generen un valor secreto que no se puede reconstruir al observar sus comunicaciones. El tamaño del valor secreto resultante del intercambio de claves ( g ab mod p ) es de hecho el mismo tamaño como principal, sin embargo, su entropía puede ser menor si se eligen a y b en un espacio más pequeño. Escoger a y b para obtener números aleatorios de 256 bits le brinda seguridad de 128 bits para el valor secreto resultante.

En principio, el valor secreto resultante tiene alguna estructura matemática, y no deberías usarlo como está. En su lugar, debe marcarlo y utilizar el resultado como su clave simétrica. Más precisamente, debe usar el secreto compartido como entrada para una función de derivación de claves . No es una función de derivación de clave basada en contraseña : el valor secreto tiene suficiente entropía y no necesita ser fortalecido, solo estirado.

RFC 2631 especifica una manera de derivar material clave del secreto compartido: SHA-1 (ZZ || tipo || ctr) donde ZZ es una codificación de bytes del secreto compartido, tipo indica qué tipo de material se está derivando, y ctr es una codificación de bytes de un contador. Obviamente, está bien usar otra función de hashing como SHA-256 o SHA-512 en lugar de SHA-1.

La forma exacta en que se deriva el material clave no es realmente importante, siempre y cuando las dos partes estén de acuerdo. Por ejemplo, si solo necesita 256 bits, entonces SHA-256 (ZZ) estaría bien. El punto de virar en un contador es cuando necesita más de lo que puede proporcionar una ejecución de la función hash. En el interés de proteger su protocolo en el futuro, sería recomendable seguir el RFC. Si solo necesita derivar una clave ahora, puede codificar la codificación ASN.1 correspondiente del tipo y el contador como un literal de cadena en su aplicación.

En realidad, resulta que usando el secreto compartido de DH directamente es " no está mal ". No obstante, debe exprimirlo a través de un KDF (al menos, trocearlo): es fácil, rápido, más seguro, más estándar y más seguro para el futuro.

    
respondido por el Gilles 12.08.2013 - 11:20
fuente

Lea otras preguntas en las etiquetas