Verifica che una chiave sia stata firmata da un'altra chiave

3

Ho iniziato a utilizzare GPG4Win / Kleopatra, l'implementazione GNU Privacy Guard per Windows. Più recentemente ho voluto verificare il download di Qubes OS, per il quale è disponibile una guida qui . Descrivono una chiave pubblica principale (RSA 4096-bit) utilizzata per firmare chiavi minori, come quelle che firmano particolari versioni del sistema operativo di Qubes. Sono stato in grado di verificare il mio download utilizzando il suo hash della firma scollegato firmato dalla chiave minore corretta. Come verifico se la chiave inferiore è firmata dalla chiave principale (dato che non viene offerta alcuna firma per questo)?

Questa domanda ne motiva un'altra: in che modo le firme "di solito" accompagnano il contenuto? PGP, TLS, ecc. Concatenano semplicemente la firma con il testo cifrato o la pre-immagine riempita, o c'è bisogno di due file / pacchetti separati? Grazie mille in anticipo.

    
posta Polite Master 19.04.2016 - 01:36
fonte

2 risposte

4

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.

    
risposta data 19.04.2016 - 10:37
fonte
1

La corretta verifica delle firme delle chiavi viene eseguita con --check-signatures in questo modo:

$ gpg --check-signatures
pub   rsa4096 2017-03-06 [SC]
      5817A43B283DE5A9181A522E1848792F9E2795E9
uid           [ unknown] Qubes OS Release 4 Signing Key
sig!3        1848792F9E2795E9 2017-03-06  Qubes OS Release 4 Signing Key
sig!         DDFA1A3E36879494 2017-03-08  Qubes Master Signing Key

Alla fine verrà visualizzato anche un riepilogo del numero di firme buone / cattive ...

gpg: 2 good signatures

Sembra un piccolo dettaglio, ma il modo in cui il gpg trasmette informazioni importanti sulle chiavi è sfortunatamente criptico. La firma chiave non viene riportata come valida / corretta, a meno che la designazione sig sia immediatamente seguita da un segno esclamativo ! . Una brutta firma mostra un segno meno. L'utilizzo dei comandi "elenco" non esegue questa verifica (noti i simboli mancanti quando viene utilizzato --list-sig ), che è la domanda.

    
risposta data 02.01.2018 - 08:56
fonte

Leggi altre domande sui tag