Comment afficher les détails de la clé gpg sans les importer?

131

J'ai une copie de la clé gpg du référentiel apt postgresql et j'aimerais voir les détails de la clé gpg telle qu'elle vient dans le fichier. Est-ce possible sans l'importer dans un porte-clés?

Amos Shapira
la source

Réponses:

149

Il existe plusieurs niveaux de détails que vous pouvez obtenir lorsque vous regardez les données clés d'OpenPGP: un résumé de base, une sortie lisible par machine de ce résumé ou une liste détaillée (et très technique) des paquets OpenPGP individuels.

Informations clés de base

Pour un bref pic sur un fichier de clé OpenPGP, vous pouvez simplement passer le nom de fichier en tant que paramètre ou tube dans les données de clé via STDIN. Si aucune commande n'est passée, GnuPG essaie de deviner ce que vous voulez faire - et pour les données clés, c'est l'impression d'un résumé sur la clé:

$ 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 <[email protected]>
uid           Jens Erat <[email protected]>
uid           Jens Erat <[email protected]>
uid           Jens Erat <[email protected]>
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]

En définissant --keyid-format 0xlong, les ID de clé longs sont imprimés à la place des ID de clé courte non sécurisés :

$ 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 <[email protected]>
uid                             Jens Erat <[email protected]>
uid                             Jens Erat <[email protected]>
uid                             Jens Erat <[email protected]>
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]

Fournir -vou -vvmême ajouter des informations supplémentaires. Je préfère cependant imprimer les détails du paquet dans ce cas (voir ci-dessous).

Sortie lisible par machine

GnuPG a également un format de sortie séparé par deux-points, qui est facilement analysable et a un format stable. Le format est documenté dans le doc/DETAILSfichier GnuPG . L'option pour recevoir ce format est --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 <[email protected]>:
uid:::::::::Jens Erat <[email protected]>:
uid:::::::::Jens Erat <[email protected]>:
uid:::::::::Jens Erat <[email protected]>:
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:::

Depuis GnuPG 2.1.23, l' gpg: WARNING: no command supplied. Trying to guess what you mean ...avertissement peut être omis en utilisant l' --import-options show-onlyoption avec la --importcommande (cela fonctionne également sans --with-colons, bien sûr):

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

Pour les versions plus anciennes: le message d'avertissement est imprimé sur STDERR, vous pouvez donc simplement lire STDIN pour séparer les informations clés de l'avertissement.

Détails techniques: liste des paquets OpenPGP

Sans installer d'autres packages, vous pouvez utiliser gpg --list-packets [file]pour afficher des informations sur les paquets OpenPGP contenus dans le fichier.

$ 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]

L' pgpdump [file]outil fonctionne de manière similaire gpg --list-packetset fournit une sortie similaire, mais résout tous ces identificateurs d'algorithme en représentations lisibles. Il est disponible pour probablement toutes les distributions pertinentes (sur les dérivés Debian, le paquet s'appelle pgpdumpcomme l'outil lui-même).

