Estoy estudiando sobre el apretón de manos tls y tengo algunas dudas.
Después de que el cliente valide el certificado digital presentado por el servidor, el siguiente paso es el acuerdo de intercambio de claves utilizando, por ejemplo, RSA para cifrar y descifrar los datos intercambiados durante la sesión tls. En este proceso RSA, el cliente genera un número aleatorio y utiliza la clave pública del servidor para cifrar este número aleatorio generado y enviar este número cifrado al servidor.
Este número aleatorio es el secreto pre-maestro. El servidor utiliza su clave privada para descifrar el secreto pre maestro. Desde este secreto pre-maestro, el cliente y el servidor pueden generar el secreto maestro que contiene la clave simétrica para usar en el cifrado de mensajes. Este secreto maestro previo, ya que se cifró utilizando la clave pública del servidor, solo puede ser descifrado por el servidor con su clave privada. Duda: Por lo tanto, debido a esto, la seguridad en el intercambio de claves depende de la clave privada del servidor, ¿no?
Por lo tanto, si el secreto pre maestro está incrustado con la clave pública del servidor, si un atacante puede obtener la clave privada es posible que el atacante pueda descifrar la información transmitida en el protocolo de enlace y así obtener acceso a la clave maestra para descifrar los datos transmitidos durante una sesión, ya sean datos de una sesión anterior o nueva. Duda: Para solucionar este problema, ¿existe el concepto de perfecto secreto hacia adelante, verdad? Si existe una garantía de que toda la información codificada antes de que la clave privada esté comprometida continúa segura.
Duda: Y para usar este secreto hacia adelante perfecto, el algoritmo dh efímero debería usarse, ¿no? Para generar un nuevo conjunto de parámetros dh para cada sesión. Mi duda sobre esto es que, en caso de un sitio que use https, ¿cómo sabemos si usa dh o lo efímero dh? ¿Y cuándo usar dh o ehemeral dh en un sitio https?