Quando TCP/IP fu progettato, quella che diventerà poi la rete Internet collegava tra loro università e laboratori di ricerca, ed era uno strumento per la condivisione delle risorse e delle informazioni da parte della comunità scientifica: gli utenti della rete erano dunque una comunità ristretta e fidata, e per questo non si fece particolare attenzione alle problematiche relative alla sicurezza. Oggi, con l'esplosione di massa di Internet, la situazione è molto diversa, e il tema della sicurezza in rete assume una grande importanza.
Bisogna innanzitutto dire che definire una rete come ``sicura'' oppure no non ha molto senso. In primo luogo perché una rete completamente sicura non esiste (e forse non esisterà mai), per cui bisogna commisurare il grado di sicurezza offerto con quello richiesto dalla particolare applicazione. In secondo luogo, è importante notare come il termine ``sicurezza'' comprenda aspetti e problemi diversi, per risolvere i quali si usano approcci differenti. I principali servizi di sicurezza che si possono voler garantire sono i seguenti:
Gli attacchi alla sicurezza di un sistema possono essere dunque molteplici, e colpire l'uno o l'altro di questi aspetti. Un intruso può ad esempio intercettare dei dati (colpendo quindi la riservatezza), modificare delle informazioni in transito (integrità), sostituirsi ad uno degli interlocutori (autenticazione), rendere indisponibile un servizio tramite un attacco di tipo Denial of Service (DoS). Un attacco classico è il cosiddetto man-in-the-middle (MITM, ovvero ``uomo in mezzo''), in cui un intruso si inserisce nella comunicazione impersonando ciascun interlocutore agli occhi dell'altro, e può così leggere tutti i dati scambiati, modificarli, inserirne altri.
In questa sede ci si occuperà della sicurezza delle comunicazioni su Internet, e in generale di come rendere sicura (secondo vari aspetti) la trasmissione di informazioni in rete. Anche se è ovvio, è importante notare che la sicurezza in rete termina dove inizia la sicurezza degli host: qui ci si occupa essenzialmente di proteggere l'informazione durante il transito in rete, ma è abbastanza inutile approntare un sistema che permetta di comunicare in maniera sicura se poi le macchine e i dati ivi immagazzinati sono accessibili a chiunque.
Come detto, gli approcci possibili per fornire servizi di sicurezza sono molti, e la scelta dell'uno o dell'altro dipende dalle funzionalità richieste e dall'applicazione in questione. In particolare si possono evidenziare tre approcci, illustrati in figura 1.1, che corrispondono a diverse collocazioni delle funzionalità di sicurezza all'interno dello stack TCP/IP. Nel caso (a) la sicurezza è inserita a livello rete, ovvero all'interno del protocollo IP: è questo il caso di IPsec, che offre il vantaggio di una totale trasparenza rispetto ai livelli superiori1. Un'altra soluzione abbastanza generale è quella di TLS2, mostrata in (b): in questo caso le funzionalità di sicurezza sono inserite al di sopra del protocollo di trasporto, ovvero a livello sessione secondo la nomenclatura OSI. Infine, come mostrato nel caso (c), è possibile includere i servizi di sicurezza a livello applicativo, con soluzioni specifiche e dedicate alla singola applicazione: esempi di questo tipo sono SET per le transazioni sicure e PGP per la posta elettronica. Nel seguito ci si concentrerà sui primi due casi perché costituiscono soluzioni più generali, analizzando quindi in particolare la suite di protocolli IPsec e il protocollo TLS. Per una trattazione generale delle tematiche associate alla sicurezza delle reti si può vedere [1], che tratta anche con un certo dettaglio IPsec e TLS.