In un articolo precedente, ho introdotto GnuPG verificando un file firmato e crittografando un file per un destinatario utilizzando una chiave pubblica. Ho anche condiviso come creare una coppia di chiavi ed esportare una chiave pubblica in modo da poter ricevere messaggi crittografati. In questo articolo dimostrerò come firmare i file prima di condividerli via e-mail o pubblicarli su un sito web.
Con GnuPG, ci sono diversi metodi per firmare un file.
$ gpg --help | grep -i sign
Sign, check, encrypt or decrypt
-s, --sign make a signature
--clear-sign make a clear text signature
-b, --detach-sign make a detached signature
--verify verify a signature
Man mano che ogni opzione viene discussa, firmerò un semplice file di testo.
$ cat sample.txt
Sample text for gpg signing
Fai una firma
Con il --sign
opzione, il file viene effettivamente crittografato con la chiave privata. La chiave pubblica è necessaria per visualizzare il contenuto del file. Questo costringe il destinatario a verificare l'origine e rimuove qualsiasi contenuto di testo in chiaro dal transito. Non è privato poiché chiunque disponga della chiave pubblica può decrittografare il file.
$ gpg -s sample.txt
Ciò si traduce in un file denominato sample.txt.gpg.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data

Per verificare solo la firma, usa --verify
opzione. Per visualizzare i contenuti e mostrare la verifica della firma, usa il --decrypt
opzione.
$ gpg --decrypt sample.txt.gpg
Sample text for gpg signing
gpg: Signature made Sat 30 May 2020 09:16:24 AM EDT
gpg: using DSA key 15AC***********
...omitted...
Fai una firma staccata
L'opzione di firma distaccata è disponibile per fornire a tutti la possibilità di visualizzare il messaggio senza disporre della chiave pubblica. Questo crea un file di firma separato che viene utilizzato per verificare il messaggio originale, se lo si desidera. Nella sua forma più semplice, questo file contiene un hash del messaggio originale ed è crittografato con la chiave privata. Chiunque disponga della chiave pubblica può aprire la firma e quindi confrontare gli hash per verificare l'integrità del file firmato.
Crea il file della firma utilizzando il --detach-sign
opzione.
$ gpg -b sample.txt
Il risultato è un .sig separato file di dati.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data
sample.txt.sig: data

Se non desideri condividere, pubblicare o inviare tramite e-mail un file di dati, puoi firmare il file con il --armor
opzione e creerà un file di testo ASCII con la firma. Utilizzerà anche il .asc estensione invece di .sig estensione:
$ cat sample.txt.asc
-----BEGIN PGP SIGNATURE-----
iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJ
dC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8=
=IvP/
-----END PGP SIGNATURE-----
Il file di testo normale originale e il file di firma separato devono essere entrambi messi a disposizione del destinatario.
Per verificare la firma, specificare il file della firma e quindi il file originale.
$ gpg --verify sample.txt.sig sample.txt
Se sono stati utilizzati i nomi predefiniti, puoi omettere il nome del file non crittografato.
$ gpg --verify sample.txt.sig
gpg: assuming signed data in 'sample.txt'
gpg: Signature made Sat 30 May 2020 09:23:53 AM EDT
...omitted...
Crea una firma di testo in chiaro
Il --clear-sign
opzione è un'opzione più recente in termini di lunga storia di GPG ed è molto comune per i file pubblicati su siti Web come Fedora che scarica i file CHECKSUM. I contenuti sono leggibili da chiunque. Le informazioni sulla firma sono disponibili nello stesso file anche per coloro che vogliono verificare l'origine e l'integrità dei contenuti.

Il --clear-sign
l'opzione creerà un nuovo file con .asc estensione.
$ gpg --clear-sign sample.txt
$ file sample*
sample.txt: ASCII text
sample.txt.asc: ASCII text
sample.txt.gpg: data
sample.txt.sig: data
Per verificare la firma, usa il --verify
opzione:
$ gpg --verify sample.txt.asc
gpg: Signature made Sat 30 May 2020 09:27:56 AM EDT
...omitted...
gpg: WARNING: not a detached signature; file 'sample.txt' was NOT verified!
Si noti che durante il processo di verifica viene visualizzato un messaggio che avverte che il file originale associato non è stato verificato. Puoi rinominare questo file prima di pubblicarlo sul tuo sito web. La verifica controllerà comunque il contenuto del file.
Anche se questo è spesso il metodo più conveniente per i consumatori dei tuoi prodotti, c'è un avviso nella pagina man di GPG che le firme staccate sono l'opzione migliore quando è richiesta una verifica completa.
Dalla pagina man di gpg:
Nota:durante la verifica di una firma in chiaro, GPG verifica solo ciò che costituisce i dati firmati in chiaro e non eventuali dati aggiuntivi al di fuori della firma in chiaro o delle righe di intestazione che seguono direttamente la linea del trattino. L'opzione --output può essere utilizzata per scrivere i dati firmati effettivi, ma ci sono anche altre insidie con questo formato. Si suggerisce di evitare firme in chiaro a favore di firme staccate.
Utilizzando una coppia di chiavi specifica
Gli esempi precedenti sono stati tutti firmati con la prima chiave privata disponibile nel mio portachiavi. Potrei voler utilizzare una chiave diversa quando firmo un file per la pubblicazione su un sito Web. Viene creata una coppia di chiavi specificatamente per il progetto o il prodotto. La coppia di chiavi può anche trovarsi su un nuovo portachiavi condiviso.
$ gpg --keyring /etc/gpgkeys --no-default-keyring --full-gen-key <other options>
Quando un file è firmato o crittografato, assicurati di specificare anche il --keyring
opzione.
Anche se solo una persona sta utilizzando la chiave per firmare i file, crea una coppia di chiavi separata da utilizzare per la firma. Non utilizzare la stessa chiave per altre attività quotidiane come la crittografia delle email personali. Puoi elencare i nomi delle chiavi private disponibili con gpg --list-secret
. L'ID, il nome o l'e-mail possono essere utilizzati per identificare la chiave.
Per firmare il file con una chiave specifica da un portachiavi, usa il --local-user
opzione di identità.
$ gpg --local-user "My Project 2" --clear-sign sample.txt
Concludi
Se il tuo file di testo semplice è un elenco di hash di checksum per i download dei tuoi prodotti, quel file, tutti i file delle firme e la chiave pubblica utilizzata per verificare le firme possono essere pubblicati su un sito Web. I consumatori possono quindi verificare i download prima di installare qualsiasi software sui propri sistemi.
[ Vuoi saperne di più sulla sicurezza? Consulta la checklist di sicurezza e conformità IT. ]