Ogni giorno, anche se non ce ne accorgiamo, sfruttiamo la Crittografia per le nostre attività quotidiane. Ne facciamo ampio uso, ogni volta che inviamo una mail, visitiamo un sito sicuro, operiamo sul nostro e-banking eppure rimane un argomento avvolto da un alone di mistero.
La Crittografia non è una invenzione moderna, né tanto meno la si deve all’informatica. Uno tra i più antichi esempi di crittografia è il cifrario che Cesare utilizzava per tenere segreti i suoi messaggi; venendo a tempi recenti tutti abbiamo sentito parlare della fenomenale macchina Enigma utilizzata dalle forze armate del Terzo Reich.
La crittografia nasce appunto col fine di permettere lo scambio di un messaggio tra due entità legittime senza che una terza intercettandolo possa leggerlo.
Nei termini di Sicurezza informatica la crittografia serve per preservare la Riservatezza di un dato, ma anche e lo vedremo poi, la sua Integrità.
Gli elementi base della crittografia sono:
- Plain/Clear Text – il testo non cifrato;
- Cipher Text – letteralmente il testo cifrato o crittografato;
- algoritmo – un processo che trasforma il Plain Text in Cipher Text e viceversa;
- chiave (key) – l’elemento che permette all’algoritmo di lavorare.
Per fare un esempio concreto senza cadere in lunghe e noiose spiegazioni matematiche prendiamo:
- un semplice testo che sarà il nostro Plain Text : “Che bella giornata“;
- una chiave che sarà uguale a 3;
- e come algoritmo utilizzeremo il cifrario di Cesare.
Il Cifrario di Cesare prende il numero della posizione di ogni singola lettera nell’alfabeto aggiungendo ad essa il valore della chiave.
Per farla semplice se abbiamo una A che è il primo carattere dell’alfabeto aggiungendo ad 1 la nostra chiave avremo 1+3 = 4 e quindi la nostra A diventerà D.
Applicando questo semplice algoritmo:
“Che bella giornata” diventerà il Cipher Text “Fmh aqd ehood lnruqdzd“, un testo decisamente più criptico che però il destinatario legittimo sarà in grado di decifrare applicando il procedimento inverso, ossia togliendo ad ogni singola lettera il valore della chiave.
Quindi D che è la 4° lettera dell’alfabeto togliendo la chiave 3 tornerà ad essere A.
Questo è possibile perché il Cifrario di Cesare è un algoritmo simmetrico, ossia lo stesso algoritmo e la stessa chiave vengono utilizzate sia per cifrare che per decifrare il testo.
Ovviamente si pone un grosso problema perché chi invia e chi riceve deve mettersi in qualche modo d’accordo per scambiarsi le due informazioni (algoritmo e chiave), per ovviare a questo limite, con l’aggiunta di parecchia matematica, sono stati creati gli algoritmi asimmetrici, ossia algoritmi che sfruttano una chiave (chiave pubblica) per codificare il messaggio e una seconda chiave (chiave privata) diversa per la decodifica.
In questo modo se il messaggio cifrato venisse intercettato sarebbe molto difficile poterlo decodificare non conoscendone la chiave privata che è solo in possesso del destinatario.
Sino a qui abbiamo risolto con gli algoritmi e le chiavi crittografiche un problema di Riservatezza. Il nostro messaggio “Che bella giornata” è un segreto tra noi e il nostro destinatario.
Mettiamo però che una terza persona intercettato il nostro messaggio cifrato “Fmh aqd ehood lnruqdzd” decida di modificarlo in “Hol gzcbbf nptzsfbf” oppure di tagliarne una parte lasciando solo “Fmh aqd“. La Riservatezza del messaggio sarebbe ancora garantita, ma non la sua Integrità.
Per preservare anche l’Integrità di un messaggio ci vengono in aiuti gli algoritmi crittografici e in particolari gli algoritmi di hashing (ne abbiamo parlato trattando di come vengono conservate le nostre password).
In questo caso il compito di un algoritmo di hashing è creare un testo cifrato (hash) che non può essere decifrato, ma soprattutto un testo cifrato unico e irripetibile.
Prendiamo ad esempio il nostro testo cifrato “Fmh aqd ehood lnruqdzd“; se lo sottoponiamo ad un algoritmo di hashing (MD5) il risultato sarà: 2a8bab5ecdd8e5ea1d4b006c3fd11a3f
Ora prendiamo il testo contraffatto “Hol gzcbbf nptzsfbf“; sottoposto allo stesso algoritmo MD5 produrrà una stringa uguale a 5ec912ad1d235c34f566286661373186.
La differenza è evidente.
Questo meccanismo permette di certificare l’Integrità dei messaggi confrontando le loro hash. Ogni messaggio avrà una sua hash unica e irripetibile; se verrà modificata anche una sola, singola lettera nel messaggio originale l’hash generata sarà sempre diversa e questo permetterà al destinatario di sapere, se il messaggio ricevuto è realmente quello originale oppure è stato contraffatto.