Как получить идентификатор открытого ключа без импорта закрытого ключа?

Как получить идентификатор открытого ключа без импорта закрытого ключа?

Если я выполню следующую команду для установки закрытого ключа на своем сервере ключей:

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

Он, вероятно, импортирует связанный открытый ключ с сервера ключей?

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

У меня такой вопрос: как узнать идентификатор этого открытого ключа, не устанавливая закрытый ключ в свою связку ключей?

решение1

Дан следующий открытый ключ в формате Privacy Enhanced Mail (DER в кодировке Base64):

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

Все следующие команды отобразят длинный идентификатор ключа, не добавляя его в вашу связку ключей:

$ 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

При использовании этой версии gpg:

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

Эти команды не очень дружелюбны или интуитивно понятны и выдают запутанные сообщения, как gpg: WARNING: no command supplied. Trying to guess what you mean ...на STDERR. Они также часто кажутся немного разными между версиями, например, моя версия иногда требует --verboseпо сравнению с некоторыми ответами там. Эта версия не имеет флага --show-keys, который выглядит проще, чем большинство команд выше.

Полезная информация о ключевых идентификаторах:

  • Краткий формат идентификатора ключа:2C52609D
  • Длинный формат идентификатора ключа:F76221572C52609D
  • Ключевая подпись:58118E89F3A912897C070ADBF76221572C52609D

Вам следует использовать длинный формат в качестве короткого формата.небезопасно

решение2

Чтобы получить идентификаторы ключей (8 байт, 16 шестнадцатеричных цифр), вот команда, которая сработала у меня в GPG 1.4.16, 2.1.18 и 2.2.19:

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

Чтобы получить дополнительную информацию (в дополнение к идентификатору ключа):

gpg --list-packets <key.asc

Чтобы получить еще больше информации:

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

Команда

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

также работает во всех 3 версиях, но в GPG 1.4.16 он выводит только короткий (4 байта, 8 шестнадцатеричных цифр) идентификатор ключа, поэтому идентификация ключей менее безопасна.

Команды в других ответах (например gpg --show-keys, gpg --with-fingerprint, , gpg --import --import-options show-only) не работают в некоторых из 3 указанных выше версий GPG, поэтому они непереносимы при работе с несколькими версиями GPG.

решение3

Просто вызовите gpgинструмент командной строки и передайте ему ключевой файл в качестве параметра.

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

Длинная версия (без предупреждения "gpg: ПРЕДУПРЕЖДЕНИЕ: команда не предоставлена. ..." - начиная с версии gnupg >= 2.1.23 - нашел этоздесь):

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

решение4

Если вы имеете в виду ключ PGP, то это может быть ответом.

Из руководства gpg (gpg (GnuPG) 2.2.11):

--показать-ключи

Эта команда принимает ключи OpenPGP в качестве входных данных и выводит информацию о них так же, как команда --list-keys делает это для локально сохраненного ключа. Кроме того, включены опции списка show-unusable-uids, show-unusable-subkeys, show-notations и show-policy-urls. Как обычно, для автоматизированной обработки эта команда должна сочетаться с опцией --with-colons.

Например:

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

где 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 — идентификатор ключа.

Связанный контент