CifraturaMail

Da MontelLUG.
Menu
MontelLUG frontpage
Feed RSS ultime modifiche
Aiuto: Come modificare le pagine

Introduzione

Stato progetto

Progetto definito e approvato

Finalità

Il progetto si pone l'obiettivo di definire quali siano gli standard e le modalità per l'uso della cifratura e firma delle email: si fa in particolare riferimento al sistema GNU Privacy Guard ed ai client di posta piu' utilizzati quali Mozilla.

Viene di seguito sviluppata una documentazione che spiega come si utilizza questa tecnologia in modo che sia fruibile da chiunque.

Metodi operativi

La partecipazione al progetto è aperta a tutti liberamente: si prega comunque di dichiarare il proprio inserendo il proprio nome e cognome nella lista sottoriportata.

Le comunicazioni fra i partecipanti al progetto avverranno mediante l'uso di

  • questo wiki, per la stesura di documentazione e note tecniche
  • IRC per le comunicazioni interattive irc://irc.irclab.net/montellug (canale #montellug nella rete irc.irclab.net)

Lista partecipanti al progetto

  • Paolo Subiaco
  • Alessandro Galli
  • Diego Rondini
  • Aram La Valle
  • EndelWar

.....


GnuPG: A cosa serve?

Introduzione

GnuPG significa Gnu Privacy Guard, quindi risulta un'applicazione utilizzata da svariati client di posta (MUA) per salvaguardare la privacy nel trasferimento dei documenti (email). In verità può essere utilizzato anche al di fuori della comunicazione tramite email!

Codifica delle email

Ogni mail inviata può essere intercettata mediante l'uso di sniffer oppure dagli amministratori guardoni dei server di posta attraverso cui transita. Per proteggerla, bisognerà cifrarla: a questo proposito si possono utilizzare 3 tipi di algoritmi: a chiave simmetrica, a chiave pubblica, ibrido. Il sistema più utilizzato (perché comodo) è l'algoritmo a chiave pubblica, il quale prevede la generazione di una coppia di chiavi (una pubblica ed una privata) e la distribuzione a tutti i nostri corrispondenti della propria chiave pubblica, nonché la ricezione da parte dei nostri corrispondenti della loro chiave pubblica. Le chiavi private devono invece essere conservate con la massima cura.

Il sistema funziona cosi, nel caso in cui voglia inviare una mail cifrata a TIZIO: Creo l'email, la codifico in base alla chiave pubblica che TIZIO mi ha preventivamente fornito, cosi tale mail potrà essere decifrata solo utilizzando la chiave privata di TIZIO.

Firma delle email

Oltre ad essere cifrata, la mail può anche essere firmata: la firma elettronica serve ad attestare che la mail e' stata generata da un autore, ad una certa data/ora, ed il contenuto è esattamente quello contenuto nella mail.

Per firmare una mail si potrebbe utilizzare qualsiasi funzione di hash che, dato il contenuto della mail, genera un codice ad esso associato. Chi la riceve, dovrebbe applicare la stessa funzione di hash e confrontare il codice risultante con quello apposto nella mail. Mai provato md5sum ?? man md5sum oppure md5sum /etc/passwd

Un simile approccio non risulta sicuro perché basterebbe modificare l'email, ricalcolarne l'hash, e modificare anche il codice hash apposto all'email. Per avere una buona sicurezza è necessario ancora una volta utilizzare l'algoritmo a chiave pubblica.

IO genero l'email, applico la firma utilizzando la MIA chiave privata, e TIZIO legge l'email verificando la firma utilizzando la MIA chiave pubblica preventivamente inviatagli.

Installare PGP

Innanzitutto è necessario installare PGP, software che si può trovare nel sito www.gnupg.org. In Debian è sufficente installare i pacchetti gpgp e pgpgpg (wrapper per GnuPG per utilizzarlo con i programmi che si aspettano PGP). Una volta fatto questo è necessario crearsi un certificato con il quale firmare e criptare le proprie mail.

