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