Uno dei problemi che oggi si pongono con maggiore forza, vista la continua ascesa delle potenzialità e dei servizi che la rete Internet può offrire, riguarda la sicurezza della comunicazione in rete. Molte sono le sperimentazioni all'esame o già in uso, ben lungi comunque da una soluzione definitiva, che sono state avviate negli ultimi anni. Il problema, per natura molto complesso, deve fare i conti con un ritardo iniziale dovuto ad una serie di scelte pensate per una rete più piccola, meno diffusa e meno eterogenea di quella che già è Internet; almeno inizialmente l'obiettivo era di "inventare" le reti, cioè costruire dispositivi e tecniche che permettessero la comunicazione a distanza (tra utenti affidabili). Ciò che importava erano dunque le prestazioni e l'affidabilità piuttosto che la sicurezza.
Già a partire dai prossimi anni le componenti di base dell'intera struttura TCP/IP, primo fra tutti il protocollo IP, saranno oggetto di profonde modifiche. I nuovi protocolli rappresenteranno lo strumento definitivo per interconnettere un numero pressoché illimitato di sistemi eterogenei e si prospettano così innovativi da far assegnare al futuro della rete un nome sintomatico: Internet Next Generation.
In una popolazione eterogenea, inoltre, diventa più facile che utenti poco raccomandabili, i cosiddetti hacker, possano attuare attacchi allo scopo di modificare il traffico delle informazioni e/o creare disagi ai sistemi informatici della rete. Tra le motivazioni principali che spingono gli hacker a sovvertire le regole vi sono, ad esempio:
Gli aspetti di un servizio che possono essere compromessi sono:
Ogni servizio Internet costituisce un veicolo per la trasmissione dei dati ed è potenzialmente vulnerabile; la natura dei dati trasmessi determina l'interesse degli hacker e, di conseguenza, la frequenza dei loro attacchi.
Tra i servizi più innovativi, ma anche più appetibili dagli hacker, figurano senza dubbio le transazioni commerciali e finanziarie. Internet rappresenta il veicolo ideale per raggiungere milioni di consumatori e spingerli a spendere i propri soldi in merci e servizi proposti attraverso il commercio elettronico. Il successo di questo commercio e il coinvolgimento di molti utenti è fortemente legato allo sviluppo delle politiche di sicurezza, dalla maturazione degli utenti da sempre poco fiduciosi sulle garanzie del servizio, all'adozione di forme sicure di moneta elettronica.
Come si può facilmente evincere dall'analisi dell'intestazione e delle procedure legate all'IP (versione 4), questo protocollo non prevede campi e tecniche specifiche volte a garantire un livello di sicurezza adeguato. Per via di questa lacuna, le stazioni finali e intermedie effettuano solo un controllo sugli indirizzi IP attraverso liste di indirizzi permessi o negati; ne deriva che un hacker in grado di assumere identità IP diverse può aggirare facilmente tale precauzione.
La nuova versione IPv6 sarà più attenta alle problematiche di sicurezza. Infatti, tra le intestazioni del nuovo protocollo di Rete saranno possibili delle intestazioni aggiuntive che potranno allegare informazioni di vario genere, ad esempio relativi al routing o alla frammentazione. Tra i campi ammessi vi saranno un campo destinato proprio al controllo dell'integrità del datagram IP ricevuto ed un campo per scambiare i dati in maniera riservata.
Altre debolezze dei protocolli del livello di rete sono generalmente relative all'assenza di una procedura di autenticazione.
Al livello trasporto le cose migliorano. Il TCP è, infatti, di gran lunga la componente più complessa dell'intera suite di protocolli, e spesso la più difficile per gli hacker. In generale l'UDP è, invece, più vulnerabile.
La complessità principale del TCP consiste nel banale meccanismo di autenticazione della sorgente in fase di apertura della connessione, ovvero la sincronizzazione delle sequenze nel three-way handshaking. Alcune forme di attacco sono comunque semplici, ad esempio la sostituzione di un hacker ad una delle due stazioni se è in grado di intercettare i segmenti TCP scambiati. Un hacker può mettere facilmente fuori servizio un server, inviando una serie di richieste per l'instaurazione di nuove sessioni TCP (e senza invio si acknowledgement alla riposta del server); infatti, una volta raggiunto un numero massimo di sessioni TCP pendenti, il server non è più in grado di aprirne di nuove, a volte a causa anche del blocco totale del sistema operativo. Questo ultimo esempio di attacco, chiamato SYN flooding, rappresenta un tipico attacco per interrompere la fornitura di un servizio.
Vista la natura pubblica, polivalente e fondamentalmente insicura della suite TCP/IP, diventa opportuno, spesso necessario, avvalersi degli strumenti adatti per consentire un livello di sicurezza più alto. Questo può avvenire solo attraverso l'utilizzo di opportune funzioni crittografiche.
I servizi fondamentali richiesti dagli utenti sono sostanzialmente due:
La contromisura fondamentale per evitare gli attacchi degli hacker, riguarda la codifica dei dati. Gli algoritmi crittografici utilizzabili sono delle particolari funzioni matematiche che applicate al testo originale sono in grado di cifrarne il contenuto. La proprietà loro richiesta è soprattutto quella di essere invertibili, ovvero il processo può essere invertito e dai dati cifrati riottenere il messaggio originale.

