Quando utilizzare la chiave di sessione o la chiave di premaster

3

Mi sento come se fossi un po 'confuso su come funziona la prima metà di TLS. Dalla mia comprensione, è come questo:

  1. Il client invia una richiesta al server (con le preferenze della suite di crittografia)
  2. Il server riconosce le richieste, decide la suite di crittografia e invia il suo certificato al client

Ora è qui che mi confondo. Questo collegamento , come molti altri che ho visto, suggerisce che la chiave di sessione sia crittografata con il certificato dei server e inviata direttamente attraverso la rete. Tuttavia, poi vedo articoli come questo ciò suggerisce che un segreto premaster viene generato sul client e crittografato utilizzando il certificato del server. Ciò significa che la chiave non viene mai inviata in rete.

Quindi qual è?

    
posta james b 04.12.2016 - 22:43
fonte

2 risposte

0

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 ).

    
risposta data 05.12.2016 - 10:50
fonte
1

La chiave pre-master e i tasti di sessione sono due cose diverse.

La chiave pre-master viene utilizzata per fornire una maggiore coerenza tra le suite di crittografia che appartengono al client & il server. Tutte le tue chiavi successive sono derivate usando la chiave pre-master.
Leggi questo link per maggiori dettagli: Qual è il punto del pre chiave principale?

La chiave di sessione invece è la chiave simmetrica che dovrai comunicare ulteriormente. La chiave di sessione viene derivata utilizzando la chiave pre-master.

    
risposta data 05.12.2016 - 01:23
fonte

Leggi altre domande sui tag