La privacy su Internet può non essere qualcosa di scontato. Tutto il traffico in circolo per la rete viaggia necessariamente attraverso dei nodi: intercettare i pacchetti in transito presso uno di questi nodi è tutt'altro che complesso per chi ne ha accesso. È quindi quantomeno consigliabile l'utilizzo di protocolli di trasmissione dei dati cifrati o l'utilizzo di strumenti per la comunicazione che consentano la trasmissione cifrata dei nostri messaggi. Una delle maggiori obiezioni verso l'uso di questi strumenti (probabilmente leggermente più scomodi da usare rispetto a quelli tradizionali) è che comunque spesso la gente non ha nulla da nascondere. Opinione certamente condivisibile, ma l'uso della cifratura non deve essere per forza frutto di qualche attività illegale da nascondere, anzi chi ne fa uso quotidianamente nella quasi totalità dei casi è un utente normale che ha a cuore la propria privacy.
Vediamo come poter cifrare i propri messaggi di posta elettronica con il vostro Linux.
PGP (Pretty Good Privacy)
Per questo, come ho appena detto, ci sono alcuni strumenti che vengono incontro all'utente. Uno dei più diffusi è PGP, Pretty Good Privacy, strumento creato nel 1991 da Philip Zimmerman, il cui sviluppo, che dopo alterne vicende è stato finalmente ripreso, ha portato recentemente alla versione 8.0 di questo prodotto. Lo scopo di PGP è quello di fornire uno strumento semplice per lo scambio di informazioni o file tra utenti attraverso un "canale sicuro". Praticamente secondo gli algoritmi di cifratura asimmetrici (quelli maggiormente utilizzati per questi usi) ogni utente genera una coppia di chiavi, una privata e una pubblica che consentono di crittare e decrittare un messaggio in maniera univoca: un messaggio criptato con una chiave pubblica può essere decrittato solo con quella privata.
Il motivo per cui le chiavi vengono chiamate pubbliche e private sta nel fatto che l'utente che le genera distribuirà soltanto una chiave, quella pubblica, mentre dovrà custodire gelosamente (senza rivelarla a nessuno in nessun caso) quella privata. In pratica se Tizio volesse mandare un messaggio all'utente Caio in questo modo sarà necessario che:
1) Entrambi gli utenti generino delle chiavi PGP (in realtà nell'esempio specifico basta che solo Caio abbia una coppia di chiavi)
2) Caio deve dare la propria chiave pubblica a Tizio. Anche Tizio può dare la sua chiave pubblica. In nessun caso la chiave privata deve essere distribuita.
3) Una volta che Tizio ha ricevuto la chiave pubblica di Caio potrà cifrare il messaggio con PGP utilizzando proprio quest'ultima. A questo punto manderà il messaggio cifrato a Caio.
4) Caio ricevuto il messaggio decifrerà il testo con la propria chiave privata.
Questo procedimento all'inizio può sembrare abbastanza macchinoso. In realtà capito il funzionamento e i principi che ci sono dietro risulta abbastanza semplice e agevole scambiare messaggi in questo modo. I primi due passaggi del resto verranno effettuati solo la prima volta. Inoltre è possibile configurare i client di posta più moderni affinché svolgano queste operazioni in automatico (maggiori informazioni sulla
GNUPgp: installare e generare le chiavi
In questo articolo vedremo quindi come fare in pratica a leggere e spedire messaggi utilizzando GNUPG (GNU Privacy Guard), la versione libera di Pretty Good Privacy. Si tratta di una versione compatibile con l'originale. Non supporta però l'algoritmo di cifratura "IDEA", in quanto protetto da brevetto.
Il sito ufficiale di GNUPG è www.gnupg.org, dal quale è anche possibile scaricare il programma, attualmente arrivato alla versione 1.2.1. È comunque sicuramente possibile trovarlo anche sui CD di installazione della vostra distribuzione. Dopo averlo installato con un rpm -Uvh nomefile.rpm oppure dpkg -i nomefile.deb (per Debian), possiamo come prima cosa creare i file di configurazione di gnupg. Per farlo lanciamo gpg senza nessun parametro (d'ora in avanti daremo i comandi come semplice utente).
lnxbox1:~$ gpg
Fatto questo generiamo la nostra coppia di chiavi:
lnxbox1:~$ gpg --gen-key
Ci verrà chiesto quindi l'algoritmo di cifratura che vogliamo usare. Una buona scelta (senza dilungarci nella trattazione dei singoli algoritmi) è il primo, il DSA e ElGamal con dimensione da 2048 bit, la massima disponibile. Avere una chiave molto lunga previene il rischio che la nostra coppia di chiavi possa essere scoperta tramite attacchi a forza bruta: più lunga sarà la chiave più tempo ci vorrà a cifrare e decifrare un file, ma anche a risalire a questa provando tutte le possibili combinazioni. Cercare di risalire a una coppia di chiavi di un utente può essere così un'operazione che richiede tempo dell'ordine di mesi o di anni.
Per avere ancora un ulteriore margine di sicurezza è possibile anche impostare una data di scadenza per la chiave. In questo modo chiunque volesse risalire alla chiave dovrà cercare di riuscirci in un determinato intervallo di tempo. Una volta scaduta la chiave e generata un'altra, un potenziale attaccante dovrà necessariamente ricominciare dall'inizio e riprovare con tutte le possibili combinazioni.
Impostata la data di scadenza, dovremo inserire il nostro nome, cognome ed email con la possibilità di inserire anche un commento. Queste informazioni sono importanti perché consentono di creare una sorta di "rubrica" delle nostre chiavi, in modo da fare un'immediata associazione tra chiave e proprietario.
Inseriti i nostri dati anagrafici dovremo impostare una passfrase, in pratica una password più lunga, che ci verrà chiesta quando tenteremo di decifrare un messaggio. Il sistema provvederà finalmente alla generazione delle due chiavi.
Abbiamo visto come utilizzare GnuPG per cifrare e decifrare i nostri dati. Vediamo ora come automatizzare il processo di decifratura e cifratura della nostra posta utilizzando due dei client di posta più comuni: KMail e Evolution.
KMail
Con KMail le cose sono molto semplici:
Dal menu Impostazioni (stiamo prendendo in esame la versione internazionalizzata in italiano, per quella in inglese la configurazione è la stessa, e la traduzione delle parole è abbastanza agevole), scegliete la voce Configura Kmail. Vi si aprirà l'interfaccia di configurazione di Kmail. A questo punto cliccate sulla voce Sicurezza rappresentata dall'immagine di un lucchetto; cliccate sul tab OpenPGP e alla voce Strumento di cifratura scegliete "GnuPG GNU Privacy Guard" dal menu a tendina. Sempre da qui potrete impostare alcune opzioni come ad esempio quella per memorizzare la passphrase (frase segreta) oppure quella per avere una preview del testo cifrato prima della spedizione dell'email.
A questo punto dovrete specificare la vostra chiave PGP. Potrete selezionarla dal menu Identità (nella colonna a sinistra) scegliendo il tab "Impostazioni avanzate", cliccando quindi su "Cambia" (riga su "Chiave OpenPGP") e selezionandola dall'elenco che comparirà. In questo modo saremo in grado di decifrare tutte le email che verranno spedite utilizzando la nostra chiave pubblica. Quando apriremo un'email così cifrata basterà soltanto inserire la nostra passphrase.
Per spedire invece un'email utilizzando PGP una volta scritto il testo dovremo cliccare sul pusante con il lucchetto, scegliere la chiave con cui cifrare il messaggio (quella pubblica del nostro destinatario, che dovremo avere o immettere utilizzando l'opzione --import di gpg come spiegato nel precedente articolo), confermandola. Se abbiamo attivato l'opzione relativa alla "preview" delle email cifrate con PGP, a questo punto saremo in grado di vedere il testo cifrato che verrà quindi spedito.
Evolution
Discorso simile va fatto con Evolution, il client di posta di Gnome. Una volta lanciato, dal menu Strumenti selezioniamo Settings. Diamo un click sull'account per il quale vogliamo abilitare l'uso di PGP, quindi su "Edit" e scegliamo il tab "Security". A questo punto alla voce "PGP/GPG Key ID" inseriamo la nostra Key ID (per conoscere quale è possiamo come al solito lanciare gpg --list-keys, riconoscere la riga relativa alla nostra coppia di chiavi e identificare l'ID, una stringa di 8 caratteri contenenti numeri e lettere casuali, nella riga che inizia per "pub").
Sempre in questo tab sarà possibile specificare delle opzioni come quella che automatizza la procedura di cifratura per l'email spedite, oppure quella per cifrare l'email anche con la propria chiave in modo da essere sempre in grado di riconoscere il testo scritto. Fatto questo, una volta ricevuto un messaggio cifrato con la nostra chiave pubblica questo verrà automaticamente decifrato dopo l'immissione della nostra passphrase.
Invece per spedire da Evolution un messaggio con PGP basterà comporre normalmente il messaggio e abilitare dal menu "Sicurezza" la voce "Cifra con PGP" oppure "Firma con PGP" se vogliamo soltanto firmare il messaggio (la firma consente di stabilire l'autenticità del messaggio).
Distribuire la propria chiave pubblica
Generata la coppia di chiavi se vogliamo che qualcuno ci invii dei messaggi cifrati sarà necessario far avere a un pò di gente la nostra chiave pubblica. Per esportare su file (in questo caso chiavepubblica.asc) la chiave pubblica possiamo dare il comando:
lnxbox1:~$ gpg --export -a -o chiavepubblica.asc
Una volta ottenuta la chiave pubblica possiamo ad esempio spedirla ai nostri amici, oppure metterla su una pagina web o sito ftp, oppure allegarla in attachment ad ogni nostra email (per quanto sia da evitare in quanto appesantisce in maniera non indifferente un'email, cosa che potrebbe non gradire il nostro destinatario).
Ritornando al nostro esempio: se a questo punto Tizio ha ricevuto la chiave pubblica di Caio dovrà importarla all'interno della "rubrica" di GNUPG e cifrare il messaggio che dovrà nuovamente rispedire a Caio, che provvederà a decifrarlo.
Se il file contenente la chiave pubblica di Caio si chiama chiavepubblica_caio.asc a Tizio basterà semplicemente dare il comando:
lnxbox1:~$ gpg --import chiavepubblica_caio.asc
Ora Tizio sarà in grado di creare messaggi cifrati che solo Caio potrà decifrare. Per poter cifrare un messaggio sarà necessario quindi specificare il destinatario del messaggio, la persona cioè contenuta nel nostro database delle chiavi pubbliche.
Cifrare le E-mail
Le opzioni più importanti per la cifratura di un messaggio sono -a che crea un file .asc contenente il testo in forma "leggibile" ASCII (per quanto sia comunque composto da lettere incomprensibili), in modo da poter facilmente allegare a un'email il messaggio cifrato. L'opzione -e nomefile ci consente di specificare il file contenente il testo da cifrare, mentre con -r ID specificheremo il destinatario del messaggio. Per conoscere l'ID del nostro destinatario possiamo utilizzare il comando:
lnxbox1:~$ gpg --list-keys
che visualizza le informazioni relative al nostro database di chiavi. L'ID di una chiave è un numero esadecimale e viene visualizzato subito prima della data di creazione della chiave nelle righe che "iniziano" per "pub". Se ad esempio l'output fosse qualcosa del tipo:
pub 1024D/232FB0C7 2002-11-31 Andrea Scrimieri (chiave di prova) <a.scrimieri@html.it>
sub 2048g/4DB8A2F8 2002-11-31[scadenza: 2002-12-30]
L'ID di questa chiave sarà 232FB0C7. Se volessimo cifrare il file provamessaggio.txt per l'utente Caio che ha ID 94A4003B dovremo dare il comando:
lnxbox1:~$ gpg -a -r 94A4003B -e provamessaggio.txt
verrà creato un file chiamato provamessaggio.txt.asc che potremo tranquillamente mandare all'utente Caio con i mezzi che riteniamo più opportuni.
Ricevuto questo file a Caio non resterà altro che decifrare il messaggio con il comando:
lnxbox1:~$ gpg -d provamessaggio.txt.asc
All'utente Caio verrà chiesta la propria passfrase, inserita quando ha generato la coppia di chiavi. Il file una volta decifrato non verrà salvato ma verrà soltanto visualizzato a video. Per poter salvere l'output su file potremo aggiungere un > provamessaggiodecifrato.txt che reinderizzerà l'output su file.
Come vi abbiamo già detto i client di posta più diffusi consentono di automatizzare questo prodimento: nel prossimo articolo parleremo di come sia possibile spedire e ricevere con KMail e Evolution delle email cifrate con GnuPG.