Crittografia e Steganografia - L'Arte di nascondere le informazioni
Versioni Compatibili ERRORE: valore non valido ( Tutte le versioni di Debian )! Vedi qui. |
Introduzione
L'esigenza di garantire che un messaggio possa arrivare inalterato e non violato esiste probabilmente da quando l'uomo ha iniziato a comunicare; la storia è piena d'episodi e racconti che hanno per argomento messaggi e codici segreti, oppure i tentativi fatti per riuscire a decodificarli. Nel passato le esigenze di segretezza riguardavano prevalentemente la sfera politica e militare, senza arrivare a interessare, se non in minima parte, i cittadini comuni; con l'espansione sempre più forte delle comunicazioni a distanza l'esigenza di garantire l'invio di dati sensibili (pensiamo, per esempio, ai pagamenti effettuati tramite carta di credito) e, più in generale, la privacy dei dati e delle comunicazioni interpersonali, ha posto in grande evidenza i temi della crittografia e della steganografia dei dati, che studiano rispettivamente come codificare un messaggio per renderlo incomprensibile e come nasconderlo per renderlo inintelligibile. Non bisogna pensare che la necessità di mantenere la riservatezza delle comunicazioni riguardi unicamente chi ha "qualcosa da nascondere": la scarsa sicurezza intrinseca della maggior parte dei sistemi di comunicazione a distanza non può garantire quel diritto alla privacy che è ormai sancito dalla legislazione di tutti i Paesi.
Le basi della crittografia
Il cifrario (o metodo di cifratura) più semplice si basa unicamente sull'algoritmo scelto: si applica al messaggio di partenza una serie di trasformazioni che lo rendono incomprensibile a chi non conosca il sistema utilizzato. Un sistema di questo tipo piuttosto diffuso è il cosiddetto ROT-13, che prevede d'invertire le prime 13 lettere dell'alfabeto con le ultime (scambiando la A con la N, la B con la O e così via); questo sistema viene utilizato nei messaggi pubblici (nei forum e nei gruppi di discussione), per evitare che qualcuno possa leggere informazioni che non vuole conoscere (per esempio, il finale di un film che non ha ancora visto). Si tratta di soluzioni poco sicure e facilmente violabili da un crittoanalista esperto, che basano la propria efficacia unicamente sulla segretezza dell'algoritmo di cifratura. Un notevole passo avanti è costituito dai cosiddetti sistemi a chiave simmetrica, che affiancano a un algoritmo di cifratura un secondo elemento: la chiave. In questo caso, l'algoritmo non dev'essere necessariamente segreto, ma è anzi opportuno che sia il più possibile diffuso e conosciuto: un sistema ampiamente testato e conosciuto fin nel più piccolo dettaglio sarà più stabile e fornirà maggiori garanzie riguardo all'assenza di bug. In questo caso la sicurezza è dunque affidata alla chiave, che dev'essere fornita all'algoritmo insieme al messaggio per cifrarne o decifrarne il contenuto: naturalmente l'algoritmo è costruito in maniera tale da garantire che a ciascuna coppia chiave-messaggio corrisponda sempre lo stesso risultato e che, d'altro canto, da chiavi diverse s'ottenga sempre un risultato diverso in maniera tale che non esistano due chiavi capaci di "aprire" uno stesso messaggio cifrato. Soluzioni di questo genere sono note fin dall'antichità, come i famosi cifrari utilizzati da Giulio Cesare durante la campagna in Gallia, quello di Vigenere, oppure la famosa macchina Enigma, utilizzata dai tedeschi durante la Seconda Guerra Mondiale, anche se solo con il progresso della teoria dei numeri, della logica e dell'informatica si è arrivati a costruire cifrari la cui solidità è dimostrabile.
La Crittografia e l'Informatica
Il principale limite dei sistemi a chiave simmetrica, indipendentemente dalla bontà del cifrario, è rappresentato dalla chiave, che dev'essere trasmessa attraverso un canale sicuro, per poter garantire la solidità della cifratura: se questo requisito poteva essere accettabile per le comunicazioni militari, chi vuole effettuare un acquisto via Internet non può essere costretto a incontrare personalmente il venditore per scambiare la chiave. Dagli anni '70 l'informatica e la crittografia sono legate da un intreccio inscindibile, grazie alla teorizzazione e alla realizzazione di cifrari a chiave asimmetrica; sfruttando il fatto che alcuni calcoli matematici, per quanto teoricamente risolvibili, necessitino in realtà di un'enorme quantità di tempo per essere compiuti (addirittura milioni o miliardi di anni), è possibile costruire cifrari che utilizzino una coppia di chiavi, una pubblica destinata alla cifratura e una privata (da mantenere segreta) per la decifratura. Ecco l'esempio classico che chiarisce il funzionamento di questo sistema: Alice e Bob vogliono comunicare tra loro privatamente; entrambi generano una propria coppia di chiavi, una pubblica ed una privata. Si scambiano le rispettive chiavi pubbliche, senza necessità di alcun genere di sicurezza (esistono su Internet numerosi elenchi di chiavi pubbliche, liberamente consultabili). In seguito, Alice utilizzerà la chiave pubblica di Bob per cifrare il messaggio che intende inviargli. Bob, ricevuto il messaggio, lo decifrerà utilizzando la propria chiave privata, avendo la certezza che nessuno, a parte Alice, abbia potuto leggerne il contenuto.
I tre requisiti necessari
Per essere completamente funzionante, un sistema crittografico deve garantire il soddisfacimento di tre requisiti: riservatezza, integrità e non ripudiabilità. Del primo argomento abbiamo già parlato, mentre gli altri due fattori intervengono nell'esempio descritto poco più sopra: prima di cifrare il messaggio, Alice potrà utilizzare la propria chiave privata per firmarlo in maniera tale che Bob, una volta ricevuto e decifrato il messaggio, potrà verificare il mittente e l'integrità del contenuto. Non è invece possibile garantire che ciascuno degli attori di questo esempio sia chi dice di essere: se qualcuno, per esempio, decidesse di impersonare Alice, creando una nuova coppia di chiavi e iniziando la comunicazione con Bob, quest'ultimo non avrebbe la certezza che il suo interlocutore sia realmente chi dice di essere. Da un altro punto di vista, Alice potrebbe disconoscere, o ripudiare, in qualsiasi momento la conversazione, sostenendo di non esserne l'autrice, senza che Bob abbia alcuno strumento per provare il contrario. Per garantire la non ripudiabilità è necessario introdurre un terzo attore, un'autorità di certificazione (anche CA, Certification Authority), che sia affidabile, e che possa dunque garantire l'associazione tra una chiave pubblica e l'effettivo proprietario, con tutti i problemi del caso.
La steganografia
Per fare in modo che un messaggio non cada in mani sbagliate è possibile utilizzare anche soluzioni diverse rispetto alla cifratura: la steganografia, per esempio. La steganografia consente di nascondere un messaggio all'interno di un vettore che possa consentirne il trasporto senza destare sospetti: esempi in letteratura sono gli inchiostri "simpatici", che si rivelano soltanto in determinate circostanze, mentre rimanendo in ambito informatico esistono soluzioni diverse. Se per alcuni tipi di file le informazioni contenute non possono essere modificati in alcun modo, esistono altri formati in cui un lieve cambiamento passa del tutto inosservato: esempi tipici sono immagini e file audio, in cui una leggera differenza nella forma dell'onda sonora, oppure del colore in alcuni punti, non viene percepita dall'orecchio o dall'occhio umano. Sfruttando questo principio è dunque possibile modificare i file, inserendo informazioni nascoste all'interno di vettori assolutamente insospettabili; crittografando poi i dati si riesce ad ottenere un livello di confidenzialità accettabile. Anche questo sistema ha però qualche limite: la quantità di informazioni inseribili è piuttosto piccola e basta anche una minima modifica al file contenitore, effettuata magari inconsapevolmente, per compromettere l'integrità del messaggio.