Introduzione alla crittografia

Cos'è la crittografia

In questo contesto si intende per Crittografia la scienza che si occupa, tramite l'ausilio dei calcolatori, di rendere incomprensibile ad occhi indiscreti un determinato messaggio. Si intende inoltre appartenente all'ambito della Crittografia la Firma Digitale, ovvero lo stratagemma che permette di stabilire con certezza se un determinato messaggio messaggio proviene da un determinato mittente. È importante sottolineare che nessun sistema crittografico (fatta eccezione per la Crittografia Quantistica, della quale non esistono al momento implementazioni ad uso comune e della quale non si parlerà) è inviolabile, parlare di impossibilità si traduce dunque nel sostenere che un dato algoritmo crittografico non è al momento violabile e, ragionevolmente, continuerà a non esserlo per i prossimi venti o trenta anni.

La Crittografia si divide in due grandi filoni: Crittografia Simmetrica e Crittografia Asimmetrica.

Crittografia Simmetrica

Storicamente più antica della sua controparte asimmetrica, questo tipo di crittografia basa la sua solidità sulla segretezza di una chiave condivisa fra due (o più) interlocutori. Nota la chiave è possibile decifrare la comunicazione. In ambito informatico, l'algoritmo attualmente più diffuso è AES (Advanced Encryption Standard), uscito vincente da una competizione bandita da NSA (National Security Agency) grazie alla sua rapidità di calcolo ed alla sua robustezza, sia per quanto riguarda eventuali attacchi Brute force (ovvero basati su ripetuti tentativi atti ad esaurire tutto lo spazio delle chiavi) che per eventuali attacchi formali (ovvero basati sulla ricerca di debolezze della struttura matematica sottostante l'algoritmo).

Crittografia Asimmetrica

Ideata da Diffie ed Hellman, questo tipo di crittografia prevede l'esistenza di due chiavi distinte, l'una utilizzata per la cifratura di un messaggio e l'altra per la sua decifratura. Proprietà fondamentale delle due chiavi è l'impossibilità di ricavare l'una dall'altra. La crittografia asimmetrica basa la sua robustezza sul fatto che una delle due chiavi (detta Chiave privata) venga custodita da un unico mittente e tassativamente mantenuta segreta. La chiave corrispondente alla chiave privata viene resa nota a tutti, da cui il nome di Chiave pubblica. I messaggi cifrati con una determinata chiave pubblica possono essere decifrati solamente dalla rispettiva chiave privata, questo permette di comunicare con un determinato destinatario (proprietario della chiave privata) cifrando i dati con la sua chiave pubblica avendo la (ragionevole) certezza che solo lui possa decifrarli.

L'analogia standard con la quale viene spiegata la crittografia asimmetrica è la seguente: si supponga di voler realizzare una comunicazione fra due dialoganti, Alice e Bob, secondo prassi diffusa in crittografia. Alice invia a Bob una scatola ed un lucchetto aperto di cui solo lei ha la chiave. Bob riceve la scatola, inserisce un contenuto, la chiude con il lucchetto inviatogli da Alice e le re-invia la scatola. Poiché nessuno possiede una copia della chiave di Alice, solo lei è in grado di aprire la scatola. In questa analogia, il lucchetto aperto è la chiave pubblica, e la chiave di Alice è la chiave privata. Chiunque si impadronisca della scatola o del lucchetto durante il tragitto non può servirsene in alcun modo.

Firma Digitale

Oltre che la cifratura, un'altra importante applicazione della crittografia asimmetrica è la Firma Digitale. Si intende per firma digitale un sistema in grado di garantire con (ragionevole) certezza l'autenticità di un messaggio, ovvero permette di conoscere il mittente di un messaggio e sapere se il messaggio è stato corrotto o modificato durante il tragitto. È importante notare che la firma digitale non prevede alcuna cifratura dei dati, il messaggio transita in chiaro lungo il canale di comunicazione.

La firma digitale di un messaggio consiste in due operazioni: il calcolo del Message Digest e la sua cifratura tramite la propria chiave privata. Il Message Digest, o riassunto del messaggio, viene calcolato tramite una Funzione di Hash, ovvero un algoritmo avente come input una stringa di lunghezza arbitraria e come output una stringa di lunghezza fissa. Esempi noti di funzioni di hash sono MD5 e SHA. Proprietà irrinunciabile di una buona funzione di hash è la bassa (in senso crittografico, cioè quasi nulla) probabilità di incorrere in collisioni, ovvero ottenere output uguali corrispondenti a diversi input. Noto il message digest di un messaggio, il mittente del messaggio procede a cifrare tramite la propria chiave privata il risultato della funzione di hash, ed allega quanto ottenuto al messaggio stesso. Il destinatario del messaggio decifra il message digest tramite la chiave pubblica del mittente ottenendo così l'hash del messaggio originale, calcola l'hash del messaggio ricevuto e confronta i due risultati. Se questi corrispondono, il destinatario è in grado di affermare che il messaggio è stato inviato da un determinato mittente e non è stato modificato lungo il tragitto.

L'algoritmo attualmente più diffuso sul quale si basa la crittografia a chiave asimmetrica è RSA, acronimo formato dalle iniziali dei suoi tre inventori (Rivest, Shamir e Adleman). Tale algoritmo prevede la generazione della coppia di chiavi pubblica / privata e la cifratura di messaggi di lunghezza arbitraria. La robustezza dell'algoritmo è basata sulla difficoltà di fattorizzare numeri primi molto grandi.

Limiti

Il limite fondamentale dell'utilizzo della crittografia asimmetrica è l'elevato dispendio in termini di risorse macchina. Prevedere infatti la cifratura di grandi moli di dati, sia lunghi messaggi singoli che molteplici brevi messaggi (si pensi ad esempio alla quantità di pacchetti TCP necessari per portare a termine una transazione bancaria) richiederebbe tempi d'attesa significativi, se non a volte addirittura proibitivi. È dunque prassi comune utilizzare la crittografia asimmetrica per scambiare in maniera sicura una chiave condivisa tramite la quale effettuare una comunicazione cifrata con metodo simmetrico.