gpg - 如果文件已签名,MDC 检查是否多余?

Sha*_*son 5 pgp gnupg

我知道 gpg 1.4.9 默认计算 MDC 代码。根据我的研究,这对应于 Sym。PGP 规范中的加密和完整性保护数据包(标签 18)。如果文件已签名,这是否还提供修改保护(除了提供发件人身份证明之外)?

我认为可能是这种情况,因为我使用 BouncyCastle API 编写了代码,并注意到当验证签名文件时,会根据加密数据流计算签名,并与文件中记录的签名进行比较。

我试图了解这里是否存在一些冗余,或者这两种机制是否用于不同的目的。

Nat*_*igg 2

是的,所有版本的 GPG 签名都提供修改保护。当您签署文档时,它会创建文档的哈希值(它使用哪种算法取决于您设置的首选项)。然后使用您的私钥对哈希值进行编码。任何人都可以使用您的公钥来解码哈希值,从而向他们保证您是发送该消息的人。此外,他们知道消息在您签名后的时间内没有被更改。

此外,加密文档时,无论您是否对其进行签名,都会创建 MDC 哈希值。这是为了在文档未签名的情况下提供修改保护。RFC 4880解释了为什么这可能有用:

保护或验证加密块的明显方法是对其进行数字签名。然而,许多人不希望习惯性地对数据进行签名,原因有很多,超出了本文档的范围。可以说,许多人认为否认性等属性与正直一样有价值。

看起来,如果您对消息进行加密和签名,那么您就会有冗余,尽管签名为您提供了更多信息,除了消息的完整性之外还可以向您保证发送者的身份。