Wie erhalte ich die ID des öffentlichen Schlüssels, ohne den privaten Schlüssel zu importieren?

Wie erhalte ich die ID des öffentlichen Schlüssels, ohne den privaten Schlüssel zu importieren?

Wenn ich Folgendes auf einem privaten Schlüssel ausführe, um ihn auf meinem Schlüsselserver zu installieren:

gpg --allow-secret-key-import --import my_private.key

Es wird ein zugehöriger öffentlicher Schlüssel importiert, vermutlich von einem Schlüsselserver?

gpg: key xyz...: public key "[email protected]" imported

Meine Frage ist: Wie kann ich die ID dieses öffentlichen Schlüssels herausfinden, ohne den privaten Schlüssel in meinem Schlüsselbund installieren zu müssen?

Antwort1

Gegeben sei der folgende öffentliche Schlüssel im Privacy Enhanced Mail-Format (Base64-codierter DER):

$ wget https://apt.dockerproject.org/gpg -O dockerproject.gpg.pub.key
$ cat dockerproject.gpg.pub.key
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFWln24BEADrBl5p99uKh8+rpvqJ48u4eTtjeXAWbslJotmC/CakbNSqOb9o
ddfzRvGVeJVERt/Q/mlvEqgnyTQy+e6oEYN2Y2kqXceUhXagThnqCoxcEJ3+KM4R
mYdoe/BJ/J/6rHOjq7Omk24z2qB3RU1uAv57iY5VGw5p45uZB4C4pNNsBJXoCvPn
TGAs/7IrekFZDDgVraPx/hdiwopQ8NltSfZCyu/jPpWFK28TR8yfVlzYFwibj5WK
dHM7ZTqlA1tHIG+agyPf3Rae0jPMsHR6q+arXVwMccyOi+ULU0z8mHUJ3iEMIrpT
X+80KaN/ZjibfsBOCjcfiJSB/acn4nxQQgNZigna32velafhQivsNREFeJpzENiG
HOoyC6qVeOgKrRiKxzymj0FIMLru/iFF5pSWcBQB7PYlt8J0G80lAcPr6VCiN+4c
NKv03SdvA69dCOj79PuO9IIvQsJXsSq96HB+TeEmmL+xSdpGtGdCJHHM1fDeCqkZ
hT+RtBGQL2SEdWjxbF43oQopocT8cHvyX6Zaltn0svoGs+wX3Z/H6/8P5anog43U
65c0A+64Jj00rNDr8j31izhtQMRo892kGeQAaaxg4Pz6HnS7hRC+cOMHUU4HA7iM
zHrouAdYeTZeZEQOA7SxtCME9ZnGwe2grxPXh/U/80WJGkzLFNcTKdv+rwARAQAB
tDdEb2NrZXIgUmVsZWFzZSBUb29sIChyZWxlYXNlZG9ja2VyKSA8ZG9ja2VyQGRv
Y2tlci5jb20+iQI4BBMBAgAiBQJVpZ9uAhsvBgsJCAcDAgYVCAIJCgsEFgIDAQIe
AQIXgAAKCRD3YiFXLFJgnbRfEAC9Uai7Rv20QIDlDogRzd+Vebg4ahyoUdj0CH+n
Ak40RIoq6G26u1e+sdgjpCa8jF6vrx+smpgd1HeJdmpahUX0XN3X9f9qU9oj9A4I
1WDalRWJh+tP5WNv2ySy6AwcP9QnjuBMRTnTK27pk1sEMg9oJHK5p+ts8hlSC4Sl
uyMKH5NMVy9c+A9yqq9NF6M6d6/ehKfBFFLG9BX+XLBATvf1ZemGVHQusCQebTGv
0C0V9yqtdPdRWVIEhHxyNHATaVYOafTj/EF0lDxLl6zDT6trRV5n9F1VCEh4Aal8
L5MxVPcIZVO7NHT2EkQgn8CvWjV3oKl2GopZF8V4XdJRl90U/WDv/6cmfI08GkzD
YBHhS8ULWRFwGKobsSTyIvnbk4NtKdnTGyTJCQ8+6i52s+C54PiNgfj2ieNn6oOR
7d+bNCcG1CdOYY+ZXVOcsjl73UYvtJrO0Rl/NpYERkZ5d/tzw4jZ6FCXgggA/Zxc
jk6Y1ZvIm8Mt8wLRFH9Nww+FVsCtaCXJLP8DlJLASMD9rl5QS9Ku3u7ZNrr5HWXP
HXITX660jglyshch6CWeiUATqjIAzkEQom/kEnOrvJAtkypRJ59vYQOedZ1sFVEL
MXg2UCkD/FwojfnVtjzYaTCeGwFQeqzHmM241iuOmBYPeyTY5veF49aBJA1gEJOQ
TvBR8Q==
=Fm3p
-----END PGP PUBLIC KEY BLOCK-----

