Come usare GnuPG con mutt: Mutt GnuPG HOWTO.
gpg --full-generate-key
Please select what kind of key you want: RSA and RSA RSA keys may be between 1024 and 4096 bits long. Requested keysize is 2048 bits Key is valid for? (0) 3y Real name: Niccolo Rigacci Email address: niccolo@rigacci.org
La chiave privata (protetta dalla passphrase) viene memorizzata in ~/.gnupg/secring.gpg
, le chiavi pubbliche in ~/.gnupg/pubring.gpg
.
Per pubblicare la propria chiave (la parte pubblica) su un server pubblico:
gpg --keyserver pgp.key-server.io --send-keys 58F28BB5
Questi i comandi per:
pubring.gpg
) una chiave pubblica. Si indica il key ID e si usa il server hkp (Horowitz Key Protocol) di default subkeys.pgp.net.pubring.gpg
)secring.gpg
)gpg --recv-keys 0xC9C40C31 gpg --list-keys gpg --list-secret-keys
Sul server keys.openpgp.org è possibile pubblicare e cercare chiavi pubbliche. Esiste una procedura web che consente di caricare il file ASCII della chiave pubblica. Per impostazione predefinita non viene pubblicato l'indirizzo di posta elettronica associato, nel caso si voglia rendere trovabile la propria chiave cercandola per email, è necessario eseguire la procedura di verifica con invio di conferma allo stesso indirizzo email.
Questi i comandi per firmare in documento in chiaro, verificare la firma, criptare un documento in formato armor:
gpg --clearsign sample.txt gpg --verify sample.txt.asc gpg --encrypt --armor sample.txt
Viene creato il file sample.txt.asc
.
Scrivere la mail normalmente, nel menu di composizione/spedizione premere il tasto p, quindi scegliere (e)ncrypt
oppure (s)ign
. Al momento dell'invio (tasto y) in caso di encrypt si potrà scegliere la chiave del destinatario da utilizzare.
Se riceviamo un messaggio criptato con la nostra chiave pubblica, questo viene visualizzato più o meno così:
-----BEGIN PGP MESSAGE----- Charset: ISO-8859-15 Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org hQIOA0tM8wRUc4O3EAgAp64dASpkzHFQCTVkqw7678SMGUrzGhuarslU/U2UyE6W nIOUycrRQ3gon1qcQJ9lorMlSO0r+dKewuAd36RTDJF4ilSsgK8ewisH5FlatF9H ... NNNvDbscjyR0X7L7ksJ2BwnYxSguaQT4ONOnLGlEi0Y4SjTOZqqLTa2sCcY6ox5m sQDexp+DrD1EMmxhapRRO7VAr/fj7OJ/RDrG =JwLq -----END PGP MESSAGE-----
Si deve premere Esc-P
(p maiuscola), quindi immettere la password che protegge il nostro portachiavi. A questo punto il messaggio viene decriptato (solo in RAM) e mostrato a video.
Se si effettua un reply al messaggio, mutt tenta di criptarlo con la chiave pubblica del mittente, cercandola nel portachiavi. Se la trova il messaggio spedito sarà criptato così come la copia locale (pertanto non sarà possibile rileggerlo).
Si deve vedere l'ID della nostra chiave, quindi esportare in formato ASCII-armored la chiave pubblica:
$ gpg --list-keys /home/niccolo/.gnupg/pubring.gpg -------------------------------- pub 1024D/970EC418 2005-07-13 [expires: 2007-07-13] uid Niccolo Rigacci <niccolo(a)rigacci.org> gpg --armor --export 970EC418 > niccolo_pub.key
Il nostro corrispondente può importare la chiave nel proprio keyring con il comando:
gpg -i --import niccolo_pub.key
Importante lo switch -i
che mostra le informazioni contenute nella chiave e chiede conferma prima di inserirla nel portachiavi.
Esistono dei server pubblici dedicati allo scambio delle chiavi (pubbliche). Ad esempio con pgp.key-server.io oppure pgp.mit.edu l'upload della chiave ASCII-armored viene fatta via web, poi si può fare la ricerca per parola chiave (nome, cognome, dominio mail, …).
Per installare nel proprio portachiavi una chiave presa dal server in questione si può prelevare il file ASCII-armored ed effettuare l'--import
, uppure usare l'opzione --recv-keys
vista in precedenza per prelevare la chiave direttamente via rete. Non è necessario neanche specificare l'opzione --keyserver
, forse perché si tratta dello stesso circuito pgp.net?
Esempio: partendo da wwwkeys.eu.pgp.net si viene rediretti su minsky.surfnet.nl. Si effettua una ricerca per parola chieve, si identifica la keyID desiderata e la si importa nel proprio keyring:
gpg --keyserver minsky.surfnet.nl --recv-keys 111FA57C
Con questa procedura si può copiare una chiave privata da un host ad un altro. Per prima cosa si elencano le chiavi private e si prende nota dell'ID della chiave da esportare:
gpg --list-secret-keys
Quindi si salva in un file il PRIVATE KEY BLOCK (quasi certamente la chiave privata è protetta da password, che viene chiesta durante la procedura di esportazione):
touch private.key chmod 640 private.key gpg --armor --export-secret-keys 8364FCC486877E37A39B7D5D01526646275E281D > private.key
Dopo aver copiato il file sul nuovo host, si esegue (viene chiesta nuovamente la password che protegge la chiave):
gpg --import private.key
La chiave privata viene salvata nel keyring, si può verificare con gpg --list-secret-keys. La chiave resta cifrata con la password che aveva in origine.
gpg --encrypt <filename> gpg --decrypt <filename>.gpg
Vengono chiesti gli ID dei destinatari. Per ogni destinatario aggiunto il file cresce di pochi byte.
Per produrre un file criptato, ma in formato ASCII:
gpg --armor --encrypt <filename> gpg --decrypt <filename>.asc
Bisogna prima importare la relativa chiave pubblica di chi ha firmato il file e poi verificare il file rispetto alla firma. Esempio con l'archivio dei sorgenti kernel Linux:
gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E gpg --verify linux-2.6.15.tar.bz2.sign linux-2.6.15.tar.bz2 gpg: Signature made Tue 03 Jan 2006 06:19:03 AM CET using DSA key ID 517D0F0E gpg: Good signature from "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: C75D C40A 11D7 AF88 9981 ED5B C86B A06A 517D 0F0E
Il messaggio di warning significa che la chiave è stata ottenuta senza seguire una trust path opportuna, infatti è stata direttamente scaricata dal web e messa nel portachiavi.
Firmare la chiave di qualcuno (GnuPG Keysigning Party HOWTO) significa anzitutto firmarla e quindi pubblicare il fatto di averla firmata:
gpg --sign-key <Key_ID> gpg --keyserver <keyserver> --send-key <Key_ID>
Durante i Keysigning Party si prende nota della key ID e della public key fingerprint che ci comunica una persona fidata, questo perché la fingerprint è più mageggevole della chiave intera.
Con altri mezzi si recupera l'intera chiave pubblica, ad esempio cercandola per key ID da un key server e salvandola in un file. Quindi si verifica che la fingerprint sia davvero quella e se è il caso si importa nel portachiavi:
gpg --with-fingerprint <filename_pub.key> gpg -i --import <filename_pub.key>
Per vedere la fingerprint delle chiavi in nostro possesso:
gpg --fingerprint
Si dovrebbe poter interrogare dei server pubblici per cercare la chiave pubblica di una persona, ad esempio http://pgp.key-server.io/ oppure http://hkps.pool.sks-keyservers.net/. Nel risultato vengono mostrate tutte le chiavi, anche quelle eventualmente scadute o revocate.
Nella schermata sopra si vede ad esempio che esiste la chiave 275E281D scaduta il 2018-09-17, la chiave più recente invece è la 58F28BB5 che scade il 2021-09-16.