Creazione del Proprio certificato

Per creare il certificato con il comando in shell, digitare gpg --gen-key. Si avvia un processo interattivo in cui è necessario indicare:

  1. il tipo di chiave da creare
  2. la durata della chiave
  3. confermare la data di scadenza della chiave
  4. Dati personali: nome e cognome, indirizzo e-mail, Commento
  5. passphrase (come una password ma dovrebbe essere molto più lunga e complessa)

Si riporta l'output del programma per chiarimento dei passi da effettuare:


 alessandro@galli:~$ gpg --gen-key
 gpg (GnuPG) 1.2.5; Copyright (C) 2004 Free Software Foundation, Inc.
 This program comes with ABSOLUTELY NO WARRANTY.
 This is free software, and you are welcome to redistribute it
 under certain conditions. See the file COPYING for details. 
 Per favore scegli che tipo di chiave vuoi:
    (1) DSA e ElGamal (default)
    (2) DSA (firma solo)
    (4) RSA (firma solo)
 Cosa scegli? 1
 La coppia DSA avrà 1024 bit.
 Sto per generare una nuova coppia di chiavi ELG-E.
                la dimensione minima è  768 bit
           la dimensione predefinita è 1024 bit
   la dimensione massima consigliata è 2048 bit
 Di che dimensioni vuoi la chiave? (1024)
 La dimensione richiesta della chiave è 1024 bit
 Per favore specifica per quanto tempo la chiave sarà valida.
          0 = la chiave non scadrà
       <n>  = la chiave scadrà dopo n giorni
       <n>w = la chiave scadrà dopo n settimane
       <n>m = la chiave scadrà dopo n mesi
       <n>y = la chiave scadrà dopo n anni
 Chiave valida per? (0) 20
 Key scadrà il gio 20 gen 2005 23:10:21 CET
 È giusto (s/n)? s
 Ti serve un User ID per identificare la tua chiave; il software costruisce l'user  id a partire da Nome e Cognome, Commento e Indirizzo di Email indicati in questa   forma:
     "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" 
 Nome e Cognome: ciccio pasticcio
 Indirizzo di Email: galli@coopnoi.it
 Commento:
 Hai selezionato questo User Id:
     "ciccio pasticcio <galli@coopnoi.it>"
 Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? o
 Ti serve una passphrase per proteggere la tua chiave segreta. 
 Dobbiamo generare un mucchio di byte casuali. È una buona idea eseguire
 qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i
 dischi) durante la generazione dei numeri primi; questo da al generatore di
 numeri casuali migliori possibilità di raccogliere abbastanza entropia.  ..+++++++++++++++.++++++++++++++++++++.+++++.++++++++++..++++++++++++++
+...++++++++++.+++++.+++++++++++++++++++++++++++++++++++..++++++++++++++
+>+++++..+++++..+++++
 Dobbiamo generare un mucchio di byte casuali. È una buona idea eseguire
 qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i
 dischi) durante la generazione dei numeri primi; questo da al generatore di
 numeri casuali migliori possibilità di raccogliere abbastanza entropia.  +++++++++++++++++++++++++.+++++++++++++++.++++++++++.+++++++++++++++++++++
+++++++++.++++++++++.+++++...+++++++++++++++++++++++++++++++++++>+++++..+
++++^^^^
 chiavi pubbliche e segrete create e firmate.
 chiavi marcate definitivamente affidabili. 
 pub  1024D/7ADCD1B8 2004-12-31 ciccio pasticcio <galli@coopnoi.it>
      Impronta digitale = F9D4 E8B0 76C8 9CF1 67F8  DC33 3362 CD41 7ADC D1B8
 sub  1024g/A8BD167A 2004-12-31[scadenza: 2005-01-20] 
 alessandro@galli:~$

A questo punto è possibile visualizzare le chiavi che abbiamo in nostro possesso con gpg --list-keys.

