¿Qué tamaño de grupo DH utilizan los cifrados efímeros DHE TLS?

10

En SSL / TLS, el Cliente y el Servidor tienen la opción de usar un intercambio efímero de Diffie-Hellman para establecer un secreto compartido para el cual sembrar las claves de Sesión y Secretos Maestros.

En el caso de que se seleccione DHE como Intercambio de claves entre dos partes, ¿cómo determinan el tamaño del Grupo DH ModP (para que luego puedan acordar un número P y G)?

    
pregunta Eddie 03.11.2015 - 21:19
fuente

3 respuestas

1

Cuando configura un servidor para DHE , debe generar los parámetros de Diffie Hellman. Luego, configura OpenSSL / Apache / Nginx, etc., para usar los parámetros DH que haya generado.

Los parámetros DH a utilizar se envían en el mensaje ServerKeyExchange . Después de los mensajes ServerHello y Certificado , pero antes de ServerHelloDone .

El mensaje ServerKeyExchange contiene lo siguiente:

   struct {
       select (KeyExchangeAlgorithm) {
           case diffie_hellman:
               ServerDHParams params;
               Signature signed_params;
           case rsa:
               ServerRSAParams params;
               Signature signed_params;
       };
   } ServerKeyExchange;

Fuente: RFC2246 Sección 7.4.3

    
respondido por el RoraΖ 03.11.2015 - 21:40
fuente
6

Con las suites de cifrado DHE, el servidor elige por completo el tamaño del módulo para DH, sin que el cliente ingrese los tamaños aceptables (esto es un defecto en el protocolo TLS con respecto a las suites de cifrado DHE).

Algunos clientes históricos (incluido el que venía con Java hasta Java 7 incluido) no admitían el módulo DH más allá de 1024 bits. De este modo, algunas implementaciones de servidor hicieron que se mantuvieran en el módulo DH de 1024 bits. Sin embargo, algunos otros decidieron en algún momento que tales tamaños son demasiado bajos. Apache + OpenSSL hizo ese salto en particular hace unos años; consulte esto para obtener más información.

Con ECDHE (la versión de curva elíptica), la curva elíptica que se utilizará aún es elegida por el servidor, pero hay una extensión ClientHello que permite al cliente especificar qué curvas admite, lo que permite al servidor tomar una decisión verdaderamente informada.

    
respondido por el Tom Leek 03.11.2015 - 21:36
fuente
1

El servidor elige el grupo y le dice al cliente. El cliente no proporciona ninguna entrada a este proceso.

La mayoría de los servidores se enviarán con un conjunto predeterminado de parámetros (primo y generador), pero se recomienda que genere los suyos por dos razones.

  1. Algunos servidores se envían con un número primo predeterminado que solo es de 1024 bits. Esto ahora se considera demasiado pequeño.
  2. Gran parte del trabajo en cracking dh es per-prime, no por sesión. Por lo tanto, es una buena práctica evitar el uso del mismo principal que todos los demás.

Lamentablemente, Java 7 y versiones anteriores fallarán el protocolo de enlace si un servidor utiliza un número primo mayor a 1024 bits.

Para Java 6 no hay una buena solución para esto. Si necesita admitir a los clientes de Java 6, debe elegir su veneno entre el secreto no directo para los clientes que no admiten ECDHE o los débiles parámetros de DSA de 1024 bits.

Para Java 7, puede evitar este problema dando a los conjuntos de cifrado ECDHE una prioridad más alta que a los conjuntos de cifrado DHE.

    
respondido por el Peter Green 17.03.2017 - 15:43
fuente

Lea otras preguntas en las etiquetas