Il protocollo IPSec risiede a livello 3 (rete) del modello OSI e assicura la segretezza e l'integrità dati, oltre che la protezione dagli attacchi di risposta. La criptografia è realizzata con l'uso di una chiave simmetrica.
Le informazioni di sicurezza sono contenute nell'intestazione del pacchetto. Queste possono essere:
"Authentication Header" (AH),
"Encapsulating Security Payload" (ESP).
AH serve per autenticare, mentre ESP cripta e autentica il flusso dei pacchetti che transita sulla connessione.
Il processo di Autenticazione calcola un Integrity Check Value (ICV), applicando una funzione hash come MD5 o SHA-1 al contenuto del pacchetto e criptando il risultato con una chiave segreta nota a entrambi i sistemi terminali. Anche il destinatario calcola e cripta la ICV nello stesso modo. Se il calcolo effettuato dal destinatario corrisponde allo stesso valore ricevuto allora il mittente viene autenticato.
Il modo Trasporto fornisce una connessione sicura tra due punti terminali incapsulando la parte dati di un pacchetto IP,
Il modo Tunnel incapsula l'intero pacchetto IP in un nuovo pacchetto IP, allo scopo di creare un percorso virtuale protetto tra due router, detto anche un tunnel sulla rete Internet, la quale non è affidabile.
La fase di criptografia usa una chiave segreta per codificare i dati da trasmettere allo scopo di nascondere il contenuto del pacchetto ad un eventuale intruso che intercetta il pacchetto.
Affinchè i due sistemi terminali (end point) possano creare il tunnel, devono scambiarsi la chiave segreta ipotizzando che questa possa essere intercettata. La comunicazione Manuale della chiave consiste nel trasferirla da un sistema ad un altro attraverso la rete, mentre il metodo IKE (Internet Key Exchange) si basa su un espediente di creazione della chiave senza farla viaggiare sulla rete.
bit | 0 | 4 | 8 | 16 | 32 |
header IP | ver | hlen | TOS | pkt len | |
ID | flag | frag offset (13 bit) | |||
TTL | proto = TCP | header checksum | |||
src IP address | |||||
dst IP address | |||||
Opzioni IP | Padding | ||||
Dati | TCP header | ||||
TCP payload |
Il campo proto=TCP specifica che il campo dati del pacchetto contiene un pacchetto TCP
ver Il campo ver indica la versione del protocollo, il valore 4 specifica il protocollo IPv4
hlen Il campo Header length è un numero di 4 bit che indica quante doppie word formano l'intestazione e le opzioni del pacchetto. Quindi è un numero che può variare da 0 a 15, per specificare una lunghezza massima dell'intestazione di 60 byte. La lunghezza minima è 20 byte (quando il valore di questo campo è 5).
TOS (Type of Service) - Il tipo di servizio può riguardare l'ottimizzazione della banda occupata, la latenza, il costo o l'affidabilità.
pkt len - Lunghezza totale del pacchetto, intestazione compresa, in byte. Il numero massimo è 65535.
ID - Il campo ID serve per riconoscere i pacchetti frammentati che appartengono ad un pacchetto molto lungo.
flag - è un campo di tre bit che specifica se il pacchetto è un frammento e, in tal caso, se seguono ancora altri frammenti.
frag offset - Quando un pacchetto è frammentato, questo valore rappresenta un numero che permette di ricostruire l'ordine dei frammenti nell'ambito del pacchetto.
TTL - Time to Live, è un numero che viene decrementato ogni volta che il pacchetto attraversa un router. Quando questo valore diventa zero il pacchetto non viene più instradato. È un modo per prevenire la circolazione di pacchetti che non giungeranno mai a destinazione.
proto - Questo campo codifica il protocollo trasportato nel pacchetto. Il pacchetto IP incapsula sempre un altro protocollo (TCP, UDP, ICMP, ecc.). Può essere interpretato come l'indicazione del tipo di intestazione del pacchetto incorporato.
header cksum - Questo campo è il checksum dell'intera intestazione del pacchetto IP, ovvero del codice per riconoscere se un pacchetto è danneggiato. Non è criptato e non viene calcolato sul campo dati del pacchetto.
src IP address - L'indirizzo IP sorgente codificato con 32 bit, che serve al ricevitore per poter rispondere. Un utente che intercetta il pacchetto è in grado di leggerne la provenienza.
dst IP address - L'indirizzo IP, di 32-bit, del destinatario,
IP Options - È un campo facoltativo dell'header del pacchetto IP. Contiene informazioni specifiche dell'applicazione. La presenza del campo opzioni è riconoscibile da un valore di hlen maggiore di 5.
Payload - Ogni protocollo comporta un determinato formato per i dati che seguono l'header, nell'esempio si suppone che dopo l'intestazione segue un pacchetto TCP.
Alcuni codici di protocolli contenuti nel pacchetto IP sono:
Codice | Protocollo |
1 | ICMP - Internet Control Message Protocol |
2 | IGMP - Internet Group Management Protocol |
4 | IP within IP (a kind of encapsulation) |
6 | TCP - Transmission Control Protocol |
17 | UDP - User Datagram Protocol |
41 | IPv6 - next-generation TCP/IP |
47 | GRE - Generic Router Encapsulation (used by PPTP) |
50 | IPsec: ESP - Encapsulating Security Payload |
51 | IPsec: AH - Authentication Header |
In questa discussione verranno presi in esame gli ultimi due.
AH è usato per autenticare - non per criptare - il traffico IP, in questa fase ci si assicura di essere in comunicazione con chi effettivamente si pensa di scambiare informazioni, rilevando le alterazioni dei dati in transito, e (opzionalmente) sorvegliare le risposte individuando quelle prodotte, in ritardo, da un attaccante che ha intercettato i pacchetti.
L'Autenticazione viene effettuata criptando il risultato di una funzione hash applicata a tutti i campi del pacchetto IP, tranne i campi modificabili: TTL e checksum, e memorizzando il risultato in una AH header da inviare all'altro interlocutore.
IPSec AH header | ||
next hdr | AH len | Reserved |
SPI (Security Parameters Index) | ||
Sequence Number | ||
Authentication Data | ||
← | 32 bit | → |
Questa AH header contiene cinque campi, e viene inserita tra l'intestazione originaria del pacchetto IP e il payload. Di seguito viene data una descrizione di questi campi, ma la loro utilità può essere meglio compresa solo dopo aver visto il loro impiego.
next hdr Questo campo identifica il tipo di protocollo del payload che segue, e si riferisce al tipo di pacchetto che viene incapsulato: è un puntatore che collega una lista di intestazioni.
AH len Definisce il numero di doppie word dell'intera AH header, meno due word (il "meno 2 " serve per il formato IPv6).
Reserved - Riservato ad uso futuro, per adesso deve essere fissato a 0.
Security Parameters Index Questo campo consente al ricevitore di identificare la security association a cui appartiene il pacchetto entrante. Una connessione protetta richiede l'applicazione di un algoritmo hash e un insieme di altri parametri. Si può pensare che l'SPI sia l'indice per accedere ad una tabella contenente tali impostazioni, allo scopo di associare pacchetti e parametri.
Sequence Number Questo campo è un contatore crescente, usato per proteggersi dalle false risposte ai pacchetti. Questo campo è inserito nel campo di autenticazione allo scopo di rilevare modifiche fraudolente.
Authentication Data È l'Integrity Check Value calcolato sull'intero pacchetto, compreso le intestazioni. Il ricevitore ricalcola la stessa funzione hash; I pacchetti per cui la funzione hash calcolata fornisce un risultato diverso dal codice contenuto nel pacchetto, vengono scartati.
Il Transport Mode è usato per proteggere una conversazione tra due host. Questa protezione può consistere in una autenticazione o in una criptografia, o entrambi, ma non è un protocollo di tunneling. Non ha niente in comune con una VPN: è semplicemente una connessione IP sicura.
In Transport Mode il pacchetto IP è modificato solo per includere la nuova intestazione AH tra l'intestazione IP e il pacchetto contenuto nel campo payload (TCP, UDP, etc.). I campi riservati a contenere i codici di protocollo collegano, in una lista concatenata, le varie intestazioni.
Questa lista di protocolli permette la ricostruzione del pacchetto IP originale: dopo che il ricevitore ha convalidato le intestazioni IPsec, le elimina, e viene ripristinato il tipo di protocollo originale (TCP, UDP, etc.) nell'intestazione IP.
Quando il pacchetto giunge a destinazione e supera il controllo di autenticazione, l'intestazione AH viene rimossa e il campo Proto=AH nel pacchetto IP viene sostituito con il "Next Protocol". In questo modo il pacchetto IP viene riportato nella sua forma originaria e può essere consegnato al processo che lo aspetta.