Storicamente, ed ancora oggi in alcuni casi, la sicurezza e la forza di un metodo crittografico era basata sulla non conoscenza del principio di funzionamento del metodo stesso agli estranei, che rimaneva un segreto per pochi. Oggi questa politica sarebbe nefasta, in quanto il successo di un servizio Internet è stabilito dal numero delle persone che ne fanno uso quotidianamente. Anche per questo la crittografia moderna ripone la sua sicurezza su un altro tipo di segreto, coincidente con una componente di tutto il processo (la cosiddetta chiave); il principio di funzionamento, invece, viene assunto come pubblico e standardizzato.
Se la chiave usata in fase di codifica coincide con la chiave usata nella fase di decodifica allora si parla di algoritmo simmetrico o a chiave segreta.
Se la chiave utilizzata in fase di codifica è diversa da quella utilizzata in fase di decodifica, allora si parla di algoritmo asimmetrico o a chiave pubblica.
Tipici attacchi crittoanalitici, tesi a ricavare il messaggio originario senza la conoscenza delle chiavi utilizzate sono:
Algoritmi simmetrici. In genere gli algoritmi simmetrici prevedono l'uso di chiavi non molto lunghe (40-128 bit) cambiate di frequente, anche più volte nella stessa sessione. Inoltre i metodi di questa categoria mettono in pratica alcuni concetti molto importanti, legati alla naturale ridondanza presente in ogni linguaggio:

Vediamo alcuni metodi specifici:
Un problema tipico in questi algoritmi è rappresentato dalla condivisione delle chiavi, ovvero dalla procedura con la quale i due comunicanti si scambiano la chiave.
Algoritmi asimmetrici. L'introduzione di questi algoritmi rappresenta l'unica vera rivoluzione del secolo sulla protezione e la sicurezza dei dati. A differenza degli algoritmi simmetrici dove il concetto di chiave si applica ad ogni comunicazione (ad ogni coppia di partecipanti corrisponde una chiave), negli algoritmi asimmetrici il concetto di chiave si applica ai partecipanti (ciascuno ha la sua chiave). In realtà la chiave consiste in una coppia di chiavi, una pubblica - a disposizione di chi voglia comunicare con quel partecipante, l'altra privata - custodita ed utilizzata solo dal partecipante.

La garanzia della sicurezza risiede nella impossibilità di ricavare la chiave privata, pur conoscendo la chiave pubblica. Inoltre non esiste il problema della condivisione presente negli algoritmi simmetrici: le chiavi pubbliche, che sono le uniche da scambiare possono tranquillamente viaggiare "in chiaro".
L'ordine con il quale si utilizzano le chiavi determina le proprietà della codifica effettuata:
Vediamo alcuni metodi specifici:
Autenticazione e scambio delle chiavi. Un gran numero di servizi Internet ha bisogno di una procedura di autenticazione, per stabilire l'identità ed i diritti di chi li richiede. In questo ambito esistono molteplici alternative, che generalmente prevedono la verifica delle credenziali del richiedente, il client, e dunque in maniera unilaterale, ma a volte richiedono l'autenticazione anche del secondo partecipante alla comunicazione, il server, e dunque in maniera bilaterale.
Il paradigma utilizzato nella verifica delle credenziali può essere di vari tipi:



