Come visualizzare i dettagli della chiave gpg senza importarla?


131

Ho una copia della chiave gpg del repository apt postgresql e vorrei visualizzare i dettagli della chiave gpg come viene fornita nel file. È possibile senza importarlo in un portachiavi?

Risposte:


149

Esistono diversi livelli di dettaglio che è possibile ottenere osservando i dati chiave di OpenPGP: un riepilogo di base, un output leggibile da macchina di questo riepilogo o un elenco dettagliato (e molto tecnico) dei singoli pacchetti OpenPGP.

Informazioni chiave di base

Per un breve picco in un file chiave OpenPGP, è possibile semplicemente passare il nome file come parametro o pipe nei dati chiave tramite STDIN. Se non viene passato alcun comando, GnuPG prova a indovinare cosa si desidera fare e, per i dati chiave, viene stampato un riepilogo sulla chiave:

$ gpg a4ff2279.asc
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa8192 2012-12-25 [SC]
      0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
uid           Jens Erat (born 1988-01-19 in Stuttgart, Germany)
uid           Jens Erat <jens.erat@fsfe.org>
uid           Jens Erat <jens.erat@uni-konstanz.de>
uid           Jens Erat <jabber@jenserat.de>
uid           Jens Erat <email@jenserat.de>
uid           [jpeg image of size 12899]
sub   rsa4096 2012-12-26 [E] [revoked: 2014-03-26]
sub   rsa4096 2012-12-26 [S] [revoked: 2014-03-26]
sub   rsa2048 2013-01-23 [S] [expires: 2023-01-21]
sub   rsa2048 2013-01-23 [E] [expires: 2023-01-21]
sub   rsa4096 2014-03-26 [S] [expires: 2020-09-03]
sub   rsa4096 2014-03-26 [E] [expires: 2020-09-03]
sub   rsa4096 2014-11-22 [A] [revoked: 2016-03-01]
sub   rsa4096 2016-02-24 [A] [expires: 2020-02-23]

Impostando --keyid-format 0xlong, vengono stampati gli ID chiave lunghi anziché gli ID chiave breve non sicuri :

$ gpg a4ff2279.asc                                                                 
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa8192/0x4E1F799AA4FF2279 2012-12-25 [SC]
      0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
uid                             Jens Erat (born 1988-01-19 in Stuttgart, Germany)
uid                             Jens Erat <jens.erat@fsfe.org>
uid                             Jens Erat <jens.erat@uni-konstanz.de>
uid                             Jens Erat <jabber@jenserat.de>
uid                             Jens Erat <email@jenserat.de>
uid                             [jpeg image of size 12899]
sub   rsa4096/0x0F3ED8E6759A536E 2012-12-26 [E] [revoked: 2014-03-26]
sub   rsa4096/0x2D6761A7CC85941A 2012-12-26 [S] [revoked: 2014-03-26]
sub   rsa2048/0x9FF7E53ACB4BD3EE 2013-01-23 [S] [expires: 2023-01-21]
sub   rsa2048/0x5C88F5D83E2554DF 2013-01-23 [E] [expires: 2023-01-21]
sub   rsa4096/0x8E78E44DFB1B55E9 2014-03-26 [S] [expires: 2020-09-03]
sub   rsa4096/0xCC73B287A4388025 2014-03-26 [E] [expires: 2020-09-03]
sub   rsa4096/0x382D23D4C9773A5C 2014-11-22 [A] [revoked: 2016-03-01]
sub   rsa4096/0xFF37A70EDCBB4926 2016-02-24 [A] [expires: 2020-02-23]
pub   rsa1024/0x7F60B22EA4FF2279 2014-06-16 [SCEA] [revoked: 2016-08-16]

Fornire -vo -vvaggiungeremo anche qualche informazione in più. In questo caso, preferisco stampare i dettagli del pacchetto (vedi sotto).

Uscita leggibile dalla macchina

GnuPG ha anche un formato di output separato da due punti, che è facilmente analizzabile e ha un formato stabile. Il formato è documentato nel doc/DETAILSfile GnuPG . L'opzione per ricevere questo formato è --with-colons.

$ gpg --with-colons a4ff2279.asc
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub:-:8192:1:4E1F799AA4FF2279:1356475387:::-:
uid:::::::::Jens Erat (born 1988-01-19 in Stuttgart, Germany):
uid:::::::::Jens Erat <jens.erat@fsfe.org>:
uid:::::::::Jens Erat <jens.erat@uni-konstanz.de>:
uid:::::::::Jens Erat <jabber@jenserat.de>:
uid:::::::::Jens Erat <email@jenserat.de>:
uat:::::::::1 12921:
sub:-:4096:1:0F3ED8E6759A536E:1356517233:1482747633:::
sub:-:4096:1:2D6761A7CC85941A:1356517456:1482747856:::
sub:-:2048:1:9FF7E53ACB4BD3EE:1358985314:1674345314:::
sub:-:2048:1:5C88F5D83E2554DF:1358985467:1674345467:::
sub:-:4096:1:8E78E44DFB1B55E9:1395870592:1599164118:::
sub:-:4096:1:CC73B287A4388025:1395870720:1599164118:::
sub:-:4096:1:382D23D4C9773A5C:1416680427:1479752427:::
sub:-:4096:1:FF37A70EDCBB4926:1456322829:1582466829:::