$ 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]
Jens Erat
la source
1
Merci. Je viens d'utiliser "gpg --list-keys path-to-key-file" et j'ai obtenu ce que je voulais voir: ... hashed subpkt 2 len 4 (sig created 2013-02-24) hashed subpkt 9 len 4 (key expire après 4y134d23h24m) ... et pgpdump rend la sortie un peu plus lisible.
Amos Shapira
@AmosShapira Êtes-vous sûr? Cette commande ne fonctionne pas du tout pour moi. Peut-être que vous vouliez dire --list-packets?
Jonathan Cross
1
@JonathanCross En effet, la sortie décrite ressemble à --list-packets.
Jens Erat
1
Comment se débarrasser de ce moche WARNING: no command suppliedà stderr? (Cela empêche l'utilisation gpgcorrecte des scripts. Quand il s'agit de crypto, le seul moyen sûr est de traiter toute sortie vers stderr comme une erreur fatale. Ce n'est qu'ainsi que vous serez préparé lorsque de nouvelles faiblesses importantes sont découvertes qui ne s'impriment que sur stderr).
Tino
1
Je ne sais pas qu'il existe un moyen de contourner facilement. Vous pouvez toujours utiliser le fichier de clé comme trousseau de clés, puis exécuter --list-keys, quelque chose comme gpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keys. Ou tout simplement rejeter le message d'avertissement, il existe un tas d'options pour filtrer stderr dans les scripts (ba) sh .
Jens Erat
31

Je semble pouvoir m'entendre simplement avec:

$gpg <path_to_file>

Quelles sorties comme ceci:

$ gpg /tmp/keys/something.asc 
  pub  1024D/560C6C26 2014-11-26 Something <[email protected]>
  sub  2048g/0C1ACCA6 2014-11-26

L'op n'a pas précisé en particulier quelles informations clés sont pertinentes. Cette sortie est tout ce qui me préoccupe.

Therealstubot
la source
30

Pour vérifier et répertorier l'empreinte digitale de la clé (sans d'abord l'importer dans le trousseau de clés), tapez

gpg --with-fingerprint <filename>

Edit: sur Ubuntu 18.04 (gpg 2.2.4), l'empreinte digitale n'est pas affichée avec la commande ci-dessus. Utilisez --with-subkey-fingerprintplutôt l' option

gpg --with-subkey-fingerprint <filename>
Ronny Andersson
la source
4
Cela devrait être la réponse acceptée imo. Je suis d'accord avec le commentaire publié comme réponse de @Skyr.
gertvdijk
2
ACK, c'est très bien, ne nécessite pas de trousseau de clés personnel local, etc. affiche le nom de la clé ... fonctionne mieux.
Florian Heigl
1
Pour une raison inconnue / non documentée, gpg --with-fingerprintsupprime l'impression des empreintes digitales à mes côtés. Ubuntu 18.04gpg (GnuPG) 2.1.18
Tino
La même chose se passe pour moi aussi @Tino, avez-vous trouvé des informations supplémentaires sur pourquoi?
kjones
@Tino et @kjones ont mis à jour la réponse avec des --with-subkey-fingerprintinformations qui devraient fonctionner sur Ubuntu 18.04
Ronny Andersson
9

L'option --list-packetsanalyse les données pgp d'un fichier et affiche sa structure - d'une manière très technique, cependant. Lors de l'analyse d'une clé publique, vous pouvez facilement extraire les ID utilisateur et les ID de clé des signatures.

Méfiez-vous que cette commande analyse uniquement le format des données, elle ne fait aucune validation des signatures ou des choses similaires.

Skyr
la source
2

Lorsque je suis tombé sur cette réponse, je cherchais un moyen d'obtenir une sortie facile à analyser. Pour moi, l'option a --with-colonsfait l'affaire:

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

La documentation peut être trouvée ici .

Heye
la source
Comment obtenez-vous cette belle sortie AAAA-MM-JJ? Je ne peux pas reproduire cela avec gpg2.x et --with-colons.
MKesper
1

Vous pouvez également utiliser le --keyid-formatcommutateur pour afficher l'ID de clé courte ou longue:

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

qui sort comme ceci (exemple de la clé de repo PostgreSQL CentOS):

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 <[email protected]>                      │                     When  using --refresh-keys, if the key in question has a preferred keyserver URL, then use that
sub   elg2048/D43F1AF8 2008-01-08 [E]
Paweł
la source
0

pgpdump( https://www.lirnberger.com/tools/pgpdump/ ) est un outil que vous pouvez utiliser pour inspecter les blocs pgp.

Ce n'est pas convivial et assez technique, cependant,

  • il analyse les clés publiques ou privées (sans avertissement)
  • il ne modifie aucun porte-clés (parfois ce n'est pas si clair ce que fait gpg derrière le capot, d'après mon expérience)
  • il imprime tous les paquets, en particulier les paquets de userid qui montrent les différentes données textuelles sur les clés.
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

malheureusement, il ne lit pas stdin: /

mh-cbon
la source
Mes pgpdumplectures stdin. Par exemple, curl -s https://www.theguardian.com/pgp/PublicKeys/Guardian%20Application-Security.pub.txt | pgpdumpfonctionne très bien.
rickhg12hs
0

Pour obtenir les identifiants de clé (8 octets, 16 chiffres hexadécimaux), voici la commande qui a fonctionné pour moi dans GPG 1.4.16, 2.1.18 et 2.2.19:

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

Pour obtenir plus d'informations (en plus de l'ID de clé):

gpg --list-packets <key.asc

Pour obtenir encore plus d'informations:

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

La commande

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

fonctionne également dans les 3 versions, mais dans GPG 1.4.16, il imprime uniquement un ID de clé court (4 octets, 8 chiffres hexadécimaux), il est donc moins sûr d'identifier les clés.

Certaines commandes dans d' autres réponses (par exemple gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) ne fonctionnent pas dans certains des 3 versions GPG ci - dessus, donc ils ne sont pas portables pour cibler plusieurs versions de GPG.

points
la source