Perchè qualcuno possa verificare le nostre firme sulle mail che invieremo, dovrà possedere la nostra chiave pubblica. Dovremo quindi salvarla su un file con il comando gpg --export <nostro nome> --armor -- output <nome del file su cui salvare la chiave pubblica>. L'opzione --export serve per indicare la chiave di chi salvare nel file indicato dall'opzione --output. --armor indica di creare la chiave pubblica come testo, e non in binario. Utile per spedire la chiave pubblica ad esempio come firma predefinita alla fine di un'email. Ho notato qualche problema nell'estrarre con l'opzione --armor la chiave di un solo mio utente, in quanto l'output risulta esadecimale e non testuale. In ogni caso è possibile utilizzare il comando gpg --export --armor --output <nome file> per creare un file da mandare via mail con le chiavi pubbliche che conosciamo.

Acquisizione di certificati di terzi

Per verificare la firma di qualcuno che vi manda una mail firmata dovete avere la sua chiave pubblica importata in gpg (a meno che non vi alleghi la propria firma pubblica direttamente nella mail). In ogni caso, se vi mandano un file contenente la firma, per importarla in gpg basta eseguire il comando gpg --import <nome del file>. Se la firma è un testo, magari inserito in una mail, basta copiarlo in un file ed eseguire il sopra citato comanda. Per criptare una mail, avete bisogno della chiave pubblica del destinatario. Anche in questo caso dovete aver importato la chiave con il procedimento descritto in precedenza. E' da notare che non tutti gli algoritmi che è possibile utilizzare per generare le chiavi sono adatti per creare certificati adatti alla criptazione. Riportando parte dell'output del procedimento utilizzato per generare le chiavi si nota:

Per favore scegli che tipo di chiave vuoi:
  (1) DSA e ElGamal (default)
  (2) DSA (firma solo)
  (4) RSA (firma solo)

Quindi sono chiavi generate con DSA e ElGamal possono essere usate per criptare.

Una volta importate le chiavi è necessario decidere se dare fiducia o no alla chiave appena importata. Questo è possibile tramite il comando gpg --edit-key idchiave; questo comando apre una shell in cui bisogna digitare "trust" e premere invio (per dare fiducia alla chiave), rispondere alle domande che vengono poste (per individuare il grado di fiducia che si vuole dare al certificato). Per chiudere la shell bisogna usare il comando "quit".

Utilizzare la stessa chiave per più indirizzi email

Al giorno d'oggi è normale avere più di un indirizzo email, ad esempio uno per lavoro ed uno per usi personali; è possibile utilizzare la stessa coppia di chiavi pubblica e privata per ognuna delle proprie identità.

Per fare ciò bastano pochi semplici comandi per editare la propria chiave:

innanzitutto bisogna conoscere l'id della propria chiave

 endelwar@bellatrix:~$ gpg --list-keys

tra le chiavi che abbiamo nel keyring cerchiamo la nostra e segnamoci l'id numerico, dopo di che cominciamo la modifica vera e propria:

 endelwar@bellatrix:~$ gpg --edit-key 0xF17110BE

Comando> adduid
Nome e Cognome: Nome Cognome
Indirizzo di Email: utente@example.org
Commento:
Hai selezionato questo User Id:
    "Nome Cognome <utente@example.org>"

Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? o

Ti serve una passphrase per sbloccare la chiave segreta
dell'utente: "EndelWar <EndelWar@aregar.it>"
chiave DSA di 1024 bit, ID F17110BE, creata il 2004-12-30

Inserisci la passphrase:
Comando> save

Come distribuire la propria chiave pubblica

In base a quanto sopraesposto, è necessario distribuire la propria chiave pubblica ai soggetti che dovranno decifrare le proprie email, oppure verificarne la firma digitale.