Da GnuPG 2.1.23, l' gpg: WARNING: no command supplied. Trying to guess what you mean ...avviso può essere omesso usando l' --import-options show-onlyopzione insieme al --importcomando (questo funziona anche senza --with-colons, ovviamente):

$ gpg --with-colons --import-options show-only --import a4ff2279
[snip]

Per le versioni precedenti: il messaggio di avviso è stampato su STDERR, quindi puoi semplicemente leggere STDIN per dividere le informazioni chiave dall'avviso.

Dettagli tecnici: Elenco dei pacchetti OpenPGP

Senza installare ulteriori pacchetti, è possibile utilizzare gpg --list-packets [file]per visualizzare informazioni sui pacchetti OpenPGP contenuti nel file.

$ gpg --list-packets a4ff2279.asc
:public key packet:
    version 4, algo 1, created 1356475387, expires 0
    pkey[0]: [8192 bits]
    pkey[1]: [17 bits]
    keyid: 4E1F799AA4FF2279
:user ID packet: "Jens Erat (born 1988-01-19 in Stuttgart, Germany)"
:signature packet: algo 1, keyid 4E1F799AA4FF2279
    version 4, created 1356516623, md5len 0, sigclass 0x13
    digest algo 2, begin of digest 18 46
    hashed subpkt 27 len 1 (key flags: 03)
[snip]

Lo pgpdump [file]strumento funziona in modo simile gpg --list-packetse fornisce un output simile, ma risolve tutti quegli identificatori di algoritmo in rappresentazioni leggibili. È disponibile per probabilmente tutte le distribuzioni rilevanti (sui derivati ​​Debian, il pacchetto è chiamato pgpdumpcome lo strumento stesso).

$ pgpdump a4ff2279.asc
Old: Public Key Packet(tag 6)(1037 bytes)
    Ver 4 - new
    Public key creation time - Tue Dec 25 23:43:07 CET 2012
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA n(8192 bits) - ...
    RSA e(17 bits) - ...
Old: User ID Packet(tag 13)(49 bytes)
    User ID - Jens Erat (born 1988-01-19 in Stuttgart, Germany)
Old: Signature Packet(tag 2)(1083 bytes)
    Ver 4 - new
    Sig type - Positive certification of a User ID and Public Key packet(0x13).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA1(hash 2)
    Hashed Sub: key flags(sub 27)(1 bytes)
[snip]

1
Grazie. Ho appena usato "gpg --list-keys path-to-key-file" e ho ottenuto quello che volevo vedere: ... hashed subpkt 2 len 4 (sig creato 2013-02-24) hashed subpkt 9 len 4 (key scade dopo 4y134d23h24m) ... e pgpdump rende l'output un po 'più leggibile.
Amos Shapira,

@AmosShapira Sei sicuro? Questo comando non funziona affatto per me. Forse intendevi --list-packets?
Jonathan Cross,

1
@JonathanCross In effetti, l'output descritto suona come --list-packets.
Jens Erat,

1
Come sbarazzarsi di questo brutto WARNING: no command supplieda Stderr? (Questo impedisce l'uso gpgcorretto degli script. Quando si tratta di crittografia, l'unico modo sicuro è trattare qualsiasi output di stderr come un errore fatale. Solo in questo modo sarai preparato quando verranno scoperte nuove importanti debolezze che vengono stampate solo su stderr).
Tino

1
Non sono consapevole che esiste un modo semplice per aggirare. Puoi comunque usare il file chiave come portachiavi e poi eseguire --list-keys, qualcosa del genere gpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keys. O semplicemente scartare il messaggio di avviso, c'è un sacco di opzioni per filtrare gli script stderr in (ba) sh .
Jens Erat,

31

Mi sembra di poter andare d'accordo semplicemente:

$gpg <path_to_file>

Quali output in questo modo:

$ gpg /tmp/keys/something.asc 
  pub  1024D/560C6C26 2014-11-26 Something <something@none.org>
  sub  2048g/0C1ACCA6 2014-11-26

L'operazione non ha specificato in particolare quali informazioni chiave sono pertinenti. Questo output è tutto ciò che mi interessa.


30

Per verificare ed elencare l'impronta digitale della chiave (senza prima importarla nel portachiavi), digitare

gpg --with-fingerprint <filename>

Modifica: su Ubuntu 18.04 (gpg 2.2.4) l'impronta digitale non viene mostrata con il comando sopra. Utilizzare --with-subkey-fingerprintinvece l' opzione

gpg --with-subkey-fingerprint <filename>

4
Questa dovrebbe essere la risposta accettata imo. Sono d'accordo con il commento postato come risposta di @Skyr.
gertvdijk,

2
ACK, questo è molto buono, non richiede un portachiavi personale locale ecc. Visualizza il nome della chiave ... funziona meglio.
Florian Heigl,