Die folgenden Befehle zeigen alle die lange Schlüssel-ID an, ohne sie zu Ihrem Schlüsselbund hinzuzufügen:

$ gpg --list-packets dockerproject.gpg.pub.key | \
awk '/keyid:/{ print $2 }'
F76221572C52609D
$ gpg --with-colons dockerproject.gpg.pub.key 2>&1 | \
awk -F':' '/pub/{ print $5 }'
F76221572C52609D
$ gpg --dry-run --verbose --import dockerproject.gpg.pub.key 2>&1 | \
awk '/pub/{ print $3 }' | awk -F'/' '{ print $2 }'
F76221572C52609D
$ gpg --with-fingerprint --verbose dockerproject.gpg.pub.key 2>&1 | \
awk '/^sig/{ print $2 }'
F76221572C52609D

Bei Verwendung dieser Version von gpg:

$ gpg --version | head -n 1
gpg (GnuPG) 2.2.4

Diese Befehle sind nicht sehr benutzerfreundlich oder intuitiv und geben verwirrende Meldungen aus, wie gpg: WARNING: no command supplied. Trying to guess what you mean ...bei STDERR. Sie scheinen sich auch oft geringfügig zwischen den Versionen zu unterscheiden, zum Beispiel erfordert meine Version manchmal --verboseim Vergleich zu einigen anderen Antworten. Diese Version hat nicht das --show-keysFlag, das einfacher aussieht als die meisten der obigen Befehle.

Einige nützliche Informationen zu Schlüssel-IDs:

  • Kurzformat der Schlüssel-ID:2C52609D
  • Langes Schlüssel-ID-Format:F76221572C52609D
  • Vorzeichen:58118E89F3A912897C070ADBF76221572C52609D

Sie sollten das Langformat als Kurzformat verwendenist unsicher

Antwort2

Um die Schlüssel-IDs (8 Bytes, 16 Hexadezimalziffern) abzurufen, ist dies der Befehl, der bei mir in GPG 1.4.16, 2.1.18 und 2.2.19 funktioniert hat:

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

So erhalten Sie weitere Informationen (zusätzlich zur Schlüssel-ID):

gpg --list-packets <key.asc

Um noch mehr Informationen zu erhalten:

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

Der Befehl

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

funktioniert auch in allen drei Versionen, aber in GPG 1.4.16 druckt es nur eine kurze Schlüssel-ID (4 Bytes, 8 Hexadezimalziffern), daher ist die Schlüsselidentifizierung weniger sicher.

Befehle in anderen Antworten (z. B. gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) funktionieren in einigen der drei oben genannten GPG-Versionen nicht und sind daher nicht portierbar, wenn mehrere GPG-Versionen als Ziel verwendet werden.

Antwort3

Rufen Sie einfach das gpgKommandozeilentool auf und übergeben Sie ihm die Schlüsseldatei als Option

$ gpg my_private.key
sec  4096R/1234ABCD 2017-09-12 [email protected]

Die Langversion (ohne Warnung "gpg: WARNUNG: kein Befehl angegeben. ..." - seit gnupg-Version >= 2.1.23 - fand diesHier):

gpg --import-options show-only --import my_private.key

Antwort4

Wenn Sie sich auf einen PGP-Schlüssel beziehen, könnte dies die Antwort sein.

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

--Tasten anzeigen

Dieser Befehl verwendet OpenPGP-Schlüssel als Eingabe und gibt Informationen darüber aus, so wie es der Befehl --list-keys für lokal gespeicherte Schlüssel tut. Zusätzlich werden die Listenoptionen show-unusable-uids, show-unusable-subkeys, show-notations und show-policy-urls aktiviert. Wie bei der automatischen 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]

wobei 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 die Schlüssel-ID ist.

verwandte Informationen