Italiano English
Modifica History Actions

PGPSigningParty

Chi lo organizza?

http://wiki.ninux.org/moin_static181/ninuxtheme02/img/ninux_logo.png

Quando?

Giovedì 12 Novembre 2009 presso il Fusolab - Via Giorgio Pitacco, 29 - Roma durante uno dei Giovedì Nerd della programmazione.

INGRESSO LIBERO

Resoconto

La serata è stata molto divertente e grazie a Mara, che conosceva il programma descritto a fine pagina, abbiamo ottenuto un fantstico Web Of Trust

ninux.gpg.png

Che cos'è?

http://www.stefanopilla.it/Immagini/locgpg.jpg

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 (Web Of Trust - WOT), 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.

Che cosa significa firmare una chiave?

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.

Come prepararsi per il party e cosa bisogna portare?

Per partecipare ad un Key Signing Party è necessario (oltre ad essere nerd :-D ) anche avere un paio di chiavi (una pubblica e una privata) e generare un fingerprint. 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).

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.

Perchè organizzare un Key Signing Party?

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.

Parte del materiale per questa pagina è stato preso da: http://www.gnupg.org/howtos/it/keysigning_party.html

Misc

Tool per disegnare la rete di web of trust:

http://git.debianit.it/?p=users/debianit/map.git;a=blob;f=create-graph

git clone http://git.debian-it.it/git/users/debianit/map.git

Dopo aver applicato le patch (sotto) si possono eseguire i comandi:

./add-keys ninux.org BCEB9E24 00685483 3EDBF9E1 39D5BCEF 019788AC 0DFD7CBB 68729FAF 1458F41C 39D5BCEF C4125E74 BC2C0F21 7A14FB6C BD774009 BC2C0F21
./create-graph ninux.org

patch (sconsigliate da Mara) di claudyus ;)

Usa solamente il keyring locale, la png finale eredita il nome del keyring

diff --git a/add-key b/add-key
index 60cfa42..e095092 100755
--- a/add-key
+++ b/add-key
@@ -1,21 +1,20 @@
-#!/bin/bash
+#!/bin/sh
+# usare $0 <keyring.gpg> <uid1> [uid2] ... [uidn]
 
-_KEYRING=debian-it.gpg
-_OUTFILE=table.html
+_KEYRING=$1
+shift
 
-#_DD=/usr/share/keyrings/debian-keyring.gpg
-#_DM=/usr/share/keyrings/debian-maintainers.gpg
-
-if [ -n "$1" ]
-then
+while [ ! -z $1 ]; do 
        #gpg --keyring $_DD --keyring $_DM --export $1 | \
-       gpg --keyserver subkeys.pgp.net \
+       gpg --no-default-keyring --keyring ./$_KEYRING \
+               --keyserver subkeys.pgp.net \
                --keyserver pgp.mit.edu \
                --keyserver wwwkeys.eu.pgp.net \
                --recv-keys $1
-       gpg --export $1 | \
+       gpg --no-default-keyring --keyring ./$_KEYRING --export $1 | \
                gpg --no-default-keyring --keyring ./$_KEYRING --import
        #./party-table.pl ./$_KEYRING > ./$_OUTFILE
-fi
+       shift 
+done 
 
-./create-graph ./$_KEYRING
+echo ora ./create-graph $_KEYRING 
diff --git a/create-graph b/create-graph
index e763197..c48e075 100755
--- a/create-graph
+++ b/create-graph
@@ -10,6 +10,6 @@ _TMPPS=$(basename $_TMPGRAPH .dot).ps
 gpg --no-default-keyring --keyring ./$_KEYRING --list-sigs | \
        sig2dot -a > $_TMPGRAPH
 neato -Tps $_TMPGRAPH > $_TMPPS
-convert $_TMPPS debian-it-wot.png
+convert $_TMPPS `basename $_KEYRING.png`
 
 rm -rf $_TMPGRAPH $_TMPPS