有人可以为我清理一下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)
答案 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散列的结果进行比较。