如何在不匯入私鑰的情況下取得公鑰的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

這些命令不是很友好或直觀,並且會像gpg: WARNING: no command supplied. Trying to guess what you mean ...STDERR 一樣發出令人困惑的消息。它們在版本之間似乎也經常有細微的不同,例如我的版本有時需要--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-keysgpg --with-fingerprintgpg --import --import-options show-only)在上述 3 個 GPG 版本中的某些版本中不起作用,因此在針對多個版本的 GPG 時它們不可移植。

答案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。

相關內容