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