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.
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.
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é.
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
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
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é.
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
---- ---- --------- ------- ---------- -------