web-dev-qa-db-fra.com

Extraire l'ID de clé PGP du fichier de clé publique

Existe-t-il un moyen via un outil CLI ou une sorte d'API pour extraire l'ID de clé PGP du bloc de clé publique PGP?

J'ai trouvé la valeur hexa de la clé dans le fichier binaire, mais je suppose que la position est basée sur le type/la taille de la clé.

Fondamentalement, j'ai la clé publique au format base64 et je voudrais récupérer l'ID de la clé, sans l'importer avec GnuPG.

21
golja

RFC 488 sur le format de message OpenPGP explique comment calculer l'ID de clé à partir de la clé publique.

Extraits de section 12.2 :

Pour une clé V3, l'ID de clé de huit octets se compose des 64 bits les plus faibles du module public de la clé RSA.

Et pour les clés V4:

Une empreinte V4 est le hachage SHA-1 160 bits de l'octet 0x99, suivi de la longueur de paquet de deux octets, suivi de l'ensemble du paquet de clé publique commençant par le champ version. L'identifiant de clé correspond aux 64 bits de poids faible de l'empreinte digitale.

Vous pouvez facilement analyser les 64 derniers bits des clés publiques codées en base64, qui est l'ID de clé pour la clé publique correspondante.

12
Jor-el

Vous pouvez utiliser gpg --dry-run pour empêcher les modifications.

La ligne suivante affichera l'identifiant de la clé dans sa sortie (peut être modifié à l'aide des modificateurs habituels comme --with-colons pour un traitement ultérieur). A4FF2279 est l'ID clé ici.

$ 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

Je viens de l'essayer, la clé n'a pas été stockée dans mon trousseau, mais l'ID de la clé a été imprimé. Mais attention avec --dry-run, la page de manuel contient un avertissement:

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

Une discussion plus approfondie de plusieurs variantes pour une sortie lisible par l'homme, lisible par une machine et très technique pour différentes versions de GnuPG se trouve dans la question de débordement de pile Comment afficher gpg les détails des clés sans les importer? . Tous présenteront également l'ID de la clé.

17
Jens Erat

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

Par exemple :

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

gpg --with-fingerprint GPG-KEY-elasticsearch

4
Georgios Doumas

Pour éviter le problème "pas complètement implémenté" mentionné dans la réponse de Jens Erat, utilisez gpg --homedir sur un répertoire temporaire. Vous devrez peut-être modifier la commande mktemp en fonction de votre plate-forme:

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

Depuis le manuel gpg (gpg (GnuPG) 2.2.11):

--les clés

Cette commande prend les clés OpenPGP en entrée et imprime des informations à leur sujet de la même manière que la commande --list-keys pour la clé stockée localement. De plus, les options de liste show-inutilisable-uids, show-inutilisable-subkeys, show-notations et show-policy-urls sont également activées. Comme d'habitude pour le traitement automatisé, cette commande doit être combinée avec l'option --with-colons.

Par exemple:

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

où 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 est l'ID de clé.

2
Traz

Une fois la clé publique importée

pgp --import PublicKeyToImport.asc

courir

pgp --list-userids

pour déterminer la clé ou l'ID utilisateur à utiliser avec --encrypt.

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