从公钥文件中提取 PGP keyid

信息安全 公钥基础设施 密钥管理 pgp
2021-08-23 22:36:02

有没有办法通过 CLI 工具或某种 API 从 PGP 公钥块中提取 PGP 密钥 ID?

我在二进制文件中找到了键的十六进制值,但我猜位置是基于键的种类/大小。

基本上,我有 base64 格式的公钥,我想从中检索密钥 ID,而不用 GnuPG 导入它。

4个回答

您可以使用gpg --dry-run来防止更改。

以下行将在其输出中打印密钥 ID(可以使用常用的修饰符进行修改,例如--with-colons进一步处理)。A4FF2279是这里的关键 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

刚试了一下,钥匙没有存储到我的钥匙串中,但是打印了钥匙ID。但要小心--dry-run,手册页有一个警告:

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

Stack Overflow 问题How to display gpg key details without importing it?. 他们都将提供密钥 ID。

关于 OpenPGP 消息格式的RFC 4880讨论了如何从公钥计算密钥 ID。

第 12.2 节的摘录

对于 V3 密钥,八位字节的密钥 ID 由 RSA 密钥的公共模数的低 64 位组成。

对于 V4 键:

V4 指纹是八位字节 0x99 的 160 位 SHA-1 哈希,后跟两个八位字节的数据包长度,然后是从版本字段开始的整个公钥数据包。Key ID 是指纹的低 64 位。

您可以轻松解析 base64 编码公钥的最后 64 位,即对应公钥的密钥 ID。

从 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) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

9DC858229FC7DD38854AE2D88D81803C0EBFCD88密钥ID在哪里。

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

例如 :

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