Il controllo di una chiave è firmato
La risposta breve è che usi il comando gpg --list-sig <key id>
.
Ad esempio, sono andato al sito che hai elencato sopra e ho scaricato la chiave di firma del rilascio 2 di qubes. Ho quindi importato quella chiave nel mio keyring gpg locale:
$ gpg --import qubes-release-2-signing-key.asc
che risulta nel seguito
pub rsa4096/0A40E458 2012-11-15 [SC]
uid [ unknown] Qubes OS Release 2 Signing Key
Per verificare se la chiave è stata firmata, puoi utilizzare il comando gpg --list-sig <key id>
.
In questo caso, possiamo vedere che l'ID della chiave è 0A40E458
dall'output precedente:
$ gpg --list-sig 0A40E458
pub rsa4096/0A40E458 2012-11-15 [SC]
uid [ unknown] Qubes OS Release 2 Signing Key
sig 3 0A40E458 2012-11-15 Qubes OS Release 2 Signing Key
sig 36879494 2012-11-15 [User ID not found]
L'ultima voce è la chiave master di Qubes, ma è sconosciuta perché non ce l'ho sul mio portachiavi. Se poi scarico la chiave master e la aggiungo al portachiavi:
$ gpg2 --import ./qubes-master-signing-key.asc
gpg: key 36879494: public key "Qubes Master Signing Key" imported
gpg: Total number processed: 1
gpg: imported: 1
Posso verificare di nuovo e verificare che la chiave di rilascio sia firmata correttamente:
$ gpg2 --list-sig 0A40E458
pub rsa4096/0A40E458 2012-11-15 [SC]
uid [ unknown] Qubes OS Release 2 Signing Key
sig 3 0A40E458 2012-11-15 Qubes OS Release 2 Signing Key
sig 36879494 2012-11-15 Qubes Master Signing Key
Verifica delle firme
Quando un file viene firmato utilizzando una chiave gpg, viene creato un file di firma separato. Con l'esempio di qubes, rilasciano un file .DIGESTS
. Vedi il titolo "Verifica dei digest" nel link che hai fornito per maggiori dettagli su come controllare un tale digest.
Fondamentalmente, ciò che hanno fatto è preso il file che si pretende di provenire da loro, ed eseguire una serie di algoritmi di hash contro di esso. Una funzione di hash prenderà un file o un messaggio di input e produrrà una stringa hash univoca piuttosto breve. Questo è crittograficamente creato in modo da rendere molto difficile o quasi impossibile trovare qualsiasi altro file che produca lo stesso output.
Quindi firmano questa stringa di hash con la loro chiave GPG. Sia l'hash che la firma di quel testo hash vengono inseriti nel file .DIGESTS.
La parte importante da notare con questo processo è che qualsiasi modifica al file originale in fase di verifica produrrà una stringa di hash completamente diversa. Pertanto, quando si esegue il comando di verifica, ciò che accade sulla macchina locale è che il sistema sta creando il proprio hash del file specificato e controllando che corrisponda all'hash all'interno del testo firmato. Se entrambi corrispondono, e la firma viene verificata come proveniente dalla chiave che hai già deciso di fidarti, allora sai che il proprietario della chiave ha 'firmato' la versione del file che hai scaricato.