0

我正在使用 PGP 加密并向朋友发送消息。我已经阅读到消息是使用对称密钥加密的,然后使用收件人公钥对对称密钥进行加密。如果您有多个收件人,则对称密钥会被多次加密,每个收件人一次,并添加到加密的消息中。如果您设置了一个标志,您还可以使用自己的公钥加密密钥并将其添加到消息中,以便您以后可以自己从已发送的项目文件夹中解密它。

现在我想象加密的对称密钥将作为包含电子邮件地址和加密对称密钥列的表嵌入到消息中。因此,一个收件人(例如 john)会在此表中查找他的电子邮件地址,例如 john@somewhere.com,找到它,然后知道该条目是供他解码并获得对称密钥的。

我的问题是为什么我看不到加密邮件中的收件人列表?否则,接收者将不得不遍历表中的每个条目并尝试对其进行解密,直到找到他可以解密的条目。鉴于结果是一个随机数,即对称密钥,任何接收者如何知道它已正确解密,我猜除非他也尝试使用任何尝试作为对称密钥,直到他找到一个有效的密钥。

因此,我再次假设我应该能够在不解密的情况下看到加密消息中的收件人列表,但我不能。这是怎么回事?

4

1 回答 1

0

在 OpenPGP 术语中,包含用接收者的公钥加密的对称密钥的数据包称为“公钥加密会话密钥数据包”。在 RFC 4880 https://www.rfc-editor.org/rfc/rfc4880#page-17 中定义

在此数据包中,仅存储公共加密密钥的密钥 ID(而不是其用户 ID - 在大多数情况下是电子邮件地址)。并且接收方通过Key ID搜索找到她应该解密的数据包(实际上这应该由PGP软件完成)。

接收方将始终知道对称密钥已正确解密,否则解密算法将失败。

这同样适用于使用随机密钥解密数据包 - 每个块密码在最后验证最后一个块的校验和时都会失败。即使您删除对称密码实现的校验和计算,您也只会收到垃圾数据:)

于 2013-08-29T08:19:12.457 回答