2011-05-16 87 views
4

有人可以爲我清除一點MDC和數據加密嗎?在RFC 4880,它說:OpenPGP標籤18/19描述混淆

數據的明文是 加密通過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) 

回答

3

閱讀RFC 4880GnuPG源代碼的部分(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) 

在解密時,該散列是通過計算SHA-驗證的一切,但在過去的20個字節,並將結果進行比較來的最後20個字節的1中,如RFC 4880中寫入(page 50):

在解密期間,明文數據應與SHA-1,包括前綴數據以及所述分組標籤長度字段所述改變檢測碼的數據包被散列。 MDC數據包的主體在解密時與SHA-1哈希的結果進行比較。

+0

非常感謝!我會盡快檢查。 – calccrypto 2011-05-25 20:07:50