El secreto principal siempre se usa para obtener más material clave para una sesión TLS (y puede verse efectivamente como clave de sesión) en TLS 1.2 y versiones anteriores. El secreto de premaster es el resultado de un intercambio de claves, de esta clave se deriva el secreto maestro.
Se definen dos métodos de intercambio de claves:
- intercambio de claves RSA ( RFC 5246, Sección 8.1.1 ). Aquí, el cliente genera un valor aleatorio (premaster secret, Sección 7.4.7.1 ) y cifrado utilizando la clave pública del certificado del servidor. El resultado se envía a través del cable en un mensaje de intercambio de clave de cliente.
- Intercambio de claves Diffie-Hellman (DH) ( RFC 5246, Sección 8.1.2 ) . Aquí, tanto el servidor como el cliente envían sus valores públicos (¡no desde el Certificado!) Usando los mensajes de Intercambio de claves del cliente y del servidor (Sección 7.4.7.2 ). Usando sus respectivos componentes privados, pueden calcular un secreto compartido que se transforma en un secreto premaster.
El secreto maestro es directamente calculado a partir del secreto premaster (junto con dos valores aleatorios del Cliente y mensajes de saludo del servidor):
For all key exchange methods, the same algorithm is used to convert
the pre_master_secret into the master_secret. The pre_master_secret
should be deleted from memory once the master_secret has been
computed.
master_secret = PRF(pre_master_secret, "master secret",
ClientHello.random + ServerHello.random)
[0..47];
Como puede ver, el secreto del maestro de la memoria es esencial para el cálculo inicial, pero se puede desechar después de que se calcule el secreto maestro. Cuando la reanudación de la sesión está en uso, normalmente el secreto maestro (y no el secreto del maestro de maestro) se almacena directamente en la caché de sesión TLS.
Como nota final, tenga en cuenta que el secreto de premaster para el intercambio de claves RSA puede encontrarse descifrando el (1) secreto de premaster cifrado (que se envió a través de la red) usando la clave RSA privada (2) que está vinculada a certificado y reutilizado para todos los intercambios de claves RSA).
Con el intercambio de claves DH, el secreto del premaster se calcula a partir de (1) un valor público (que se envió a través de la red) y (2) un valor privado (que normalmente es diferente cada vez). El valor privado se descarta (en lugar de reutilizarse, como en el caso RSA). Esto proporciona la propiedad Perfect Forward Secrecy (cuando se hace correctamente sin tomar atajos ).