Los parámetros de Diffie Hellman aún se calculan después de 24 horas

47

Tengo una instalación nueva de Arch Linux en un RaspberryPi modelo B. Estoy configurando OpenVPN y estoy usando easy-rsa con OpenSSL 1.0.2d para generar claves y certificados iniciales. Todo salió bien hasta que ejecuté ./build-dh (script aquí ). Fue 24 horas después cuando escribí this .

Anteriormente, he configurado OpenVPN en otros dispositivos y el mismo RaspberryPi, pero bajo Raspbian. Y no recuerdo que este comando haya tomado tanto tiempo. La última vez usé la llave de 2048 bits y tardé aproximadamente una hora. Ahora estoy intentando con una clave de 4096 bits y ha pasado más de un día. De hecho, han pasado otras 12 horas desde que reinicié todas mis configuraciones, habilité el generador de números aleatorios de hardware build-it y lo intenté de nuevo. Pero todavía está en curso.

cat /proc/sys/kernel/random/entropy_avail devuelve valores en el rango de 3000-3100.

¿Alguien tiene alguna experiencia previa con esto? ¿Cómo verifico si no se está ejecutando en un bucle?

    
pregunta kgizdov 28.07.2015 - 17:39
fuente

1 respuesta

81

Si openssl usa una gran cantidad de CPU, entonces no está bloqueado esperando "entropía". OpenSSL es realmente sensato a ese respecto, y utiliza un PRNG criptográficamente seguro para extender una inicial inicial en tantos bits como sea necesario .

Cuando utiliza dhparam , OpenSSL no solo genera parámetros DH; También quiere afirmar su estatus social, teniendo cuidado de usar para el módulo el llamado "prime prime", 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 primera generación se ve así:

  • Genera un entero impar aleatorio p .
  • Probar si p es primo. Si no, haz un bucle.
  • Probar si ( p -1) / 2 es primo. Si no, haz un bucle.

Los enteros aleatorios impares de 4096 bits tienen una probabilidad aproximada de 1/2000 para ser primos, y como ambos p y ( p -1) / 2 deben ser primos, esto necesitará en promedio generar y probar la primalidad de 4 millones de números primos impares. Esto está destinado a tomar algún tiempo.

Cuando se pasa de 2048 bits a 4096 bits, la densidad de los primos fuertes se divide entre 4, y las pruebas de primalidad también serán aproximadamente 4 veces más lentas, por lo que si la generación de un módulo DH de 2048 bits toma 1 hora en promedio , la misma 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 la opción -dsaparam .

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 un múltiplo de un primo más pequeño q , y el generador tiene un 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.

Por lo que saben los académicos, los parámetros similares a DSA para DH son igualmente seguros; no hay una ventaja real de usar "primos fuertes" (la terminología es tradicional y en realidad no implica alguna fuerza adicional).

De manera similar, también puede usar un módulo de 2048 bits, que ya está muy lejos en la "zona de no se puede romper". 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; estos ocurren solo al inicio de la conexión), pero en realidad no mejorarán la seguridad.

Hasta cierto punto, un módulo de 4096 bits puede atraer a los auditores, pero es poco probable que los auditores estén muy impresionados con una Raspberry-Pi, que es demasiado barata de todos modos.

    
respondido por el Tom Leek 28.07.2015 - 18:09
fuente

Lea otras preguntas en las etiquetas