Protocollo Handshake TLS

Transport Layer Security (TLS) Handshake Protocol è responsabile dell'autenticazione e dello scambio di chiavi necessario per stabilire o riprendere sessioni sicure. Quando si stabilisce una sessione sicura, handshake Protocol gestisce quanto segue:

  • Negoziazione della suite di crittografia
  • Autenticazione del server e facoltativamente, il client
  • Scambio di informazioni sulla chiave di sessione.

Negoziazione della suite di crittografia

Il client e il server fanno contatto e scelgono la suite di crittografia che verrà usata durante lo scambio di messaggi.

Authentication

In TLS un server dimostra la propria identità al client. Il client potrebbe anche dover dimostrare la propria identità al server. PKI, l'uso di coppie di chiavi pubbliche/private, è la base di questa autenticazione. Il metodo esatto usato per l'autenticazione è determinato dalla suite di crittografia negoziata.

Scambio delle chiavi

Il client e il server scambiano numeri casuali e un numero speciale denominato Pre-Master Secret. Questi numeri vengono combinati con dati aggiuntivi che consentono al client e al server di creare il segreto condiviso, denominato Master Secret. Il segreto master viene usato dal client e dal server per generare il segreto MAC di scrittura, ovvero la chiave di sessione usata per l'hashing e la chiave di scrittura, ovvero la chiave di sessione usata per la crittografia.

Definizione di una sessione sicura tramite TLS

Il protocollo TLS Handshake prevede la procedura seguente:

  1. Il client invia un messaggio "Client hello" al server, insieme al valore casuale del client e ai pacchetti di crittografia supportati.
  2. Il server risponde inviando un messaggio "Server hello" al client, insieme al valore casuale del server.
  3. Il server invia il certificato al client per l'autenticazione e può richiedere un certificato dal client. Il server invia il messaggio "Server hello done".
  4. Se il server ha richiesto un certificato dal client, il client lo invia.
  5. Il client crea un segreto pre-master casuale e lo crittografa con la chiave pubblica dal certificato del server, inviando il segreto pre-master crittografato al server.
  6. Il server riceve il segreto pre-master. Il server e il client generano le chiavi master secret e sessione in base al segreto pre-master.
  7. Il client invia una notifica "Modifica spec di crittografia" al server per indicare che il client inizierà a usare le nuove chiavi di sessione per l'hashing e la crittografia dei messaggi. Il client invia anche un messaggio "Client completato".
  8. Il server riceve "Cambia spec di crittografia" e commuta lo stato di sicurezza del livello record alla crittografia simmetrica usando le chiavi di sessione. Il server invia un messaggio "Server completato" al client.
  9. Il client e il server possono ora scambiare i dati dell'applicazione tramite il canale protetto stabilito. Tutti i messaggi inviati dal client al server e dal server al client vengono crittografati usando la chiave di sessione.

Ripresa di una sessione sicura tramite TLS

  1. Il client invia un messaggio "Client hello" usando l'ID sessione della sessione da riprendere.

  2. Il server controlla la cache della sessione per un ID sessione corrispondente. Se viene trovata una corrispondenza e il server è in grado di riprendere la sessione, invia un messaggio "Server hello" con l'ID sessione.

    Nota

    Se non viene trovata una corrispondenza ID sessione, il server genera un nuovo ID sessione e il client TLS e il server eseguono un handshake completo.

     

  3. Il client e il server devono scambiare messaggi "Modifica spec di crittografia" e inviare messaggi "Client completati" e "Server completato".

  4. Il client e il server possono ora riprendere lo scambio di dati dell'applicazione tramite il canale sicuro.