Guida a GnuPG
Perché tutto questo sia possibile è necessario che si seguano alcune semplici precauzioni che non vanno mai disattese (come, ad esempio, conservare la parte privata della nostra chiave in un luogo accessibile solo a noi e, al tempo stesso, utilizzare una passphrase forte). Se non si seguono alcune precauzioni che saranno evidenziate in questa voce, la forza e l'efficacia del sistema verranno a mancare: gli strumenti che ci vengono dati in mano sono solo strumenti che se non usati adeguatamente possono solo arrecare danno. Potremmo avere la sensazione di tenere i nostri documenti personali al sicuro solo perché «usiamo GnuPG», ma se non curiamo la segretezza di chiave privata e passphrase non avremo raggiunto il nostro scopo: la tutela della privacy personale. Ecco perché è necessaria la cultura della sicurezza[1]. La cultura della sicurezza è qualcosa che va al di là degli stessi strumenti che usiamo o, per meglio dire, deve stare in un livello più profondo: essa viene prima degli strumenti, mentre questi ci aiutano a metterla in pratica.
Creazione della chiave privata
Si dà per scontato che sul proprio PC sia già installato GnuPG. Se si usa Linux certamente lo è; se si usa Microsoft Windows o Apple Macintosh, lo si può scaricare (comprensivo dello strumento di installazione) dal sito di GnuPG.
Si dà anche per scontato che si sia effettuata la lettura delle voci Crittografia simmetrica e Crittografia asimmetrica: se non si ha chiara questa distinzione è bene dargli una lettura.
Infine, in questa voce si prende in considerazione l'uso di GnuPG da riga di comando. Per l'utilizzo di front-end grafici si può leggere la voce Seahorse[2].
Per creare la propria chiave è necessario aprire il terminale e digitare:
gpg --gen-keye premere [Invio]. GnuPG risponderà:
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Per favore scegli che tipo di chiave vuoi: (1) DSA and Elgamal (default) (2) DSA (firma solo) (5) RSA (firma solo) Cosa scegli?
Noi scegliamo di creare una chiave DSA and ElGamal, digitiamo 1 e premiamo [Invio]. GnuPG risponderà:
La coppia di chiavi DSA avrà 1024 bit. ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048)
Dobbiamo ora scegliere la dimensione in bit per la nostra chiave. Scegliamo il valore predefinito come si può leggere (2048) premendo direttamente [Invio].
GnuPG risponderà:
La dimensione richiesta della chiave è 2048 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)
Scegliamo ora la durata della validità della chiave. Possiamo infatti creare chiavi che servano soltanto per uno scopo o per un periodo (un meeting particolare, un evento, una occasione in cui dobbiamo avere una chiave temporanea senza dover usare quella nostra che usiamo per la corrispondenza personale). Scegliamo, per il momento, una chiave che non scadrà mai. Dunque premiamo [Invio] e GnuPG risponderà:
Key does not expire at all Is this correct? (y/N)
Digitiamo y.
GnuPG ci chiederà adesso chi siamo. Inseriamo i nostri dati nel campo Nome e Cognome:
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Nome e Cognome: Tizio Caio
Inseriamo la nostra email:
Indirizzo di Email: tizio@caio.com
Nel Commento possiamo inserire qualcosa che ci possa tornare utile. Ad esempio, se vogliamo usare questa chiave per l'uso in un newsgroup digitare:
Commento: Chiave newsgroup Crittografia
GnuPG ci chiederà ora conferma per i dati inseriti:
Hai selezionato questo User Id:
"Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com>"
Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit?
Se non abbiamo scritto errori, possiamo confermare digitando O e premendo [Invio].
GnuPG chiederà ora la passphrase per proteggere l'uso di questa chiave privata. Una passphrase altro non è che una password lunga che può anche contenere spazi (ecco perché si chiama così). Sceglietene una adeguata e non limitatevi a nomi, date di nascita, numeri di carte di credito o di codice fiscale:
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. +++++++++++++++++++++++++.++++++++++.+++++++++++++++.+++++++++++++++++++
Cominciate a digitare qualcosa (non nella finestra del terminale), a muovere il mouse o anche a fare il vostro lavoro: GnuPG sta generando la vostra chiave e ha bisogno di dati casuali per farlo. Alla fine vi dirà qualcosa del tipo:
gpg: key 0CBF1F80 marked as ultimately trusted
chiavi pubbliche e segrete create e firmate.
gpg: controllo il trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 1024D/0CBF1F80 2008-12-05
Key fingerprint = 1E55 33C8 F483 4C7E E5AD E05A DD6A 76E9 0CBF 1F80
uid Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com>
sub 2048g/5C05C021 2008-12-05
GnuPG ha appena creato le vostre chiavi pubbliche e private.
Uno sguardo alle chiavi
Ora che le chiavi sono state generate, diamo loro uno sguardo da vicino. Rimaniamo col terminale aperto e, se lo abbiamo ancora pieno delle diciture dell'operazione di poco fa, premiamo la combinazione di tasti [CTRL+L] per pulire lo schermo. Digitiamo:
gpg --list-secret-keysQuesto comando[3] ci elenca a video tutte le nostre chiavi private. Ecco un esempio:
gpg --list-secret-keys /home/aldo/.gnupg/secring.gpg ----------------------------- sec 1024D/0CBF1F80 2008-12-05 uid Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com> ssb 2048g/5C05C021 2008-12-05
Ecco come leggere i contenuti:
| Dicitura | Descrizione |
|---|---|
| sec | Indica che la chiave è una chiave segreta (secret) |
| 1024D | Indica una chiave da 1024 bit e di tipo DSA (Digital Signature Algorithm) |
| 0CBF1F80 | È la ID univoca della chiave. Può essere preceduto da 0x |
| 2008-12-05 | La data di creazione della chiave |
| uid | UserID, cioè il nome associato alla chiave comprensivo di commento e email |
| ssb | Sottochiave secondaria (secondary subkey), cioè una sottochiave della precedente |
| 2048g | Indica una chiave da 2048 bit e di tipo ElGamal |
| 5C05C021 | È la ID univoca della chiave. Può essere preceduto da 0x |
| 2008-12-05 | La data di creazione della chiave |
Creazione del certificato di revoca
Una volta che è stata creata la chiave, è buona norma creare un certificato di revoca. Un certificato di revoca altro non è che un file di testo che potete anche stampare e conservare in cassaforte. Lasciarlo cadere in mani sbagliate può comportare disagi di non poco conto.
Questo certificato serve a revocare la chiave qualora la stessa sia stata compromessa o abbiate dimenticato la passphrase. In questo modo, una volta revocata, potrete reinviarla ai keyserver per renderla inutilizzabile.
Nel terminale digitiamo
gpg --output revoca.txt --gen-revoke tizio@caio.com
che ci restituirà
sec 1024D/0CBF1F80 2008-12-05 Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com> Create a revocation certificate for this key? (y/N)
Digitiamo y e premiamo [Invio].
GnuPG ci chiederà di inserire il motivo della revoca. Siccome stiamo generando un certificato per un eventuale uso futuro, possiamo non scrivere nulla e quindi digitare 0:
Per favore scegli il motivo della revoca: 0 = Nessuna ragione specificata 1 = Questa chiave è stata compromessa 2 = Questa chiave è stata sostituita 3 = La chiave non è più usata Q = Cancella (Probabilmente volevi scegliere 1) Cosa hai deciso? 0
Premiamo [Invio]. Ci verrà chiesto ora di inserire una descrizione opzionale; anche in questo caso scelgo di non inserire nulla, ma si può scrivere quello che si vuole.
Inserisci una descrizione opzionale; terminala con una riga vuota: >
Premiamo direttamente [Invio]. Una ulteriore conferma prima di proseguire:
Motivo della revoca: Nessuna ragione specificata (Non è stata data una descrizione) Is this okay? (y/N)
Inseriamo y e premiamo [Invio]. Per generare un certificato di revoca, GnuPG fa uso della chiave privata per cui ci viene chiesta la passphrase:
È necessaria una passphrase per sbloccare la chiave segreta dell'utente: "Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com>" 1024-bit chiave DSA, ID 0CBF1F80, creata 2008-12-05
Immettiamola e premiamo [Invio]. GnuPG scriverà nella directory dove si trova il terminale (probabilmente nella vostra /home) il file di testo contenente il certificato di revoca, dicendovi:
Forzato l'output con armatura ASCII. Creato un certificato di revoca. Per favore spostalo su un media che puoi nascondere; se l'uomo nel mezzo riuscirà ad accedere a questo certificato potrà usarlo per rendere inutilizzabile la tua chiave. È una buona idea stamparlo ed archiviarlo, nel caso il media diventasse illeggibile. Ma fai attenzione: il sistema di stampa della tua macchina potrebbe immagazzinare i dati e renderli disponibili ad altri!
Ecco come si presenta il certificato generato in questa operazione sulla chiave di test:
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: A revocation certificate should follow iEkEIBECAAkFAkk5m08CHQAACgkQ3Wp26Qy/H4C9DgCeKchyUD94ZFuETORddtvb 2HfKM/gAoOTEecD9NfLB/bNDVYYTy6c0tysU =o18P -----END PGP PUBLIC KEY BLOCK-----
Ora potete scegliere se salvare il file su un supporto (floppy, CD, penna USB) e conservarlo con la massima cura, oppure anche stamparlo e chiuderlo in cassaforte.
Scambio delle chiavi pubbliche
Se per la chiave privata dobbiamo avere la massima cura nel conservarla gelosamente, al contrario possiamo divulgare dovunque vogliamo e con qualunque mezzo la chiave pubblica: essa è necessaria per i nostri interlocutori per poter cifrare i messaggi e i file che ci inviano e per poter verificare la nostra firma su di essi. È la natura stessa della chiave pubblica che richiede di essere divulgata il più possibile.
Una volta creata la nostra coppia di chiavi, diamo uno sguardo al nostro mazzo di chiavi. Prima quello privato:
gpg --list-secret-keys /home/aldo/.gnupg/secring.gpg ----------------------------- sec 1024D/0CBF1F80 2008-12-05 uid Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com> ssb 2048g/5C05C021 2008-12-05
Lo stesso comando potevamo darlo con:
gpg -KE poi quello pubblico:
gpg --list-keys /home/aldo/.gnupg/pubring.gpg ----------------------------- pub 1024D/0CBF1F80 2008-12-05 uid Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com> sub 2048g/5C05C021 2008-12-05
che potevamo anche dare con:
gpg -kAbbiamo dunque una chiave privata (nel primo caso) e una chiave pubblica (nel secondo). Possiamo cominciare ad importarci la chiave privata di una ipotetica persona che sta seduta accanto a noi di cui siamo sicuri dell'identità[4]. Ci ha consegnato un file ASCII (di nome prz.asc) contenente la sua chiave pubblica e possiamo importarla nel nostro mazzo di chiavi pubbliche:
gpg --import prz.ascGnuPG ci dirà cosa è successo:
gpg: chiave BC8043BB: chiave pubblica «Philip R. Zimmerman <prz@pgp.com>» importata gpg: Numero totale esaminato: 1 gpg: importate: 1 gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
Abbiamo importato la chiave del Sig. Philip R. Zimmerman nel nostro portachiavi ma per iniziare una comunicazione privata con lui anche egli deve avere la nostra chave pubblica[5].
Vediamo quale sia la nostra chiave:
gpg --list-keys /home/aldo/.gnupg/pubring.gpg ----------------------------- pub 1024D/0CBF1F80 2008-12-05 uid Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com> sub 2048g/5C05C021 2008-12-05 pub 1024D/BC8043BB 1997-06-30 uid Philip R. Zimmerman <prz@pgp.com> sub 2048g/220932D7 1997-06-30
e quindi esportiamo la nostra chiave pubblica con:
gpg --armor --output tizio.asc --export tizio@caio
Con questo comando diciamo a GnuPG di esportare la chiave tizio@caio (potevamo anche inserire l'ID della chiave al posto dell'email) sul file tizio.asc e il file generato deve essere di tipo ASCII (--armor e non binario). Ecco un estratto del file generato (al posto dei puntini c'era dell'altro codice):
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.9 (GNU/Linux) mQGiBEk5j4sRBACA4E81GFo9rJV13CMwo0O1igIOmGyklD+DhRZCK3gbM0/E5QcL dRUcXlDhLoW1wu/tDeTZ3WQshoJyX7ZxDy7BDmCkKyAOOgwrr6xUu0l/0QQm5EG7 DmZQU/lOCXF7aD2aQzaugjXWJAz0255RpJ2mXg9RjWxcAXj0owTAxtPhbwCg+5Fx ........ ........ rT6YSSsnJLVIPVif0Ovv6iomjpBTsq0S2VIbqdU0C4oaeIyubiH6Y5+2XOIbmvtl jqpa7YLq8z1t354a24FD7KpPBFpmRl21rNAo2zhttruq+/xSOQLp/bHeKFzjp+L3 drSCYohJBBgRAgAJBQJJOY+LAhsMAAoJEN1qdukMvx+AgMYAoM0khXWDIJNV9pRR HP5wK2LKSKHbAJ92IMGFj/QpjeTXtUbaiZgTAaCQOg== =g4Bf -----END PGP PUBLIC KEY BLOCK-----
Il file tizio.asc possiamo consegnarlo a Zimmerman che se lo importerà nel suo portachiavi con la stessa procedura di prima.
Adesso che le chiavi sono state scambiate di persona, è bene che si proceda con la verifica e la firma reciproca, come spiegato nel paragrafo seguente.
La rete della fiducia e la gestione delle chiavi altrui
GnuPG, PGP e tutti i software che si basano sullo standard OpenPGP fanno uso del concetto di Rete di fiducia (Web of Trust). In poche parole, mediante la certificazione personale delle chiavi pubbliche appartenenti ad altre persone si contribuisce a far crescere una rete fittissima di certificazioni, senza il bisogno di una autorità garante, detta Certification Authority, che faccia lei questo lavoro per tutti. In sostanza, se io ricevo una chiave pubblica e ho constatato che quella chiave appartiene effettivamente a quella persona, posso certificare questa verità, apponendo la mia firma su di essa. La chiave pubblica che io ho controfirmato posso (ed è bene farlo) reinviarla ai keyserver per aggiornarla con la mia certificazione, contribuendo così alla rete di fiducia. Coloro che preleveranno la chiave certificata da me, vedranno la mia firma su di essa e, se hanno fiducia nelle firme che io appongo, potranno firmare anche loro la chiave, facendo crescere di conseguenza la certificazione di quella chiave pubblica.
Vediamo, dunque, come firmare una chiave pubblica di cui sono certo[6]. Nel terminale digitiamo:
gpg --edit-key prz@pgp.com
Stiamo dicendo a GnuPG di voler editare la chiave di Phil. Entreremo così in modifica della chiave e nel terminale vedremo la dicitura Comando>:
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
pub 1024D/BC8043BB created: 1997-06-30 expires: mai utilizzo: SCA
fiducia: sconosciuto validità: sconosciuto
sub 2048g/220932D7 created: 1997-06-30 expires: mai utilizzo: E
[ unknown] (1). Philip R. Zimmerman <prz@pgp.com>
Comando>
Innanzitutto controlliamo la chiave:
Comando> check
uid Philip R. Zimmerman <prz@pgp.com> sig! BC8043BB 1997-06-30 [autofirma] 21 firme non controllate per mancanza delle chiavi
Notiamo il nome del proprietario con la sua email, la sua autofirma evidenziata da sig! e ancora che sono state apposte 21 firme su questa chiave, ma non sono controllate perché non sono state importate nel nostro portachiavi.
Per verificare la chiave è sufficiente controllarne l'impronta digitale (il cosiddetto fingerprint) con l'impronta fornitaci dal proprietario (ad esempio per telefono o di presenza), dando il comando:
Comando> fpr
pub 1024D/BC8043BB 1997-06-30 Philip R. Zimmerman <prz@pgp.com> Impronta digitale della chiave primaria: 41A2 6FFA 01CE 0549 4306 CBE6 5ECC 7E90 BC80 43BB
Se l'impronta a video corrisponde con quella fornitaci, allora possiamo procedere con la firma della chiave.
Comando> sign
pub 1024D/BC8043BB created: 1997-06-30 expires: mai utilizzo: SCA
fiducia: sconosciuto validità: sconosciuto
Impronta digitale della chiave primaria: 41A2 6FFA 01CE 0549 4306 CBE6 5ECC 7E90 BC80 43BB
Philip R. Zimmerman <prz@pgp.com>
Sicuri di voler firmare questa chiave con la propria chiave "Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com>" (0CBF1F80)
Really sign? (y/N)
Rispondiamo y e GnuPG ci chiederà la passphrase:
È necessaria una passphrase per sbloccare la chiave segreta dell'utente: "Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com>" 1024-bit chiave DSA, ID 0CBF1F80, creata 2008-12-05
e inseriamo la passphrase, visto che dobbiamo usare la nostra chiave privata per apporre una firma.
Adesso la chiave è certificata da noi come appartenente a Phil. Verifichiamo che la nostra firma sia stata effettivamente apposta con
Comando> check
uid Philip R. Zimmerman <prz@pgp.com> sig! BC8043BB 1997-06-30 [autofirma] sig! 0CBF1F80 2008-12-07 Tizio Caio (Chiave newsgroup Crittografia) <tizio@caio.com> 21 firme non controllate per mancanza delle chiavi
Come si può vedere, rispetto al check di prima, abbiamo anche la nostra chiave. Adesso salviamo con save ed usciremo automaticamente da GnuPG, tornando al prompt.
Sarebbe opportuno inviare adesso la chiave di Phil ad un server di chiavi perché questa venga aggiornata con la nostra firma. È sufficiente digitare:
gpg --send-keys 0xBC8043BBcon l'ID dunque della chiave di Phil per effettuare l'operazione.
Come crittografare
aa
Come firmare
aa
I keyserver (o server delle chiavi pubbliche)
aa
Il file di configurazione
I Key Signing Party
aa
Note
- ^ Per fare un esempio, non è sufficiente avere un buon antivirus sul proprio PC con Microsoft Windows se non lo si aggiorna costantemente, se si aprono continuamente allegati di posta elettronica inviati da sconosciuti o se si visitano di frequente siti poco raccomandabili.
- ^ http://projects.gnome.org/seahorse.
- ^ Non dobbiamo scriverlo per intero: è sufficiente digitare gpg[spazio]--lis[tab]se[tab] e GnuPG ad ogni [tab] completerà il comando per noi.
- ^ Possiamo importare nel nostro portachiavi anche chiavi di cui non siamo sicuri a chi effettivamente appartengano: l'importante rimane la regola di firmare solo le chiavi di cui siamo certi chi sia il proprietario.
- ^ Altrimenti solo noi potremo, ad esempio, cifrare un documento per lui, ma Phil non potrà cifrare alcunché per noi.
- ^ La raccomandazione è di non firmare mai una chiave se non si è assolutamente certi della loro appartenenza. Solo così si potrà contribuire a una rete di fiducia solida e autorevole. È ammesso che si possa firmare una chiave controfirmata da una terza persona di cui si ci fida ciecamente, perché si sa che costui appone la sua firma solo dopo aver verificato a chi appartenga una determinata chiave.