Caliente 2
Crittografia a chiave pubblica

Riprendiamo il nostro discorso sulla privacy digitale avviato nel numero scorso. Nonostante la diffusa paura del grande fratello, le reti telematiche di per sé non sono né più né meno sicure dei mezzi di comunicazione tradizionali. Le nostre conversazioni in rete possono essere intercettate e registrate con grande facilità, ma esattamente allo stesso modo con grande facilità possono essere registrate le nostre telefonate o le conversazioni con gli amici. Esistono degli accorgimenti per fregare i curiosi e mantenere la propria privacy: le conversazioni via rete sono molto facili da intercettare ma è anche molto facile mantenerle riservate. La tecnica standard per mantenere riservate le informazioni è la crittografia.

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!

Algoritmi e chiavi

La crittografia è un’arte antichissima: consiste nel rendere incomprensibile un certo messaggio a occhi estranei. Ecco un sistema crittografico elementare:
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.

Crittografia a chiave pubblica

Si tratta di un sistema che risolve splendidamente il classico problema della crittografia tradizionale. Se la sicurezza del sistema dipende dalla segretezza della chiave di codifica utilizzata, allora ho bisogno di almeno un canale sicuro attraverso il quale trasmettere la chiave. Per concordare una chiave con il mio interlocutore ho bisogno di mettermi in contatto con lui incontrandolo di persona, telefonandogli, scrivendogli una lettera, mandandogli un messaggero o in qualsiasi altro modo. In qualsiasi caso, esiste il pericolo che la chiave venga intercettata durante il tragitto (pensiamo anche solo all’eventualità di avere una microspia in casa mentre concordiamo la chiave).

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.

Firme digitali

Con la crittografia a chiave pubblica possiamo inoltre avere la certezza assoluta che chi ci manda un certo messaggio sia esattamente la persona che noi supponiamo, attraverso ciò che viene chiamato firma digitale. Infatti, la chiave segreta del mittente può essere usata, se si vuole (oltrechè per decrittare i messaggi ricevuti) anche per firmare i messaggi che si spediscono. Si crea una firma digitale del messaggio che il destinatario (o chiunque altro) può controllare usando la chiave pubblica del mittente. Questo serve a provare che il mittente è colui che davvero ha scritto il messaggio - e che il messaggio non è poi stato manipolato da nessun altro, poiché solo il mittente possiede la chiave segreta per poter firmare. È tecnicamente impossibile falsificare o modificare un messaggio autenticato ed il mittente non può revocare la firma una volta apposta. Detto in altre parole, il PGP mi permette di ricevere un messaggio che solo io sono in grado di leggere, e in più (se il mittente ha scelto di firmare il messaggio) mi permette di essere assolutamente sicuro del fatto che quel messaggio può essere stato scritto solo da una certa persona (o comunque solo da una persona che ha accesso alla chiave segreta). Anche questo non è poco, considerato che talvolta in rete possono girare messaggi falsi o di cui non si conosce la provenienza.

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.

M.I.P.S. - Radio Black Out - Torino