Chiunque si interessi di questioni inerenti la privacy digitale avrà sicuramente già sentito parlare del software Pretty Good Privacy. Il PGP (così è familiarmente chiamato da tutti) è un programma informatico di crittografia che si è diffuso in tutto il mondo dai primi anni ’90; funziona praticamente su qualsiasi computer ed è completamente gratuito. Facciamo notare, per chi fosse interessato a queste cose, che la versione che consigliamo, la 2.6.3ui, è perfettamente legale in Italia (al contrario, è illegale ad esempio in Francia e negli Stati Uniti, per motivi diversi).
In questo intervento ci occuperemo di spiegare gli aspetti più generali dell’utilizzo di un programma come il PGP. Ci teniamo a sottolineare che la lettura di queste pagine non sostituisce e non deve sostituire un’attenta e ripetuta lettura del manuale originale allegato al PGP stesso: qualsiasi utilizzo del PGP che prescinde da questa lettura costituisce un potenziale pericolo per sé e per le altre persone con le quali si comunica!
a b c d e f g h i j k l m 1 2 3 4 5 6 7 8 9 10 11 12 13 n o p q r s t u v w x y z 14 15 16 17 18 19 20 21 22 23 24 25 26
Ad ogni lettera del nostro alfabeto corrisponde un numero da 1 a 26. Posso mettermi d’accordo con il mio interlocutore, affinché nei nostri messaggi ogni lettera venga sostituita dalla lettera che la segue di 13 posizioni. In questo modo la lettera ‘a’ (posizione 1) viene sostituita dalla lettera ‘n’ (posizione 14), e così via. Utilizzando questa convenzione, il messaggio:
"ci vediamo domani all’alba sotto l’albero piu’ alto"
diventa
"pv irqvnzb qbznav nyy'nyon fbggb y'nyoreb cvh' nygb"
In questo sistema di crittografia, la trasposizione di ogni lettera di un numero fisso di posizioni rappresenta ciò che viene chiamato algoritmo, mentre il numero di posizioni di cui trasporre le lettere (numero che ovviamente può cambiare di volta in volta) rappresenta la chiave di cifratura (o di codifica). Algoritmo e chiave sono le due componenti principali di ogni sistema di crittografia, componenti che permettono il passaggio dal messaggio in chiaro al messaggio cifrato (o crittato) e viceversa.
L’esempio sopra costituisce un sistema di crittografia estremamente debole: un eventuale estraneo che volesse intercettare e comprendere la comunicazione (colui che viene convenzionalmente indicato con il termine di nemico) raggiungerebbe il suo scopo sfruttando gli evidenti punti deboli dell’algoritmo. È da notare, ad esempio, che il messaggio cifrato conserva molti indizi del messaggio in chiaro: ha lo stesso numero di lettere, mantiene le stesse separazioni tra le parole, conserva la stessa distribuzione statistica delle varie lettere. Un nemico sufficientemente scaltro impiegherebbe pochi secondi a sospettare che l’algoritmo utilizzato sia proprio una semplice trasposizione di lettere; una volta individuato l’algoritmo, diventa molto semplice e veloce anche provare tutte le 25 chiavi possibili fino a quando non appare un messaggio comprensibile.
La crittografia, nel corso dei secoli, è diventata quindi anche una tecnica estremamente complessa, utilizzando algoritmi derivati dalle più avanzate conoscenze nel campo della matematica. Con la progressiva crescita di complessità degli algoritmi, si è arrivati anche a definire alcuni requisiti di base che qualsiasi sistema crittografico deve soddisfare affinchè possa essere considerato sufficientemente robusto (cioè difficilmente attaccabile da tentativi di crittanalisi da parte del nemico): uno di questi requisiti è che la robustezza del sistema non deve dipendere dalla segretezza dell’algoritmo (principio di Kerckhoff). Nel nostro esempio, una volta che il nemico individua l’algoritmo di trasposizione delle lettere gli è sufficiente provare 25 combinazioni (chiavi) diverse per avere la certezza di risalire al messaggio in chiaro. Nei sistemi crittografici più robusti, invece, anche la totale conoscenza dell’algoritmo non permette in nessun modo di comprometterne la sicurezza, che è invece unicamente affidata alla segretezza della chiave concordata (che ovviamente ha un campo di variazione potenzialmente infinito).
Per questo motivo, nella delicatissima fase di valutazione dell’affidabilità di un sistema crittografico, da parte della comunità cryptoanarchica internazionale vengono presi in considerazione soltanto quei sistemi di cui gli autori hanno messo a disposizione tutti gli algoritmi impiegati; nel caso di sotware informatico, gli algoritmi sono rappresentati dai codici sorgenti, che permettono a chiunque di decostruire e ricostruire il software sul proprio computer. Una prima considerazione da fare a questo punto è la seguente: la maggior parte dei sistemi di crittografia proposti o utilizzati dagli enti governativi sono basati su algoritmi mantenuti segreti. Il PGP, al contrario, utilizza algoritmi pubblici e ampiamente conosciuti e studiati, garantendo nonostante questo un’ottima sicurezza. Giè solo questo punto spinge a diffidare di qualunque sistema crittografico proposto dallo Stato, e a considerare allo stesso tempo il PGP come un sistema privo di difetti evidenti (che sarebbero immediatamente stati scoperti dalle migliaia di ricercatori che hanno analizzato il PGP nel corso di questi anni, ognuno dei quali avrebbe guadagnato fama pubblica e carriera accademica da un eventuale successo in questo senso).
Il motivo per cui abbiamo scelto proprio il PGP, tra i tanti programmi disponibili, come nostro software di crittografia "preferito" è essenzialmente questo: si tratta di un programma sviluppato praticamente in pubblico, alla luce del sole, sotto gli sguardi attenti di una vasta comunità di esperti; inoltre viene distribuito completo di sorgenti, che permettono - a chiunque ne abbia voglia o capacità - di cimentarsi con lo studio dei suoi algoritmi. Il PGP pare dunque essere un programma che non ha paura di mostrare in pubblico quali potrebbero essere i suoi punti deboli; mentre al contrario, sui sistemi crittografici "proprietari" fioriscono continuamente leggende e illazioni (fondate o meno) su possibili backdoors, "porte sul retro" che garantirebbero solo a chi le conosce una facile decodifica dei messaggi. Sulla sicurezza del PGP torneremo più avanti. Ora è il momento di parlare di un’altra particolare caratteristica di questo programma. Come molti sapranno, il PGP è un software di crittografia a chiave pubblica.
La crittografia a chiave pubblica permette a due (o più) persone di comunicare in tutta riservatezza anche se non si sono mai incontrate prima e dunque non è mai stata concordata nessuna chiave di codifica.
Il principio in base al quale è possibile tutto questo è relativamente semplice da comprendere, per quanto a prima vista possa apparire alquanto anti-intuitivo. Nella crittografia tradizionale viene utilizzata un’unica chiave sia per codificare, sia per decodificare i messaggi. Le informazioni (la chiave e l’algoritmo) necessarie a chi deve inviare il messaggio sono quindi identiche a quelle necessarie a chi deve riceverlo.
La crittografia a chiave pubblica, al contrario, si basa su una coppia di chiavi: una chiave pubblica e una chiave segreta. La chiave pubblica serve unicamente per codificare il messaggio, mentre quella segreta serve unicamente per decodificarlo. È come se una cassaforte avesse due chiavi distinte, una usata per aprirla e una per chiuderla. A questo punto il gioco è fatto: ogni utilizzatore del PGP si crea la propria (o le proprie, in casi particolari) coppia di chiavi. La chiave segreta viene tenuta, appunto, segreta e non viene mai rivelata a nessuno (nemmeno alle persone con le quali si comunica); viceversa, la chiave pubblica viene diffusa ovunque e in ogni modo: si può aggiungerla automaticamente in coda a ogni proprio messaggio nelle varie conferenze elettroniche cui si partecipa, o depositarla in archivi pubblici (keyserver) a disposizione di chiunque. È importante che la propria chiave pubblica sia liberamente accessibile, perché chiunque voglia comunicare con noi dovrà preventivamente munirsi della nostra chiave pubblica (eventualmente anche chiedendocela direttamente) con la quale crittare il messaggio a noi indirizzato.
La differenza rispetto alla crittografia tradizionale sta nel fatto che adesso non è più necessario trovare un luogo sicuro nel quale vedersi e scambiarsi la chiave di codifica/decodifica; con le coppie di chiavi della crittografia a chiave pubblica diventa possibile condurre discorsi riservati anche tra individui che non si sono mai conosciuti o visti di persona, magari perché separati da migliaia di chilometri di distanza.
Chiunque può usare la chiave pubblica del destinatario per crittare un messaggio diretto a lui - mentre il destinatario userà la propria corrispondente chiave segreta per decrittare quel messaggio. Nessuno che non sia il destinatario può decrittarlo, perché nessun altro ha accesso alla chiave segreta; nemmeno la persona che ha mandato il messaggio potrà più aprirlo una volta crittato.
Questi due processi possono essere combinati per garantire sia la privacy sia l’autenticazione del messaggio, in primis firmando il messaggio con la vostra chiave segreta, poi crittandolo con la chiave pubblica del destinatario; Il destinatario ripeterà al contrario questi passi, prima decrittando il messaggio con la sua chiave segreta, poi verificando la firma con la vostra chiave pubblica.
I dettagli e gli algoritmi matematici su cui si basa la crittografia a chiave pubblica (essenzialmente il tutto si gioca sulla difficoltà di fattorizzare in numeri primi un numero qualsiasi con una quantità molto alta di cifre) sono liberamente disponibili in rete. Allo stesso modo in rete sono prelevabili copie del PGP e di altri programmi utili; alcuni di questi programmi (comprese alcune versioni del PGP) sono stati esportati dagli Stati Uniti illegalmente, contravvenendo alle normative ITAR (International Traffic in Arms Regulations: Regolamenti sul traffico internazionale di armi), che giustamente considerano alcuni programmi di crittografia (PGP compreso) alla stregua di armi da guerra. Ricordiamo infatti, per concludere e per far capire la portata di questi strumenti, che il governo USA richiede, alle industrie che intendono produrre e vendere software di crittografia "robusta" (cioè verosimilmente inattaccabile anche impiegando le più avanzate tecnologie federali) una particolare licenza: la stessa richiesta per produrre e vendere, appunto, armi pesanti e da guerra.