一个公钥如何包含多个带有 GPG 的公钥(或者我做错了什么)?

一个公钥如何包含多个带有 GPG 的公钥(或者我做错了什么)?

我正在设置一些 Ubuntu 服务器。我从另一个系统管理员那里收到了一个要添加的密钥(称为somekey.pub),用于内部软件包的 apt 软件包验证。

添加此键会导致apt-key add somekey.pub中显示两个附加条目apt-key list,每个条目都有一个“pub”行和一个“sub”行。 (两个新条目上的“uid”行是给我密钥的系统管理员。)

这怎么可能?通过显示检查密钥less

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

(41 lines snipped)
-----END PGP PUBLIC KEY BLOCK-----

我还曾经gpg创建一个仅包含该密钥的密钥环(使用gpg --no-default-keyring --keyring ./somekeyring.gpg --import somekey.pub),以便我可以将密钥环放在/etc/apt/trusted.gpg.d/其他 Ubuntu 服务器上,而不是运行该apt-key add命令。

检查此密钥环可gpg --no-default-keyring --keyring ./somekeyring.gpg --list-keys确认它有两个密钥。这是输出,稍微修改了一下:

pub   1024R/4AAAAAAA 2018-08-31
uid                  Joe Sysadmin (Ubuntu Dev Repo Key) <[email protected]>
sub   1024R/9FFFFFFF 2018-08-31

pub   2048R/BAAAAAAA 2018-08-31
uid                  Joe Sysadmin (Ubuntu Repo Repo Key) <[email protected]>
sub   2048R/1EEEEEEE 2018-08-31

这是我第一次涉足 GPG 和 apt 密钥,所以我可能会丢失一些简单的基本信息,但我希望其中的单个公钥块somekey.pub仅包含一个公钥 - 所以上面的结果让我感到惊讶。

哪里有文档可以帮助我理解这一点?

答案1

OpenPGP 消息可以由相当任意的 OpenPGP 数据包构成——包括多个主键。事实上,不采用 Keybox 格式 ( .kbx) 的“经典”GnuPG 密钥环只是一条所有密钥都排列好的 OpenPGP 消息。与您的密钥环的唯一区别是您的密钥环是 ASCII 铠装的,这只是另一种用于通过早期通信协议(例如电子邮件)传输的编码,最初仅支持原始的 127 个 ASCII 字符。

GnuPG 的发行版通常包括gpg-split,它可用于分割各个 OpenPGP 数据包。要再次组合它们,只需cat再次连接它们(gpg --enarmor如果您更喜欢 ASCII-armored 编码)。

OpenPGP 甚至会提供第二种方式来包含多个 OpenPGP 公钥:通常并遵循最佳实践(对于某些加密算法作为技术要求),会创建多个密钥。生成的主密钥仅用于密钥管理(也可能是签名任务),而绑定到主密钥的一个或多个子密钥用于“日常”操作。“我应该制作多少个 OpenPGP 密钥”提供了对子项稍微更深入的讨论。

相关内容