GNU Privacy Guard
Introduzione
GNU Privacy Guard (GnuPG o GPG) è un programma libero pensato per fornire un'alternativa opensource al Pretty Good Privacy (PGP). Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica. La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio. Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario. L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.
Manuale
Un veloce aiuto
man gpg
Un rapido promemoria delle opzioni più comuni
gpg --help
Generare una chiave
Da utente normale:
gpg --gen-key
e rispondere alle domande che fa il programma.
Controllare che sia stata davvero creata
gpg --list-keys
Fare subito il certificato di revoca
gpg --output revoca.asc --gen-revoke <ID>
dove <ID> è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave
Utilizzo pratico
Criptare un documento
gpg -o file1.ext.gpg -e -r UserID file1.ext.
Es.: gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt
Decriptare un documento
gpg -o file1.ext -d file1.gpg
Firmare un documento
Il mittente può usare PGP per firmare un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la firma digitale usando la chiave privata del mittente.
gpg -o file1.ext.sig -s file1.ext
Verificare un documento
gpg --verify file1.sig
Importare ed esportare chiavi (locali)
Importare una chiave (pubblica)
gpg --import chiave.asc (o .txt)
Esportare la propria chiave pubblica
gpg -a -o chiave_pubblica.asc --export
Esportare la propria chiave privata
ATTENZIONE!!! Esportare la chiave privata solo per effettuarne backup
gpg --export-private-keys chiave_privata.asc
Condividere le chiavi pubbliche
Inviare la chiave ad un keyserver
gpg --keyserver keyserver.linux.it --send-key <ID>
Importare una chiave da un keyserver
gpg --keyserver keyserver.linux.it --recv-keys <ID>
la chiave viene cercata sul keyserver e importata in /home/utente/.gnupg/pubring.gpg
in /home/utente/.gnupg/secring.gpg sono archiviate le chiavi segrete
Esempi di keyserver:
- sks.keyserver.penguin.de
- keyserver.kjsl.com
- keyserver .linux.it
Editare una chiave
Per fare operazioni e modifiche dobbiamo "editare" le chiavi:
gpg --edit-key <ID>
per convalidarne il nostro uso dobbiamo firmarle
> sign
e rispondere alle domande
si possono fare molte altre cose, ad esempio: cambiare i valori di fiducia
> trust
vedere la fingerprint
> fpr
cambiare la data di scadenza
> expire
cambiare la password
> passwd
firmare localmente in modo non esportabile
> lsign
quindi ricordarsi di salvare
> save
oppure
> quit
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.
Revocare una chiave
Avendo già il certificato di revoca:
gpg --import revoca.asc gpg --keyserver keyserver.linux.it --send-key <ID>
Rete di fiducia - web of trust Una chiave importata può essere firmata con un certo grado di fiducia con firma esportabile. Possiamo rispedirla al proprietario, se lui la importa nel suo portachiavi avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere alla propria chiave le firme dei conoscenti, che hanno firme di altri....
Gestione delle chiavi
Controllare il database delle chiavi
gpg --list-keys --with-colons
Fornisce tutte le chiavi che abbiamo con molte informazioni
gpg --list-ownertrust
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)
Controllo firme
gpg --check-sigs gpg --list-sigs
Esportare le chiavi altrui
Abbiamo importato e firmato la chiave di <ID>.
Rimandiamola al proprietario:
gpg --armor -export -o firma1 <ID>
Crea un file di nome firma1 nella directory corrente che contiene la chiave firmata. Spedire al proprietario firma1.
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con
gpg --import firma1
si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Bisogna fare molta attenzione a firmare le chiavi degli altri.
Facciamolo sapere Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra chiave, contenente la nuova firma, al keyserver:
gpg --keyserver keyserver.kjsl.com --send-key <ID mia chiave>
Rete di fiducia
Una chiave non è valida solo se è firmata di persona, ma se:
- è firmata da un numero sufficiente di chiavi valide, cioè da almeno una chiave di cui ci si fida pienamente o da tre chiavi con fiducia marginale
- il percorso delle chiavi per risalire alla chiave in questione è al massimo di cinque passi.
Gestire la rete di fiducia gpg.conf ha due opzioni:
--completes-needed n
numero di utilizzatori con fiducia piena che presentano un nuovo utente (default 1)
--marginals-needed n
numero di utilizzatori con fiducia parziale che presentano un nuovo utente (default 3)
A seconda dell'importanza del messaggio, ognuno può consapevolmente valutare quanta fiducia dare alle chiavi.
GUI
Esistono vari programmi a interfaccia grafica:
- Seahorse, per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK
- KGPG, per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT
- Enigmail, estensione per Mozilla Thunderbird per cifrare email e allegati
- Pinentry (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)