我了解到 gpg 1.4.9 默认计算 MDC 代码。根据我的研究,这对应于 PGP 规范中的对称加密和完整性保护数据包(标签 18)。如果文件已签名,这是否也提供了修改保护(除了提供发送者身份证明)?
我认为可能是这种情况,因为我使用 BouncyCastle API 编写了代码,并且注意到当验证签名文件时,会根据加密数据流计算签名并将其与文件中记录的签名进行比较。
我试图了解这里是否存在冗余,或者这两种机制是否有不同的用途。
答案1
是的,所有版本的 GPG 签名都提供修改保护。当您签署文档时,它会创建文档的哈希值(它使用的算法取决于您设置的首选项)。然后使用您的私钥对哈希值进行编码。任何人都可以使用您的公钥解码哈希值,向他们保证您是发送消息的人。此外,他们知道消息在您签署后没有被更改过。
此外,在加密文档时,无论您是否签名,都会创建一个 MDC 哈希。这是为了在文档未签名的情况下提供修改保护。RFC 4880解释了为什么这可能有用:
保护或验证加密块的明显方法是对其进行数字签名。然而,许多人不愿意习惯性地对数据进行签名,原因很多,超出了本文的范围。可以说,许多人认为可否认性等属性与完整性一样有价值。
看起来,如果您既加密又签名一条消息,那么您就有了冗余,尽管签名可以为您提供更多信息,除了消息的完整性之外,还可以向您保证发送者的身份。