Guida a GnuPG

Da AldoWiki.
Broom icon.svg
Questa voce è solo un abbozzo oppure il testo è ancora da completare o revisionare.
300
GnuPG è uno strumento che ci permette di fare uso in modo semplice della crittografia nella nostra vita privata e di relazione. Consente, infatti, di poter utilizzare la crittografia per tenere riservati i propri file per una archiviazione sicura, cioè al riparo da occhi indiscreti, e al tempo stesso avere una comunicazione all'esterno in modo sicuro, senza che sia possibile l'ingresso di terze persone. E consente infine di poter utilizzare la firma digitale, con la certezza di dialogare con la persona che vogliamo.

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.

Indice

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-key

e 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-keys

Questo 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 -K

E 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 -k

Abbiamo 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.asc

GnuPG 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 0xBC8043BB

con 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

  1. ^ 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.
  2. ^ http://projects.gnome.org/seahorse.
  3. ^ Non dobbiamo scriverlo per intero: è sufficiente digitare gpg[spazio]--lis[tab]se[tab] e GnuPG ad ogni [tab] completerà il comando per noi.
  4. ^ 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.
  5. ^ Altrimenti solo noi potremo, ad esempio, cifrare un documento per lui, ma Phil non potrà cifrare alcunché per noi.
  6. ^ 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.

Ulteriori risorse

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Argomenti
ExtraWiki
Strumenti