OpenPGP标签18/19描述混乱

时间:2011-05-16 17:56:25

标签: encryption pgp openpgp

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

  

数据的明文   加密通过SHA-1传递   哈希函数,以及结果   hash被附加到明文中   修改检测代码包。   哈希函数的输入   包括描述的前缀数据   以上;它包括所有的   明文,然后还包括两个   值为0xD3,0x14的八位字节。这些   代表a的编码   修改检测代码包标签   和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)

1 个答案:

答案 0 :(得分: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写入(page 50):

  

在解密期间,明文数据应使用SHA-1,进行哈希处理,包括前缀数据以及数据包标记长度字段 修改检测代码包。解密后,MDC数据包的主体与SHA-1散列的结果进行比较。