¿Cómo se intercambia la clave simétrica en el protocolo SSL / TLS?

5

He estado leyendo mucho sobre el protocolo de enlace SSL / TLS entre un cliente y un servidor y muchos artículos sobre el mismo son muy contradictorios.

Algunos dicen que la clave simétrica que se utilizará para comunicarse entre las dos partes se transmite desde el cliente al servidor (ofc, cifrada con la clave pública del servidor) y eso es todo.

Algunos dicen que se está utilizando un DH algo y primero el cliente envía un secreto maestro previo para ayudar a generar la clave compartida (¿por qué el código maestro maestro está cifrado en primer lugar, un atacante no obtendrá ninguna confidencialidad?) info).

Lo que es confuso es el flujo general de la generación en la clave simétrica compartida. a) ¿Se está utilizando DH (y si no, cómo se genera la clave simétrica, el cliente lo sugiere, lo envía a través del cifrado RSA y eso es todo?)

Y b) Si se está utilizando DH, ¿quién comienza primero? Debe haber alguien que primero sugiera los números primos generales que se utilizarán para generar el secreto, y luego envía su cálculo (¿o se determina algo en general por adelantado)?

    
pregunta daremkd 25.07.2016 - 12:20
fuente

1 respuesta

4

Como ya mencionó, hay dos formas de intercambiar claves de sesión simétricas: a través de key encipherment o a través de key agreement (que se basa en el algoritmo de Diffie-Hellman). Ambos algoritmos no se utilizan al mismo tiempo. Por ejemplo, el cliente de Microsoft SChannel lee bits de la extensión KeyUsages del certificado del servidor (que es una cadena de bits) y, dependiendo de qué bit se establece, se utiliza el algoritmo de intercambio de claves.

Cuando se utiliza el cifrado de clave:

  1. el cliente y el servidor intercambian conjuntos de cifrado compatibles y acuerdan un cifrado común (que es compatible con ambas partes).
  2. el cliente utiliza un algoritmo y parámetros seleccionados para generar una clave simétrica y la cifra con la clave pública del servidor (encriptación asimétrica, RSA o ECC, por ejemplo).
  3. el servidor usa su clave privada para descifrar la clave y esta clave se usa para proteger la sesión. No hay DH involucrado aquí.

En el caso de Diffie-Hellman (acuerdo clave), no hay mucha diferencia en quién comienza, porque las partes comparten el número primo común p y el número generador g y ambas partes DEBEN acordar estos valores. Estos números pueden ser acordados en público. Por lo tanto, el iniciador del acuerdo es solo un asunto de sintaxis de mensajes de un protocolo.

Después de que ocurra el siguiente proceso (que está bien definido):

  1. Los clientes envían su clave pública DH al servidor.
  2. El servidor calcula la clave de sesión secreta utilizando la información contenida en su clave privada y la clave pública del cliente.
  3. El servidor envía su clave pública DH al cliente.
  4. El cliente calcula la clave de sesión secreta utilizando la información contenida en su clave privada y la clave pública del servidor.
  5. Ambas partes tienen ahora la misma clave de sesión, que se puede usar para cifrar y descifrar datos. Los pasos necesarios para esto se muestran en el siguiente procedimiento.

El algoritmo detallado de intercambio de claves DH se describe en RFC2631 .

    
respondido por el Crypt32 25.07.2016 - 13:33
fuente

Lea otras preguntas en las etiquetas