Si openssl
usa mucha CPU, entonces no está bloqueado esperando "entropía". OpenSSL está realmente cuerdo en ese sentido y utiliza un PRNG criptográficamente seguro para extender una semilla inicial en tantos bits como necesite.
Cuando usas dhparam
, OpenSSL no solo genera parámetros DH; también quiere afirmar su estatus social teniendo cuidado de usar para el módulo un llamado "primo fuerte", que es inútil para la seguridad pero requiere mucho más esfuerzo computacional. Un "primo fuerte" es un primo p tal que (p -1)/2 también es primo. El algoritmo de generación principal se ve así:
- Generar un entero impar aleatorio p .
- Prueba si p es primo Si no, repite.
- Prueba si (p -1)/2 es primo. Si no, repite.
Los enteros impares aleatorios de 4096 bits tienen una probabilidad de 1/2000 de ser primos, y dado que ambos p y (p -1)/2 debe ser primo, esto necesitará en promedio generar y probar primalidad sobre 4 millones de primos impares. Esto seguramente tomará algún tiempo.
Al pasar de 2048 bits a 4096 bits, la densidad de números primos fuertes se divide por 4, y las pruebas de primalidad también serán aproximadamente 4 veces más lentas, por lo que si generar un módulo DH de 2048 bits toma 1 hora en promedio, lo mismo máquina con el mismo software utilizará un promedio de 16 horas para un módulo DH de 4096 bits. Esto es solo promedios; cada generación individual puede ser más rápida o más lenta, dependiendo de tu suerte.
La solución razonable sería agregar el -dsaparam
opción.
openssl dhparam -dsaparam -out /etc/ssl/private/dhparam.pem 4096
Esta opción indica a OpenSSL que produzca parámetros DH "similares a DSA" (p es tal que p -1 es múltiplo de un primo menor q , y el generador tiene orden multiplicativo q ). Esto es considerablemente más rápido porque no necesita anidar las pruebas de primalidad y, por lo tanto, solo se generarán y probarán miles, no millones, de candidatos.
Hasta donde saben los académicos, los parámetros similares a DSA para DH son igualmente seguros; no hay una ventaja real en el uso de "primos fuertes" (la terminología es tradicional y en realidad no implica una fuerza adicional).
Del mismo modo, también puede usar un módulo de 2048 bits, que ya está muy lejos en la "zona de no poder romperlo". El módulo de 4096 bits hará que los cálculos de DH sean más lentos (lo cual no es un problema real para una VPN; esto ocurre solo al comienzo de la conexión), pero en realidad no mejorará la seguridad.
Hasta cierto punto, un módulo de 4096 bits puede atraer a los auditores, pero es poco probable que a los auditores les impresione mucho una Raspberry-Pi, que de todos modos es demasiado barata.