Copyright (c) 2000-2006 V. Alex Brennen (VAB).
Questo documento è di pubblico dominio.
La versione originale di questo documento è pubblicata su http://cryptnet.net/fdp/crypto/keysigning_party/en/keysigning_party.html (DocBook XML)
Al momento, il documento è disponibile anche nelle lingue seguenti:
Se siete a conoscenza di una traduzione, o si vuole tradurre il documento in un'altra lingua, fatemelo sapere, in modo che possa distribuirlo o mettere un link alle versioni tradotte.
V. Alex Brennen (autore principale)
Darxus (codice per i grafici (sig2dot.pl & sigtrace.pl))
Bostjan Muller (traduzione slovena)
Gerfried Fuchs (traduzione tedesca)
Alex Bergonzini (traduzione spagnola)
Cristian Rigamonti (traduzione italiana)
Vladimir Ivanov (traduzione russa)
chihchun, clotho, fetag, jedi, kcwu, pwchi, e winfred (traduzione cinese tradizionale)
Un key signing party è una riunione di persone che usano il sistema di crittografia PGP, durante la quale ogni partecipante ha la possibilità di firmare la chiave degli altri. I key signing party aiutano in modo consistente a estendere la propria rete della fiducia, inoltre offrono un'opportunità per discutere di questioni sociali e politiche che riguardano la crittografia forte, la sovranità e le libertà individuali, dell'implementazione di tecnologie crittografiche, o perfino degli sviluppi futuri del software libero per la crittografia.
Firmare una chiave significa apporre una firma digitale su una chiave pubblica e sullo user id che la accompagna. La firma delle chiavi serve per verificare che un dato user id e una data chiave pubblica appartengano veramente alla persona che sembra possedere la chiave, ossia in termini più generali, a verificare che la rappresentazione dell'identità contenuta nel pacchetto user id sia valida. Di solito, ciò significa che il nome associato alla chiave PGP corrisponde al nome scritto sul documento di identificazione che una persona vi presenta quando chiede di firmare la sua chiave.
Il termine "chiave pubblica" ha due significati nell'ambito di PGP. Può riferirsi sia alla vera e propria chiave pubblica di cifratura, che fa parte di una coppia di chiavi, oppure può riferirsi alla chiave di cifratura e a tutte le firme apposte su quella chiave, come anche ad eventuali sotto-chiavi di cifratura auto-firmate con quella chiave. Per evitare confusioni, in questo documento userò sempre il termine "chiave pubblica" per riferirmi alla chiave, comprese le firme e le sottochiavi. Userò invece "pacchetto chiave pubblica" per riferirmi solo alla chiave pubblica di cifratura facente parte di una coppia di chiavi.
È possibile firmare il proprio pacchetto chiave pubblica e qualsiasi user id associato a quella chiave pubblica, oppure la coppia chiave - user id di un'altra persona. La firma delle proprie chiavi impedisce di aggiungere false chiavi di cifratura o di firma alla vostra chiave pubblica a chiunque se la possa procurare (ad esempio perché la chiave è disponibile su un archivio pubblico, o perché viene intercettata durante il suo trasferimento). Se un avversario fosse in grado di aggiungere alla chiave una falsa chiave di firma o di cifratura, potrebbe aggiungere un pacchetto chiave pubblica di cui lui solo possiede la corrispondente chiave privata. Ciò potrebbe far sì che chiunque volesse comunicare con voi in modo cifrato, si troverebbe a trasmettere inavvertitamente informazioni confidenziali alla persona che è riuscita ad alterare la vostra chiave pubblica. Per impostazione predefinita, GnuPG e la maggior parte delle altre implementazioni dello standard openPGP eseguono l'auto-firma su tutti i pacchetti user id generati per una chiave pubblica.
In un certo senso le firme convalidano le chiavi. Rappresentano una dichiarazione di approvazione della validità di una chiave pubblica e dell'id associato, ad opera di una terza parte. In questo senso la firma delle chiavi aiuta a costruire la rete della fiducia.
"Rete della fiducia" è un termine usato per descrivere le relazioni di fiducia esistenti tra un gruppo di chiavi. La firma su una chiave rappresenta un collegamento, o un filo se volete, nella rete della fiducia. Questi collegamenti sono chiamati "percorsi di fiducia" e possono essere bidirezionali o a senso unico. La rete della fiducia ideale è quella in cui ogni persona è connessa ad ogni altra in modo bidirezionale, così che ognuno abbia la fiducia che ogni chiave appartenga veramente al proprio proprietario. La rete della fiducia può essere pensata come la somma dei percorsi di fiducia, o collegamenti, tra tutti i proprietari delle chiavi. Per avere un esempio visuale, ecco la rappresentazione grafica della rete di fiducia a cui appartengo.
Ci sono tre motivi principali per organizzare quanti più key signing party è possibile.
Il primo motivo, forse il più importante, per cui dovreste organizzare quanti più key signing party possibili è per espandere la rete della fiducia: più questa diventa profonda e interconnessa, più risulta difficile comprometterla. Questo è molto importante per la comunità del software libero, sia per gli sviluppatori che per gli utenti. I membri della comunità usano la tecnologia PGP per proteggere crittograficamente i loro pacchetti software, gli annunci, i comunicati riguardanti la sicurezza. La forza e la protezione che PGP fornisce alla comunità, contro minacce per la sicurezza come cavalli di Troia, virus, messaggi fasulli, ecc, sono direttamente proporzionali alla forza e alla robustezza della rete della fiducia.
In secondo luogo, i key signing party aiutano ad acquisire una cultura della sicurezza e una conoscenza del funzionamento di PGP e delle altre tecnologie per la crittografia forte. Per sfruttare i benefici della crittografia forte, occorre usarla, e usarla nel modo corretto. Questo richiede la comprensione della tecnologia che ne sta alla base, una comprensione che può risultare difficile a chi non ha familiarità con i computer o la cultura del software libero. Far incontrare persone che non conoscono la crittografia con persone più esperte è sicuramente di aiuto per chi vuole imparare.
Infine, i key signing party aiutano a costruire comunità. Aiutano i tecnici a conoscersi meglio, a lavorare in rete e discutere di importanti questioni riguardanti i diritti civili, il diritto alla crittografia e i meccanismi di regolamentazione di internet. La discussione è importante, non solo perché rappresenta il primo passo, ma anche perché è il passo che precede l'azione. Quando ho scritto la prima versione di questo documento non c'erano al mondo reti della fiducia molto complesse, ma la situazione è ora molto migliorata: ci sono molte più reti e molto più profonde, rispetto a qualche anno fa. Resta sempre il fatto che se volete costruire una rete della fiducia nella vostra zona, è molto probabile che i primi a farne parte saranno i leader della comunità internet locale: sono le persone che hanno la possibilità di introdurre tecnologie di crittografia forte nelle infrastrutture che gestiscono, se decidono di farlo. L'introduzione di queste tecnologie e protocolli toglierebbe pericolosità a iniziative dannose per la privacy, come il sistema carnivore dell'FBI, o le intercettazioni illegali compiute dalla National Security Agency.
Per esempio, poniamo che Alice e Bob creino delle chiavi PGP con Gnu Privacy Guard (GPG) e organizzino un key signing party. Durante il party, Alice e Bob verificano ognuno le chiavi dell'altro e successivamente le firmano. Poiché GPG firma automaticamente le chiavi pubbliche che genera usando la chiave privata associata, Alice e Bob avranno almeno due firme che indicano che la chiave appartiene veramente a loro: la chiave di Alice è stata firmata da Alice stessa e da Bob, così pure per la chiave di Bob. In seguito Alice e Bob conoscono Cathy, che genera un paio di chiavi e spedisce la propria chiave pubblica ad Alice e Bob. Alice però non vuole che Bob comunichi con Cathy in modo cifrato, così crea una chiave con il nome di Cathy e la spedisce a Bob. Bob riceve così due chiavi che portano entrambe il nome di Cathy e la firma della chiave privata di Cathy, ma non sa quale delle due è veramente la chiave di Cathy.
Cathy scopre che Bob ha ricevuto due chiavi, sospetta subito di Alice e decide di vendicarsi; per farlo, manda a Bob una finta e-mail a nome di Alice comunicandogli di aver generato una nuova coppia di chiavi e includendo la "nuova" chiave di Alice (che in realtà è una falsa chiave generata da Cathy). Ma Bob scopre subito che si tratta di un trucco, visto che una delle due chiavi di Alice che possiede è stata firmata da più persone (Alice e Bob), confermando che essa appartiene davvero ad Alice, mentre l'altra chiave (la falsa chiave creata da Cathy) ha solo una firma.
Questo esempio è molto semplice, ma possono esistere situazioni molto più complicate: potete leggere le FAQ di PGP o un buon libro sulle PKI (Public Key Infrastructure) per maggiori informazioni e spiegazioni più dettagliate. L'esempio mostra comunque i concetti base della firma delle chiavi e la sua importanza: Cathy non è riuscita a introdurre una falsa chiave di Alice, grazie alle interconnessioni esistenti tra Bob e Alice nella loro rete della fiducia.
Tuttavia, firme e reti della fiducia non garantiscono chiavi di cui ci si possa fidare ciecamente. Ad esempio, supponiamo che quando Bob e Alice hanno conosciuto Cathy fosse presente anche Donald, un amico di Cathy. Donald potrebbe aver generato una coppia di false chiavi di Alice e Bob, potrebbe aver firmato ognuna delle due chiavi con quella dell'altro, oltre che con la propria chiave, in modo che ogni chiave contenesse tre firme, e potrebbe aver spedito le chiavi a Cathy. Cathy ora si troverebbe di fronte un gruppo di chiavi e di firme tutte "false": come potrebbe usare il meccanismo della firma per proteggersi da questo tipo di attacchi? Supponiamo che tutte le persone coinvolte scambino le chiavi attraverso un keyserver. Se Cathy cercasse le chiavi di Alice e Bob sul keyserver, troverebbe due paia di chiavi per Alice e Bob, ma se Alice e Bob avessero raccolto venti firme durante un key signing party, è ovvio che Cathy si fiderebbe di più delle chiavi firmate venti volte, piuttosto che di quelle firmate solo tre volte. Inoltre, Cathy potrebbe ricavare altre informazioni riguardanti le venti chiavi usate per le firme, ad esempio le loro date di generazione, ricostruendo così la rete di fiducia che lega le chiavi. Probabilmente le chiavi usate per apporre le firme durante il party saranno state a loro volta firmate con altre chiavi, quasi sicuramente avranno date di generazione molto diverse. Di certo non sarebbe così se Donald avesse generato venti false chiavi e le avesse usate per creare una falsa rete della fiducia. L'ampiezza della falsa rete della fiducia creata da Donald sarebbe limitata al numero di chiavi che egli ha generato, mentre l'ampiezza della rete di fiducia di cui fanno parte le vere chiavi di Alice e Bob garantisce una maggiore affidabilità di queste chiavi rispetto a quelle generate da Donald.
Ci sono tre modi diversi di organizzare un key signing party: ognuno è stato immaginato per adeguarsi ai crescenti livelli di partecipazione dovuti alla popolarità di PGP. I paragrafi successivi forniscono istruzioni per tre dei più comuni metodi di organizzazione di un key signing party; leggendoli, potrete farvi un'idea di quale sia la modalità più adeguata per il key signing party che volete organizzare.
Il tipo più comune di key signing party è quello informale. Non è richiesto alcun coordinamento prima del party, se non per annunciare la data e il luogo. I partecipanti portano con sé le informazioni sulla propria chiave e dei documenti sufficienti per dimostrare la propria identità.
I party informali sono semplici da organizzare: possono essere annunciati con poco preavviso, magari associati a un altro evento che può attirare membri della comunità interessata alla crittografia, come convegni tecnici o sui diritti civili, LAN party, riunioni di appassionati di fantascienza, o di comitati di standard tecnologici, e così via.
L'ideale è portare con sé dei bigliettini con stampato il proprio nome e l'impronta digitale (fingerprint) della propria chiave, da distribuire agli altri partecipanti. Molte persone stampano l'impronta digitale della propria chiave PGP sul proprio biglietto da visita, spesso insieme all'indirizzo di un keyserver da cui poter recuperare la chiave. Alcuni stampano anche una piccola casella "verificato", in modo che chi riceve il biglietto da visita possa segnare se ha verificato l'identità del possessore di quella chiave.
Per un party basato su una lista di partecipanti occorre un po' più di coordinamento: l'organizzatore deve redigere un elenco delle impronte digitali PGP delle chiavi di coloro che hanno deciso di partecipare al party. Questa modalità è più adeguata nei casi in cui ci si aspetta un'alta partecipazione e organizzare un party informale renderebbe difficile garantire che ogni partecipante abbia la possibilità di firmare le chiavi di tutti gli altri. Avendo una lista, i partecipanti sono incentivati a controllare di aver firmato tutte le chiavi possibili, garantendo così una rete della fiducia ancora più profondamente interconnessa, a beneficio di tutti gli utenti di PGP.
Ho scritto uno script perl per generare la lista dei partecipanti a un key signing party partendo da un portachiavi openPGP, di pubblico dominio. Una volta generata la lista, è possibile pubblicarla sul web in modo che i partecipanti possano stamparla; è utile anche portarne al party qualche copia già stampata.
Occorre controllare l'identità e l'impronta digitale di tutte le persone presenti sulla lista. Occorre anche controllare che le proprie informazioni presenti sulle liste degli altri partecipanti siano corrette, per evitare che un organizzatore disonesto non abbia manomesso le liste distribuite ai partecipanti.
L'uso del metodo hash è stato immaginato per la prima volta da Phil Zimmermann e Len Sassaman per ottimizzare l'organizzazione di grandi key signing party, che prevedono la partecipazione di centinaia di persone, ad esempio durante conferenze sul software libero. L'idea di base è che le persone si possano fidare di un hash crittografico per proteggere le informazioni di identità e impronta digitale contenute nella lista dei partecipanti. In questo modo, i partecipanti devono solo controllare l'hash della propria copia digitale della lista, rispetto a quello della copia principale, senza dover controllare i dati di ogni individuo. Ogni partecipante dichiarerà che l'impronta digitale contenuta nella lista è corretta per la propria chiave e presenterà un valido documento di identità.
La pietra angolare per la sicurezza delle firme digitali è la funzione hash crittografica a senso unico. Se si usa PGP per comunicare in modo sicuro e si fa affidamento sulle firme digitali per determinare l'autenticità delle chiavi, si fa implicitamente affidamento sulla tecnologia hash. E se ci si fida dell'hash per garantire l'autenticità delle chiavi, non è un azzardo fidarsi anche per garantire l'autenticità delle impronte digitali stampate nella lista dei partecipanti.
Di tutti i metodi per organizzare un key signing party, questo è il meno sicuro, e andrebbe usato solo nei casi in cui lo renda necessario il numero dei partecipanti. Ricerche recenti hanno rivelato che molti algoritmi hash sono meno sicuri di quanto si credesse, rispetto a nuovi tipi di attacchi.
Il party va annunciato. L'organizzatore deve raccogliere le informazioni riguardanti le chiavi, pubblicare la lista dei partecipanti e il suo valore hash.
Al party, occorre chiedere se tutti i partecipanti sono presenti e se le informazioni sulla propria chiave sono corrette. Se non ci sono obiezioni, nessuno è assente, le identità sono verificate, e il valore hash della lista è verificato da tutti i partecipanti, allora tutte le chiavi sulla lista possono essere firmate.
Ognuno deve verificare le informazioni sulla propria chiave, l'hash della lista e la presenza e identità di ogni persona. Fatto questo, è possibile firmare le chiavi di tutte le persone per cui si è verificata l'identità e la presenza.
Più grande è il party, meglio è. Potete annunciare il party sulla mailing list del LUG locale, o su altre liste dedicate all'informatica, o anche con un annuncio sui giornali o una conferenza stampa.
Se state appena iniziando a costruire la rete della fiducia nella vostra zona, è una buona idea cercare di coinvolgere altri utenti attivi di PGP, visto che sono tra quelli che più probabilmente organizzeranno altri key signing party in futuro. Un buon modo per rintracciarli è chiedere a chi spedisce messaggi con firme PGP sulle liste a cui partecipate, o cercare sulle reti di keyserver chiavi con indirizzi mail tipici della vostra zona, ad esempio indirizzi mail con nomi di dominio di un'università o di una grande impresa della vostra zona.
Greg Mullane ha sviluppato un bel sito, Big Lumber, che permette di rintracciare all'interno di una certa area geografica persone interessate a partecipare a dei key signing party. Inserire nel sito il proprio nome e il key signing party che si vuole organizzare è un buon modo per promuovere il party. È anche un buon modo per venire a conoscenza di altri party che si svolgeranno nella propria area geografica o in posti che si intende visitare.
Ecco alcuni esempi di annuncio [gli esempi sono in lingua inglese; alcuni esempi in lingua italiana sono disponibili qui e qui, NdT]:
La procedura per generare un paio di chiavi è abbastanza semplice. In pratica dovete eseguire:
gpg --gen-key
In ogni caso, è raccomandabile generare anche un certificato di revoca per la propria chiave, nel caso si perdesse l'accesso alla propria chiave privata (ad es. se si dimentica la passphrase o si perde la chiave privata). Per le istruzioni per generare un certificato di revoca si veda la Sezione 6.1 di questo documento.
Le istruzioni dettagliate che seguono sono basate sulle migliori pratiche di sicurezza (in modo paranoico). Ad esempio:
Generare chiavi della massima dimensione possibile, in modo che siano resistenti ad attacchi a forza bruta;
Generare chiavi con una durata limitata, per evitare che cambiamenti inattesi nel campo della tecnologia di decifrazione le rendano insicure.
Tenere le chiavi su dispositivi rimuovibili (es. USB) per evitare che qualcuno possa rubarle, una volta ottenuto l'accesso (fisico o remoto) al proprio computer.
Generare un certificato di revoca per consentire una futura revoca della chiave pubblica nel caso di compromissione o perdita della chiave.
Alcuni potrebbero sentirsi a proprio agio anche senza adottare queste precauzioni di sicurezza. Ad esempio, se avete un computer portatile o desktop su cui leggete tutta la vostra posta, potete salvare la vostra chiave sul disco rigido di quel computer. Potete anche generare un paio di chiavi senza scadenza da usare per identificarvi e per la maggior parte delle comunicazioni, e generare altre paia di chiavi per le comunicazioni estremamente delicate (se doveste averne). Le istruzioni riportate di seguito tengono conto delle migliori precauzioni di sicurezza: non dovete necessariamente seguirle, visto che tutto quello di cui avete bisogno è un paio di chiavi, ma se siete un paranoico ossessionato dalla sicurezza come me, seguirle vi procurerà quel piacevole senso di calma di cui avete così bisogno.
1) Andate sul sito di GnuPG e scaricate l'ultima versione di gnupg, gnupg-x.x.x.tar.gz. Scaricate anche la firma PGP dell'archivio, gnupg-x.x.x.tar.gz.sig.
Attenzione: assicuratevi di usare almeno la versione 1.0.6 di GnuPG. Le versioni precedenti alla 1.0.6 avevano almeno un problema di sicurezza significativo.
2) Controllate le firme PGP e il Checksum SHA-1 dell'archivio GnuPG:
bash$ gpg --verify gnupg-x.x.x.tar.gz.sig gnupg-x.x.x.tar.gz bash$ sha1sum gnupg-x.x.x.tar.gz
3) Estraete l'archivio, configurate, compilate e installate:
bash$ tar xzf gnupg-x.x.x.tar.gz bash$ cd gnupg-x.x.x bash$ ./configure bash$ make bash$ su bash# make install bash# exit bash$ cd
Se il sistema su cui installate GnuPG è condiviso con altri utenti, probabilmente vorrete rendere gpg setuid root, in modo da usare memoria sicura. Se scegliete di fare questo, per precauzione controllate sempre l'archivio con la firma sha1 e la firma pgp per essere sicuri di non installare un cavallo di Troia.
4) Procuratevi un dispositivo USB su cui conservare le chiavi, partizionatelo e formattatelo.
bash# /sbin/fdisk /dev/sda bash# /sbin/mkfs.ext3 /dev/sda1
4a) Montate il dispositivo USB e create una directory di cui siete il proprietario:
bash$ mount /mnt/usbfs bash$ mkdir /mnt/usbfs/.gnupg
se necessario (a seconda di come è regolato l'accesso ai dispositivi sul vostro sistema), eseguite:
bash$ chown <vostro_uid>:<vostro_gid> /mnt/usbfs/.gnupg
4b) Create un symlink dalla vostra directory personale al dispositivo USB
bash$ ln -s /mnt/usbfs/.gnupg .gnupg
5) Generate la coppia di chiavi gnupg
bash$ gpg --gen-key
5a) Selezionate i tipi di chiave che volete (le scelte predefinite vanno bene).
Per favore scegli che tipo di chiave vuoi: (1) DSA and Elgamal (default) (2) DSA (firma solo) (5) RSA (firma solo) Cosa scegli? <invio>
5b) Selezionate la dimensione della chiave: 4096
DSA keypair will have 1024 bits. ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 4096<invio>
5c) Impostate la durata della chiave: 5 anni è una buona scelta
La dimensione richiesta della chiave è 4096 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) 5y<invio> Key expires at Fri Nov 5 00:19:43 EST 2011 Is this correct (y/n)? y<invio>
5d) Inserite il vostro nome e il vostro indirizzo e-mail (o anche più indirizzi)
Nome e Cognome: Utente di Prova<invio> Indirizzo di Email: utente@dominio.qualsiasi<invio> Commento: Hai selezionato questo User Id: "Utente di Prova <utente@dominio.qualsiasi>" Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit?
5e) Scegliete una passphrase. Dovete sceglierla bene: dev'essere lunga e molto difficile da indovinare: la tecnologia di cluster computing attuale permette di indovinare passphrase più corte di 12 caratteri. La passphrase deve anche esere difficile da dimenticare: se la dimenticate, non potrete recuperare la vostra chiave.
5f) Muovete il mouse e premete qualche tasto, o eseguite in background un comando come updatedb o find. GPG leggerà /dev/random per raccogliere dei numeri casuali necessari per generare le chiavi, e /dev/random è popolato in parte anche dagli interrupt del computer.
6) Modificate la vostra chiave, se volete. Ad esempio, se avete più di un indirizzo e-mail e volete che compaiano tutti sulla vostra chiave:
bash$ gpg --list-secret-keys /home/prova/.gnupg/secring.gpg ---------------------------- sec 1024D/C01BAFC3 2006-11-05 Utente di Prova <utente@dominio.qualsiasi> ssb 2048g/7A4087F3 2006-11-05 bash$ gpg --edit-key C01BAFC3 Command> help Command> adduid [...] Command> save
7) Spedite la vostra chiave pubblica al keyserver:
bash$ gpg --keyserver <keyserver> --send-key <vostro_key_id>
Dovreste ottenere un messaggio di successo simile a questo:
gpg: inviata con successo a `<keyserver>' (status=200)
8) Spedite le vostre informazioni al coordinatore, dicendo che avete intenzione di partecipare al key signing party. Se la vostra chiave è disponibile sui keyserver, il comando qui sotto mostrerà tutte le informazioni che dovete spedire al coordinatore; la spedizione può avvenire ad esempio tramite un messaggio e-mail cifrato.
bash$ gpg --fingerprint <vostro_Key_ID>
9) Smontate il dispositivo USB e rimuovetelo:
bash$ umount /mnt/usbfs
Nota: potete portare con voi il dispositivo USB per sicurezza, o potete lasciarlo in un posto sicuro, in un cassetto sotto chiave ecc. In generale è una pessima idea lasciare la vostra directory .gnupg, che contiene le vostre chiavi, in un posto accessibile via internet. Se un malintenzionato riesce ad avere accesso al vostro portachiavi privato, può tentare un attacco basato su dizionari (cercando di indovinare la passphrase a forza bruta) per entrare in controllo delle vostre chiavi.
10) Andate al party.
Nota importante: alcuni pensano che tenere segreta la propria chiave pubblica aggiunga ulteriore sicurezza alle proprie comunicazioni cifrate. Questo è vero, nel senso che un keyserver potrebbe essere difettoso o potrebbe venir compromesso e restituire chiavi pubbliche sbagliate. Inoltre, la chiave disponibile su un keyserver potrebbe non essere la più aggiornata disponibile: ad esempio, potrebbero essere state aggiunte delle firme alla chiave che non sono state caricate sul keyserver. È anche vero che la chiave pubblica può essere usata per certi tipi di attacco ai sistemi di crittografia pubblica, e anche se molti pensano che questi tipi di attacco siano estremamente improbabili nel caso venga usata una chiave di dimensione abbastanza grande, tenere segreta la chiave pubblica di fatto riduce questa possibilità. Infine, la conoscenza delle firme presenti sulla vostra chiave pubblica rivela la rete delle persone con cui siete stati (o siete tuttora) in contatto.
Tuttavia, non vi consiglio di tenere segreta la vostra chiave pubblica, visto che scoraggerebbe gli altri dall'usare PGP per le loro comunicazioni con voi. Per risolvere il problema di un possibile keyserver difettoso o compromesso che restituisce le chiavi sbagliate, potete evitare di ricevere messaggi cifrati con la chiave sbagliata ad esempio pubblicando l'impronta digitale della vostra chiave nel vostro file .signature o sulla vostra pagina web. Per quanto riguarda il problema del possibile attacco alla vostra chiave privata attraverso la conoscenza della vostra chiave pubblica, se siete davvero così preoccupati per la robustezza delle vostre chiavi o per la segretezza delle vostre comunicazioni, potete generare ulteriori paia di chiavi (che scadano entro qualche ora o qualche giorno) per ogni comunicazione e scambiare le chiavi pubbliche attraverso canali cifrati con la persona con cui dovete comunicare.
Se non volete che la vostra chiave sia pubblicata su un keyserver, non seguite questo passo della procedura, e invece spedite la vostra chiave pubblica al coordinatore del key signing party, indicandogli che non volete che la vostra chiave sia pubblicata su un keyserver. Il coordinatore potrà quindi estrarre le informazioni della vostra chiave pubblica e inoltrare la chiave agli altri partecipanti attraverso posta elettronica cifrata, o qualche altro metodo, insieme a un messaggio che indica che la chiave, una volta firmata, va rispedita al proprietario, ma non caricata su un keyserver.
Può essere utile stabilire e rendere nota la politica che si intende adottare per la firma delle chiavi, ossia le condizioni a cui si è disposti a firmare una chiave.
Passo 1: Procuratevi una copia della chiave
Di solito userete un keyserver, ma se state firmando una chiave che non è disponibile su un keyserver, potete semplicemente importare la chiave con gpg --import. Se usate un keyserver, il comando seguente scaricherà la chiave dal keyserver e la importerà nel vostro portachiavi.
bash$ gpg --keyserver <keyserver> --recv-keys <Key_ID>
Se ricevete un errore di lettura, il keyserver può essere sovraccarico; riprovate dopo qualche secondo.
Passo 2: Prendete l'impronta digitale e verificate la chiave
bash$ gpg --fingerprint <Key_ID>
GPG stamperà l'impronta digitale della chiave con l'identificativo <Key_ID > (la chiave che avete appena scaricato). Controllate che l'impronta digitale corrisponda a quella riportata sulla lista che avete ricevuto al party. Nota: non controllate che l'impronta digitale che avete sulla lista corrisponda con quella pubblicata sulla pagina web del keyserver, visto che un keyserver difettoso o compromesso potrebbe non spedirvi la stessa chiave che mostra sulla pagina web.
Passo 3: Firmate la chiave
bash$ gpg --sign-key <Key_ID>
Se avete più di una chiave privata, potete specificare quale delle vostre chiavi private usare per firmare le chiavi pubbliche degli altri in questo modo:
bash$ gpg --default-key <chiave_da_usare> --sign-key <Key_ID>
Se avete problemi con le chiavi RSA, probabilmente state usando una vecchia versione di gnupg. Le versioni precedenti alla 1.0.3 non includono il supporto RSA. Nota: potreste dover disinstallare una versione precedente di gnupg se l'avevate installata tramite il sistema di gestione di pacchetti della vostra distribuzione. Potete controllare che versione state usando così:
bash$ gpg --version
Passo 4: Rispedite o caricate la chiave firmata
Se la persona con cui avete a che fare non vuole che la sua chiave sia pubblicata su un keyserver, a questo punto dovete rispedirgli la chiave firmata con la modalità che vi avrà indicato (di solito via e-mail cifrata). Non dovreste spedire una chiave pubblica a un keyserver senza il permesso del proprietario. Far circolare la chiave pubblica riduce lievemente la sicurezza di un paio di chiavi, quindi è considerato scortese rendere una chiave più pubblica di quanto il proprietario desideri.
Più probabilmente userete un keyserver. Se è questo il caso, potete caricare sul keyserver la chiave firmata in questo modo:
bash$ gpg --keyserver <keyserver> --send-key <Key_ID>
Dovreste ottenere un messaggio di successo simile al seguente:
gpg: inviata con successo a `<keyserver>' (status=200)
Congratulazioni, la procedura di firma della chiave è stata completata e la vostra firma è ora incorporata nella chiave pubblica. È stato così creato un nuovo collegamento nella rete della fiducia.
Lo standard openPGP include diversi tipi di pacchetti di firma, quindi è possibile firmare una chiave pubblica e uno user id con diversi livelli di fiducia.
0x10: livello generico di fiducia (chi emette la firma non fa alcuna asserzione sul livello di attenzione con cui ha controllato che la chiave appartenesse effettivamente alla persona indicata dallo user id).
0x11: livello di fiducia basso (chi emette la firma dichiara di non aver fatto alcun controllo sull'identità del possessore della chiave).
0x12: livello di fiducia medio (chi emette la firma dichiara di aver controllato l'identità in modo sufficientemente accurato).
0x13: livello di fiducia elevato (chi emette la firma dichiara di aver controllato scrupolosamente l'identità del possessore della chiave).
Tipicamente, è corretto usare il tipo di firma predefinito in GnuPG, comunque gli altri tipi disponibili sono utilizzabili se si vuole costruire una rete della fiducia più accurata e precisa. Per informazioni più dettagliate sull'uso di questi tipi speciali di firma, si veda la RFC2040.
Non c'è niente di meglio di un grafico colorato per attirare l'interesse della gente, quindi rappresentare graficamente la rete della fiducia locale man mano che la si costruisce può motivare la gente a partecipare, e allo stesso tempo dare un'idea precisa dei risultati che man mano si raggiungono.
Potete creare facilmente un grafico di tutte le chiavi e le firme della vostra rete della fiducia convertendo queste informazioni in un dot file, che può essere poi elaborato con un programma per creare grafici, come dot o neato. Uno script perl che converte le chiavi e le firme di un portachiavi in un file in formato dot è stato scritto da Darxus ed è disponibile sotto i termini della GPL. Per rappresentare graficamente la vostra rete della fiducia, dovete scaricare lo script sig2dot.pl e il programma graphviz della AT&T Research, oppure il programma perl springgraph di Darxus, che permette di generare grafici 3D. A causa della memoria richiesta per queste operazioni, può risultare difficile rappresentare graficamente una rete della fiducia con più di qualche centinaio di nodi.
Istruzioni per rappresentare la rete della fiducia di un portachiavi gpg si trovano nello script sig2dot.pl, o sulla "Debian keyring graphing page". Ecco un link per vedere un grafico di una rete della fiducia prodotto con lo script sig2dot.pl e il programma grafico neato. Maggiori informazioni sono disponibili sulla Debian keyring graphing page.
È possibile ricevere durante un party, o tramite e-mail, o addirittura attraverso un remailer anonimo, la richiesta di firmare una chiave PGP a cui corrisponde un'identità pseudonima. Di solito, la maggior parte delle persone considera la rete della fiducia come un meccanismo matematico che mette in corrispondenza le identità di persone reali con le loro identità virtuali nel cyberspazio. Ma questo è solo uno dei possibili usi della rete della fiducia: il suo scopo essenziale è quello di garantire una ragionevole certezza che la persona con cui si sta comunicando sia effettivamente la persona con cui si pensa di comunicare. La rete della fiducia è un meccanismo di autenticazione delle identità.
Le identità possono assumere molte forme diverse: le persone possono avere pseudonimi, come accadde per i Padri Fondatori degli USA, oppure possono rappresentare società, o gruppi informali, o ancora avere un'identità combinata con quella di altre persone, come accade per le coppie sposate. Le persone possono addirittura assegnare delle identità a programmi per computer, per nomi commerciali, o per costruzioni interamente virtuali come siti internet, o eventi immateriali, come conferenze, gare, riunioni, ecc.
Come è possibile usare la rete della fiducia per convalidare il possesso di una chiave da parte di un'identità a cui non corrisponde una persona fisica? È possibile, perché collegare una chiave a un'identità richiede semplicemente la comunicazione di un segreto condiviso attraverso un canale reso sicuro attraverso la coppia di chiavi che si ritiene collegata all'identità indicata nel pacchetto user id della chiave pubblica. La dimostrazione del possesso del segreto è la prova del possesso della chiave privata, e quindi del controllo della coppia di chiavi.
Per un esempio pratico, supponiamo che qualcuno abbia intenzione di rilasciare una nuova distribuzione linux. Si è assicurato il nome di dominio grayhat.org, perché la nuova distribuzione si chiamerà Gray Hat Linux, ma non dispone ancora di una società o di un'organizzazione formale. Lo sviluppatore vuole che la chiave PGP che usa per firmare i pacchetti e i comunicati riguardanti la sicurezza sia integrata nella rete della fiducia. Inoltre, questa persona è riuscita ad ottenere la collaborazione di molte altre persone, ognuna delle quali si occupa di uno specifico pacchetto della distribuzione. Per questo motivo ha creato una chiave "di ruolo" con lo user id "GrayHat Security <security@grayhat.org>". Supponiamo anche di non conoscere questo individuo, così che non si abbia modo di sapere se egli sia effettivamente autorizzato a rappresentare il possessore del dominio grayhat.
C'è un modo per verificare che questo individuo abbia accesso sia all'indirizzo e-mail, sia alla chiave privata della coppia di chiavi che vi ha chiesto di convalidare: esso consiste nello spedire un segreto cifrato con la chiave pubblica che in questione all'indirizzo indicato sullo user id della chiave. Se la persona è in grado di ricevere il messaggio e di decifrarlo, dimostrando la conoscenza del segreto, potete assumere che egli sia il legittimo possessore del paio di chiavi PGP e dell'identità (comprensiva di indirizzo e-mail) indicata dallo user id della chiave.
Anche se è certamente possibile che possa trattarsi di un malintenzionato che ha preso il controllo del server graynet.org (o del suo record DNS), ciò non deve preoccuparvi: la vostra firma PGP sulla chiave non dice nulla sulla sicurezza del dominio grayhat.org, ma solo che avete compiuto un certo sforzo per verificare che l'individuo che vi ha fornito la chiave da firmare fosse effettivamente in suo controllo. Altre persone, che vogliano valutare la fiducia da riporre nella vostra firma apposta sulla chiave della GrayHat Security, dovranno tenere conto del fatto che non esiste nessun documento, rilasciato dallo stato o da altre organizzazioni, che certifichi la connessione tra l'individuo in questione e l'identità virtuale che egli afferma di avere. Dovranno anche considerare che la coppia di chiavi in questione potrebbe essere condivisa da un gruppo di sviluppatori, e che l'individuo che dice di possedere la chiave potrebbe essere qualcuno che voi, che l'avete firmata, non avete mai incontrato.
Se l'account associato a una chiave viene compromesso, ciò non pregiudica il vaore della vostra chiave, o delle firme che avete apposto. La firma non rappresenta una garanzia incondizionata e illimitata dell'identità e della validità della chiave: essa afferma solamente che avete compiuto una verifica con la diligenza che avete ritenuto opportuna per poter firmare la chiave con una sufficiente fiducia. La fiducia si instaura tra due individui che interagiscono in un certo momento: è qualcosa di immateriale. Detto ciò, se la diligenza che avete usato si rivela insufficiente in più occasioni, e altre persone si accorgono che le vostre firme sono apposte con leggerezza (ad esempio se firmate chiavi senza controllare le impronte digitali della chiave, o senza tentare di verificare l'identità dello user id), il valore delle vostre firme si riduce sicuramente.
Visto che le firme apposte sulle chiavi possono essere viste come collegamenti fra le chiavi stesse, è possibile applicare alcuni interessanti metodi di analisi derivati dalla teoria dei grafi. Le chiavi sono rappresentabili come nodi di un grafo, mentre le firme come spigoli. Se si vede la rete della fiducia come un grafo, è possibile calcolare una serie di statistiche sulle chiavi, sulla prossimità tra una chiave e l'altra, o sul loro livello di interconnessione. Un programma che può calcolare questo tipo di valori è wotsap.
Come abbiamo visto nel capitolo dedicato alla firma avanzata, lo standard openPGP prevede che chi firma una chiave possa farlo con diversi livelli di fiducia. Anche se non ci sono ancora esempi pubblicati, è possibile condurre l'analisi di una rete della fiducia tenendo conto di questi tipi diversi di fiducia sui pacchetti di firma. In una visualizzazione grafica, questo tipo di informazione potrebbe essere rappresentata sotto forma di pesi associati agli spigoli del grafo. Sarebbe così ordinare ogni nodo del grafo, ossia ogni chiave, per il suo valore di reputazione. Visto che l'uso dei vari tipi di firma previsto da openPGP non è molto diffuso, non si conoscono programmi che permettono di condurre un'analisi come quella appena descritta.
Questo è un passo opzionale.
Generare e conservare un certificato di revoca vi permetterà di revocare la vostra chiave pubblica anche nell'eventualità che non possiate più accedere alla vostra chiave privata, a causa di un furto, di una compromissione, della dimenticanza della passphrase, o di un guasto del supporto. Se volete avere la possibilità di revocare la vostra chiave pubblica senza avere accesso alla chiave privata, dovete generare un certificato di revoca e conservarlo in un posto sicuro. Dovreste anche stampare una copia del vostro certificato di revoca in modo da poterlo riscrivere e usare in caso di guasto del supporto su cui è registrato.
Se il certificato di revoca viene compromesso, la persona che riesce ad entrarne in possesso sarà in grado di farlo circolare, disabilitando così la vostra chiave pubblica. Tuttavia, non sarà in grado di compromettere la vostra chiave privata e quindi neanche di generare false firme, decifrare messaggi cifrati con la vostra chiave pubblica o presentarsi abusivamente come il proprietario del vostro paio di chiavi. Visto che l'unico rischio connesso alla compromissione di un certificato di revoca consiste nella disabilitazione della vostra chiave pubblica, è abbastanza sicuro e utile generarne uno.
Il comando GnuPG per generare un certificato di revoca è:
bash$ gpg --output certificato_revoca.asc --gen-revoke <key_id>
Nel caso sospettiate che la vostra chiave privata sia stata compromessa, dovreste immediatamente revocare la vostra chiave pubblica. La revoca di una chiave avviene aggiungendo un certificato di revoca a una chiave pubblica: la revoca indica che quella chiave non è più valida (sicura) e non va usata. Una volta aggiunto, un certificato di revoca non può più essere ritirato.
Poiché la vostra chiave pubblica PGP non viene distribuita da una fonte centralizzata ogni volta che viene usata, ma viene fatta circolare liberamente tra le persone, dovete far circolare anche il certificato di revoca nello stesso modo in cui avete distribuito la vostra chiave pubblica. Questo di solito significa caricare il certificato di revoca sulle reti di keyserver. Anche se non avete caricato la vostra chiave pubblica su un keyserver per motivi di sicurezza, potreste comunque voler caricare sul keyserver il certificato di revoca, facendo così un compromesso tra la leggera riduzione della sicurezza risultante dalla pubblicazione della vostra chiave pubblica, e la riduzione della sicurezza risultante dal fatto che qualcuno potrebbe usare la vostra chiave pubblica senza sapere che è stata revocata.
In sintesi, il comando gpg per generare un certificato di revoca è:
bash$ gpg --output certificato_revoca.asc --gen-revoke <key_id>
Se conoscete il motivo o la data della compromissione della vostra chiave e avevate generato un certificato di revoca generico al momento della creazione della chiave, potete comunque generare un nuovo certificato di revoca. Lo standard openPGP infatti permette di specificare il motivo della revoca di una chiave e di includere anche un commento libero in proposito. Far circolare un certificato di revoca con informazioni precise è preferibile, rispetto all'uso di un certificato di revoca generico creato al momento della generazione della chiave.
È possibile in ogni momento revocare la firma apposta su una chiave.
Per revocare uno qualsiasi dei quattro tipi di firma previsti dallo standard openPGP, dal 0x10 al 0x13, basta apporre sulla chiave una firma del tipo seguente:
0x30: Certification revocation signature.
Questa firma di revoca deve essere apposta dalla stessa chiave che è stata usata per apporre la firma che si intende revocare. Se non è possibile farlo, si può usare un'altra chiave che è stata autorizzata all'operazione di revoca.
Quando la vostra chiave scade, avete due opzioni: potete generare una nuova chiave, o potete estendere la durata della chiave stessa. Il modo più corretto di comportarsi in questo caso è quello di generare una nuova chiave.
Esistono alcuni buoni blog per tenersi informati sulle notizie relative ai sistemi crittografici. Se si intende usare le proprie chiavi PGP per scopi di una certa importanza, o si vuole essere sicuri che le proprie firme siano affidabili e che la propria reputazione sia preservata, è una buona idea seguire gli sviluppi nei campi rilevanti per la sicurezza delle proprie chiavi.
Ci sono molti sviluppi interessanti all'orizzonte, come i miglioramenti alla tecnologia FGPA, agli algoritmi di fattorizzazione, nuove scoperte in varie aree della matematica, i computer quantistici, e la nanotecnologia. Io curo il CryptoWatch Blog, che tenta di seguire questi sviluppi e offrire qualche idea sul loro impatto e significato.
Il blog Schneier on Security di Bruce Schneier è un'altra grande fonte di informazione, anche se affronta una serie di argomenti molto vasta, che va dalle tecniche crittografiche, alle questioni relative alla sicurezza in generale, ad esempio riferita ai voli di linea. Il blog è interessante, oltre che per la profonda conoscenza della crittografia di Schneier, anche per le molte informazioni contenute nei commenti dei lettori.
È sempre utile spendere qualche ora per leggere la storia della crittografia nei periodi in cui in America l'esportazione di software per la crittografia sicura, o la trasmissione di testi cifrati era un crimine. Nel periodo buio dell'amministrazione Bush, l'America sembra proprio retrocedere a quei tempi in cui i diritti alla privacy digitale erano fortemente ristretti. Non importa quale siano le vostre opinioni politiche o il partito a cui siete iscritti, la dignità garantita dalla privacy è un aspetto fondamentale per lo sviluppo dello spirito umano.
Spero che i lettori di questo testo comprendano questa verità universale e vogliano sostenere coloro che lavorano per preservare questo diritto fondamentale. Invito tutti a iscriversi alla Electronic Frontier Foundation (EFF) e a sostenere il loro importante lavoro. Personalmente, ne sono membro da molto tempo.
Vista l'abilità del governo federale americano nel commettere questi terribili e continui errori nell'interpretare la Costituzione e gli scritti dei Padri Fondatori, vi invito anche, se siete cittadini americani, a dare un'occhiata al Free State Project (FSP). Il FSP è un movimento che tenta di raggiungere la massa critica necessaria a far approvare in uno stato dell'unione leggi che riportino il potere del governo federale americano entro i limiti originari. Oltre ad essere un membro della EFF, sono anche membro del FSP.
Una firma apposta su una chiave pubblica e su un pacchetto user id, eseguita con la chiave privata corrispondente alla stessa chiave pubblica. La firma così generata è usata per convalidare l'associazione tra l'utente e la chiave pubblica. Firmare lo user id con la chiave privata evita che chi non ne sia in possesso, possa modificarlo (ad esempio modificando l'indirizzo e-mail indicato), o aggiungere nuovi user id.
Una firma di revoca (cfr) separata.
Uno o più bit di dati usati in un procedimento di cifratura o decifratura.
Nella crittografia a chiave pubblica, la chiave, fra quelle che costituiscono un paio di chiavi, che viene tenuta segreta.
1. Nella crittografia a chiave pubblica, la chiave, fra quelle che costituiscono un paio di chiavi, che viene distribuita. 2. La raccolta di chiavi pubbliche, user id, firme e sotto-chiavi che formano un certificato PGP completo.
Una firma su una chiave che specifica che lo user id o la chiave non devono più essere usati. Le firme di revoca possono essere fatte circolare come parte di chiavi PGP, o in forma separata.
Se si tratta di PGP, un valore usato per identificare una chiave, ricavato calcolando un hash della chiave.
Un sistema che immagazzina chiavi in un database. Questi server possono essere interrogati per conoscere la chiave pubblica di un destinatario con cui non si è mai entrati in contatto prima.
Una riunione di persone che usano il sistema di crittografia PGP con lo scopo di permettere ai partecipanti di firmare a vicenda le proprie chiavi. I key signing party servono ad estendere la rete della fiducia.
Uno standard aperto che definisce una versione del sistema di sicurezza PGP.
Nella crittografia a chiave pubblica, un paio di chiavi consiste in una chiave pubblica e una privata, correlate fra loro.
La via attraverso cui la fiducia si estende da un individuo a un altro. In PGP è un collegamento di fiducia tra due chiavi pubbliche.
Un documento, di solito pubblicato, che indica nel dettaglio le condizioni a cui l'autore è disposto a firmare una chiave PGP.
Una collezione di chiavi. Tipicamente il termine è usato in relazione a PGP, dove un portachiavi consiste in una raccolta di uno o più pacchetti di chiave.
Una raccolta di chiavi private. Il termine è usato per lo più in relazione a PGP, dove definisce una raccolta di pacchetti chiave privata.
Un portachiavi che contiene chiavi pubbliche. Il termine è usato per lo più in relazione a PGP.
Un programma per la privacy sviluppato da Phil Zimmermann, che include crittografia a chiave pubblica, un formato standard per i pacchetti e le chiavi, e anche metodi di crittografia simmetrica.
Un metodo di codificare i dati in modo che possano essere trasmessi su un canale che supporta solo caratteri a 7 bit (ad esempio, l'e-mail o Usenet).
L'insieme delle chiavi e dei risultanti percorsi di fiducia in un modello di fiducia incentrato sull'utente, che garantisce l'autenticazione. In senso collettivo, le relazioni di fiducia in un gruppo di chiavi.