it-swarm.com.de

Extrahieren der PGP-Schlüssel-ID aus der öffentlichen Schlüsseldatei

Gibt es eine Möglichkeit, über ein CLI-Tool oder eine API die PGP-Schlüssel-ID aus dem öffentlichen PGP-Schlüsselblock zu extrahieren?

Ich habe den Hexa-Wert des Schlüssels in der Binärdatei gefunden, aber ich denke, die Position basiert auf der Art/Größe des Schlüssels.

Grundsätzlich habe ich den Base64-formatierten öffentlichen Schlüssel und möchte die Schlüssel-ID daraus abrufen, ohne sie mit GnuPG zu importieren.

21
golja

RFC 488 im OpenPGP-Nachrichtenformat wird erläutert, wie die Schlüssel-ID aus dem öffentlichen Schlüssel berechnet wird.

Auszüge aus Abschnitt 12.2 :

Bei einem V3-Schlüssel besteht die 8-Oktett-Schlüssel-ID aus den niedrigen 64 Bit des öffentlichen Moduls des RSA-Schlüssels.

Und für V4-Tasten:

Ein V4-Fingerabdruck ist der 160-Bit-SHA-1-Hash des Oktetts 0x99, gefolgt von der Paketlänge von zwei Oktetten, gefolgt vom gesamten Public-Key-Paket, beginnend mit dem Versionsfeld. Die Schlüssel-ID sind die niederwertigen 64 Bit des Fingerabdrucks.

Sie können die letzten 64 Bits einfach aus den Base64-codierten öffentlichen Schlüsseln analysieren. Dies ist die Schlüssel-ID für den entsprechenden öffentlichen Schlüssel.

12
Jor-el

Sie können gpg --dry-run Verwenden, um Änderungen zu verhindern.

In der folgenden Zeile wird die Schlüssel-ID in der Ausgabe gedruckt (kann mit den üblichen Modifikatoren wie --with-colons Zur weiteren Verarbeitung geändert werden). A4FF2279 Ist hier die Schlüssel-ID.

$ 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

Ich habe es gerade versucht, der Schlüssel wurde nicht in meinem Schlüsselbund gespeichert, aber die Schlüssel-ID wurde gedruckt. Aber Vorsicht mit --dry-run, Die Manpage hat eine Warnung:

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

Eine ausführlichere Beschreibung mehrerer Varianten für von Menschen lesbare, maschinenlesbare und sehr technische Ausgaben für verschiedene Versionen von GnuPG finden Sie in Frage zum Stapelüberlauf , wie gpg angezeigt wird Schlüsseldetails ohne sie zu importieren? . Alle von ihnen präsentieren auch die Schlüssel-ID.

17
Jens Erat

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

Beispielsweise :

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

gpg --with-fingerprint GPG-KEY-elasticsearch

4
Georgios Doumas

Verwenden Sie gpg --homedir In einem temporären Verzeichnis, um das in der Antwort von Jens Erat erwähnte Problem "nicht vollständig implementiert" zu vermeiden. Möglicherweise müssen Sie den Befehl mktemp basierend auf Ihrer Plattform ändern:

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

Aus dem GPG-Handbuch (GPG (GnuPG) 2.2.11):

--show-Tasten

Dieser Befehl verwendet OpenPGP-Schlüssel als Eingabe und druckt Informationen darüber auf dieselbe Weise wie der Befehl --list-keys für lokal gespeicherte Schlüssel. Darüber hinaus sind die Listenoptionen show-unbrauchbare-Uids, show-unbrauchbare-Unterschlüssel, Show-Notationen und Show-Richtlinien-URLs aktiviert. Wie bei der automatisierten Verarbeitung üblich, sollte dieser Befehl mit der Option --with-colons kombiniert werden.

Zum Beispiel:

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

dabei ist 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 die Schlüssel-ID.

2
Traz

Nachdem der öffentliche Schlüssel importiert wurde

pgp --import PublicKeyToImport.asc

lauf

pgp --list-userids

um den Schlüssel oder die Benutzer-ID zu bestimmen, die mit --encrypt verwendet werden sollen.

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