Passa al contenuto principale

8. Calcoli crittografici (Cryptographic Computations)

8.1. Calcolo del secret master (Computing the Master Secret)

Per tutti i metodi di scambio di chiavi, lo stesso algoritmo viene utilizzato per convertire il pre_master_secret nel master_secret. Il pre_master_secret dovrebbe essere eliminato dalla memoria una volta calcolato il master_secret.

master_secret = PRF(pre_master_secret, "master secret",
ClientHello.random + ServerHello.random)
[0..47];

Il secret master è sempre esattamente lungo 48 byte. La lunghezza del secret pre-master varia a seconda del metodo di scambio delle chiavi.

8.1.1. RSA

Quando RSA viene utilizzato per l'autenticazione del server e lo scambio di chiavi, un pre_master_secret di 48 byte viene generato dal client, crittografato con la chiave pubblica del server e inviato al server. Il server utilizza la sua chiave privata per decrittografare il pre_master_secret. Entrambe le parti convertono quindi il pre_master_secret nel master_secret, come specificato sopra.

Struttura del messaggio secret pre-master crittografato RSA:

struct {
ProtocolVersion client_version;
opaque random[46];
} PreMasterSecret;

client_version

  • L'ultima versione (la più alta) supportata dal client. Questo viene utilizzato per rilevare attacchi di rollback di versione.

random

  • 46 byte casuali generati in modo sicuro.

8.1.2. Diffie-Hellman

Viene eseguito un calcolo Diffie-Hellman convenzionale. La chiave negoziata (Z) viene utilizzata come pre_master_secret e viene convertita nel master_secret, come specificato sopra. I byte iniziali di Z che contengono tutti bit zero vengono rimossi prima che venga utilizzato come pre_master_secret.

Nota: I parametri Diffie-Hellman sono specificati dal server e possono essere effimeri o contenuti nel certificato del server.

Per dettagli completi sul calcolo e informazioni su altri algoritmi di scambio di chiavi, consultare il testo completo della sezione 8 della RFC 5246.