¿Dónde obtengo números primos para Diffie-Hellman? ¿Puedo usarlos dos veces?

25

Comprendo que es muy difícil generar números primos y generadores adecuados para el intercambio de claves Diffie-Hellman.

¿Cuál es la mejor manera de generarlos? Y si tengo uno, ¿puedo usarlo dos veces? Según Wikipedia, son considerados "públicos".

    
pregunta Stefano Palazzo 13.07.2011 - 19:52
fuente

1 respuesta

22

En realidad no es que difícil. Puede ser un poco caro, hablando computacionalmente.

Un buen módulo y generador de DH es lo que se obtiene al generar parámetros clave de DSA; consulte la especificación de DSA . Puede elegir el orden del subgrupo ( q , un número primo), el módulo ( p , de modo que p-1 es un múltiplo de q ), y un generador para el subgrupo de tamaño q . OpenSSL puede hacerlo por usted. No es muy difícil implementarlo, siempre y cuando su lenguaje de programación y su entorno proporcionen cierta compatibilidad con enteros de longitud arbitraria (Python y Java lo hacen, C no, a menos que use una biblioteca adicional como GMP ).

Alternativamente, se ha invertido un esfuerzo en la generación de los llamados "primos seguros": números enteros primarios p , de manera que (p-1) / 2 también es primo. Un primo seguro se llama tal porque no sufre algunos ataques que pueden hacer que el logaritmo discreto sea fácil (o al menos más fácil) en algún módulo "débil", pero un módulo generado al azar no será débil, con una probabilidad abrumadora, por lo que No hay verdadera preocupación aquí. Además, los "primos seguros" tienen la ventaja de permitir g = 2 como generador, lo que promueve la eficiencia computacional (no mucho, pero aún así). Generar un primo seguro implica intentar enteros impares aleatorios del tamaño correcto hasta que alcance un primo seguro: no hay nada complejo ni difícil de implementar, pero puede tardar unos minutos en completarse (aproximadamente un entero impar de 1024 bits en 400000 es seguro principal). O puede usar uno de esos de RFC 3526 .

No hay ningún problema en utilizar los mismos parámetros de grupo (módulo, generador) para millones de pares de claves distintas. De hecho, son "datos públicos".

    
respondido por el Thomas Pornin 13.07.2011 - 20:07
fuente

Lea otras preguntas en las etiquetas