我一直在测试 GPG 密钥,并研究在密钥上添加/删除用户时密钥的变化。如果我添加用户爱丽丝生成密钥后,我导出密钥对的公钥和私钥。然后添加用户鲍勃到相同的密钥。最后导出相同的密钥,但鲍勃添加为用户。然后我比较爱丽丝和爱丽丝/鲍勃键。爱丽丝公钥有一大块类似于爱丽丝/鲍勃公钥,在很多地方也有一些不同。爱丽丝/鲍勃公钥比爱丽丝密钥。我注意到私钥也一样。我发现有趣的是,如果我使用爱丽丝公钥并使用解密爱丽丝/鲍勃私钥,我收到了同样的消息。
以下是我的问题:
- 电子邮件/用户 ID 会影响公钥和私钥吗?
- 您能从公钥中提取用户 ID 吗?如果可以,它是如何工作的?
- 如何加密爱丽丝并使用解密爱丽丝/鲍勃工作?
- 每个密钥的某个部分是否用于加密/解密,而其他部分则留给用户 ID 和电子邮件?
答案1
然后将用户 Bob 添加到同一个密钥
最重要的是,这不是 PGP 密钥“用户 ID”的用途。
用户ID仅仅是标签而已。它们不能用于任何类型的访问控制——它们只能告知其他人密钥的所有者。密钥应该只有一个所有者,并且单个密钥上的所有用户 ID 都应该描述同一个人。
(可以添加多个用户 ID 的原因很简单,因为同一个人可以拥有多个电子邮件地址,甚至多个名字。)
如果多人需要使用 PGP,则每个人都应创建自己的密钥。然后,您将在加密时列出他们的所有密钥(例如,使用多个--recipient
选项)。
- Alice 的加密和 Alice/Bob 的解密如何进行?
当您添加第二个用户 ID 时,它实际上仍然是相同的 RSA 密钥材料,您只是更改了写在其上的标签。用户 ID 不用于访问控制。
- 电子邮件/用户 ID 会影响公钥和私钥吗?
- 您能从公钥中提取用户 ID 吗?如果可以,它是如何工作的?
- 每个密钥的某个部分是否用于加密/解密,而其他部分则留给用户 ID 和电子邮件?
当你在 PGP 中谈论“公钥”和“私钥”时,才不是通常意味着只是原始公钥数据(例如,只是 RSA 参数),就像在其他一些系统中一样。相反,您实际获得的gpg --export
是 OpenPGP键块或者证书包含公钥和各种元数据(用户 ID、签名等)。
因此,当您添加用户 ID 时,它实际上并不会改变实际的密钥参数——它被添加为公钥包旁边的元数据包。
当人们共享他们的“PGP 公钥”时,他们会将整个密钥+元数据包作为一个单元进行共享。总体而言,整个想法与 X.509 证书非常相似,后者在密钥本身旁边有一个“主题”字段。
您可以使用pgpdump
或等工具gpg --list-packets
以文本格式显示导出的数据。