10. Transport Layer Security (TLS)
TLS Transport Layer Security, e il suo predecessore SSL Secure Sockets Layer, è un protocollo fondamentale che impiega una combinazione di metodi crittografici per stabilire comunicazioni sicure su ca
TLS (Transport Layer Security), e il suo predecessore SSL (Secure Sockets Layer), è un protocollo fondamentale che impiega una combinazione di metodi crittografici per stabilire comunicazioni sicure su canali non sicuri. La sua popolarità deriva dal fatto che si inserisce nello stack TCP/IP tra il livello di trasporto e quello applicativo, rendendosi trasparente all'applicazione e quindi utilizzabile da qualsiasi servizio.
- Versione Attuale: TLS 1.3
- Versioni in Manutenzione: TLS 1.2 (sebbene l'aggiornamento sia consigliato)
- Versioni Deprecate: TLS 1.1 e tutte le precedenti.
Fasi del Protocollo TLS
Il protocollo TLS è suddiviso in più fasi, che garantiscono una comunicazione sicura:
1. Negoziazione Iniziale tra le Parti: Client e server si accordano sulle capacità crittografiche. 2. Autenticazione: Tipicamente il server si autentica al client (e opzionalmente viceversa). 3. Scambio delle Chiavi Simmetriche: Viene generata e scambiata una chiave simmetrica, che sarà poi usata per la cifratura dei dati. 4. Cifratura Simmetrica (con Autenticazione): La comunicazione dati vera e propria avviene utilizzando la chiave simmetrica concordata, con meccanismi che garantiscono anche l'integrità e l'autenticazione dei messaggi.
Handshake TLS 1.2 (Due Roundtrip)
Il processo di handshake in TLS 1.2 prevede due roundtrip completi, oltre all'iniziale connessione TCP:
1. ClientHello: - Il client avvia la comunicazione inviando un messaggio ClientHello. - Specifica la massima versione di TLS supportata. - Elenca i metodi di scambio chiave, di hash e di cifratura che supporta. 2. ServerHello e Certificato: - Il server risponde con un messaggio ServerHello. - Indica i protocolli scelti per la comunicazione (selezionando i più sicuri tra quelli supportati dal client). - Se è previsto uno scambio delle chiavi (es. con Diffie-Hellman), il server invia anche un messaggio ServerKeyExchange contenente i parametri necessari. - Il server invia il proprio certificato digitale (per l'autenticazione). - Infine, invia un messaggio di completamento (ServerHelloDone). 3. ClientKeyExchange e Cambio Cifrario (Client): - Il client risponde con un messaggio ClientKeyExchange. Il suo contenuto dipende dall'algoritmo di scambio chiave concordato: - Può essere una pre-chiave generata randomicamente e cifrata con la chiave pubblica del server (nel caso di RSA key exchange). - Può essere una pre-chiave calcolata nell'ambito di uno scambio Diffie-Hellman (nel caso di DH key exchange). - Nota: A questo punto, client e server hanno entrambi i dati necessari per derivare una chiave master (o pre-master key), dalla quale verranno poi generate le chiavi simmetriche finali e altri parametri (come i vettori di inizializzazione). - Il client invia un messaggio ChangeCipherSpec per comunicare che passerà al nuovo cifrario. - Il client invia un messaggio Finished cifrato con la nuova chiave. 4. Cambio Cifrario (Server): - Il server invia un messaggio ChangeCipherSpec per comunicare che passerà anch'esso al nuovo cifrario. - Il server invia un messaggio Finished cifrato con la nuova chiave. - Da questo momento, la comunicazione prosegue con il nuovo cifrario simmetrico concordato e le chiavi derivate.
Handshake TLS 1.3 (Un Roundtrip)
TLS 1.3 introduce significative semplificazioni, eliminando un roundtrip rispetto a TLS 1.2, per migliorare le prestazioni:
1. ClientHello con Ipotesi: - Il client invia un messaggio ClientHello. - Insieme agli algoritmi supportati, il client ipotizza quale combinazione di algoritmi verrà scelta dal server e invia già il messaggio ClientKeyExchange adeguato. Questo include i parametri per lo scambio di chiave (es. una pre-chiave Diffie-Hellman), anche se il server non ha ancora risposto. 2. ServerHello e Risposta Completa: - Il server risponde accettando gli algoritmi proposti dal client. - Allega direttamente il proprio certificato. - Allega il proprio messaggio ServerKeyExchange. - Allega anche il suo messaggio Finished cifrato. 3. Derivazione Chiavi e Comunicazione Cifrata: - Client e server calcolano la chiave master e tutti gli altri parametri necessari. - Il client invia il suo messaggio Finished cifrato. - La comunicazione prosegue immediatamente con il nuovo cifrario.
Differenze tra Versioni TLS
Le diverse versioni di TLS si differenziano principalmente per:
- La struttura dell'handshake (numero di roundtrip).
- Le ottimizzazioni nelle implementazioni e nell'utilizzo degli algoritmi.
- Soprattutto, gli algoritmi crittografici utilizzabili (le versioni più recenti deprecano algoritmi considerati deboli e introducono nuovi, più robusti).
Attacchi a TLS: Downgrade Attack
Oltre agli attacchi che possono essere sferrati contro i singoli cifrari utilizzati all'interno di TLS, il protocollo è esposto anche all'attacco di Downgrade.
Meccanismo dell'Attacco:
- L'attaccante tenta di forzare client e server a negoziare e concordare l'uso di un protocollo datato e non più considerato sicuro (es. SSL 2.0 con cifrari obsoleti come DES-CBC).
- Una volta che il protocollo debole è stato concordato, l'attaccante può intercettare i dati e decifrarli, sfruttando le vulnerabilità note del cifrario deprecato.
Perché è Possibile:
Questo attacco è spesso possibile perché i server, per garantire la retro-compatibilità o a causa di configurazioni non corrette, implementano e mantengono attivi anche algoritmi e protocolli datati e insicuri.