4

有人可以帮我清理一下 MDC 和数据加密吗?在 RFC 4880 中,它说:

待加密数据的明文通过SHA-1散列函数,散列结果附加到明文中的修改检测码包中。哈希函数的输入包括上述前缀数据;它包括所有明文,然后还包括值 0xD3、0x14 的两个八位字节。这些表示修改检测代码数据包标记的编码和 20 个八位字节的长度字段。

起初,mdc(没有标头数据)似乎只是:sha1([data]) -> hash_value

然后分号之前的第二句话使它看起来像sha1(OpenPGP_CFB_extra_data + [data]) -> hash_value

分号后面的东西看起来像是我应该做的sha1([data] + "\xd3\x14") -> hash_value。(这根本没有意义,但似乎是这样写的)

到底是怎么回事?

获得正确的 MDC 后,如何处理它?它是它自己的数据包,还是类似的东西(根据我的理解)?:

tag18_header + encrypt(plaintext + "\xd3\x14" + 20 byte hash)
4

1 回答 1

3

在阅读了RFC 4880和部分GnuPG源代码(g10/cipher.c似乎是处理这个的地方)之后,我解释它是这样的:

  • 0xd3是 MDC 数据包标签。
  • 0x14是 MDC 数据包长度(20 字节)。

MDC 哈希计算如下:

MCD_hash = SHA-1(OpenPGP_CFB_extra_data + [plaintext] + "\xd3\x14")

然后将其附加到明文消息并加密:

encrypt(OpenPGP_CFB_extra_data + [plaintext] + "\xd3\x14" + MDC_hash)

解密时,通过计算除最后 20 个字节之外的所有内容的 SHA-1 并将结果与​​最后 20 个字节进行比较来验证此哈希,正如 RFC 4880 所写(第 50 页):

在解密过程中,明文数据应使用SHA-1进行哈希处理,包括前缀数据以及Modification Detection Code数据包的数据包标签长度字段。MDC 数据包的主体在解密后与 SHA-1 散列的结果进行比较。

于 2011-05-25T19:51:36.027 回答