如何在不导入私钥的情况下获取公钥的 ID?

如何在不导入私钥的情况下获取公钥的 ID?

如果我在私钥上运行以下命令将其安装在我的密钥服务器中:

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

它将导入一个相关的公钥(大概是从密钥服务器导入的)?

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

我的问题是:如何才能在不将私钥安装到我的钥匙串的情况下找出这个公钥的 ID?

答案1

给出以下增强隐私邮件(Base64 编码的 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-----

以下命令都将显示长密钥 ID,而无需将其添加到您的密钥环中:

$ 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

这些命令不太友好或直观,会像 STDERR 一样输出令人困惑的消息gpg: WARNING: no command supplied. Trying to guess what you mean ...。它们在不同版本之间似乎也经常有细微的差别,例如,我的版本有时需要--verbose与一些答案进行比较。此版本没有标志--show-keys,这看起来比上面的大多数命令都更容易。

关于密钥 ID 的一些有用信息:

  • 密钥 ID 短格式:2C52609D
  • 密钥 ID 长格式:F76221572C52609D
  • 调号:58118E89F3A912897C070ADBF76221572C52609D

您应该使用长格式作为短格式缺乏安全感

答案2

要获取密钥 ID(8 个字节,16 个十六进制数字),这是我在 GPG 1.4.16、2.1.18 和 2.2.19 中起作用的命令:

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

要获取更多信息(除了密钥 ID):

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 个十六进制数字)密钥 ID,因此识别密钥的安全性较低。

其他答案中的命令(例如,,gpg --show-keys)在上述 3 个 GPG 版本中的某些版本中不起作用,因此在针对多个版本的 GPG 时它们不可移植。gpg --with-fingerprintgpg --import --import-options show-only

答案3

只需调用gpg命令行工具并将密钥文件作为选项传递给它

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

长版本(没有警告“gpg:警告:未提供命令……” - 因为 gnupg-version >= 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 是密钥 ID。

相关内容