it-swarm.dev

Estrazione del keyid PGP dal file della chiave pubblica

Esiste un modo tramite uno strumento CLI o un qualche tipo di API per estrarre l'ID chiave PGP dal blocco di chiavi pubbliche PGP?

Ho trovato il valore hexa della chiave nel file binario, ma suppongo che la posizione si basi sul tipo/dimensione della chiave.

Fondamentalmente, ho la chiave pubblica formattata in base64 e vorrei recuperare l'ID chiave da essa, senza importarla con GnuPG.

21
golja

RFC 488 sul formato del messaggio OpenPGP spiega come calcolare l'ID chiave dalla chiave pubblica.

Estratti da sezione 12.2 :

Per una chiave V3, l'ID chiave a otto ottetti è costituito dai 64 bit bassi del modulo pubblico della chiave RSA.

E per i tasti V4:

Un'impronta digitale V4 è l'hash SHA-1 a 160 bit dell'ottetto 0x99, seguito dalla lunghezza del pacchetto a due ottetti, seguito dall'intero pacchetto a chiave pubblica che inizia con il campo della versione. L'ID chiave sono i 64 bit di basso livello dell'impronta digitale.

È possibile analizzare facilmente gli ultimi 64 bit dalle chiavi pubbliche codificate in base64, che è l'ID chiave per la chiave pubblica corrispondente.

12
Jor-el

Puoi usare gpg --dry-run per evitare modifiche.

La riga seguente stamperà l'id chiave nel suo output (può essere modificato usando i soliti modificatori come --with-colons per ulteriori elaborazioni). A4FF2279 è l'ID chiave qui.

$ gpg --dry-run --import pubkey.asc
gpg: key A4FF2279: public key "[User ID not found]" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: no ultimately trusted keys found

Appena provato, la chiave non è stata memorizzata nel mio portachiavi, ma l'ID chiave è stato stampato. Ma fai attenzione con --dry-run, la pagina man ha un avviso:

   --dry-run
         Don't make any changes (this is not completely implemented).

Una discussione più approfondita di più varianti per output leggibili dall'uomo, leggibili meccanicamente e molto tecnici per diverse versioni di GnuPG si trova nella domanda Stack Overflow Come visualizzare gpg dettagli chiave senza importarlo? . Tutti presenteranno anche l'ID chiave.

17
Jens Erat

gpg --with-fingerprint GPG-KEY-filename-that-you-downloaded-from-internet

Per esempio :

wget https://artifacts.elastic.co/GPG-KEY-elasticsearch

gpg --with-fingerprint GPG-KEY-elasticsearch

4
Georgios Doumas

Per evitare il problema "non completamente implementato" menzionato nella risposta di Jens Erat, usa gpg --homedir su una directory temporanea. Potrebbe essere necessario modificare il comando mktemp in base alla tua piattaforma:

gpg --homedir $( mktemp -d -t '' ) --import /tmp/somekey.asc
2
gpg user

Dal manuale di gpg (gpg (GnuPG) 2.2.11):

--mostra-keys

Questo comando accetta le chiavi OpenPGP come input e stampa le informazioni su di esse allo stesso modo del comando --list-keys per la chiave memorizzata localmente. Inoltre sono abilitate anche le opzioni dell'elenco show-insolable-uids, show-inutable-subkeys, show-notations e show-policy-urls. Come al solito per l'elaborazione automatizzata, questo comando dovrebbe essere combinato con l'opzione --with-due punti.

Per esempio:

$ gpg --show-keys docker-ce.gpg pub rsa4096 2017-02-22 [SCEA] 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 uid Docker Release (CE deb) <[email protected]> sub rsa4096 2017-02-22 [S]

dove 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 è l'ID chiave.

2
Traz

Dopo l'importazione della chiave pubblica

pgp --import PublicKeyToImport.asc

correre

pgp --list-userids

per determinare la chiave o l'ID utente da utilizzare con --encrypt.

Alg  Type Size/Type Flags   Key ID     User ID
---- ---- --------- ------- ---------- -------
1
Miha