Sperimentazioni di sicurezza A.A. 2009-2010
GNU Privacy Guard:
Introduzione all’uso
Speaker:
Luca Maria Aiello, PhD student
Università degli Studi di Torino, Computer Science Department
Corso Svizzera, 185 – 10149, Torino, Italy
[email protected]
Sperimentazioni di Sicurezza, A.A. 2009/2010
Pretty Good Privacy & GNU Privacy Guard
o PGP è un programma di crittografia e firma
digitale ideato e sviluppato da Phil Zimmermann
nel 1991
• Uno dei crittosistemi più usati al mondo
• Divenuto un prodotto commerciale della PGP
corp.
o OpenPGP è uno standard Internet (RFC 4880) che
è stato pubblicato sulla base della specifica
originale di PGP
o GPG è un’implementazione open-source (licenza
GPL) dello standard OpenPGP
• Versione 1.0 nel 1999
Sperimentazioni di Sicurezza, A.A. 2009/2010
Phil
Zimmermann
Download e installazione
o GPG website: http://www.gnupg.org/download
• Directory listing a: ftp://ftp.gnupg.org/gcrypt/gnupg/
• Scaricare la versione 1.4.9
o Installazione
• ./configure --prefix=$HOME
• make
• make install
o Il comando gpg risiede nella cartella g10
o Per poter eseguire il comando gpg da una cartella qualsiasi potete
semplicemente usare un alias
• Nel file $HOME/.cshrc aggiungere:
alias gpg /usr/home/…/gnupg-1.4.9/g10/gpg
Sperimentazioni di Sicurezza, A.A. 2009/2010
Struttura generale comando
gpg [opzioni] comando parametri
o L’interazione con GPG avviene tramite linea di comando
• Esistono anche interfacce e plug-in grafici, vedremo Enigmail
o Alcune opzioni utili sono
• --armor → trasforma l’output binario in ASCII
• --output file → scrive l’output sul file specificato
o
gpg --help → lista dei comandi
o man gpg → guida completa dei comandi
Sperimentazioni di Sicurezza, A.A. 2009/2010
Generazione chiavi
gpg --gen-key
o Richiede diversi parametri
• Tipo di chiavi (DSA, ElGamal, RSA)
• Selezionare DSA (Firma) + ElGamal (Cifratura a chiave pubblica)
• Dimensione chiave
• Selezionare la dimensione massima possibile
• Scadenza della chiave
• Nome, cognome, email
• Una passphrase, per cifrare le chiavi private su disco
• Scegliere una passphrase sicura
• Un po’ di input casuale…
Sperimentazioni di Sicurezza, A.A. 2009/2010
I keyring
gpg --list-keys [id_chiave]
gpg --list-secret-keys [id_chiave]
o Le chiavi sono mantenute in due strutture dati:
o Private keyring
•
•
•
•
KeyID
UserID
Timestamp
Chiave privata
o Public keyring
•
•
•
•
•
•
•
KeyID
UserID
Timestamp
Chiave pubblica
Validità
Trust
Firme
Sperimentazioni di Sicurezza, A.A. 2009/2010
I keyring: esempio
Public/
private
Chiavi
secondarie
pub 1024D/2C2E319E 2009-05-06
uid
Yagami Light <[email protected]>
uid
Kira <[email protected]>
sub 2048g/291205D4 2009-05-06
sub 2048R/5CC1DD2A 2009-05-06 [expires: 2009-06-08]
sec
uid
uid
ssb
ssb
ssb
1024D/2C2E319E 2009-05-06
Yagami Light <[email protected]>
Kira! <[email protected]>
2048g/291205D4 2009-05-06
D=DSA
2048R/5CC1DD2A 2009-05-06
1024R/8749C81F 2009-05-06
R=RSA
Data
scadenza
Data
creazione
g/G=ElGamal
#bit
Key ID
Nella cartella HOME/.gnupg risiedono i keyring assieme ad altri file di
configurazione
o Più avanti vedremo in dettaglio le operazioni di gestione dei keyring
o
Sperimentazioni di Sicurezza, A.A. 2009/2010
Certificato di revoca
gpg --output revoca --gen-revoke id_chiave
o Una volta creata, la chiave privata può essere compromessa, persa
o rubata
o È bene creare, subito dopo la generazione della chiave, un
certificato di revoca, firmato con la chiave privata
• Tale certificato deve essere pubblicato per segnalare che la
chiave non è più valida
• Non ha valore retroattivo sulle firme già effettuate
• Da custodire al sicuro…
o Per cancellare una delle chiave dai keyring eseguire:
gpg --delete-secret-keys id_chiave
gpg --delete-keys id_chiave
Sperimentazioni di Sicurezza, A.A. 2009/2010
Esportare ed importare chiavi
gpg --armor --output file –-export user_id
gpg –-import file
gpg –-fingerprint user_id
o Per diffondere la propria chiave pubblica è necessario esportarla
• Il file risultante può essere inviato via mail, pubblicato su un sito
web o su un keyserver
o Quando si importa una chiave, è sempre bene verificarne l’integrità
tramite fingerprint
• Usando un canale che assicuri l’identità del proprietario (e.g.
telefono)
Sperimentazioni di Sicurezza, A.A. 2009/2010
Validità delle chiavi importate
gpg --edit-key id
Command> sign
Command> check
o Se si è sicuri del legame tra la chiave ricevuta e l’identità associata, si
firma la chiave con la propria chiave privata
o Come vedremo, le firme servono a calcolare il valore di validità della
chiave
• Se si firma direttamente una chiave, questa assume
automaticamente validità completa
• Nota: è necessario un refresh per visualizzare la validità corretta
o È possibile verificare tutte le firme che sono allegate alla chiave
o Ogni chiave pubblica è self-signed dal suo proprietario
Sperimentazioni di Sicurezza, A.A. 2009/2010
Cifrare con chiave simmetrica
gpg [–-cypher-algo algoritmo] --symmetric file
gpg --output decifrato --decrypt cifrato
o La cifratura a chiave simmetrica non usa le chiavi del keyring
• È necessario immettere una password
o È possibile selezionare un particolare algoritmo di cifratura
simmetrica
• gpg --version → visualizza gli algoritmi disponibili
Sperimentazioni di Sicurezza, A.A. 2009/2010
Cifrare con chiave pubblica
gpg –-recipient id_dest --encrypt file
gpg --output decifrato --decrypt cifrato
o È necessario possedere la chiave pubblica del destinatario
o L’input della cifratura viene anche compresso
• Motivi di efficienza e sicurezza
Sperimentazioni di Sicurezza, A.A. 2009/2010
Firmare
1. gpg
gpg
2. gpg
gpg
3. gpg
gpg
o
o
--sign file
--decrypt signedfile
--clearsign file
--verify signedfile
–-detach-sig file
--verify signature file
Esistono tre modalità diverse di firma e rispettiva verifica
1. Compressione e firma
2. Firma senza compressione
3. Firma distaccata
È possibile cifrare e firmare specificando sia --encrypt che
--sign
Sperimentazioni di Sicurezza, A.A. 2009/2010
Gestione dei keyring
o Alcune operazioni nel menù key edit
gpg --edit-key
Command> key id
Command> uid id
Command> adduid
Command> addkey
Command> deluid
Command> delkey
Command> revkey
Command> revsig
Command> expire
Command> help
Command> quit
– (de)seleziona una chiave secondaria
– (de)seleziona uno userid
– aggiunge un nuovo userid alla chiave
– aggiunge una nuova chiave secondaria
– cancella l’userid selezionato
– cancella la chiave selezionata
– revoca immediatamente la chiave selezionata
– revoca la firma della chiave selezionata
– aggiorna la data di scadenza di una chiave
– mostra tutti i comandi del menù
– esce dal menù
Sperimentazioni di Sicurezza, A.A. 2009/2010
Keyring: esempio
pub 1024D/FD54CEAC created: 2009-05-06 expires: mai
fiducia: completa
validità: completa
sub 1056g/4FA4C00C created: 2009-05-06 expires: mai
[ full ] (1). Misato <[email protected]>
pub 1024D/FEC62EF9 created: 2009-05-06 expires: mai
fiducia: sconosciuto validità: completa
sub 2048g/C376884C created: 2009-05-06 expires: mai
[ full ] (1). John Linden <[email protected]>
utilizzo: SC
utilizzo: E
utilizzo: SC
utilizzo: E
o Il menù key edit mostra i valori di trust e validity per ogni chiave
Sperimentazioni di Sicurezza, A.A. 2009/2010
Usare la fiducia per convalidare chiavi
o Fino ad ora abbiamo comunicato con utenti che abbiamo potuto
contattare direttamente al fine di verificare il legame tra la loro
chiave e la loro identità
• Nella realtà, questo contatto diretto non sempre è possibile
o In caso non sia possibile una verifica diretta, bisogna essere sicuri
della validità del legame identità-chiave, che può essere modificato
da un Man In The Middle
o A tale scopo ci si appoggia al concetto di fiducia per convalidare le
chiavi
• Se un certo numero di utenti certificano tramite firma il legame
identità-chiave, allora tale legame viene considerato valido
valido (Web of Trust)
Sperimentazioni di Sicurezza, A.A. 2009/2010
Web of trust: esempio
L’utente A conosce solo B
• Ha verificato l’identità di B e
ha firmato la sua chiave
• Si fida di B
o B conosce C
• Ha verificato l’identità di C e
ha firmato la sua chiave
• Invia ad A la chiave di C
firmata
o Dato che A si fida nella capacità
di B di verificare chiavi, accetta
la chiave di C come valida
• Questo non implica che A si
debba fidare di C!
Ritiene valida la chiave di
Si fida di
Ritiene valida, per fiducia, la chiave di
o
B
A
Sperimentazioni di Sicurezza, A.A. 2009/2010
C
Web of trust in PGP
Sperimentazioni di Sicurezza, A.A. 2009/2010
Trust in GPG
gpg --edit-key id
Command> trust
o Trust può assumere 5 diversi valori
• Unknown, never, marginal, complete, ultimate
o La validità della chiave è automaticamente posto a 1 se:
• È firmata da un numero sufficiente di chiavi valide
• Da se stessi, da 1 utente con trust complete o da 3 con trust
marginal
• La catena di trust non è più lunga di 5 passi
o I parametri del numero di firme necessarie e della lunghezza della
catena possono essere cambiati nel file di configurazione
Sperimentazioni di Sicurezza, A.A. 2009/2010
Accettare delle chiavi sulla base del trust
o Ponete a marginal il trust verso gli utenti che conoscete
o Fatevi “presentare” un utente che non conoscete da diversi utenti
noti, fino a quando la validità della chiave del nuovo utente non
diventa complete
o La chiave pubblica la cui validità non sia complete può essere
utilizzata, ma GPG visualizza un avvertimento
o Giocate con i parametri di trust per prendere confidenza con il
meccanismo
Sperimentazioni di Sicurezza, A.A. 2009/2010
PGP: considerazione metodologica
o L’approccio completamente decentralizzato di PGP evita il costo
dell’introduzione di una terza parte fidata
o Di contro, il trust deve essere riposto nella capacità degli utenti di
riconoscere dei validi legami identità-chiave pubblica…
Sperimentazioni di Sicurezza, A.A. 2009/2010
Enigmail
o Usare la linea di comando per un uso privacy-aware della mail può
risultare scomodo…
o Enigmail è un plug-in per Mozilla Thunderbird che premette l’uso di
GPG nel MUA
• Necessita che GPG sia già installato sulla macchina
o Download:
• https://addons.mozilla.org/it/thunderbird
• http://enigmail.mozdev.org
• http://likir.di.unito.it/packages/enigmail.zip
o Installazione, dal menù di Thunderbird:
• Strumenti > Componenti aggiuntivi > Installa
Sperimentazioni di Sicurezza, A.A. 2009/2010
Enigmail
o Una volta installato il plug-in, compaiono nuove opzioni
Sperimentazioni di Sicurezza, A.A. 2009/2010
Enigmail
o È possibile cifrare e firmare le mail in uscita
Sperimentazioni di Sicurezza, A.A. 2009/2010
Enigmail
o In occasione della
spedizione del primo
messaggio, verrà richiesto
di selezionare la coppia di
chiavi in uso
o In Avanzate si possono
selezionare diverse
proprietà aggiuntive…
Sperimentazioni di Sicurezza, A.A. 2009/2010
Enigmail
o Ogni operazione che necessita l’uso della chiave privata richiede
l’immissione della password
Sperimentazioni di Sicurezza, A.A. 2009/2010
Enigmail
o È possibile decifrare i messaggi in entrata. Le firme dovrebbero
essere verificate automaticamente
Sperimentazioni di Sicurezza, A.A. 2009/2010
GPG vs S/MIME
o S/MIME (Secure Multipurpose Internet Mail Extention) è uno
standard di crittografia a chiave pubblica
• Utilizzato per la sicurezza della posta elettronica
• Offre gli stessi servizi di autenticazione, integrità del messaggio,
non-repudiabilità
• Sostituisce la web of trust con un più classico sistema basato su
certificati emessi da CA
o Enigmail offre anche il supporto per S/MIME
Sperimentazioni di Sicurezza, A.A. 2009/2010
Sperimentazioni di sicurezza A.A. 2009-2010
GNU Privacy Guard:
Introduzione all’uso
Grazie per l’attenzione!
Speaker:
Luca Maria Aiello, PhD student
Università degli Studi di Torino, Computer Science Department
Corso Svizzera, 185 – 10149, Torino, Italy
[email protected]
Sperimentazioni di Sicurezza, A.A. 2009/2010
©2009 by Luca Maria Aiello. Permission to make digital or hard copies of part or all of
this material is currently granted without fee provided that copies are made only for
personal or classroom use, are not distributed for profit or commercial advantage, and
that new copies bear this notice and the full citation.
Sperimentazioni di Sicurezza, A.A. 2009/2010
Scarica

slides - Luca Maria Aiello