Il master secret viene sempre utilizzato per ricavare ulteriore materiale chiave per una sessione TLS (e può essere effettivamente visto come chiave di sessione) in TLS 1.2 e versioni precedenti. Il segreto premaster è il risultato di uno scambio di chiavi, da questa chiave deriva il segreto principale.
Sono definiti due metodi di scambio chiave:
- Scambio chiave RSA ( RFC 5246, Sezione 8.1.1 ). Qui, un valore casuale viene generato dal client (segreto premaster, Sezione 7.4.7.1 ) e crittografato utilizzando la chiave pubblica dal certificato del server. Il risultato viene inviato via cavo in un messaggio Scambio chiavi client.
- Scambio chiave Diffie-Hellman (DH) ( RFC 5246, Sezione 8.1.2 ) . Qui, sia il server che il client inviano i loro valori pubblici (non dal certificato!) Utilizzando i messaggi Client e Server Key Exchange (Sezione 7.4.7.2 ). Usando i rispettivi componenti privati, possono calcolare un segreto condiviso che viene trasformato in un segreto premaster.
Il segreto principale è direttamente calcolato dal segreto premaster (insieme a due valori casuali del client e messaggi Server Hello):
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];
Come puoi vedere, il segreto premaster è essenziale per il calcolo iniziale, ma può essere gettato via dopo aver calcolato il segreto principale. Quando viene utilizzata la ripresa della sessione, in genere il master secret (e non il segreto premaster) viene archiviato direttamente nella cache della sessione TLS.
Come nota conclusiva, si noti che il segreto premaster per gli scambi di chiavi RSA può essere trovato decifrando il (1) segreto premaster crittografato (che è stato inviato tramite la rete) utilizzando la (2) chiave privata RSA (che è vincolata a il certificato e riutilizzato per tutti gli scambi di chiavi RSA).
Con lo scambio di chiavi DH, il segreto premaster viene calcolato da (1) un valore pubblico (che è stato inviato tramite la rete) e (2) un valore privato (che è normalmente diverso ogni volta). Il valore privato viene quindi scartato (anziché riutilizzato, come nel caso RSA). Ciò fornisce la proprietà Perfect Forward Secrecy (se eseguita correttamente senza mare le scorciatoie ).