我正在设置一些 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 密钥”提供了对子项稍微更深入的讨论。