Il metodo migliore consiste nel pubblicare la propria chiave pubblica nei keyserver adibiti allo scopo, in modo che un utente che riceve la nostra email possa verificarne l'autenticità e/o decifrarla prelevando la propria chiave pubblica dal keyserver: GnuPG supporta già la pubblicazione, ed in alcuni MUA quali Mozilla è presente una applicazione per semplificare questa procedura.

Da Mozilla Mail, ad esempio, basta selezionare Enigmail -> OpenPGP key management e quindi

  • selezionare Key -> Generate per generare una nuova coppia di chiavi pubblica/privata per se
  • selezionare la propria chiave pubblica quindi key -> Export public key -> Upload to keyserver per esportarla verso ciascuno dei keyserver predefiniti.

Per gli amanti della console il comando da impartire è il seguente:

gpg --send-keys --keyserver pgp.mit.edu <ID della chiave pubblica>

Crittografia e numeri primi

Un po' di teoria

Gli algoritmi di crittografia a chiave pubblica si basano sul problema della scomposizione di un numero intero in fattori primi, cioè dato un intero positivo n trovare p e q primi tali che n=pq (avendo come ipotesi che n è prodotto di numeri primi). Intuitivamente si capisce subito che un algoritmo molto semplice che risolve il problema provando a dividere n per tutti gli interi si fermerà saggiamente al raggiungimento della radice di n (non ha senso andare oltre!!). Il tempo di soluzione del problema è quindi proporzionale a radice(n). Se però esprimiamo tale 'rapidità di soluzione' in funzione dei bit necessari a rappresentare n passiamo ad una funzione esponenziale, cioè se n lo rappresentiamo in binario (ovvero come una sequenza di 0 e 1) con 1024 bit il nostro computer ci metterà in qualche misura un tempo proporzionale a 2^1024 a risolvere il problema.

Bello, ma cosa c'entra???

La crittografia sfrutta la difficoltà di soluzione di tale problema in questo modo. Se rappresentiamo in modo univoco un messaggio segreto tramite un numero primo p molto grande possiamo trasmettere sulla rete il numero r=p*q, dove q è un altro numero primo molto grande. Una persona che intercetta il numero trasmesso r dovrebbe conoscere anche q per poter leggere correttamente la comunicazione originale p. In questo modo solo chi possiede la chiave privata (il numero primo q) può decifrare correttamente il messaggio. Conoscendo solo r il tempo per determinare q, e di conseguenza leggere p, è mostrusamente grande, proporzionale appunto a 2 elevato alla numero di bit della chiave. La prossima volta vedremo di stimare meglio quanto tempo è necessario per scoprire una chiave di cifratura q a tentativi.


Mail User Agents utilizzabili

Mozilla

Il supporto alla cifratura delle eMail in Mozilla viene introdotto mediante il plugin EnigMail.

Links a documentazioni interessanti:

Enigmail può cifrare e firmare le mail inviate, cosiccome può decifrare e autenticare le mail ricevute. Può inoltre importare ed esportare le chiavi pubbliche. Enigmail supporta sia la modalità inline PGP sia il formato PGP/MIME (RFC 3156), che può essere usato per cifrare gli allegati.

Installazione e configurazione per Mozilla 1.2

  • Prelevare, utilizzando mozilla come utente root/administrator, i due moduli enigmail da http://enigmail.mozdev.org/download.html ed eventualmente installare GnuPG (in unix non c'e' problema; in windows, prelevare GnuPG da http://www.gnupg.org/download quindi scomprimerlo in C:\Programmi\GnuPG , rinominare it.mo in gnupg.mo, ed infine installare in windows i seguenti registri: http://web.tiscali.it/winzozzz/1.reg | http://web.tiscali.it/winzozzz/2.reg )
  • Riavviare mozilla, quindi selezionare il menu Enigmail -> Preferences
  • Specificare il proprio indirizzo email, spuntare Use FROM email ..., quindi Encrypt+sign if possible e Remember password for 10 minutes.
  • Selezionare il pulsante Advanced
  • Specificare il percorso di GPG, probabilmente /usr/bin/gpg per gli utenti unix
  • Creare la coppia chiave pubblica/privata selezionando il menu Enigmail -> Generate key specificando una passphrase (può contenere spazi!) ed un eventuale commento. L'operazione potrebbe non andare a buon fine la prima volta, in quanto deve essere creato il keyring, pertanto in tal caso ripetere l'operazione.

