Gentoo Logo

Guida Utente a GnuPG in Gentoo

Indice:

1.  Introduzione

Cos'è presente in questa guida

Questa guida presuppone che l'utente abbia una certa familiarità con la crittografia a chiave pubblica, la cifratura e la firma digitale. Per un'introduzione a questi argomenti leggere il capitolo Crittografia a chiave pubblica o dare una occhiata al Manuale di GnuPG (ndT: in inglese), capitolo 2, e quindi ritornare qui.

La guida descrive come installare GnuPG, come creare una coppia di chiavi, come aggiungere delle chiavi al proprio portachiavi, come inviare la propria chiave pubblica al Server delle chiavi (KeyServer) e come firmare/cifrare e verificare/decifrare i messaggi inviati/ricevuti. Si imparerà anche come cifrare i file del proprio pc per evitare che altre persone ne leggano il contenuto.

Installazione del software necessario

Al livello base è necessario installare il pacchetto principale con un emerge gnupg. Molte applicazioni oggi hanno qualche tipo di supporto per gpg, quindi avere crypt nella propria variabile USE è probabilmente una buona idea. Se si vuole un client email che utilizzi gnupg è possibile usare pine (installandolo tramite emerge pinepgp), mutt (installandolo mediante emerge mutt), Mozilla Thunderbird (installandolo usando emerge thunderbird, Evolution (un clone di Microsoft Outlook per GNOME) oppure KMail, il client di KDE.

Se si utilizza KDE, potrebbe interessare Kgpg; questo piccolo programma permette di generare coppie di chiavi, importare chiavi da file ASCII, firmare le chiavi importate, esportare chiavi ed altro.

2.  Generazione della propria chiave ed aggiunta delle chiavi al proprio portachiavi pubblico

Creazione della propria chiave

Per creare la propria chiave, basta eseguire semplicemente gpg --gen-key. La prima volta che sarà lanciato il comando, verranno create alcune directory. In seguito sarà necessario eseguirlo ancora per creare le chiavi:

Codice 2.1: Processo di generazione delle chiavi

$ gpg --gen-key
gpg (GnuPG) 1.0.7; Copyright (C) 2002 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.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   Your selection? 1

A questo punto c'è la possibilità di scegliere il tipo di chiave desiderata. La maggior parte degli utenti può utilizzare il tipo predefinito, RSA e RSA. Il punto successivo riguarda la scelta della dimensione della chiave: una chiave grande è preferibile, ma è importante ricordare di non utilizzare chiavi più grandi di 2048 con DSA/ElGamal. Normalmente 2048 è più che sufficiente per il normale uso con le email.

Dopo la dimensione, sarà richiesta la data di scadenza. Una chiave di breve durata è preferibile, ma la maggior parte degli utenti può sceglierne una che non scade mai, oppure con scadenza pari a 2 o 3 anni.

Codice 2.2: Scelta della dimensione della chiave

RSA keypair will have 1024 bits.
RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
 <n>= key expires in n days
 <n>w = key expires in n weeks
 <n>m = key expires in n months
 <n>y = key expires in n years
 Key is valid for? (0) 0
Key does not expire at all

Arrivati a questo punto è necessario inserire alcune informazioni personali. Se si ha intenzione di inviare la propria chiave pubblica ad altre persone si dovrebbe inserire qui il proprio indirizzo mail originale.

Codice 2.3: Inserimento informazioni utente

Is this correct (y/n)? y

GnuPG needs to construct a user ID to identify your key.

Real name: John Doe
Email address: john@nowhere.someplace.flick
Comment: The Real John Doe
You selected this USER-ID:
"John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

Enter passphrase:

È necessario inserire due volte la passphrase (frase segreta, d'ora in poi verrà indicata come "password") per la propria chiave. E' buona norma utilizzare una password non banale. Se qualcuno dovesse mai entrare in possesso della vostra chiave privata e forzare la vostra password, sarebbe in grado di inviare messaggi firmati a vostro nome, che chiunque potrebbe ritenere spediti da voi.

GnuPG a questo punto creerà la chiave. Muovere il mouse o ascoltare un mp3 in background velocizzerà il processo di generazione poichè verranno generati dati casuali.

Creare un certificato di revoca

Importante: Questa sezione è molto importante e bisogna eseguirla ORA.

Dopo la creazione delle proprie chiavi è fortemente consigliata la creazione di un certificato di revoca, che permetterà di revocare le proprie chiavi nel caso in cui capiti qualcosa di spiacevole (qualcuno è entrato in possesso della vostra chiave/password, ad esempio).

Codice 2.4: Generazione del certificato di revoca

$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

$ gpg --output revoke.asc --gen-revoke 75447B14

sec  1024D/75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhere.someplace.flick>

Create a revocation certificate for this key? y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
> Someone cracked me and got my key and passphrase
>
Reason for revocation: Key has been compromised
Someone cracked me and got my key and passphrase
Is this okay? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

Il comando gpg --list-keys elenca le chiavi presenti nel proprio portachiavi pubblico. E' possibile utilizzarlo per vedere l'ID della propria chiave così come è necessario per creare il certificato di revoca. Ora è una buona idea copiare l'intera directory .gnupg ed il certificato di revoca (in ASCII criptato - revoke.asc) in un dispositivo sicuro (due floppy o un CD-R da conservare in un luogo fidato). Ricordare che revoke.asc può essere utilizzato per revocare le proprie chiavi e renderle inutilizzabili in futuro.

Nota: Se si è in possesso di diversi indirizzi email che si desidera utilizzare con questa chiave, è necessario lanciare gpg --edit-key YOUR_ID e usare il comando adduid. Verranno richiesti nome, email ed un commento del secondo ID che verrà utilizzato.

Esportazione delle chiavi

Per esportare la propria chiave, digitare gpg --armor --output john.asc --export john@nowhere.someplace.flick. È possibile in ogni caso usare l'ID della chiave o qualcos'altro che la identifichi (qui è usato un indirizzo email). Ora John ha a disposizione il file john.asc che può mandare agli amici, o mettere nella sua home page in modo che le persone possano comunicare con lui in modo sicuro.

Importazione delle chiavi

Per aggiungere un file al proprio portachiavi pubblico, bisogna prima importarlo, quindi controllarne il fingerprint (impronta digitale) della chiave. Dopo averne fatta la verifica procedere alla validazione.

Nota: È necessario verificare con attenzione le chiavi. Questo è uno dei punti deboli della crittografia a chiave pubblica.

Ora, come esempio, verrà aggiunta la chiave pubblica di Luis Pinto (amico dell'autore) al proprio portachiavi pubblico. Dopo averlo contattato per ottenere da lui il fingerprint della sua chiave, lo si confronterà con l'output del comando fpr. Poichè la chiave è autentica, verrà aggiunta al portachiavi pubblico. In questo caso, in particolare, la chiave di Luis scadrà il 2003-12-01, per cui viene offerta la possibilità di fare in modo che la firma sulla sua chiave scada lo stesso giorno.

Codice 2.5: Importare e firmare le chiavi

$ gpg --import luis.asc
gpg: key 462405BB: public key imported
gpg: Total number processed: 1
gpg:               imported: 1
$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@student.dei.uc.pt>
uid                            Luis Pinto <lmpinto@dei.uc.pt>
sub  4096g/922175B3 2002-12-01 [expires: 2003-12-01]

$ gpg --edit-key lmpinto@dei.uc.pt
gpg (GnuPG) 1.0.7; Copyright (C) 2002 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.


gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
sub  4096g/922175B3  created: 2002-12-01 expires: 2003-12-01
(1)  Luis Pinto <lmpinto@dei.uc.pt>
(2). Luis Pinto <lmpinto@student.dei.uc.pt>

Command> fpr
pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt>
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB

Command> sign
Really sign all user IDs? y

pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB

     Luis Pinto <lmpinto@dei.uc.pt>
     Luis Pinto <lmpinto@student.dei.uc.pt>

This key is due to expire on 2003-12-01.
Do you want your signature to expire at the same time? (Y/n) Y
How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".

   (0) I will not answer. (default)
   (1) I have not checked at all.
   (2) I have done casual checking.
   (3) I have done very careful checking.

   Your selection? 3
Are you really sure that you want to sign this key
with your key: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

I have checked this key very carefully.

Really sign? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

Command> check
uid  Luis Pinto <lmpinto@dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe
uid  Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe

3.  Scambiare le chiavi con i KeyServer

Invio delle chiavi ai KeyServer

Ora che si possiede la propria chiave, è una buona idea inviarla ai KeyServer (Server delle Chiavi) mondiali. Ci sono molti KeyServer nel mondo e la maggior parte si scambiano le chiavi tra loro. Adesso verrà mostrato come inviare la chiave di John Doe al server subkeys.pgp.net, il quale utilizza HTTP, quindi se c'è bisogno di utilizzare un proxy per il traffico HTTP non bisogna dimenticare di impostarlo (digitando export http_proxy=http://proxy_host:port/). Il comando per inviare la chiave è il seguente: gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --send-key 75447B14 dove 75447B14 è l'ID della chiave. Se non si ha bisogno di un proxy HTTP basta rimuovere l'opzione --keyserver-options honor-http-proxy.

E' inoltre possibile mandare al KeyServer anche le chiavi di altre persone dopo averle firmate. Si potrebbe mandare la chiave di Luis Pinto al KeyServer. In questo modo qualcuno che si fida della nostra chiave potrebbe usare la firma che è stata apposta per ritenere fidata anche la chiave di Luis.

Recupero delle chiavi dai KeyServer

Continuando, per esempio, sarà cercata la chiave di Gustavo Felisberto e verrà aggiunta al portachiavi di John Doe (nel caso in cui non lo si fosse notato, Gustavo Felisberto è la persona che ha scritto questa guida).

Codice 3.1: Ricerca delle chiavi sul KeyServer

$ gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --search-keys humpback@felisberto.net
gpg: searching for "humpback@felisberto.net" from HKP server subkeys.pgp.net
Keys 1-5 of 5 for "humpback@felisberto.net"
(1)Gustavo Felisberto (apt-get install anarchy) <humpback@felisberto.net> 1024
  created 2002-12-06, key B9F2D52A
(2)Gustavo Felisberto <humpback@altavista.net> 1024
  created 1999-08-03, key E97E0B46
(3)Gustavo A.S.R. Felisberto <humpback@altavista.net> 1024
  created 1998-12-10, key B59AB043
(4)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-08-26, key 39EB133D
(5)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-06-14, key AE02AF87
  Enter number(s), N)ext, or Q)uit >1
gpg: requesting key B9F2D52A from HKP keyserver subkeys.pgp.net
gpg: key B9F2D52A: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

Come si può vedere dalla risposta del server, sono state inviate diverse chiavi al KeyServer, ma al momento è utilizzata solo B9F2D52A. Ora John Doe può scaricarla e firmarla, se la ritiene fidata.

4.  Utilizzo di un agente GPG

Cos'è un agente GPG?

Talvolta l'utente si trova a lavorare con determinate applicazioni che portano ad un uso frequente delle chiavi GPG, e ciò significa che si dovrebbe digitare la propria password molto spesso. In passato molte applicazioni utilizzavano un meccanismo di cache per salvare temporaneamente la password e semplificare la vita agli utenti. Comunque veniva disabilitata la condivisione di tale cache fra i diversi programmi (infatti, non sarebbe stato molto sicuro) e tale metodo forzava le applicazioni stesse a reinventare la ruota ogni volta.

Un Agente GPG è un'applicazione separata che GPG usa per salvare la password temporaneamente in una cache in un modo standard e sicuro. Esso permette a diverse applicazioni di usare GPG contemporaneamente: se viene inserita la password quando si lavora in un'applicazione, le altre potranno interagire a loro volta con GPG senza ripetere la richiesta della password per svincolare la chiave, ovviamente, se l'agente GPG è configurato per permetterlo.

Gentoo fornisce diversi agenti GPG. Il pacchetto app-crypt/gnupg può essere considerato come punto di riferimento, e sarà pertanto illustrato in questo documento.

Configurazione di gpg-agent e pinentry

GnuPG include gpg-agent e pinentry. pinentry è l'applicazione usata da gpg-agent per chiedere la password della chiave tramite una finestra grafica. Esso è disponibile in tre versioni: gtk+, Qt, o curses (il tutto dipende dalla tua configurazione in /etc/portage/make.conf).

Se hai installato pinentry con più opzioni puoi scegliere la predefinita attraverso eselect-pinentry:

Codice 4.1: Switching popup windows

# eselect pinentry list
Available pinentry implementations:
  [1]   pinentry-gtk-2 *
  [2]   pinentry-curses
  [3]   pinentry-qt4

# eselect pinentry set 1

Ora bisogna creare il file ~/.gnupg/gpg-agent.conf e inserire le seguenti righe che definiscono il tempo di timeout predefinito della password (ad esempio 30 minuti) e l'applicazione che deve essere chiamata quando viene richiesta la password per la prima volta (ad esempio la versione gtk+ di pinentry).

Codice 4.2: Modificare ~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-gtk-2
no-grab
default-cache-ttl 1800

Configurare poi GnuPG affinchè utilizzi l'agente quando necessario. Modificare il file ~/.gnupg/gpg.conf aggiungendo la riga seguente:

Codice 4.3: Configurare GnuPG per l'uso di GPG Agent

use-agent

A questo punto il sistema è (quasi) pronto per usare l'agente GPG.

Avvio automatico dell'agente GPG

Se si utilizza KDE come ambiente grafico, dovrà essere modificato il file /etc/kde/startup/agent-startup.sh (per l'intero sistema) o ~/.kde4/env/gpg-agent.sh (per il solo utente locale) e aggiunto il seguente comando per far in modo che KDE avvii automaticamente l'agente GPG:

Codice 4.4: Avvio automatico dell'agente in KDE

eval "$(gpg-agent --daemon)"

Aggiungere inoltre il seguente comando in /etc/kde/shutdown/agent-shutdown.conf (per l'intero sistema) o in ~/.kde4/shutdown/gpg-agent.sh (per il solo utente locale):

Codice 4.5: Fare in modo che KDE chiuda l'agente GPG

if [ -n "${GPG_AGENT_INFO}" ]; then
kill $(echo ${GPG_AGENT_INFO} | cut -d':' -f 2) >/dev/null 2>&1
fi

Se si utilizza un altro ambiente grafico, inserire la stessa linea sopracitata in ~/.xinitrc (se si utilizza startx) o ~/.xsession (se si utilizza XDM/GDM/KDM/...).

5.  Lavorare con documenti

Cifrare e firmare

Si supponga adesso di avere un file che si desidera inviare a Luis. Lo si può cifrare, firmare o cifrare e firmare. Cifrare significa che solo Luis sarà in grado di aprirlo. La firma conferma a Luis che siete stati proprio voi a creare il file.

I seguenti comandi fanno esattamente questo: cifrano, firmano e cifrano/firmano.

Codice 5.1: Cifrare e firmare i file

$ gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt doc_to_encrypt
$ gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt doc_to_sign
$ gpg --output doc.gpg --encrypt --sign --recipient lmpinto@dei.uc.pt doc_to_encrypt_and_sign

Questa procedura produrrà file binari. Se si vuole creare file ASCII, basterà aggiungere --clearsign all'inizio del comando.

Decifrare e verificare le firme

Si supponga di aver ricevuto un file cifrato con la propria chiave pubblica. Il comando per decifrarlo è gpg --output document --decrypt encrypted_doc.gpg. Questo decifrerà il documento e verificherà la firma (se ne esiste una).

Cifrare e decifrare senza chiavi

È anche possibile cifrare file usando password piuttosto che chiavi. Ovviamente, la password stessa funziona come chiave - sarà usata come cifrario simmetrico. Per cifrare il file basta usare l'argomento --symmetric per gpg, decifrando poi con lo stesso comando discusso in precedenza.

Codice 5.2: Cifrare i file usando una password

$ gpg --output document.gpg --symmetric document
(GnuPG richiederà una password e la verifica di tale password)

Caratteristiche avanzate

Ci sono alcune utili caratteristiche avanzate in GnuPG. Per trovarle, aprire il file ~/.gnupg/gpg.conf.

Codice 5.3: ~/.gnupg/gpg.conf

#keyserver x-hkp://subkeys.pgp.net
#keyserver-options auto-key-retrieve include-disabled include-revoked

Cercare le due linee sopra indicate e decommentarle. Con queste opzioni, ogni volta che GnuPG dovrà verificare una firma e non troverà la corrispondente chiave pubblica nel portachiavi locale, contatterà il KeyServer all'indirizzo subkeys.pgp.net cercando di recuperarne una da quella locazione.

Un'altro utile comando è gpg --refresh-keys. Il programma eseguito con tale opzione contatterà il KeyServer definito nel file di impostazioni ed aggiornerà le chiavi pubbliche presenti nel portachiavi locale, cercando chiavi revocate, nuovi ID e nuove firme sulle chiavi. E' opportuno eseguire questo comando una o due volte al mese, in modo da sapere se qualcuno revoca la propria chiave (tramite notifica).

6.  Interfaccie a GnuPG

La firma nelle email

Il 95% delle volte si userà GnuPG con l'email per firmare/cifrare i messaggi in uscita e per leggere messaggi firmati/cifrati. Quindi è sufficiente introdurre solo questi casi.

Esistono due modi per firmare/cifrare una email con GnuPG, il vecchio modo ed il nuovo modo. Con il primo metodo i messaggi appaiono in semplice testo, senza la possibilità di formattazione e con file allegati non firmati / non cifrati. Ecco un esempio di un messaggio firmato nel vecchio modo:

Codice 6.1: Una firma di un semplice testo in chiaro

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Test message

-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 6.5.8 for non-commercial use

iQA/AwUBP8461jMX0745gR7AEQIEOwCg011GbufXO3ED3FkLWXmfzg7xm1cAoJD0
0EU3Kd2EKNCqataEqM5qjpPs
=LchZ
-----END PGP SIGNATURE-----

Al giorno d'oggi, inviare messaggi in questo modo non è assolutamente una buona idea, visto che esistono ottime interfacce grafiche e client di posta che capiscono e gestiscono i tag html.

Per risolvere il problema è stata creata un'estensione a MIME (Multipurpose Internet Mail Extensions). Un nuovo campo dell'email indica al client che l'intero contenuto del messaggio è firmato e/o cifrato. Il problema di questa soluzione è che non è supportata da tutti i client di posta. Alcuni poi fanno persino pasticci con il contenuto, come Microsoft Outlook, famoso per non funzionare bene con questo metodo.

Kgpg

Kpgp è una buona interfaccia grafica per GNUPG. Nella schermata principale è possibile incollare il testo che si vuole firmare o cifrare, oppure incollare il testo ASCII cifrato che si vuole decifrare.


Figura 6.1

Fig. 1: kgpg main window

In questa immagine si può vedere la schermata principale di Kgpg con del testo cifrato incollato. Da qui è possibile decifrarlo (sarà richiesta la propria password), cifrare altri file, incollare dell'altro testo da firmare...


Figura 6.2

Fig. 2: kgpg key manage window

Qui si può vedere la schermata di gestione delle chiavi. Si vede la chiave per John Doe, le due chiavi fidate per Gustavo e Luis e la chiave non fidata per Daniel Robbins (non è ancora stato contattato per verificare il suo fingerprint).

Seahorse

Seahorse aspira a diventare un'interfaccia grafica di GnuPG per Gnome. Questo programma si sta evolvendo in fretta, ma non dispone ancora di importanti caratteristiche presenti in Kpgp o nella versione a riga di comando.

KMail

Se è stata impostata la USE flag crypt, KMail sarà compilato con il supporto per gpg, e sarà pronto per cifrare e decifrare le email con PGP in modo automatico, oltre a offrire la possibilità di cifrare email OpenPGP/MIME. Se si vogliono decifrare email OpenPGP/MIME (cosa molto probabile) si deve avere un agente GPG configurato. (Vedere Utilizzo di un agente GPG)

Si può verificare che KMail sia correttamente configurato entrando in Impostazioni, Configura KMail, Sicurezza, Backend Crittografici. Si dovrebbe vedere un backend basato su GpgME e si dovrebbe poter attivare la casella su OpenGPG. Se il suddetto backend è presente ma è segnato in grigio, fare click su Riesegui scansione. Se il backend GpgME resta grigio vuole dire che KMail non sta funzionando a dovere.

Se ancora non si riesce a far funzionare correttamente KMail, si prega di vedere la pagina KMail PGP HowTo per ulteriori informazioni.

Claws-Mail

Questo client email è molto veloce con caselle di posta grandi, dispone di tutte le caratteristiche desiderabili in un client di posta e funziona perfettamente con gpg. L'unico problema è dato dal fatto che non funziona con le vecchie firme PGP, quindi se si riceve una mail di quel tipo si dovrà verificare a mano la firma.

Per usare la propria chiave gpg con Claws-Mail bisogna entrare nella configurazione dell'account ed cliccare sulla casella privacy. Da lì è possibile scegliere quale chiave utilizzare. Probabilmente la maggior parte degli utenti dovrà scegliere la chiave predefinita.

7.  Crittografia a chiave pubblica

Le basi della crittografia a chiave pubblica

Il concetto di crittografia a chiave pubblica fu originariamente dovuto a Whitfield Diffie e Martin Hellman (1976). Quando l'autore sentì per la prima volta, nel '93, le parole "chiave pubblica" e "crittografia" nella stessa frase, pensò che una cosa del genere fosse impossibile. A quei tempi non esisteva Internet (in realtà esisteva, ma non era alla portata di tutti), quindi andò in biblioteca e chiese alcuni libri sulla crittografia. All'epoca aveva 16 anni e l'addetto allo sportello lo guardò con stupore e gli portò alcuni libri per bambini sui cifrari per sostituzione (quelli in cui avvengono semplici sostituzioni di lettere, come il famoso Cifrario di Cesare o il ROT-13 (Tragbb Ebpxf, naq lbh xabj vg vf tbbq orpnhfr lbh ner ernqvat guvf qbp.), (Digitare emerge rotix se non si è in grado di decifrare questa frase)). Essendo frustrato per l'accaduto, cominciò a ricercare maggiori informazioni. È una buona cosa avere matematici in famiglia, perchè appena ebbe l'occasione di parlare con uno di loro, fu proiettato in un nuovo mondo.

Ed ora un po' di matematica:

Codice 7.1: Concetti matematici

Definizioni:

1- Un numero primo è un numero intero positivo, maggiore di 1, che sia
divisibile solo per se stesso e per 1 (il resto della divisione è 0).
I primi 8 numeri primi sono 2,3,5,7,11,13,17,19

Teorema (qui senza dimostrazione)
1- Ogni numero intero positivo non primo è scomponibile in un prodotto di
numeri primi, e tale prodotto è unico.
4=2*2
6=2*3
8=2*4=2*2*2
10=2*5
12=2*6=2*2*3

"Fatti":
1- È matematicamente facile moltiplicare due grandi interi
2- È difficile trovare i fattori primi di un dato intero positivo (processo
anche detto di fattorizzazione).

Se si dà il numero 35 e si afferma che questo numero è il prodotto di due numeri primi, è facile scoprire che tali numeri sono 5 e 7. Ma se si chiede la stessa cosa per 1588522601 ci vorrà un bel po' di tempo (o di cicli di CPU) per scoprire che si tratta del prodotto di 49811*31891. E se il numero è davvero grande, questo compito diventa "impossibile". A questo punto se si comunica al mondo il proprio grande numero, che si sa essere il prodotto di due primi, si conosce qualcosa di quel numero che non è noto a nessun'altro.

Questa è la base delle moderne implementazioni di Crittografia a Chiave Pubblica (PKC). Come (irrealistico) esempio, dare a chiunque il proprio numero e qualcuno lo userà per cifrare un messaggio per voi. Tutti possono vedere il messaggio cifrato perchè voi siete gli unici a conoscere la scorciatoia per leggerlo; gli altri dovrebbero prima fattorizzare quel grande numero per essere in grado di leggere il messaggio, ed è un dato di fatto l'impossibilità di farlo in un lasso di tempo ragionevole (con i metodi odierni e i più veloci computer al mondo ci vorrebbero migliaia di anni). In questa ipotesi, i due grandi numeri primi sono chiamati la CHIAVE PRIVATA, mentre il grande numero non primo è la CHIAVE PUBBLICA.

Questo non corrisponde al 100% con quanto avviene in realtà, ma può rendere bene l'idea ad un nuovo utente. Per maggiori informazioni vedere Wikipedia per quanto riguarda il protocollo Diffie-Hellman. Per approfondire ulteriormente andare in biblioteca e prendere una copia di "Handbook of Applied Cryptography" di Alfred J. Menezes, Paul C. van Oorschot e Scott A. Vanstone. Questo libro è disponibile anche gratuitamente online all'indirizzo qui sopra.

Una conseguenza di quanto detto fino a questo punto è che se si cifra un messaggio per un altro utente e si perde il messaggio originale non cifrato, non si sarà in grado di risalire all'originale dalla versione cifrata.

Firme

È stato già visto come chiunque in possesso della nostra chiave pubblica possa mandare un messaggio cifrato. Ma come possiamo verificare che l'autore del messaggio è veramente chi dice di essere? O, in altre parole: se si riceve una email da Tizio come si può sapere davvero che è stata inviata da Tizio e non da qualcun altro che sostiene di essere Tizio?

Non dimenticarsi quando è stato detto che la PKC non è così semplice. L'idea è che quando si cifra un messaggio per una persona, lo si può anche firmare con la propria chiave privata in modo che, quando lo riceve, la persona possa a sua volta utilizzare per prima cosa la chiave pubblica del mittente per verificare la firma e, quindi, la propria chiave privata per decifrare il messaggio. Come si può vedere non sarebbe possibile fare questo nell'ipotesi di prima.

Altra cosa molto importate: per firmare i messaggi non è necessario cifrarli. Si può creare un messaggio leggibile da chiunque, ma con il proprio "marchio". E se un solo carattere del messaggio viene modificato, tale manomissione può essere (e sarà) rilevata.

Key Server e chiavi firmate

Supponendo che chi scrive non abbia avuto contatti in precedenze con il lettore fino a quando non ha ricevuto un messaggio da quest'ultimo: come può l'autore ottenerne la chiave pubblica, e come può sapere se è veramente la sua?

Per risolvere questo problema sono stati creati i key server pubblici. Quando si crea la propria coppia di chiavi (pubblica e privata), si può inviare la propria chiave pubblica al key server. A questo punto tutti possono scaricare la vostra chiave da lì. Ma come si può sapere che quella chiave è la chiave dell'autore del messaggio? Per questo bisogna introdurre un altro concetto: la firma della chiave.

Firmare la chiave significa che se si ha la chiave pubblica di un'altra persona e si sa con certezza che è davvero la chiave di quella persona (perchè è un amico, qualcuno che conosco di persona, ecc.) si può firmare quella chiave pubblica e mandarla ai Key Kerver, in modo da dire al mondo: "Questa chiave appartiene davvero alla persona che sostiene gli appartenga". In questo modo le persone che hanno la vostra chiave pubblica e si fidano di voi possono usare questa fiducia per ritenere fidate le chiavi di altri.

Questo meccanismo può talvolta confondere, quindi vediamo un esempio reale.

Immaginare una situazione con 3 persone: John, Mary e Lisa. John è un buon amico di Mary, ma non conosce Lisa; Lisa è una buona amica di Mary, ma non conosce John. Un giorno Lisa manda a John una email firmata. John recupererà la chiave pubblica di Lisa dal KeyServer, verificherà il messaggio e, se è tutto a posto, saprà che chiunque abbia scritto quel messaggio ha anche creato quella chiave. Ma come può sapere che è effettivamente la persona che dice di essere?

A questo punto John vede la firma di Mary sulla chiave, che può verificare perchè dispone già della chiave di Mary e la ritiene fidata. Grazie a questo anello di fiducia egli conclude che l'email ricevuta è stata realmente scritta da Lisa.

Ora si è veramente pronti per leggere questa guida, tornare indietro al capitolo 1 ed imparare a usare gpg.

8.  Epilogo e ringraziamenti

Alcuni problemi

L'autore ha avuto alcuni problemi con delle foto inserite nelle chiavi. Controllare la versione che si sta utilizzando. Se si ha GnuPG 1.2.1-r1 e superiori non ci dovrebbero essere problemi, versioni più datate potrebbero invece averne. In ogni caso, la maggior parte dei KeyServer non gradisce chiavi con foto, quindi meglio non utilizzarle.

L'ultima versione di GnuPG sembra non funzionare con il comando gpg --send-keys, che viene utilizzato per mandare tutte le chiavi presenti nel portachiavi al server pubblico.

Cosa manca

Gpg è uno strumento molto complesso e permette di fare molto di più rispetto a quanto è stato trattato qui. Questo documento è stato concepito per i nuovi utenti GnuPG. Per maggiori informazioni, vedere il sito di GnuPG.

Non sono stati trattati altri strumenti come pgp4pine, gpgpine, Evolution e gli strumenti per Windows; probabilmente si amplierà questo documento in futuro.

Ringraziamenti

Il GnuPG Handbook di John Michael Ashley è un ottimo libro per i principianti.

Swift (Sven Vermeulen) per aver spinto a ri-scrivere questo documento.

I fantastici ragazzi del canale #gentoo-doc.

Tiago Serra per avermi riportato sulla via della privacy.



Stampa

Aggiornato il 13 novembre 2012

La versione originale di questo documento non è più mantenuta

Oggetto: Questa piccola guida fornisce le basi per l'utilizzo di GnuPG, uno strumento per la comunicazione sicura.

Gustavo Felisberto
Autore

John P. Davis
Redazione

Sven Vermeulen
Redazione

Joshua Saddler
Redazione

Gilberto De Faveri
Traduzione

Gianmaria Visconti
Traduzione

Franco Tampieri
Traduzione

Cristiano Chiucchiolo
Traduzione

Michele Caini
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.