Guida Utente a GnuPG in Gentoo
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
mozilla-thunderbird, Evolution (un clone di Microsoft Outlook per GNOME)
oppure il client di KDE: KMail (parte del pacchetto kdepim).
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) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
(5) 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, DSA e ElGamal. 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 1024 è 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 |
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024) 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
You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
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 Luis 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/gpg-agent può
essere considerato come punto di riferimento, e sarà pertanto illustrato in
questo documento.
Installazione e configurazione di gpg-agent e pinentry
E' necessario installare gnupg-1.9.*, il quale include gpg-agent,
e pinentry. Quest'ultimo è l'applicazione di supporto che l'agente gpg
usa per richiedere la password in una finestra grafica. Propone tre possibilità:
può far comparire una finestra facendo uso delle gtk+, Qt, o librerie curses
(dipende dalle USE flag impostate durante l'installazione).
Codice 4.1: Installare gpg-agent e pinentry |
# emerge \>=gnupg-1.9.20 pinentry
|
Bisogna però 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 Qt di
pinentry).
Codice 4.2: Modificare ~/.gnupg/gpg-agent.conf |
pinentry-program /usr/bin/pinentry-qt
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
/usr/kde/3.x/env/agent-startup.sh (per l'intero sistema) o
~/.kde/env/gpgagent.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)"
|
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
|
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 |
 |
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 |
 |
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.
Enigmail
Enigmail è un plug-in per i client di posta basati su Mozilla (come ad esempio
Thunderbird e Seamonkey) piacevolmente facile da configurare. In Seamonkey,
basta andare su Preferences -> Privacy & Security -> Enigmail. Qua, si
dovrà inserire la proprio chiave per la posta ed è tutto. Per utilizzarlo con
Thunderbird, invece, dovrà essere dato prima il comando emerge enigmail.
Fatto questo, lo si può facilmente configurare tramite Edit -> Account
Settings -> OpenPGP Security.
I messaggi che arrivano con una firma pgp o gpg non fidata vengono
contrassegnati con una penna rotta. Quelli che hanno una firma valida
appariranno con una penna tutta intera. Enigmail può anche recuperare le chiavi
dai KeyServer, ma in caso di problemi, stampa alcuni strani messaggi di errore
(anche per questo è sempre buona norma imparare ad usare i vari strumenti da
riga di comando, per ogni evenienza).
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.
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|