1
Per qualche ragione sconosciuta / non documentata gpg --with-fingerprintsopprime la stampa delle impronte digitali al mio fianco. Ubuntu 18.04gpg (GnuPG) 2.1.18
Tino

La stessa cosa sta succedendo anche a me @Tino, hai trovato ulteriori informazioni sul perché?
kjones,

@Tino e @kjones Aggiornato la risposta con le --with-subkey-fingerprintinformazioni che dovrebbero funzionare su Ubuntu 18.04
Ronny Andersson,

9

L'opzione --list-packetsanalizza i dati pgp da un file e ne genera la struttura - in modo molto tecnico, però. Quando si analizza una chiave pubblica, è possibile estrarre facilmente gli ID utente e gli ID chiave delle firme.

Diffidare che questo comando analizza solo il formato dei dati, non convalida firme o cose simili.


2

Quando mi sono imbattuto in questa risposta, stavo cercando un modo per ottenere un output facile da analizzare. Per me l'opzione --with-colonsha funzionato:

$ gpg --with-colons file
sec::4096:1:AAAAAAAAAAAAAAAA:YYYY-MM-DD::::Name (comment) email
ssb::4096:1:BBBBBBBBBBBBBBBB:YYYY-MM-DD::::

La documentazione è disponibile qui .


Come si ottiene quella bella uscita AAAA-MM-GG? Non riesco a riprodurlo con gpg2.xe --with-colons.
MKesper,

1

Puoi anche usare l' --keyid-formatopzione per mostrare l'ID chiave breve o lunga:

$ gpg2 -n --with-fingerprint --keyid-format=short --show-keys <filename>

che produce in questo modo (esempio dalla chiave repository CentOS PostgreSQL):

pub   dsa1024/442DF0F8 2008-01-08 [SCA]                                                                       │
      Key fingerprint = 68C9 E2B9 1A37 D136 FE74  D176 1F16 D2E1 442D F0F8                                    │              honor-keyserver-url
uid                    PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>                      │                     When  using --refresh-keys, if the key in question has a preferred keyserver URL, then use that
sub   elg2048/D43F1AF8 2008-01-08 [E]

0

pgpdump( https://www.lirnberger.com/tools/pgpdump/ ) è uno strumento che è possibile utilizzare per ispezionare i blocchi pgp.

Non è facile da usare e abbastanza tecnico, tuttavia,

  • analizza le chiavi pubbliche o private (senza preavviso)
  • non modifica alcun portachiavi (a volte non è così chiaro cosa fa gpg dietro il cofano, nella mia esperienza)
  • stampa tutti i pacchetti, in particolare i pacchetti userid che mostrano i vari dati di testo relativi alle chiavi.
pgpdump -p test.asc 
New: Secret Key Packet(tag 5)(920 bytes)
    Ver 4 - new
    Public key creation time - Fri May 24 00:33:48 CEST 2019
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA n(2048 bits) - ...
    RSA e(17 bits) - ...
    RSA d(2048 bits) - ...
    RSA p(1024 bits) - ...
    RSA q(1024 bits) - ...
    RSA u(1020 bits) - ...
    Checksum - 49 2f 
New: User ID Packet(tag 13)(18 bytes)
    User ID - test (test) <tset>                        
New: Signature Packet(tag 2)(287 bytes)
    Ver 4 - new
    Sig type - Positive certification of a User ID and Public Key packet(0x13).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA256(hash 8)
    Hashed Sub: signature creation time(sub 2)(4 bytes)
        Time - Fri May 24 00:33:49 CEST 2019
    Hashed Sub: issuer key ID(sub 16)(8 bytes)
        Key ID - 0x396D5E4A2E92865F
    Hashed Sub: key flags(sub 27)(1 bytes)
        Flag - This key may be used to certify other keys
        Flag - This key may be used to sign data
    Hash left 2 bytes - 74 7a 
    RSA m^d mod n(2048 bits) - ...
        -> PKCS-1

sfortunatamente non legge stdin: /


Le mie pgpdumpletture stdin. Ad esempio, curl -s https://www.theguardian.com/pgp/PublicKeys/Guardian%20Application-Security.pub.txt | pgpdumpfunziona bene.
rickhg12hs

0

Per ottenere gli ID chiave (8 byte, 16 cifre esadecimali), questo è il comando che ha funzionato per me in GPG 1.4.16, 2.1.18 e 2.2.19:

gpg --list-packets <key.asc | awk '$1=="keyid:"{print$2}'

Per ottenere ulteriori informazioni (oltre all'ID chiave):

gpg --list-packets <key.asc

Per ottenere ancora più informazioni:

gpg --list-packets -vvv --debug 0x2 <key.asc

Il comando

gpg --dry-run --import <key.asc

funziona anche in tutte e 3 le versioni, ma in GPG 1.4.16 stampa solo un ID chiave breve (4 byte, 8 cifre esadecimali), quindi è meno sicuro identificare le chiavi.

Alcuni comandi in altre risposte (ad esempio gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) non funzionano in alcune delle versioni 3 GPG di cui sopra, quindi non sono portatili quando si mira più versioni di GPG.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.