Le recenti dichiarazioni riportate in ambito europeo in merito al sistema di spionaggio Echelon, secondo le quali i servizi segreti statunitensi e britannici già da tempo starebbero controllando il flusso di informazioni su Internet, hanno riportato in primo piano l’attenzione sulla privacy, in particolare quella legata allo strumento in assoluto più utilizzato su Internet: la posta elettronica.
In questo articolo parleremo di crittografia e di PGP (Pretty Good Privacy), uno dei più celebri software per la crittografia a chiave pubblica utilizzato soprattutto per codificare le e-mail. Con PGP è infatti possibile crittografare un messaggio in modo che solo il destinatario possa leggerlo, inoltre è possibile autenticare il mittente del messaggio, rispondendo in questo modo alle esigenze fondamentali di riservatezza e sicurezza della corrispondenza privata.
La privacy è un diritto elementare in uno Stato democratico, già garantito dalla legge per quanto riguarda la posta ordinaria ed il telefono: l?articolo 15 della Costituzione della Repubblica Italiana garantisce la privacy per qualunque forma di corrispondenza.
Quando scriviamo una lettera ad un amico, anche solo per dirgli cosa faremo nelle vacanze, mettiamo il nostro messaggio dentro una busta: ecco il PGP è l?equivalente della busta in Internet.
La realizzazione del programma PGP ha introdotto una cultura nuova nella crittografia, perché ha consentito di rendere la cosiddetta crittografia ?forte?, basata cioè su sistemi molto difficili da decodificare con la sola forza bruta, disponibile a tutti.
La crittografia su Internet viene utilizzata per cifrare informazioni o dati in modo che questi, pur attraversando canali non sicuri come le reti, possano essere visionati soltanto dai legittimi destinatari..
Il problema storico della crittografia classica si può riassumere in questo modo: per potere cifrare un messaggio
si deve utilizzare una chiave (segreta o simmetrica) con cui effettuare la cifratura. La stessa chiave dev?essere poi usata per decodificare il messaggio cifrato. Per intenderci, se Topolino volesse inviare un messaggio codificato al suo amico destinatario Pippo, avrebbe il problema di fargli avere anche la chiave segreta, con la quale egli potrà decodificare il messaggio.
Mettiamo però che Pippo stia all’altro capo del mondo e non ci sia un canale sicuro per trasmettere la chiave: questo sistema non potrebbe funzionare, data la forte probabilità che la chiave venga intercettata. Per esempio, se io non voglio che un messaggio e-mail sia letto da altri, sarebbe inutile codificarlo in modo convenzionale e poi inviare la chiave usata per la codifica ancora per e-mail.
Per codificare un messaggio occorrono quindi due cose: un algoritmo crittografico, detto anche cifrario (una funzione matematica che viene usata nel processo di criptazione/decriptazione) e una chiave segreta (un numero, una parola, una frase ?). La sicurezza di una informazione criptata dipende interamente da queste due cose: la potenza dell?algoritmo e la segretezza della chiave.
Un esempio di cifrario tradizionale è il Cifrario di Giulio Cesare. In questo caso l?algoritmo è dato dalla sfasatura dell?alfabeto e la chiave è il numero che esprime di quanto i caratteri vengono sfalsati.
Per esempio se codifichiamo la parola SOFTWARE usando una chiave con valore 3 noi ?spostiamo? l?alfabeto in modo che esso inizi con la lettera D:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
diventa:
DEFGHIJKLMNOPQRSTUVWXYZABC
dove D=A, E=B, F=C e così via.
Usando questo schema il testo ?SOFTWARE? una volta codificato verrebbe espresso come ?VRIWZDUH?. Per permettere a un?altra persona di leggere il testo correttamente occorrerebbe comunicargli che la chiave è 3.
Il problema della trasmissione della chiave segreta venne risolto con la
chiave pubblica, un’idea semplice e geniale, introdotta da Whitfield Diffie e
Martin Hellman nel 1975 (anche se in realtà probabilmente il Servizio Segreto
Britannico disponeva di questo sistema già da qualche anno).
La chiave pubblica è uno schema asimmetrico che
opera con una coppia di chiavi: una pubblica e una privata. La chiave pubblica
viene usata per la criptazione e la chiave privata per decodificare il
messaggio.
L’algoritmo matematico che effettua questa
operazione è tale che:
– un messaggio codificato con una chiave della coppia può essere decodificato
solo con l’altra chiave della stessa coppia;
– non è materialmente possibile, data una chiave della coppia, ricavare
l’altra.
Ogni utente tiene per sé la chiave privata e diffonde il più possibile la
chiave pubblica.
Questo risolve tutti i problemi posti dal metodo classico :
Topolino vuole inviare un messaggio a Pippo, e codifica quel messaggio usando la
chiave pubblica di quest’ultimo. Solo Pippo, che ha la corrispondente chiave
segreta, è in grado di decodificare e leggere il messaggio.
Pretty Good Privacy unisce in sé il meglio di entrambi i metodi: è un
sistema ibrido.
Quando Topolino usa PGP per criptare il messaggio il programma genera una
session key con la quale codifica il testo. Questa session key è una chiave che
viene usata una sola volta e viene generata in modo casuale e ogni volta
diverso; una volta che le informazioni sono state criptate la session key viene
a sua volta criptata con la chiave pubbllica: il risultato è il testo criptato
che viene spedito a Pippo assieme alla chiave pubblica contenente la session key
usata per quella operazione.
Per
leggere il messaggio Pippo usa la propria chiave privata per decriptare la
session key che PGP adopera per decifrare il messaggio.
La combinazione dei due sistemi permette di unire la sicurezza del metodo a
chiave pubblica con la velocità del metodo tradizionale: il secondo è circa
1.000 volte più veloce del metodo pubblico, mentre questo fornisce una
soluzione al problema della distribuzione della chiave segreta.
Nonostante la chiave pubblica e quella privata
siano correlate, è molto difficile risalire alla chiave privata partendo da
quella pubblica: difficile ma non impossibile disponendo di molto tempo e di un
computer sufficientemente potente. Di conseguenza è importante generare delle
chiavi con una lunghezza tale da garantirne la sicurezza e allo stesso tempo
sufficientemente compatte per essere agevolmente distribuite. In aggiunta
bisogna anche considerare chi può essere interessato a violarne la sicurezza.
Di seguito viene riportata come esempio uno stralcio della chiave pubblica
dello stesso Zimmermann, realizzata con la versione 7.0.3 del PGP. Per esigenze
di sintesi, dato che occupa quasi due pagine di formato A4, ho riportato solo le
prime e le ultime righe:
mQGiBDpU6CcRBADCT/tGpBu0EHpjd3G11QtkTWYnihZDBden
jYV2EvotgRZAj5h4ewprq1u/zqzGBYpiYL/9j+5XDFcoWF24bzsU
mHXsbDSiv+XEyQND1GUdx4wVcEY5rNjkArX06XuZzObvXF
XOvqRj6LskePtw3xLf5uj8jPN0Nf6YKnhfGIHRWQCg/0UAr3h
MK6zcA/??????????????……………………….
xKit+pWRqSd7pviZHJIUIFdpVmgqYMfNwfahJIyEz17HKHp3
OLVsa7okATAQYEQIADAUCOlToJwUbDAAAAAAKCRD
HRjY5std5XuVtAKD4358jdvOoX358HnQnmwUdUczuFgCfT
70B8OXmdyevgPtF4wOVighnBFE=
=D1wd
Il PGP presenta inoltre altre funzioni che permettono l?autenticazione del mittente e del messaggio. Uno dei vantaggi principali della crittografia a chiave pubblica è la possibilità di fornire un metodo per definire delle firme digitali. La firma digitale permette al destinatario di verificare l?autenticità dell?origine delle informazioni, e anche di verificare che esse siano integre. Quindi la chiave pubblica digitale permette di garantire l?autenticazione e l?integrità dei dati contenuti nel messaggio cifrato, inoltre ?evita il rifiuto?, ciò significa che il mittente non potrà negare di aver mandato lui stesso quel messaggio.
Queste caratteristiche sono fondamentali non solo per la sicurezza ma soprattutto per la privacy: una firma digitale è in grado di svolgere le stesse funzioni di una firma manoscritta, col vantaggio che, mentre la seconda è facile da contraffare, una firma digitale presenta sicuramente maggiori difficoltà in questo senso.
Questo sistema di autenticazione presenta qualche problema: è lento e normalmente genera un enorme volume di dati. PGP migliora questo sistema prevedendo l?aggiunta nel processo di una funzione? hash unidirezionale?. Questa funzione prende un input di lunghezza variabile, in questo caso un messaggio di lunghezza qualsiasi (anche di migliaia di milioni di bit) e genera un output di una lunghezza prefissata, ad esempio 160 bit. La funzione hash garantisce che se l?informazione viene per qualche motivo modificata anche di un solo bit, si genera un output completamente diverso.
PGP usa la funzione hash per generare nel testo un valore di lunghezza fissa, una specie di ?checksum? noto come message digest: PGP utilizza poi il digest e la chiave privata per creare la ?firma?, che viene spedita assieme al testo. Quando il destinatario riceve il messaggio PGP ricalcola il digest, in modo da verificare la firma. Una volta che la funzione hash viene utilizzata non c?è modo di prelevare la firma da un documento e di inserirla in un altro o di alterare in qualche modo il messaggio firmato: il minimo cambiamento in quel messaggio causerà il fallimento del processo di verifica della firma digitale.
Una delle condizioni di questo sistema è che gli utenti devono fare attenzione nel fare in modo che essi stiano usando la corretta chiave personale e non un falso. Per essere sicuri bisognerebbe scambiare e-mail cifrate solo con le chiavi che sono state consegnate direttamente, ma supponiamo che dobbiate scambiare informazioni con persone che non avete mai conosciuto, come fate ad ottenere la chiave corretta?
I Certificati Digitali semplificano le procedure di riconoscimento, in quanto si tratta di informazioni incluse con una chiave pubblica personale che aiuti gli altri utenti a verificare se la chiave è valida o meno.
Un certificato digitale si compone di:
– una chiave pubblica;
– un?identificativo certificato (tipo un nome, una user ID, etc.);
– una o più firme digitali.
Il fine di inserire una firma digitale su un certificato è quello di garantire che l?autenticità è stata verificata da altre persone o enti. Mettiamo ad esempio che uno degli amici redattori di Software Planet mi chieda di ?firmare? il proprio certificato e mettiamo che io possa scegliere uno dei suoi indirizzi e-mail: uno su un provider qualsiasi e quello di Software Planet. Dato che mi sento più sicuro della seconda mail sceglierò di porre la mia firma digitale su questa certificando così la sua chiave pubblica con la mia.
Consiglio personale: non firmate mai una chiave pubblica che non avete ottenuto in modo assolutamente sicuro.
Dove reperire le chiavi pubbliche? Nei keyserver. Sono dei database automatici di chiavi pubbliche PGP, accessibili
ed utilizzabili da tutti. Ogni keyserver ha in pratica un enorme public ring, a cui tutti possono aggiungere la propria chiave pubblica e che funziona come una sorta di elenco pubblico del telefono.
Di
keyserver ce ne sono diversi in tutto il mondo, e si aggiornano automaticamente tra di loro, quindi è sufficiente
utilizzarne uno qualunque. Di solito sono gestiti presso le università, quali ad esempio il MIT negli Stati Uniti e il
Dipartimento di Scienze dell’Informazione dell?Università Statale di Milano. Per utilizzare quest’ultimo, scrivete a: pgp-public-keys@dsi.unimi.it mettendo il comando nel campo SUBJECT.
Tutte le operazioni avvengono infatti tramite e-mail e i comandi più importanti sono:
HELP : si ottengono le istruzioni.
ADD : si aggiunge la propria chiave pubblica al database (la chiave stessa va messa nel corpo del messaggio).
INDEX : lista tutte le chiavi contenute nel keyserver.
GET : si ricevono tutte le chiavi del keyserver.
GET id : si riceve la chiave dell’utente avente l’identificativo [id].
MGET stringa: si ottengono tutte le chiavi il cui identificativo contiene ?stringa?.
I
keyserver possono essere utilizzati da Web all’indirizzo: http://www-swiss.ai.mit.edu/~bal/pks-commands.html
In genere comunque non serve fare queste cose manualmente: PGP, e la sua versione free OpenPGP, hanno tutti gli strumenti necessari per eseguire queste procedure in automatico ed i plug-in per codificare e decodificare le e-mail dall?interno dei più comuni client di posta.
Segnalo due siti da cui è possibile scaricare il programma e i manuali necessari:
The International PGP Home Page
The OpenPGP Alliance Home Page
Home page del
PGP presso il MIT
E’ consigliabile anche frequentare i seguenti newsgroup: alt.security.pgp, comp.security.pgp.announce, comp.security.pgp.discuss, comp.security.pgp.resources e comp.security.pgp.tech
Si parla anche di PGP nel gruppo di discussione italiano sulla sicurezza: it.comp.sicurezza.varie