Installazione e configurazione per Mozilla 1.7

  • Prelevare, utilizzando mozilla come utente root/administrator, i due moduli enigmail da http://enigmail.mozdev.org/download.html ed eventualmente installare GnuPG (in unix non c'e' problema; in windows, prelevare GnuPG da http://www.gnupg.org/download quindi scomprimerlo in C:\Programmi\GnuPG , rinominare it.mo in gnupg.mo, ed infine installare in windows i seguenti registri: http://web.tiscali.it/winzozzz/1.reg | http://web.tiscali.it/winzozzz/2.reg )
  • Selezionare Enigmail -> Preferences quindi specificare il percorso di GPG, solitamente /usr/bin/gpg per gli utenti unix
  • Selezionare Enigmail -> OpenPGP key management: si aprirà una finestra in cui bisognerà selezionare Key -> Generate per creare una chiave per firmare le proprie mail. Selezionare "No passphrase" se non si considera MOLTO SICURA la macchina su cui si sta lavorando, inserire un commento (ad esempio l'indirizzo email) e cliccare su "Generate key". Vi apparirà la nuova chiave creata.

Funzionamento

Per poter iniziare una comunicazione cifrata con un corrispondente e' indispensabile che questo vi fornisca la sua chiave pubblica. La stessa cosa dovrete fare voi: create una mail, selezionate Enigmail -> Insert public key e inviatela. Quando viene ricevuta una mail contenente la chiave pubblica, e' possibile acquisire la chiave pubblica del mittente selezionando Enigmail -> Sender's key -> Import public key. A quel punto è possibile iniziare una comunicazione di mail cifrate. Attenzione che le mail cifrate utilizzando la chiave pubblica del destinatario possono essere lette soltanto conoscendo la chiave privata del destinatario, pertanto le mail cifrate inviate non risulteranno poi leggibili.

Evolution

Ho provato ad utilizzare la firma digitale e la criptazione con Evolution. Ecco i risultati di queste prove.

In Evolution 2.0.3, si può decidere di utilizzare due metodi di criptazione e firma:

  • PGP
  • S/MIME

Firma e Criptazione delle mail in Evolution con PGP

Una volta creato il nostro certificato e importati quelli delle persone con cui manterremo una corrispondenza sicura, l'operazione di inviare mail criptate e firmate in evolution risulta banale.

Durante la composizione dei messaggi, una volta impostati il mittente ed i destinatari, basta andare nel menù "sicurezza" nella barra dei menù. Lì vi sono 4 voci:

  • firma con PGP
  • cifra con PGP
  • firma con S/MIME
  • cifra con S/MIME

Per firmare con PGP spuntare la voce corrispondente. Deve essere presente in gpg il certificato privato associato con l'indirizzo email che utilizzate per inviare il file.

Per criptare con PGP spuntare la voce corrispondente. Dovete possedere il certificato pubblico del destinatario del messaggio.

Quando si invia la mail Evolution provvederà a chiedervi la passphrase per accedere alla vostra chiave privata. Una volta inserita la passphrase il messaggio verrà inviato.

Quando si aprono mail firmate sarà lo stesso Evolution a verificare la firma. Un'icona alla fine della mail e la scritta "firma verificata" indicheranno che il messaggio è stato firmato e la verifica è andata a buon fine.

Quando si aprono mail criptate Evolution vi richiederà la Passphrase per accedere alla vostra mail criptata, in modo da decriptare il messaggio. Sarà quindi presentato il messaggio decriptato. Un'icona alla fine del messaggio con la scritta "Cifrato" indica che il messaggio è stato inviato criptato.

KMail

Introduzione

In KMail il supporto alla cifratura avviene tramite OpenPGP, già integrato nel programma.

Prima di iniziare vi ricordo che la documentazione di tutte le applicazioni KDE è sempre molto ben curata, in particolare quella di Kmail è ottima ed ha una sezione apposita dedicata alla firma e cifratura con PGP o GnuPGP. Sicuramente se avete necessità di aiuto rivolgetevi a tale documentazione (che è interamente tradotta in italiano) piuttosto che a questa mia guida. Per accedere andate su "Aiuto" -> "Manuale di KMail".

Configurazione

Prima di tutto vediamo la configurazione: "Impostazioni" -> "Configura KMail...". Andate alla sezione "Sicurezza" e da lì accedete a "OpenPGP". Nella parte alta della finestra si presenterà un messaggio di avviso che vi avvertirà dell'impossibilità di cifrare gli allegati tramite il modulo PGP/GPG. Se avete quindi necessità di criptare gli allegati dovrete rivolgervi a qualche altro plug-in. Ora potete scegliere quale strumento usare tra "PGP versione X.Y", "GnuPG - Gnu Privacy Guard", "Autorilevamento" e "Nessuno". Lasciate pure "Autorilevamento" e assicuratevi di aver installato almeno uno dei relativi tool tramite la tendina "Plug-in crittografici". Nel caso foste sprovvisti seguite le procedure fornite in precedenza su questa pagina. Ritornate ora sulla tendina precedente. Per la parte delle opzioni vi lascio alla guida di KMail molto chiara a riguardo. Vi dico solo che le opzioni di default vanno più che bene, e che l'opzione "Cifra sempre i messaggi per te stesso" vi permette di leggere i messaggi anche dopo averli cifrati con la chiave pubblica di qualcun altro, mentre se la deselezionate perdete la possibilità di rivedere tali messaggi. Sostanzialmente KMail cifra il messaggio sia con la chiave pubblica del destinatario (per la spedizione) sia con la vostra chiave privata (per una successiva consultazione).

L'ultimo passo della configurazione è quello di comunicare la propria chiave a KMail (dopo averla generata come nel paragrafo di Evolution). Sempre nel pannello di configurazione accedete a "Identità", selezionate quella desiderata o createne una nuova se necessario e andate su modifica. Ora, dal pannello "Avanzate" impostate la vostra chiave OpenPGP tramite il pulsante cambia. In questo modo potete ora firmare i vostri messaggi. Un ultimo avvertimento: non fate confusione come me pensando che la tendina "Firma" accanto ad "Avanzate" abbia qualcosa a che fare con la firma digitale. Si tratta semplicemente delle stringhe di testo che KMail può aggiungere in coda alle e-mail.

Invio e-mail cifrate o firmate

Una volta completata la configurazione è molto facile firmare o cifrare i messaggi. Nel compositore avete ora la possibilità di scegliere il tipo di cifratura. Quella preimpostata è "OpenPGP (plugin)" che è la scelta consigliata, altrimenti avete a disposizione anche "OpenPGP in linea (integrato)" e "SMIME (plugin)". Per cifrare o firmare la comunicazione potete utilizzare le due comode ed intuitive icone sulla barra oppure il menù "Opzioni". Ora inoltre dal menù "Allega" potete aggiungere la vostra chiave pubblica o anche inserire chiavi di altre persone che avete memorizzato. N.B.: fate ancora attenzione che nel menù "Allega" la funzione "Aggiungi la firma" non ha nulla a che fare con quella digitale, semplicemente aggiunge il testo preimpostato in coda al messaggio.

Interazione tra i vari software

Da Mozilla ad Evolution

Per fare in modo che Evolution decripti e verifichi la firma in automatico per i messaggi provenienti da Mozilla, è neccessario che chi spedisce usi PGP/MIME e non PGP-inline.

Nella versione 2.4 di Evolution è presente un plugin per la decodifica delle email firmate in PGP-inline.