Caio e Pinco
Entriamo nel vivo con la presentazione del software open source per la crittografia e la firma digitale. Per non essere da meno, anche noi useremo personaggi di fantasia, tenendo a mente che ogni dato è inventato e ogni riferimento a persone realmente esistenti è casuale e non voluto. Ci riferiremo a Pinco, utente Linux, e Caio, che usa Windows per il suo lavoro di tutti i giorni, ed ai loro amici e conoscenti.
Il principale strumento è GnuPG, che possiamo scaricare in versioni pronte per l'uso con quasi tutti i sistemi operativi più diffusi.
Esclusa l'installazione, che per Windows verrà trattata separatamente, nel seguito tutte le
operazioni fatte usando direttamente GnuPG dalla shell di Linux potranno essere applicate in
maniera assolutamente identica usando il prompt dei comandi di Windows, la sintassi e le
procedure sono le stesse. Potrebbe succedere che in Windows l'eseguibile di GnuPG non sia
nel percorso di ricerca delle applicazioni specificato in PATH:
basta aggiungerlo, o altrimenti ci sposteremo dentro la directory in cui è installato il
file eseguibile gpg.exe ed eseguiremo tutte le operazioni da lì.
Per mia comodità riporterò sempre la versione Linux negli esempi pratici. Per Windows, in aggiunta, mostrerò come eseguire le stesse operazioni da una interfaccia grafica che semplifica di parecchio la vita a chi non si sente a suo agio con il prompt.
Per rendere utilizzabile e relativamente sicuro il nostro sistema di crittografia e firma digitale, occorre però considerare bene alcuni aspetti, volti a massimizzare sia la praticità che la certezza che nessuno possa facilmente appropriarsi della nostra identità digitale.
La chiave privata, i dati di convalida della firma nostra e delle firme dei nostri amici e conoscenti sono conservati su normali file, in forma cifrata. Questi file sono uno dei punti deboli di tutto il nostro sistema crittografico, il segreto supremo, e occorre che siano protetti al massimo contro il pericolo che qualcuno possa trafugarli. Inoltre, dato che per definizione la chiave privata è unica e non ripetibile, la sua eventuale perdita è irrecuperabile. A parte queste considerazioni, i file in cui GnuPG memorizza tutti i dati, anche se cifrati, sono normali file che possono essere copiati e sottoposti a backup, e GnuPG non trova differenze a lavorare sugli originali o su copie. Non solo, i file che usa la versione Windows sono identici e compatibili con la versione Linux e viceversa, quindi chi come me usa entrambi i sistemi operativi può usare gli stessi file. Detto questo dobbiamo far coincidere esigenze contrastanti:
Protezione dei file da accessi non autorizzati, quindi conservazione in un unico posto, al sicuro. Se qualcuno riesce ad averne una copia, può applicare un tentativo di decifrazione brute force sulla password che usiamo per l'accesso alla chiave privata, operazione che come abbiamo visto può essere infinitamente più agevole che trovare la chiave stessa. Inoltre potrebbe alterare in qualche modo i nostri file, per esempio inserendo la sua chiave privata al posto della nostra. Le possibilità di far danni sono limitate solo dalla fantasia, e gli esseri umani ne hanno molta in questi casi.
Protezione dalla eventuale perdita o cancellazione dei file, quindi copie di riserva in più supporti, conservati in posti differenti. Se a causa di un guasto hardware perdo i file di lavoro e non ho copie, ho perso la mia chiave privata, oltre a molto altro che la rende valida e credibile, e non posso recuperarla in alcun modo. Se ne genero una nuova, pur usando gli stessi dati, sarà per forza di cose differente dalla precedente, anche perché altrimenti chiunque potrebbe generare una chiave identica alla mia.
Queste due esigenze, in aperto contrasto fra loro, possono però essere parzialmente conciliate con qualche accorgimento, che inoltre rende più fruibile il sistema di firma e crittografia.
Dopo aver provato diverse alternative, quella che trovo più comoda, anche per chi usa più computer, o anche per chi usa il notebook, è un disco USB removibile, che sia un normale hard disk o un disco flash a stato solido, la familiare “chiavetta USB”, molto di moda in questo periodo. Dato che il volume di dati è veramente minimo, nel mio caso sono meno di cento kilobyte, l'ideale potrebbe essere un piccolo pen drive USB da 128Mbyte, da portare insieme alle chiavi di casa o dell'auto.
Usando il nostro sistema di sicurezza conosceremo nuove persone e le aggiungeremo, sotto forma di chiavi pubbliche, alla nostra Rete della Fiducia, ed i file di lavoro crescono. Alle chiavi vengono aggiunti dati, le chiavi vengono revocate, scadono, cambiano di livello di affidabilità, e il nostro database ne deve tenere conto. Non saremo quindi troppo spartani con lo spazio riservato al nostro sistema di crittografia.
Si istruisce GnuPG ad usare il percorso giusto per i file di lavoro, in questo caso il disco removibile. Se ci dimentichiamo di connetterlo al momento della firma, GnuPG avvisa soltanto che non riesce a trovare quello che serve, senza fare danni. Poi, periodicamente, se ne fa un backup su un supporto a piacere, cifrando i file con un algoritmo simmetrico, con le procedure che vedremo più avanti, confondendoli insieme a migliaia di altri e con un nome insospettabile, in modo che se il supporto dovesse essere smarrito o sottratto, chiunque lo ritrovi non sia attirato dal contenuto. In questo modo sul computer non è conservato nulla, e se mai dovesse essere smarrito o trafugato, dentro non ci sarebbero dati così importanti.
L'elemento critico diviene il disco USB, che va protetto da eventuali letture o manomissioni da parte di estranei. Se vogliamo esagerare, potremmo usare strumenti come la cifratura del filesystem, permessa sia dalle ultime versioni di Windows che da Linux. In questo modo abbiamo una doppia sicurezza: la password di accesso alla chiave privata di GnuPG, e la password per accedere al filesystem cifrato, che ovviamente saranno differenti. La password del filesystem potrebbe anche essere memorizzata nel computer, per evitare di doverla digitare ad ogni connessione del disco USB, e dare comunque un po' di sicurezza in più, perché chi volesse trafugare la nostra chiave privata deve avere due cose: il computer e il disco USB. Chi trafugasse il solo disco dovrebbe affrontare due diverse decifrazioni, una del filesystem ed una dei file di GnuPG, mentre chi trafugasse il computer avrebbe la password del filesystem ma non avrebbe il filesystem. Ma siamo veramente paranoici...
Per quanto riguarda la frequenza dei backup, può essere ridotta se si usa un keyserver in Internet, perché le modifiche alle firme sono registrate anche sul server. Però se si perde il database della fiducia, cioè il database dove viene memorizzato il grado di fiducia che abbiamo assegnato ad ogni persona con cui abbiamo avuto contatti, il tempo necessario per ricostruirlo non è trascurabile, per motivi che saranno evidenti nel seguito, per cui un backup ad ogni modifica è caldamente consigliato.
Quindi, ricapitolando:
Dati di GnuPG memorizzati su un supporto removibile comodo da trasportare.
Backup dei dati su supporto a scelta.
Uso di filesystem cifrati (opzionale).
Usando un disco USB removibile, possiamo affermare di rispettare uno dei paradigmi della sicurezza, obbedendo ai requisiti per la cosiddetta autenticazione forte, che impone che siano usati almeno due differenti metodi per identificarmi, ad esempio scelti fra i seguenti:
Qualcosa che so: una password, il PIN del Bancomat
Qualcosa che ho: una smartcard, il disco USB, la carta Bancomat
Qualcosa che sono: una mia caratteristica, il mio DNA, la mia faccia, le mie impronte digitali
Per poter usare le mie chiavi crittografiche ho bisogno di una cosa che ho (il disco USB) e di una che so (la password di accesso di GnuPG), ed ecco soddisfatte le premesse.
La parte GnuPG è disponibile su tutte le principali distribuzioni Linux e spesso viene già installata, per verificare mediante firma digitale tutti gli aggiornamenti che vengono rilasciati per il sistema operativo e le applicazioni. Quindi chi usa Linux può passare immediatamente alla generazione delle chiavi, previa verifica dell'installazione di GnuPG. Se per qualche motivo non fosse installato, basta far riferimento alla documentazione della nostra distribuzione, dove troveremo come reperire ed installare i programmi aggiuntivi necessari.
Unica cosa da fare, se vogliamo utilizzare un disco USB, è di creare un link simbolico nella
home directory che punti al mount point del disco USB.
La logica è questa: GnuPG usa una directory con nome .gnupg nella home dell'utente in cui memorizza i file di
lavoro. Dato che vogliamo mettere questi file sul disco USB, che supponiamo venga montato
in automatico in /media/usb, basta creare un link
simbolico nella nostra home con il nome .gnupg che punti ad una
directory scelta da noi dentro il disco USB, ad esempio /media/usb/.miafirma. Occorrono due semplici operazioni, la
prima è la creazione della directory nel disco USB, con il comando:
[pinco@pclinux ~]$ mkdir /media/usb/.miafirmaseguito dalla creazione del link simbolico per GnuPG con il seguente comando, lanciato dalla vostra home directory:
[pinco@pclinux ~]$ ln -s /media/usb/.miafirma .gnupg
Esiste un altro metodo per indicare a GnuPG dove sono i file delle chiavi: modificare il file di configurazione. Ha però uno svantaggio: se dimentichiamo di inserire il disco USB vengono creati da zero nuovi file, vuoti, senza restituire un errore. Se invece si usa il link simbolico, GnuPG tenta di creare i file vuoti se non viene infilato il disco USB, ma non ci riesce per via della presenza del link stesso e ci avverte con un errore, che possiamo prendere come un “ricordati di inserire il disco”.
Le versione che ho usato in Linux è quella presente nella distribuzione Fedora Core 6, per la precisione la 1.4.7 e successive. Per quello che riguarda questa guida non c'è alcuna differenza fra questa versione ed altre precedenti o successive presenti nelle varie distribuzioni Linux, al netto di piccole differenze nei messaggi o in alcune opzioni usate raramente.
Come abbiamo detto, GnuPG può essere usato allo stesso modo sia da Windows che da Linux, tramite la riga di comando. Teniamo conto però di due aspetti: l'uso dal riga di comando in Windows è piuttosto scomodo; non tutti sono a loro agio con la riga di comando.
Per fortuna esistono programmi di interfaccia verso GnuPG che, oltre a fare da tramite per le operazioni di gestione delle chiavi, rendono immensamente più semplici le operazioni di routine, come cifrare un messaggio o verificare una firma.
Dal sito di GnuPG è possibile avere una idea delle varie possibilità, ma a mio avviso la migliore è GPG4Win, che permette in un colpo solo di installare:
GnuPG, il cuore di tutto il sistema di crittografia.
WinPT (Windows Privacy Tray), una applicazione che permette la gestione completa di firma, crittografia e chiavi pubbliche e private, con una integrazione semplice ed efficace con il desktop.
GPA (GnuPG Privacy Assistant), un differente programma per la gestione delle chiavi, con la possibilità di cifrare e firmare file. Semplicemente una differente interfaccia per le funzioni di GnuPG. Lo stesso programma è disponibile per Linux.
GPGol (GnuPG OutLook plugin), per firmare e cifrare i messaggi di posta elettronica. Funziona solo con Outlook 2003, e non funziona con Outlook Express.
GPGee (GnuPG Explorer Extension), per mettere le funzioni di GnuPG nel menù di contesto di Windows Explorer.
Sylpheed-claws, un programma completo di posta elettronica, integrato con GnuPG.
Di questi, non installeremo GPGol (il plugin per OutLook, vedremo che WinPT ci permette di fare le stesse cose), GPA (ridondante rispetto a WinPT, oltre ad avere quanche funzione in meno), GPGee che funziona solo con diritti amministrativi (inoltre lo sviluppo è abbandonato dal 2005) e Sylpheed-claws (semplicemente perché obbliga a cambiare totalmente il programma per la posta elettronica). Il pacchetto è disponibile in due versioni, di cui prenderemo quella lite, che semplicemente non include i manuali, solo in tedesco.
E' certamente vero che esistono parecchie alternative al programma scelto, cioé WinPT (GnuPG deve esserci per forza). Ma tutte richiedono un cambio del modo di gestione della posta elettronica. In Linux esiste Evolution, il gestore di posta, calendario, contatti ed altro, molto simile ad OutLook; per chi usa Thunderbird esiste l'estensione Enigmail che aggiunge l'integrazione con GnuPG, sia per Windows che per Linux; Sylpheed Claws è un gestore di posta elettronica sia per Windows che per Linux, integrato con GnuPG. Ma la maggior parte di noi usa altro, o si è abituata ad usare interfacce webmail, oppure usa programmi per la posta elettronica che non prevedono l'integrazione con GnuPG, e quindi l'uso di un altro programma, solo per aggiungere firma elettronica e crittografia, impone una migrazione ed un cambio di abitudini che per la mia modesta esperienza è solo fonte di disagi, a fronte di un modesto vantaggio per le poche volte che utilizzeremo una firma digitale o un messaggio cifrato. E vedremo che le occasioni non sono poi così frequenti.
Nel seguito vedremo come si usano i programmi che abbiamo scelto, ora ci dedicheremo all'installazione, che richiede i diritti di amministrazione.
Se non abbiamo diritti amministrativi sul computer in cui vogliamo utilizzare GnuPG, potremmo installare solo GnuPG, ma non possiamo installarlo da GPG4Win, e non avremo più le comodità messe a disposizione dalle varie interfacce di gestione, occorrerà utilizzare la riga di comando come in Linux.
Al lancio dell'installazione, se non abbiamo diritti da amministratore, subito dopo la presentazione (Figura 1, «La presentazione») e la licenza (Figura 2, «Licenza GNU GPL»), viene appunto mostrato un messaggio (Figura 3, «Solo un amministratore può...») che avverte di questo vincolo e termina il programma senza fare altro. Se invece stiamo usando un utente con i diritti giusti, l'installazione prosegue senza mostrare il messaggio.
Al momento in cui scrivo le versioni disponibili sono quelle nelle immagini. Certamente, nel frattempo saranno disponibili nuove versioni, ma fondamentalmente avranno le stesse funzioni di base, almeno quelle utilizzate in questa guida e le differenze non influiscono in nessuna delle procedure indicate nel seguito.
L'installazione prosegue con la scelta dei componenti da installare (Figura 4, «Scelta dei componenti»). Come abbiamo già accennato, installeremo solo alcuni componenti.
Arriva il momento di scegliere la posizione dei programmi (Figura 5, «Directory di destinazione per le applicazioni»), dove mettere icone di avvio (Figura 6, «Dove vogliamo le icone di avvio») e la voce nel menù Start (Figura 7, «Posizione in Start Menù»): possiamo lasciare i valori predefiniti.
Appena confermata la posizione nel menù Start parte l'installazione (Figura 8, «L'installazione vera e propria»), che termina qualche minuto dopo (Figura 9, «Fine della fase di copia dei file»)
L'ultimo pannello conferma il successo dell'installazione (Figura 10, «Fine installazione»).
Per ora non lanciamo nulla, anche se possiamo verificare la presenza nel menù Start dei programmi appena installati.
Verificato che tutto sia in ordine, possiamo passare ad una delle fasi cruciali, con la generazione dei nostri segreti più preziosi: le chiavi crittografiche.
Per prima cosa verifichiamo se nel nostro computer è installato GnuPG, e come sia configurato. Queste informazioni si ottengono digitando il comando che segue:
[pinco@pclinux ~]$ gpg --version
gpg (GnuPG) 1.4.7
Copyright (C) 2006 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.
Home: ~/.gnupg
Algoritmi gestiti:
A chiave pubblica: RSA, RSA-E, RSA-S, ELG-E, DSA
Cifrari: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compressione: Non compresso, ZIP, ZLIB, BZIP2
I dati che ci interessano sono la Home, che ci dice dove
saranno memorizzati i file delle chiavi pubbliche e private, qui indicata quella predefinita
in Linux, in Windows sarà quella che indicheremo al momento di generare le chiavi, come
vedremo più avanti; l'elenco degli algoritmi conosciuti sia per la cifratura a chiave
pubblica che per quella simmetrica, elencati sotto la voce
Cifrari; degni di nota anche gli algoritmi di hash e quelli
di compressione. Questo elenco è utile se si prevede di scambiare dati con altre persone che
hanno versioni di software differenti: dobbiamo avere gli stessi algoritmi, altrimenti uno
dei due non riuscirà a fare qualcuna delle operazioni tipiche. Se per esempio si usa un
algoritmo di hash che ha solo uno dei due, l'altro non potrà verificare la firma.
Riporto la procedura in versione Linux, usata dal nostro amico Pinco, ma, come spiegato sopra, le operazioni eseguite da Caio in Windows con il prompt dei comandi sono assolutamente identiche:
[pinco@pclinux ~]$gpg --gen-key gpg: ATTENZIONE: si sta usando memoria insicura! (1) gpg: visitare http://www.gnupg.org/faq.html per ulteriori informazioni gpg: directory `/home/pinco/.gnupg' created (2) gpg: creato un nuovo file di configurazione `/home/pinco/.gnupg/gpg.conf' gpg: ATTENZIONE: le opzioni in `/home/pinco/.gnupg/gpg.conf' non sono ancora attive durante questa esecuzione del programma gpg: portachiavi `/home/pinco/.gnupg/secring.gpg' creato (3) gpg: portachiavi `/home/pinco/.gnupg/pubring.gpg' creato Per favore scegli che tipo di chiave vuoi: (1) DSA e ElGamal (default) (4) (2) DSA (firma solo) (4) RSA (firma solo)Cosa scegli?
Ci vengono date parecchie informazioni, tutte importanti, come è buona abitudine quando si usa un software per applicazioni che coinvolgono la sicurezza:
| (1) | In qualche caso GnuPG non può usare un particolare meccanismo per impedire che la memoria impiegata per la generazione delle chiavi possa essere paginata su disco, col risultato (molto improbabile ma non impossibile) che una chiave possa essere scritta prima di essere cifrata sul disco nell'area di swap. E' una eventualità piuttosto remota, ma per correttezza si viene avvertiti. Per maggiori informazioni possiamo riferirci al link che diligentemente GnuPG suggerisce, che contiene notizie più particolareggiate su questo messaggio. |
| (2) |
Questi messaggi indicano che si sta creando la base per il funzionamento di GnuPG, la
directory di lavoro ed il file di configurazione generale. Si può interrompere
l'esecuzione in questo momento e cambiare le opzioni nel file
|
| (3) |
Questi file conterranno le chiavi private e pubbliche. Sono chiamati
keyring, portachiavi, perché in effetti di questo si
tratta. Il file denominato |
| (4) | La lista può variare, in funzione degli algoritmi di cifratura disponibili nella versione di GnuPG usata. Il valore predefinito va bene per la maggior parte delle esigenze, dato che permette sia la firma che la cifratura di dati generici. |
Scegliamo a piacere, ricordando però che optare per la generazione di una coppia di chiavi soltanto per la firma implica non poter cifrare, a meno di generare successivamente una coppia di chiavi aggiuntiva, quindi tanto vale generarla subito.
Cosa scegli?1DSA keypair will have 1024 bits. ELG-E keys may be between 1024 and 4096 bits long.What keysize do you want? (2048)
Supponendo di scegliere quello che ci propone GnuPG, la coppia di chiavi DSA per la firma sarà di 1024 bit, mentre per la coppia di chiavi per la cifratura di dati e messaggi viene richiesta la dimensione preferita. Il valore proposto è adeguato, per cui risponderemo solo con un Invio:
What keysize do you want? (2048)InvioLa 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 anniChiave valida per? (0)
La domanda successiva riguarda la scadenza della chiave. Possiamo specificare un tempo limite o lasciare il valore proposto, che rende le chiavi senza scadenza. Il valore si può cambiare successivamente, e comunque di solito si sceglie di non dare nessuna scadenza, visto che la nostra firma non dovrebbe cambiare nel tempo. Oppure, in casi particolari, possiamo scegliere un valore di comodo in previsione del tempo massimo per cui useremo queste chiavi.
Supponiamo di scegliere trenta anni, un valore adeguato visto anche che probabilmente per quell'epoca le firme digitali saranno tutt'altra cosa.
Chiave valida per? (0)30yKey expires at ven 13 mar 2037 14:25:47 CETIs this correct? (y/N)y
La scadenza si può cambiare anche successivamente, se non è quella voluta. Viene adesso il momento di associare le chiavi generate alla nostra identità ed al nostro indirizzo di posta elettronica.
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: Pinco
Indirizzo di Email: pinco@mail
Commento: uno qualsiasi
Hai selezionato questo User Id:
"Pinco (uno qualsiasi) <pinco@mail>"
Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit?
E' importante che i dati siano corretti e che l'indirizzo di e-mail sia quello che verrà utilizzato con questa chiave, perché, pur potendo modificarli in seguito, se la nostra chiave pubblica viene divulgata con dati errati, il problema è che ci vorrà tempo e pazienza prima che i dati corretti vengano recepiti da tutti quelli che ci conoscono. Molti programmi di posta elettronica selezionano automaticamente la chiave da usare in funzione del destinatario, cioè dell'indirizzo a cui viene inviato il messaggio. Se qui ne dichiariamo uno e poi abitualmente ne usiamo un altro, pur potendolo aggiungere all'elenco delle nostre identità, se chi ci vuole mandare un messaggio cifrato usa un programma di posta che integra le funzioni di GnuPG deve indicare ogni volta quale chiave usare, perché il programma userà la prima identità, quella con cui viene generata la prima coppia di chiavi. Se è tutto in ordine possiamo rispondere:
Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit?o
Siamo ad uno dei momenti cruciali. La scelta della password di accesso alle chiavi private.
Ricordando quanto detto (cfr. Sezione 1.7, «Ma quanto è sicura questa crittografia?»), è fondamentale che non sia una password banale, che non sia usata anche per altre cose, che abbia una lunghezza adeguata e sia costituita da lettere, numeri e simboli, insomma una password degna di questo nome. Eviteremo parole di senso compiuto, nomi propri, combinazioni di date di nascita, numeri di telefono e targhe di auto con nomi di amici e parenti. E ancora, non useremo la stessa della posta elettronica, né il PIN del bancomat, né altre invenzioni dello stesso tipo.
Tanto per dare un'idea delle “idee geniali” nella scelta di una password il
numero più usato è ‘1’ messo in coda, come pure il simbolo più usato è il punto, per
separare il numero dal resto: password.1 è l'esempio
classico, ben conosciuto da chiunque voglia scoprire una password, che compie i primi
tentativi proprio in questa direzione. L'importanza di questa password è anche sottolineata
dal fatto che GnuPG la chiama passphrase, proprio per
indicare che una singola parola è troppo debole.
Ti serve una passphrase per proteggere la tua chiave segreta.Inserisci la passphrase:inseriamo la passwordRipeti la passphrase:la inseriamo di nuovo per verifica
Questa è l'ultima domanda, da qui in avanti il processo si compie in automatico, fino alla generazione di tutti i dati necessari. Durante il processo di generazione delle chiavi viene stampata a video una sequenza di caratteri per mostrare l'andamento. Se abbiamo scelto di generare sia una coppia di chiavi di firma che una coppia per la cifratura, come avviene se prendiamo le scelte predefinite, i messaggi mostrati sotto vengono ripetuti due volte, una per ogni coppia di chiavi:
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. ++++++++++.+++++.++++++++++....++++++++++.+++++...+++++.+++++.++++++++++.++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++ +>+++++..+++++>+++++...........+++++^^^
Il tempo di generazione delle chiavi è fortemente dipendente sia dalla lunghezza della chiave che dalla velocità del vostro computer. Da notare che viene usato estensivamente il generatore di numeri casuali, ed è il motivo per cui ogni chiave è unica, e non è possibile generarne un'altra identica. Al termine viene fatto il riepilogo delle chiavi generate e della scadenza:
gpg: /home/pinco/.gnupg/trustdb.gpg: creato il trustdb (1) gpg: key E4F4B420 marked as ultimately trusted chiavi pubbliche e segrete create e firmate. (2) 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 gpg: il prossimoi controllo del trustdb sarà fatto il 2037-03-13 pub 1024D/E4F4B420 2007-03-21 [expires: 2037-03-13] (3) Key fingerprint = 9294 2CD5 02E3 7C21 7C19 F6D3 7372 A61F E4F4 B420 (4) uid Pinco (uno qualsiasi) <pinco@mail> sub 2048g/5B514DF0 2007-03-21 [expires: 2037-03-13] (5)
Gli elementi in questi ultimi messaggi sono caratteristici e li rivedremo spesso durante l'uso di GnuPG.
| (1) | Il trustdb è il database della fiducia, il cui contenuto è la base del Web of Trust. |
| (2) | L'armamentario delle chiavi è a questo punto generato, cifrato e memorizzato. |
| (3) | Questa riga informa sulla chiave pubblica principale, da 1024 bit, con algoritmo DSA, identificativo (key id) E4F4B420, creata il 21 marzo 2007 da Pinco, con il commento e l'indirizzo di posta elettronica scelti. Questi dati compariranno sempre insieme alla nostra chiave pubblica, quindi conviene sceglierli con cura. |
| (4) | Il fingerprint, l'impronta digitale della chiave, è unico e strettamente associato con la chiave stessa. Se qualcuno manomettesse una delle nostre chiavi il fingerprint sarebbe differente, avvertendoci della manomissione. |
| (5) | Questa è la chiave generata con algoritmo ElGamal, ed utilizzata per la cifratura, dato che la chiave DSA può essere usata solo per generare firme, non per cifrare. La scadenza è identica alla chiave di firma, e può essere cambiata. Si possono generare più chiavi ElGamal per la cifratura, ma non ha molto senso tenerne più di una, dato che se qualcuno deve mandarci un messaggio cifrato si troverebbe nell'imbarazzo di quale chiave usare per la cifratura, e noi dovremmo individuare quale usare per decifrare. E' più pratico assegnare una scadenza inferiore rispetto alla chiave di firma DSA e cambiarla più spesso. |
Se non vogliamo utilizzare il prompt dei comandi, possiamo sfruttare la comoda interfaccia messa a disposizione da WinPT. Valgono comunque tutte le considerazioni e gli avvertimenti dati fino ad ora (cfr. Sezione 2.5, «Generazione delle chiavi»).
Verifichiamo di aver inserito il supporto su cui memorizzare i dati di GnuPG, come spiegato sopra, prima di avviare WinPT. Per comodità supporremo di usare un disco USB flash, la ben nota chiavetta USB o pen drive. Alla partenza riceviamo un avviso (Figura 11, «Avviso all'avvio di WinPT») che appare quando non esistono ancora i file delle chiavi pubbliche o private. Se invece abbiamo dimenticato di inserire il pen drive USB dove sono i file di GnuPG appare un avviso differente (Figura 12, «Ci siamo dimenticati di inserire il pen drive»).
In questo momento ci troviamo nella prima situazione, non avendo ancora generato le nostre chiavi. Se invece siamo nella seconda situazione, dopo aver risposto , compariranno una serie di messaggi di errore e di richieste di indicare la directory con i file delle chiavi: basta annullare tutte le operazioni per uscire da WinPT, ed una volta inserito il disco nella presa USB basta riavviare il programma.
Dobbiamo generare le chiavi, ma le impostazioni predefinite di WinPT posizioneranno i file
delle chiavi crittografiche in una directory sotto la gerarchia Documenti, nel disco principale del computer. Dato che invece
vogliamo posizionare i file sul pen drive USB, ignoriamo
questo pannello, senza chiuderlo, e facciamo clic col tasto destro sulla piccola icona a
forma di chiave vicino l'orologio in basso a destra del desktop. Dal menù che appare (Figura 13, «Per accedere alle impostazioni generali») scegliamo ,
per accedere al pannello di configurazione di GnuPG (Figura 14, «Le preferenze di GnuPG»).
Mettiamo il segno di spunta nella casella Overwrite default settings, sbloccando le due caselle di testo in alto. Nella prima dobbiamo indicare quale sia la posizione dei file, cioè la lettera del disco corrispondente al pen drive. Basta premere il pulsante di fianco alla casella GnuPG home directory, ed otteniamo il classico pannello di scelta (Figura 15, «Scelta della posizione delle chiavi») da cui selezioneremo il drive.
In questo esempio (Figura 16, «Abbiamo scelto il drive E:») abbiamo selezionato il drive
E:\, e le chiavi saranno memorizzate nella radice del disco.
Possiamo anche creare una directory e piazzarci dentro le chiavi, se vogliamo condividere lo
spazio con altri dati.
Confermate le scelte con il pulsante , possiamo tornare al pannello rimasto aperto (Figura 11, «Avviso all'avvio di WinPT»), nel quale premiamo il pulsante , poi lanciamo di nuovo WinPT dal menù Start, per fare in modo che tenga conto delle scelte fatte. Questa volta al pannello controlleremo che sia selezionata la voce Generate a GnuPG key pair, poi premiamo .
Nel pannello che appare (Figura 17, «L'identità digitale») dobbiamo mettere il nostro nome, cognome e indirizzo di posta elettronica che vogliamo siano associati alle chiavi crittografiche. I dati qui inseriti devono essere quelli veri, che utilizzeremo effettivamente con la nostra identità digitale, per intenderci, quelli scritti nei nostri documenti di identità (a parte l'indirizzo di posta elettronica).
Qui facciamo le veci del nostro amico Pinco, che mette il suo nome e il suo indirizzo di posta elettronica, entrambi inventati.
Alla pressione del tasto , ci viene chiesta la password di protezione delle chiavi crittografiche (Figura 18, «La password di protezione»), e se ne scegliamo una troppo corta veniamo avvisati (Figura 19, «Avvertimento per password troppo semplice»). Di seguito ci viene chiesta di nuovo la stessa password (Figura 20, «Ripetere la password per sicurezza»), per impedire che errori di digitazione rendano poi inaccessibili le chiavi crittografiche.
Con WinPT non viene chiesto di assegnare una scadenza alle chiavi, né il commento da associarvi. Le chiavi sono create senza scadenza, e in ogni caso vedremo che questi parametri sono modificabili in qualsiasi momento, dopo la generazione delle chiavi, sia usando la riga di comando che WinPT.
Appena inserita la seconda volta la password parte la generazione delle chiavi (Figura 21, «Generazione delle chiavi»), che termina dopo qualche tempo (Figura 22, «Le chiavi sono pronte»).
Al passo successivo viene proposto di fare un backup delle chiavi appena generate (Figura 23, «Suggerimento relativo al backup»), cosa caldamente consigliata.
Vengono salvati due file, quelli realmente importanti al momento: il file delle chiavi pubbliche (Figura 24, «Salvataggio delle chiavi pubbliche») e quello delle chiavi private (Figura 25, «Salvataggio delle chiavi private»).
Chiaramente questi due file sono preziosissimi, specialmente quello delle chiavi private, e non vanno lasciati incustoditi. Al più presto ne faremo un backup da qualche parte, tenendone solo due copie: quella di lavoro, sul pen drive, e quella di riserva, ad esempio masterizzata in un CD-R, da riporre in un luogo sicuro. Ne avremo bisogno solo in caso di perdita dei dati dal pen drive.
Avviando di nuovo WinPT, non otterremo ora nessuna finestra, ma una icona nella barra delle applicazioni (Figura 26, «Icona nella barra dei menù»): cliccandovi col tasto destro del mouse si ottiene un menù con le funzioni principali (Figura 13, «Per accedere alle impostazioni generali»). Quella che ci interessa al momento è la prima, . Scegliendola si ottiene l'interfaccia per la gestione delle chiavi (Figura 27, «Il Key Manager di WinPT»).
C'è elencata una sola chiave, dato che il nostro amico Pinco non ha ancora avuto contatti con il mondo esterno.
Purtroppo è successo: qualcuno ha rubato il disco USB con dentro le nostre chiavi crittografiche. In teoria è solo questione di tempo prima che violi la password ed inizi a firmare mail e documenti a nome nostro. Cosa fare?
Anche questa possibilità è prevista. Al momento della generazione delle chiavi, o anche successivamente, è possibile creare un certificato di revoca, una chiave speciale che consente di revocare la validità della nostra chiave segreta principale dalla data in cui viene usato il certificato. Questo significa che tutti i messaggi ed i documenti firmati prima della data di revoca continuano a valere, ma ogni messaggio o documento firmato dopo la revoca non ha più alcun valore.
Come spiegato in un capitolo successivo (cfr. Sezione 4.4, «Aiutare Mallory a far danni»), la data può essere contraffatta, per cui il discorso fatto sopra vale per le firme verificate prima che sia usato il certificato di revoca. Se ho verificato un mese fa la firma ad un messaggio, ed oggi ne viene revocata la validità, per me quel messaggio rimane autentico. Ovvio che se mi arriva un messaggio che risulta essere firmato un mese dopo la revoca di validità della chiave, la cosa è piuttosto sospetta.
Dato che la chiave di cifratura è convalidata dalla firma digitale apposta su di essa al momento della generazione, anche il valore di tutte le sotto-chiavi di cifratura decade nello stesso momento in cui la chiave di firma viene revocata.
Il comando da impartire è il seguente:
[pinco@pclinux ~]$gpg --output revoca.asc --gen-revoke Pinco sec 1024D/E4F4B420 2007-03-21 Pinco (uno qualsiasi) <pinco@mail>Create a revocation certificate for this key? (y/N)
L'opzione --output è seguita da un nome di file dove
GnuPG deve scrivere il certificato di revoca, in questo caso
revoca.asc. In tutti i comandi che non coinvolgono operazioni su file,
GnuPG manda il prodotto delle operazioni a video, cosa poco utile
in situazioni come questa, in cui i dati generati hanno un impiego particolare.
Per indicare a quale chiave ci si riferisce si può usare il nome o il cognome, l'indirizzo di posta elettronica o meglio l'ID della chiave, il numero esadecimale a otto cifre che la identifica.
GnuPG comprende perfettamente che intendete un numero esadecimale, anche se non usiamo
nessuna notazione particolare, ma non con tutti i programmi e servizi è così. In qualche
caso, soprattutto con servizi su Internet, per far capire che intendiamo un ID di chiave
occorre farlo precedere dalla stringa “0x”, il numero zero seguito dalla
lettera “x” minuscola, ad esempio: 0xE4F4B420
Occorre indicare la chiave, dato che ci troviamo di fronte ad una azione potenzialmente distruttiva. Possiamo generare certificati di revoca solo per le chiavi che ci appartengono, cioè di cui abbiamo sia la parte pubblica che privata.
Create a revocation certificate for this key? (y/N)yPer 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?
I motivi elencati non sono messi a caso, ognuno è legato ad un diverso comportamento di GnuPG quando trova una chiave revocata. Nel nostro caso, la scelta sarà la numero 1: utilizzeremo questo certificato solo in seguito ad un furto di dati che coinvolga i file di GnuPG:
Cosa hai deciso?1Inserisci una descrizione opzionale; terminala con una riga vuota: >
Si può scrivere quello che si vuole, anche nulla:
>Chiave compromessa, non usare!>Motivo della revoca: Questa chiave è stata compromessa Chiave compromessa, non usare!Is this okay? (y/N)
Supponendo che tutto sia a posto diamo risposta affermativa:
Is this okay? (y/N)yYou need a passphrase to unlock the secret key for user: "Pinco (uno qualsiasi) <pinco@mail>" 1024-bit DSA key, ID E4F4B420, created 2007-03-21Inserisci la passphrase:
Al solito occorre la password, cosa abbastanza ovvia, altrimenti chiunque può generare un certificato di revoca dal nostro computer e annullare la validità delle nostre chiavi:
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!
Quest'ultimo messaggio nella versione inglese diventa:
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 Mallory citato qui è proprio quello di cui abbiamo parlato nella parte teorica (Sezione 1.5, «Eve la spiona, Trudy l'impicciona, Mallory il guastafeste»), il personaggio che agisce come man in the middle.
Ci troviamo ora un file dal nome revoca.asc il cui contenuto è simile a
questo:
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: A revocation certificate should follow iGcEIBECACcFAkYCr3kgHQJDaGlhdmUgY29tcHJvbWVzc2EsIG5vbiB1c2FyZSEA CgkQc3KmH+T0tCAsywCfRYAvJzR0hU/RsmmDzgOlaIuyv0EAnjCVteultuelWm/Z cFMsui7XdL5T =GYEU -----END PGP PUBLIC KEY BLOCK-----
Se viene inviato ad un keyserver la nostra chiave verrà immediatamente resa inutilizzabile, senza alcuna possibilità di annullare la revoca, quindi conserviamolo in un posto sicuro. Essendo in effetti sono pochi dati, si può usare il suggerimento dato, ossia stamparlo e archiviarlo.
Non è una buona idea conservarlo sullo stesso supporto dove teniamo i file della nostra chiavi crittografiche: se il disco USB viene rubato, in un colpo solo il ladro ottiene sia la chiave privata, e una volta scoperta la password di protezione inizia a firmare a nostro nome messaggi e documenti, sia il certificato di revoca, che non è cifrato ed è immediatamente utilizzabile per essere inviato ad un keyserver, annullando la validità di tutte le firme da quel momento in poi, anche se sono del legittimo proprietario.
Se in più, nonostante gli avvertimenti, non abbiamo copia di backup dei file dei keychain, non avremo neanche la possibilità di generarne uno nuovo. La nostre chiavi saranno perdute per sempre, o peggio in mano ad altri: non avremo altra possibilità che avvertire di persona tutti gli amici e conoscenti che le nostre chiavi non sono più valide.
Caio può comodamente usare l'interfaccia messa a disposizione da WinPT, chiamando il Key manager (Figura 27, «Il Key Manager di WinPT»), e dopo aver selezionato la sua chiave, dal menù scegliere la voce (Figura 28, «Generare un certificato di revoca da WinPT»).
Compare un pannello in cui sono presenti tutti gli elementi già visti: la ragione per la revoca, un commento opzionale, la password ed il file in cui vogliamo salvare il certificato (Figura 29, «Dati per il certificato di revoca»).
Terminata la generazione, pressoché istantanea, un messaggio ci avverte di conservare con cura il certificato appena creato (Figura 30, «Il certificato non deve cadere in mani sbagliate»).
Come possiamo vedere non è nulla di terribilmente complicato, una volta capiti i motivi. Ora abbiamo una contromisura anche per rispondere a questa situazione, remota ma sempre possibile.