Le procedure ad oggi più diffuse rimangono quelle username/password per la loro grande semplicità, nonostante le debolezze che esibiscono a fronte di eventuali attacchi.
Il problema della generazione/distribuzione delle chiavi può avvenire in modi diversi, a seconda che si tratti di chiavi segrete o chiavi pubbliche. In particolare si va sempre più affermando la presenza di una terza parte fidata che spesso ha il laborioso compito di creare e distribuire le chiavi comuni. Per evitare tutta la mole di lavoro che tutto ciò comporta, si fa uso spesso di uno schema alternativo in cui si adotta un meccanismo di sola certificazione delle chiavi pubbliche. In tal caso l'autorità centrale ha il compito esclusivo di produrre e rilasciare dei certificati, riconosciuti da tutti i partecipanti, per garantire la validità delle chiavi che questi utilizzano.
In molti servizi Internet il problema dello scambio di chiavi pubbliche viene risolto facendo ricorso ad un'autorità di certificazione (CA). Oggi il formato standard, denominato X.509, stabilisce la struttura che devono avere i certificati, ma non precisa quale algoritmo asimmetrico è necessario utilizzare (pur consigliando lo RSA).
L'evoluzione dei servizi di Internet rende sempre più pressante il bisogno
di proteggere i dati e le comunicazioni tra i vari utenti. Mentre
l'autenticazione degli utenti avviene con gli schemi precisati nel predente
paragrafo (spesso username/password), la trasmissione dei dati avviene
generalmente in chiaro. Le soluzioni proposte per includere funzionalità
crittografiche sono essenzialmente:
- includere un sistema crittografico a livello applicazione, approccio che è
vincente per alcuni servizi
- introdurre protocolli sicuri al livello trasporto, in particolare a livello di
sessione
- sostituire del tutto il protocollo al livello IP.
Nel seguito vedremo quali sono le problematiche e come può essere o viene di fatto gestita la sicurezza su alcuni servizi tradizionali di Internet.
Telnet. L'autenticazione del richiedente avviene con il paradigma username/password. La vulnerabilità principale del protocollo Telnet consiste nella possibilità, una volta intercettate le credenziali, di accedere alle risorse di un computer remoto ed eseguire comandi come se si fosse realmente su quella macchina. Una soluzione potrebbe essere di crittografare tutti i dati scambiati, ma non tutti i Paesi distribuiscono versioni di Telnet che codifichino i dati prima di convertirli in NVT. La soluzione più praticata si preoccupa di irrobustire il processo di autenticazione iniziale.
Trasferimento files. Le problematiche possono essere riguardate in relazione alle due connessioni che caratterizzano il protocollo FTP:
Posta elettronica. I protocolli utilizzati sono molto carenti sia nell'autenticazione dei partecipanti, che avviene normalmente con il paradigma username/password, sia nel garantire la riservatezza delle informazioni scambiate. Sebbene sarebbe più opportuna la sostituzione dei vari protocolli, al momento si utilizzano funzioni crittografiche a livello utente, cioé con trattamento preliminare dei dati. Fra le soluzioni maggiormente diffuse figurano:
Il protocollo HTTP è nato come protocollo ASCII, e questo ha costituito, inizialmente, un problema per la riservatezza delle comunicazioni sul Web. Oggidì sia il protocollo HTTP che il servizio WWW hanno modificato ed allargato notevolmente le proprie funzionalità, allo scopo di permettere il loro utilizzo anche in forme complesse di interazione, come nelle transazioni commerciali.
Uno dei problemi principali del Web è dovuto al fatto che per ogni singola richiesta-risposta tra client e server è necessario aprire connessioni TCP distinte, il che provoca una gestione poco efficiente della rete. Uno dei rimedi all'assenza del concetto di sessione è stato proposto attraverso l'uso dei cookies, dei particolari files che il server invia al client, il quale li memorizza e li utilizza per gestire una sorta di sessione. Questi "contrassegni" di riconoscimento rimangono sul disco locale, e sono utilizzati dal server Web per identificare, con la collaborazione del browser, gli utenti collegati, il numero di visite effettuate ed altre informazioni utili al server Web sui suoi visitatori (ad esempio anche il concetto di "carrello elettronico", utilizzato nei siti specializzati di commercio elettronico, è gestito attraverso i cookie, che mantengono informazioni sugli elementi presenti nel carrello).
Dal punto di vista della sicurezza, proprio per la sua natura di sistema aperto e disponibile a tutti, il Web risulta particolarmente vulnerabile.
L'autenticazione HTTP. Nell'HTTP 1.0 è previsto un servizio di autenticazione di base (Basic Authentication) che permette l'accesso alle informazioni riservate, nel caso dunque che il server ne faccia richiesta, attraverso un meccanismo username/password. In questo caso il server avrà a disposizione tabelle di utenti accettati con le relative password.
Nella versione 1.1 questo meccanismo è migliorato attraverso un meccanismo challenge/response (Digest Authentication) che client e server eseguono con un algoritmo apposito denominato MD5.
I protocolli per la sicurezza. Il problema di proteggere i dati scambiati fra client e server WWW è risolto con l'utilizzo di protocolli specifici:

Forme più complesse di protezione, soprattutto perché non riguardano singoli servizi ma intere reti aziendali, consistono nell'uso dei firewall (parete tagliafuoco). Il principio base di questi sistemi è quello di forzare il passaggio di tutto il traffico attraverso un unico punto di ingresso e uscita, laddove si possano effettuare gli opportuni controlli. Il firewall si inserisce, così, tra la rete aziendale e la rete esterna in modo da controllare tutto il traffico dall'una all'altra parte.
Una tipica configurazione di firewall è la seguente, in cui:

Criteri tipici di filtraggio sono:
Problema Knapsack. Supponiamo di avere a disposizione un insieme di oggetti di peso diverso (i pesi li conosciamo) e supponiamo di prenderne un certo numero per infilarli in un sacco. Il problema consiste nel determinare quali sono gli oggetti prescelti una volta noto il peso complessivo del sacco.