¿Cuál es el propósito de los parámetros DH?

51

Para un intercambio de claves Diffie-Hellman (D-H) (TLS), el servidor genera un p primo y un generador g , que es un módulo raíz primitivo p.

Al configurar un servidor web con SSL / TLS (por ejemplo, nginx), se puede usar una directiva ssl_dhparam dhparam4096.pem;
El archivo dhparam4096.pem se puede generar usando openssl dhparam -out dhparam4096.pem 4096

¿Cuál es exactamente el propósito de estos parámetros D-H?
¿Pueden ser públicos? (es decir, ¿puedo publicar mi archivo dhparam4096.pem ?)

Aquí están los contenidos de mi archivo dhparam4096.pem :
Esa parece ser una representación hexadecimal de un entero de 4096 bits, ¿es correcto?

-----BEGIN DH PARAMETERS----- MIICCAKCAgEAsb8mBiOtYJZ3XR7f/rCXQwpAAnUPXf7l9pwjYxxy30A7rIzMTrsz bXuhhEmzroJcDqKbu2nIzOBNO6HuyQ3n9x/ZbY5kiEt6q7UrB5jC9LwyPASZhd/F 6xLC7yqFs9sdCaXzuyMS4Ep5sPH6lOvftdsuGZZF9HriTepv/lpD1cPtab+3vHZX IELVc2WBwVzvNRGd/SQB8RJ+NNF8IseCV/pb/tb67O1p7sn+JsD5xgNB7Lte/XjD QBXv86aNuI2Z6zAuCiQsQ4rJuWcdnyAz0+zW9DRHz0osB1+IfHYcf4tNmvMKbC8E u/vI+Q2WsMXkbTyhWibV2zH8cXdfsj5xpIgtbxm4G1ELGFgqyX9LD0IddXE7Md86 qwoKSTBNOyCIEZwwNfKDXY0b7zzObv7b3//J7gM323bAcm9g3uVaYBxF7ITd/jGm AxpnF55mfhAOYemPZtNinnPAdvqf6BhZe29wfVC1yCIhg7ec9spRaFn2GgW0eL3d q/+Ux8DJBtzKE10YyLa7bh1Dhml/xtA7rpqLL4+jg5c6lLEvSGmAZtm879NYS0za 33/2LN0/KB4z46Ro5hwqq3UIIe8oDsxdlNGb0mb9F0lKw5//J24PK/t11qMt8yuG oKUE7TkDfwXlEBxd/ynW2/kLIjhG1JG55Vz8GWet8+ZGzfl/VQeUb9MCAQI= -----END DH PARAMETERS-----

    
pregunta Ben Richard 19.07.2015 - 17:30
fuente

3 respuestas

38
  

¿Cuál es exactamente el propósito de estos parámetros DH?

Estos parámetros definen cómo OpenSSL realiza el intercambio de claves Diffie-Hellman (DH) . Como ha indicado correctamente, incluyen un campo prime p y un generador g . El propósito de la disponibilidad para personalizar estos parámetros es permitir que todos usen sus propios parámetros para esto. Esto se puede usar para evitar ser afectado por el ataque Logjam (que en realidad no se aplica a los números primos de campo de 4096 bits).
Entonces, ¿qué definen?
Un intercambio de claves Diffie-Hellman funciona de la siguiente manera:

El servidor Bob usa estos parámetros para calcular B=g^b mod p . Envía (B,g,p) a la cliente Alice que calcula A=g^a mod p por su cuenta junto con K=B^a mod p . Ella envía A a Bob y él calcula K=A^b mod p . Como A^b=g^(a*b)=g^(b*a)=B^a mod p sostiene que ambas partes acordarán una clave compartida. Los parámetros p y g definen la seguridad de este intercambio de claves. Un mayor p hará que sea mucho más difícil encontrar el secreto compartido K , defendiéndose contra atacantes pasivos.

¿Y por qué tienes que pre-calcularlos?
Encontrar la prima p significa encontrar un valor para p para el cual p=2q+1 se mantiene, siendo q una prima. p se denomina safe prime .
Encontrar tales números primos es realmente computacional intenso y no se puede proporcionar en cada conexión, por lo que están precalculados.

  

¿Pueden ser públicos?

Sí , no hay riesgo de publicarlos. De hecho, se envían para cada intercambio de claves que involucra algún intercambio de claves Diffie-Hellman (DH). Incluso hay algunos parámetros estandarizados, por ejemplo, en RFC 5114 . Los únicos problemas posibles con la publicación pueden ser que un atacante poderoso pueda estar interesado en realizar algunos cálculos en ellos, lo que le permite realizar el ataque Logjam . Sin embargo, como sus parámetros usan un campo de 4096 bits prime p , esto no es un riesgo.
Para explicar por qué publicarlos no es un riesgo, es posible que desee echar un vistazo a la descripción de intercambio de claves anterior y tenga en cuenta que los parámetros solo se utilizan como base para los cálculos, pero todos los secretos ( a,b ) son completamente independientes de g,p .

    
respondido por el SEJPM 19.07.2015 - 18:38
fuente
8

De la página de wiki de openssl para el intercambio de claves Diffie Hellman :

  

Si Alice y Bob desean comunicarse entre ellos, primero acuerdan entre ellos un gran número primo p y un generador (o base) g (donde 0 < g < p).

     

Alice elige un entero secreto a (su clave privada) y luego calcula g ^ a mod p (que es su clave pública). Bob elige su clave privada b, y calcula su clave pública de la misma manera.

Así que Alice siempre tendrá la misma clave privada, pero para cada conjunto de parámetros DH g y p, obtendrá una clave pública correspondiente diferente.

Más abajo en esa página dice:

  

Como la generación de parámetros puede ser un proceso costoso, esto normalmente se realiza una vez antes y luego se usa el mismo conjunto de parámetros en muchos intercambios de claves.

Y en la página wiki de openssl para los parámetros de Diffie Hellman , dice:

  

Para utilizar las suites de cifrado de secreto de reenvío perfecto, debe configurar los parámetros de Diffie-Hellman (en el lado del servidor)

Cuando se usa Diffie Hellman (DH) estático (a diferencia de Diffie Hellman (EDH) efímero), los parámetros DH se establecen para el servidor y se pueden incrustar en un certificado, por lo que son públicos vea esta respuesta . El secreto proviene de las claves privadas de Alice y Bob.

    
respondido por el Mike Ounsworth 19.07.2015 - 18:05
fuente
3

El propósito de los parámetros DH es intercambiar un secreto (un número entero primo grande que pertenece a un grupo de primer orden) que se usará para cifrar una transcripción de mensajes dentro de un session .

Ephemeral DH ofrece seguridad de reenvío, lo que significa que la clave de sesión (intercambiada al comienzo de la sesión) se elimina al finalizar la sesión. Por lo tanto, un atacante no pudo recuperar los mensajes intercambiados entre dos partes durante más de la última sesión (ya que cada sesión tiene una clave secreta diferente que siempre se elimina al finalizar).

    
respondido por el Sebi 19.07.2015 - 21:23
fuente

Lea otras preguntas en las etiquetas