Internet è il postino dei nostri tempi che nessun cane azzannerà.

— Mario Muratore

Messaggi sicuri con PGP

http://www.stenoweb.it/files/blog/pgp.jpg ”Pronto? Scusa Stefano, sono Giorgio, mi devi risolvere un grosso problema. Vorrei mandare dei messaggi d'amore ad Afet, la mia amante turca, ma temo che mia moglie possa leggere le mie email. Possiamo risolvere la faccenda in qualche modo? Ho provato ad imparare il turco ma incontro qualche difficoltà con i verbi”.
Chissà quante volte vi hanno chiesto una cosa del genere! A parte gli scherzi capita di sovente che qualcuno voglia legittimamente celare ad occhi indiscreti la propria corrispondenza via internet. In fondo è come se, usando la posta ordinaria, usassimo sempre delle cartoline che potenzialmente tutti possono leggere: nessuno obietta se invece noi preferiamo utilizzare delle buste sigillate. Vediamo come aiutare il nostro infedele amico usando Thunderbird, Enigmail e GNUPGP.

Per evitare a Giorgio un corso intensivo di lingua turca (che comunque non lo metterebbe al riparo da sorprese...) utilizzeremo la crittografia e PGP (Pretty Good Privacy), uno dei più celebri software per la crittografia a chiave pubblica utilizzato 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.

Chiave simmetrica e asimmetrica

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 deve essere poi ovviamente usata per decodificare il messaggio cifrato. Per intenderci, se Giorgio volesse inviare un messaggio codificato ad Afet, avrebbe il problema di fargli avere anche la chiave segreta, con la quale ella potrà decodificare il messaggio.

Purtroppo però Afet sta a qualche migliaio di chilometri e Giorgio non ha un canale sicuro per trasmettere la chiave: questo sistema non potrebbe funzionare, data la forte probabilità che la chiave venga intercettata dalla moglie investigatore. 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...

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 negli anni '70 (se avete avuto a che fare con SSL e compagnia avete sicuramente già sentito parlare di loro).

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 del metodo classico visto prima: se Giorgio vuole inviare un messaggio ad Afet, codifica il messaggio usando la chiave pubblica di quest'ultima. Solo Afet, che ha la corrispondente chiave segreta e privata, è in grado di decodificare e leggere il messaggio.

Pretty Good Privacy

Pretty Good Privacy unisce in sé il meglio di entrambi i metodi visti sopra: è un sistema ibrido.
Quando Giorgio 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 pubblica: il risultato è il testo criptato che viene spedito ad Afet assieme alla chiave pubblica contenente la session key usata per quella operazione.

Per leggere il messaggio Afet 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 ma non impossibile, disponendo di molto tempo e di un computer sufficientemente potente , risalire alla chiave privata partendo da quella pubblica: di conseguenza è importante generare delle chiavi con una lunghezza tale da garantirne la sicurezza e allo stesso tempo sufficientemente compatte per essere agevolmente distribuite.

Per inviare un messaggio ad un destinatario dove reperire la sua chiave pubblica? Nei keyserver, 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.

Anche noi, come vedremo dopo, quando generiamo la nostra chiave pubblica la invieremo ad un keyserver.

Il PGP presenta anche altre funzioni tra cui menziono l' autenticazione del mittente del messaggio attraverso la firma digitale. Se siete interessati a questa possibilità potete reperire informazioni aggiuntivi nella rete.

Software necessario

Ora vediamo come mettere in pratica quanto visto. Questa operazione va fatta sia sul PC di Giorgio che su quello di Afet.
Utilizzeremo:

  • Thunderbird come programma di posta. Credo non ci sia bisogno di fornire ulteriori informazioni su di esso.
  • GNUPG come implementazione PGP. Scaricate la versione per il vostro sistema operativo.
  • Enigmail che è una estensione per Thunderbird che ci permette di utilizzare GNUPG.

Installazione e configurazione

Ora vediamo le operazioni da fare, fate qualche test per provare il sistema.

  • Installiamo GNUPG, Thunderbird e la sua estensione Enigmail
  • Dopo il riavvio di Thunderbird selezioniamo Impostazioni dal menu OpenPGP. Il parametro File e Cartelle dovrebbe già indicarmi il percorso di GnuPG: se così non fosse impostiamolo manualmente cercando il file gpg.exe.
  • Selezioniamo Gestione delle chiavi dal menu OpenPGP. Nella finestrella risultante selezioniamo dal menu Genera la voce Nuova coppia di chiavi.
  • Selezioniamo l'account utente per cui generare la coppia di chiavi Pubblica & Privata e digitiamo due volte una Passphrase sicura nei campi appositi.
  • Clicchiamo su Genera chiave.
  • Ci viene ora richiesto di generare un certificato di revoca: questo ci è utile se vogliamo revocare la nostra chiave pubblica nel caso, ad esempio, si perda la nostra chiave privata. Diamo conferma, digitiamo la passphrase specificata prima e salviamo il file in un posto sicuro (attenzione a non perderlo …)
  • Ora non ci resta che inviare la nostra chiave pubblica ad un keyserver in modo che sia possibile eventualmente anche a gente che non conosciamo di inviarci una email crittografata, oppure via email direttamente al nostro/i interlocutore/i selezionato/i. Per farlo basta premere il tasto destro del mouse sulla chiave e selezionare Invia chiavi pubbliche al keyserver oppure via Invia chiavi pubbliche via Email

Uso

Prima di poter inviare una Email crittografata a qualcuno dobbiamo la prima volta procurarci la sua chiave pubblica. Possiamo richiederla via email oppure, se è stata pubblicata, scaricarla dal keyserver.

  • Selezioniamo nuovamente Gestione dell chiavi dal menu OpenPGP.
  • Ora dal menu Keyserver selezioniamo Ricerca chiavi e specifichiamo l'indirizzo email del nostro destinatario. Una volta che la chiave è stata trovata la possiamo importare per iniziare ad usarla.
  • Non ci resta che provare il tutto: creiamo un nuovo messaggio (ricordo che la formattazione HTML viene persa, cliccate su Scrivi con il tasto Shift premuto per creare una mail con solo testo semplice). Possiamo anche allegare dei file naturalmente.
  • Prima di inviare la mail clicchiamo sul bottone OpenPGP e selezioniamo Cifra il messaggio.
  • Se abbiamo aggiunto degli allegati ci viene chiesto in che modalità inviarli: selezioniamo Cifra il messaggio tutto insieme e spediscilo in formato PGP/MIME. Se dovessimo avere dei problemi possiamo tentare con le altre opzioni.

Fatto! Ora il destinatario riceverà la mail criptata e digitando la passphrase della sua chiave privata potrà leggerla in tutta sicurezza.

Se non avete capito non preoccupatevi: la procedura è più difficile da spiegare che da realizzare. Con qualche prova sarete a posto.

Giorgio! Ma una foto di Afet ce la mandi ??? :D

I just like the helpful information you provide on your articles. I will bookmark your blog and test once more here frequently. I'm moderately certain I will learn many new stuff right here! Best of luck for the next! ddacdaecdgbb