No pude entender por qué en el Cliente hola y Servidor hola en SSL Handshake el cliente debe enviar al servidor ( públicamente ) de forma aleatoria número y viceversa. A partir de estos números, se generará un secreto Pre-Master y se enviará encriptado con la clave pública del servidor. (Como lo veo, un secreto aleatorio de Pre-Master podría haberse generado desde el principio en el lado del cliente y enviarse cifrado con la clave pública del servidor)
Luego, a partir de este Pre-Master, ambos pueden generar un nuevo secreto maestro que será el mismo en ambos lados.
Ok, tal vez me digas que el secreto hacia adelante es la respuesta, pero si man-in-the-middle registra la sesión, él sabe los dos números aleatorios, él conoce el secreto Pre-Master (digamos que descubrió cuál es la clave privada del servidor), por lo que probablemente pueda generar el secreto Master y descifrar todos los datos.
Entonces, ¿cuál es exactamente el propósito de estos dos números aleatorios? ¿Por qué el cliente no puede generar dos números aleatorios y enviarlos al servidor y uno debe generarse en el lado del cliente y el otro en el lado del servidor? ¿Esos 2 números deben ser números primos u otra cosa?