Differenze tra le versioni di "GNU Privacy Guard"
m (Rete di fiducia) |
(miglioramenti e aggiornamenti qua e là) |
||
Riga 15: | Riga 15: | ||
= Generare una chiave = | = Generare una chiave = | ||
− | |||
Da utente normale: | Da utente normale: | ||
gpg --gen-key | gpg --gen-key | ||
Riga 23: | Riga 22: | ||
gpg --list-keys | gpg --list-keys | ||
− | + | == Certificato di revoca == | |
− | gpg --output revoca.asc --gen-revoke | + | Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa. |
− | dove <ID> è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave | + | Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro. |
− | + | Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente. | |
+ | gpg --output certificato-di-revoca.asc --gen-revoke ''ID'' | ||
+ | dove <code>ID</code> è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave. | ||
= Utilizzo pratico = | = Utilizzo pratico = | ||
== Criptare un documento == | == Criptare un documento == | ||
− | gpg -o file1.ext.gpg -e -r UserID file1.ext | + | gpg -o file1.ext.gpg -e -r UserID file1.ext |
− | |||
− | |||
+ | Esempio: | ||
+ | gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt | ||
== Decriptare un documento == | == Decriptare un documento == | ||
gpg -o file1.ext -d file1.gpg | gpg -o file1.ext -d file1.gpg | ||
− | |||
== Firmare un documento == | == 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 [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente. | 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 [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente. | ||
Riga 50: | Riga 49: | ||
= Importare ed esportare chiavi (locali) = | = Importare ed esportare chiavi (locali) = | ||
− | |||
Importare una chiave (pubblica) | Importare una chiave (pubblica) | ||
gpg --import chiave.asc (o .txt) | gpg --import chiave.asc (o .txt) | ||
Riga 57: | Riga 55: | ||
gpg -a -o chiave_pubblica.asc --export | gpg -a -o chiave_pubblica.asc --export | ||
− | + | == Esportare la propria chiave privata == | |
− | Esportare la propria chiave privata | + | {{Note |
− | + | |type=attention | |
− | ''' | + | |text=La chiave privata può essere utilizzata per impersonare la vostra identità, perciò '''NON''' inviarla mai a '''nessuno''', ed esportarla solo per effettuarne backup, naturalmente da custodire in un luogo sicuro. |
− | gpg --export-private-keys | + | }} |
+ | gpg --armor --export-private-keys chiave-privata.asc | ||
= Condividere le chiavi pubbliche = | = Condividere le chiavi pubbliche = | ||
− | + | Inviare la chiave ad un keyserver: | |
− | |||
gpg --keyserver keyserver.linux.it --send-key <ID> | gpg --keyserver keyserver.linux.it --send-key <ID> | ||
− | + | Importare una chiave da un keyserver: | |
gpg --keyserver keyserver.linux.it --recv-keys <ID> | gpg --keyserver keyserver.linux.it --recv-keys <ID> | ||
− | la chiave | + | Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive). |
− | + | == Keyserver == | |
+ | Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito. | ||
+ | Non esiste un'entità centralizzata o un circuito di riferimento, per scelta, e, a volte, questo può generare confusione nell'utilizzatore. | ||
− | + | Tra i keyserver più noti: | |
+ | * keys.gnupg.net | ||
+ | * pgp.surfnet.nl | ||
+ | * pgp.circl.lu | ||
* sks.keyserver.penguin.de | * sks.keyserver.penguin.de | ||
* keyserver.kjsl.com | * keyserver.kjsl.com | ||
Riga 83: | Riga 86: | ||
= Editare una chiave = | = Editare una chiave = | ||
− | |||
Per fare operazioni e modifiche dobbiamo "editare" le chiavi: | Per fare operazioni e modifiche dobbiamo "editare" le chiavi: | ||
gpg --edit-key <ID> | gpg --edit-key <ID> | ||
Riga 91: | Riga 93: | ||
e rispondere alle domande | e rispondere alle domande | ||
− | + | {{Note | |
+ | |type=warning | ||
+ | |text=Prima di uscire dall'editor, ricordarsi di '''salvare''', altrimenti le modifiche vanno perdute | ||
+ | }} | ||
+ | |||
+ | Si possono fare molte altre cose, ad esempio: | ||
cambiare i valori di fiducia | cambiare i valori di fiducia | ||
> trust | > trust | ||
Riga 102: | Riga 109: | ||
firmare localmente in modo non esportabile | firmare localmente in modo non esportabile | ||
> lsign | > lsign | ||
− | quindi ricordarsi di salvare | + | quindi '''ricordarsi di salvare''' |
> save | > save | ||
oppure | oppure | ||
Riga 112: | Riga 119: | ||
Avendo già il certificato di revoca: | Avendo già il certificato di revoca: | ||
− | gpg --import revoca.asc | + | gpg --import certificato-di-revoca.asc |
− | gpg --keyserver keyserver.linux.it --send-key | + | gpg --keyserver keyserver.linux.it --send-key ''ID'' |
= Gestione delle chiavi = | = Gestione delle chiavi = | ||
− | |||
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni. | Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni. | ||
gpg --list-keys --with-colons | gpg --list-keys --with-colons | ||
Riga 131: | Riga 137: | ||
Rimandiamola al proprietario: | Rimandiamola al proprietario: | ||
− | gpg --armor -export -o | + | gpg --armor -export -o firma.sig <ID> |
− | + | Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata. | |
+ | Spedire al proprietario ''firma.sig''. | ||
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con | Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con | ||
− | gpg --import | + | gpg --import firma.sig |
− | si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. | + | si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. |
+ | |||
+ | Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura. | ||
+ | Se non ci fidiamo, non firmiamo. | ||
+ | Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. | ||
Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra chiave, contenente la nuova firma, al keyserver: | Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra chiave, contenente la nuova firma, al keyserver: | ||
Riga 151: | Riga 162: | ||
* il percorso delle chiavi per risalire alla chiave in questione è di pochi passi (generalmente, al massimo 5) | * il percorso delle chiavi per risalire alla chiave in questione è di pochi passi (generalmente, al massimo 5) | ||
− | Gestire la rete di fiducia gpg.conf | + | Questi parametri sono configurabili, e possono essere resi più o meno stringenti, a seconda dell'uso che intendiamo fare della rete di fiducia GPG. |
+ | |||
+ | Gestire la rete di fiducia gpg.conf ha due opzioni: | ||
--completes-needed n | --completes-needed n | ||
Riga 165: | Riga 178: | ||
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK | * ''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 | * ''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 | + | * ''Enigmail'', estensione per Mozilla Thunderbird per cifrare email e allegati (deprecata: adesso Thunderbird integra GPG) |
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti) | * ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti) | ||
Versione delle 08:22, 16 mag 2021
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
Certificato di revoca
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa. Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro. Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.
gpg --output certificato-di-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
Esempio:
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
La chiave privata può essere utilizzata per impersonare la vostra identità, perciò NON inviarla mai a nessuno, ed esportarla solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.
gpg --armor --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>
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).
Keyserver
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito. Non esiste un'entità centralizzata o un circuito di riferimento, per scelta, e, a volte, questo può generare confusione nell'utilizzatore.
Tra i keyserver più noti:
- keys.gnupg.net
- pgp.surfnet.nl
- pgp.circl.lu
- sks.keyserver.penguin.de
- keyserver.kjsl.com
- keyserver.linux.it
- pgp.mit.edu
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
Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute
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 certificato-di-revoca.asc gpg --keyserver keyserver.linux.it --send-key ID
Gestione delle chiavi
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.
gpg --list-keys --with-colons
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)
gpg --list-ownertrust
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 firma.sig <ID>
Questo comando crea un file di nome firma.sig nella directory corrente, che contiene la chiave firmata. Spedire al proprietario firma.sig.
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con
gpg --import firma.sig
si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia.
Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura. Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete.
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>
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.
gpg --keyserver pgp.mit.edu --refresh-keys
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 è di pochi passi (generalmente, al massimo 5)
Questi parametri sono configurabili, e possono essere resi più o meno stringenti, a seconda dell'uso che intendiamo fare della rete di fiducia GPG.
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 (deprecata: adesso Thunderbird integra GPG)
- Pinentry (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)
Rete di fiducia
Web of trust: una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri. In questo modo è possibile creare la propria rete di fiducia, scegliendo un livello accettabile di indirezione.
GPG Keysigning Party
Ogni tanto vengono organizzati degli incontri per consentire ai possessori di chiavi GPG di ampliare la loro rete di fiducia.
Cosa si deve fare per un keysigning party:
- generare la propria coppia di chiavi e il corrispondente certificato di revoca, se non si è già fatto;
- inviare la propria chiave ad un keyserver, almeno qualche giorno prima del party;
- preparare dei biglietti con scritto il proprio nome e cognome, indirizzo email, ID e impronta (fingerprint) della vostra chiave;
- recarsi al party portando con sé i biglietti e uno o più documenti di identità;
- scambiarsi le chiavi verificando l'identità di chi dichiara di esserne il legittimo proprietario;
- tornati a casa, scaricare le chiavi da un keyserver utilizzando l'ID; poi controllare l'impronta (fingerprint) e infine firmare la chiave col grado di fiducia desiderato e rispedirla al server.