¿Cómo tratar / hash el secreto compartido de ECDH para usar como claves para AES?

2

Estoy realizando algunos estudios / desarrollo para un sistema de seguridad que usaría ECDH con claves efímeras.

En mi código, actualmente estoy usando un EC de 256 bits, así que cuando las dos partes calculan el secreto compartido, obtengo una matriz de 32 B (256 bits) que contiene el secreto compartido.

Ahora, me gustaría usar este secreto compartido para calcular una clave para un algoritmo de cifrado de clave simétrica, como AES-128 (con un tamaño de clave de 128 bits).

¿Entonces mi pregunta es cómo reducir el secreto compartido de 256 bits a una clave AES de 128 bits? He leído que es mejor descifrar el secreto compartido antes de usarlo como clave para el cifrado simétrico, pero ¿con qué algoritmo de hash? Si uso SHA-256 todavía obtengo una clave de 256 bits. ¿Hay alguna forma estándar de proceder para crear una clave de cifrado simétrica a partir de un secreto compartido de ECDH?

    
pregunta samuele.forconi 27.02.2014 - 13:42
fuente

2 respuestas

3

En general, la producción de claves simétricas a partir de algún "secreto" se llama derivación de clave y utiliza una derivación de clave función . Hay varios diseños KDF por ahí; muchos protocolos definen sus propios protocolos (por ejemplo, en SSL / TLS ). De hecho, explorar los detalles de SSL / TLS sería una buena idea (hablando pedagógicamente).

Hay un "impulso" actual para definir una construcción estándar, respaldada por el IETF, y se llama HKDF ; Si necesita un KDF, puede hacerlo peor que elegir HKDF (aunque es relativamente reciente, se beneficia de una base criptográfica sólida y parece tan seguro como cualquier otro competidor).

Si solo necesita una cantidad limitada de material clave (por ejemplo, 128 bits), simplemente puede usar una de las funciones hash habituales (por ejemplo, SHA-256) y truncar la salida. Que el truncamiento esté bien es no una consecuencia de la función hash, por ejemplo, resistente a las colisiones; sin embargo, todavía se cree que está adecuadamente protegido con diseños de funciones hash no patológicas, en particular SHA-256.

En cuanto a estándares , sí, hay uno. Se llama ANSI X9.63 . Como no es un estándar gratuito (legalmente, debe pagar, así que véalo), los aficionados y los estudiantes generalmente no lo consideran, por lo que no se filtran al software de código abierto. Su KDF está basado en SHA-1; básicamente calcula SHA-1 ( secreto || contador ) para valores sucesivos del contador, que, en lo que respecta a KDF, no es un diseño muy atractivo, aunque no trivialmente débil (solo tengo un borrador antiguo; las versiones más nuevas de X9.63 podrían usar SHA-256).

    
respondido por el Tom Leek 02.04.2014 - 13:23
fuente
1

No hay nada de malo en simplemente truncar la salida de SHA-256 a la cantidad de bytes que necesite.

Además, incluso si está utilizando AES-128, puede beneficiarse de los bytes adicionales disponibles, por ejemplo. para iniciar una IV (si está usando AES en un modo que utiliza IV) o para usarla como una tecla MAC (si está usando una primitiva separada para autenticar datos).

    
respondido por el Andrey 02.04.2014 - 12:58
fuente

Lea otras preguntas en las etiquetas