Protocollo Handshake
Il protocollo Handshake, che viene eseguito prima di inviare qualunque dato applicativo, è la parte più complessa di TLS, poichè deve garantire interoperabilità tra client e server che non si conoscono a priori e potrebbero supportare schemi crittografici diversi. Infatti, esso permette al client e al server di:
- Negoziare la cipher suite, l’insieme degli algoritmi crittografici che verranno utilizzati nella sessione, ovvero:
- il metodo per lo scambio delle chiavi
- l’algoritmo di cifratura per il protocollo Record
- l’algoritmo MAC per il protocollo Record
- Eseguire l’autenticazione tramite lo scambio di certificati digitali X.509. Client e server possono autenticarsi a vicenda, oppure si può autenticare solo il server (questo è ciò che tipicamente avviene in ambito Web) o infine si può svolgere una sessione anonima senza autenticazione (il che non è però consigliato).
- Scambiare le informazioni necessarie per la generazione delle chiavi segrete.
Generazione delle chiavi
Come già detto, SSL/TLS richiede quattro diverse chiavi segrete condivise:
- una server write key per la cifratura nella direzione del traffico dal server al client
- una server write MAC key per il calcolo e la verifica dei MAC nella direzione dal server al client
- una client key per la cifratura nella direzione dal client al server
- una client write MAC key per il calcolo e la verifica dei MAC nella direzione dal client al server.
Inoltre, la cifratura (tipicamente in modalità CBC) richiede due vettori di inizializzazione (per le due direzioni del flusso di dati).
Questi 6 valori formano insieme il keyblock, che viene visto come un “blocco unico” (di dimensioni variabili in base agli algoritmi impiegati) e generato a partire da dei valori scambiati nell’handshake: un pre-master secret e due valori random (nonce).
Struttura dell’handshake
Il protocollo Handshake è composto da un insieme di messaggi che vengono scambiati nel corso di 4 fasi:
- negoziazione degli algoritmi di sicurezza che verranno utilizzati nella sessione
- autenticazione del server (opzionale ma consigliata) e scambio delle informazioni per la generazione delle chiavi
- autenticazione del client (opzionale) e scambio delle informazioni per la generazione delle chiavi
- fine