Firme digitali con GnuPG

In un precedente articolo, 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, vi mostrerò come firmare i file prima di condividere via e-mail o la pubblicazione su un sito web.

Con GnuPG, esistono diversi metodi per firmare un file.

$ gpg --help | grep -i signSign, 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

Come ogni opzione è discussa, firmerò un semplice file di testo.

$ cat sample.txt Sample text for gpg signing

Crea una firma

Con l’opzione --sign, il file viene effettivamente crittografato con la chiave privata. La chiave pubblica è necessaria per visualizzare il contenuto del file. Ciò costringe il destinatario a verificare l’origine e rimuove qualsiasi contenuto di testo in chiaro da transit. Non è privato poiché chiunque abbia la chiave pubblica può decifrare il file.

$ gpg -s sample.txt

Si ottiene un file denominato sample.txt.gpg.

$ file sample*sample.txt: ASCII textsample.txt.gpg: data
Immagine
Visualizzazione grafica di due file inviati da A a B dove uno è testo normale e uno è crittografato

Per verificare solo la firma, utilizzare l’opzione --verify. Per visualizzare il contenuto e mostrare la verifica della firma, utilizzare l’opzione --decrypt.

$ gpg --decrypt sample.txt.gpg Sample text for gpg signinggpg: Signature made Sat 30 May 2020 09:16:24 AM EDTgpg: using DSA key 15AC***********...omitted...

Crea una firma distaccata

L’opzione firma distaccata è disponibile per fornire a tutti la possibilità di visualizzare il messaggio senza avere la 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 abbia la chiave pubblica può aprire la firma e quindi confrontare gli hash per verificare l’integrità del file firmato.

Creare il file di firma utilizzando l’opzione --detach-sign.

$ gpg -b sample.txt

Il risultato è un separato .file di dati sig.

$ file sample*sample.txt: ASCII textsample.txt.gpg: datasample.txt.sig: data
Immagine
Grafico visualizzazione di due file inviati da a a B, dove è testo normale e uno è crittografato

Se non si desidera condividere, post, o e-mail un file di dati, è possibile firmare il file con l’ --armor opzione, per creare un file di testo ASCII con la firma. Sarà anche utilizzare il .estensione asc invece del .estensione sig:

$ cat sample.txt.asc -----BEGIN PGP SIGNATURE-----iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJdC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8==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, è possibile escludere 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 in chiaro

L’opzione --clear-sign è un’opzione più recente in termini di lunga storia di GPG ed è molto comune per i file pubblicati su siti web come Fedora download CHECKSUM files. I contenuti sono leggibili da chiunque. Le informazioni sulla firma sono disponibili nello stesso file anche per coloro che desiderano verificare l’origine e l’integrità dei contenuti.

Immagine
Contenuto del file di CHECKSUM che mostra sia il testo normale di SHA256SUM e PGP Signature block

L’opzione --clear-sign creerà un nuovo file con il .estensione asc.

$ gpg --clear-sign sample.txt
$ file sample*sample.txt: ASCII textsample.txt.asc: ASCII textsample.txt.gpg: datasample.txt.sig: data

Per verificare la firma, utilizzare l’opzione --verify :

$ 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 avvisa che il file originale associato non è selezionato. Puoi rinominare questo file prima di pubblicarlo sul tuo sito web. La verifica controllerà comunque il contenuto del file.

Mentre 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 la verifica completa.

Dalla pagina man di gpg:

Nota: quando si verifica una firma in chiaro, GPG verifica solo ciò che costituisce i dati firmati in chiaro e non i dati aggiuntivi al di fuori della firma in chiaro o delle linee di intestazione che seguono direttamente la riga del marcatore trattino. L’opzione output output può essere utilizzata per scrivere i dati reali firmati, ma ci sono anche altre insidie con questo formato. Si consiglia di evitare le firme in chiaro a favore delle firme distaccate.

Utilizzando una coppia di chiavi specifica

Gli esempi precedenti sono stati tutti firmati con la prima chiave privata disponibile nel mio portachiavi. Potrei voler usare una chiave diversa quando firmo un file per la pubblicazione su un sito web. Una coppia di chiavi viene creata appositamente per il progetto o il prodotto. La coppia di chiavi può anche essere su un nuovo portachiavi condiviso.

$ gpg --keyring /etc/gpgkeys --no-default-keyring --full-gen-key <other options>

Quando un file è firmato o crittografato, assicurarsi di specificare anche l’opzione --keyring.

Anche se una sola persona utilizza 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 e-mail personali. È possibile 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, utilizzare l’opzione identità --local-user.

$ gpg --local-user "My Project 2" --clear-sign sample.txt

Wrap up

Se il file di testo semplice è un elenco di hash di checksum per i download del prodotto, quel file, qualsiasi file di firma 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 loro sistemi.



+