Md5

MD5中原始消息的填充

  • March 14, 2014

如果我的原始消息大於 64 位,我該怎麼辦?MD5中填充的過程是什麼?

Internet Security: Cryptographic Principles, Algorithms and Protocols , page 138中所述,MD5 中的第二步是附加消息的長度:

在此處輸入圖像描述

有人可以幫我理解當消息長度大於時會發生什麼 $ 2^{64} $ 位?

我認為RFC 第 3.2 節有更清晰的描述。

將 b 的 64 位表示(添加填充位之前的消息長度)附加到上一步的結果中。萬一 b 大於 2^64,則僅使用 b 的低 64 位。(根據前面的約定,這些位作為兩個 32 位字附加,並首先附加低位字。)

因此,如果消息長度是b2 b1 b0(其中b2最重要的)每個b都是 32 位,則b0 b1作為消息長度附加。換句話說,如果消息太大,只需將長度(不是消息)截斷為 64 位。

如果原始消息長度 $ N $ 是 $ 2^{64} $ 位或更長,您對值進行編碼 $ N \bmod 2^{64} $ 在最後的填充塊中,而不僅僅是 $ N $ . 或者,您可以始終編碼 $ N \bmod 2^{64} $ ; 如果 $ N < 2^{64} $ ,那麼它們的值相同。

現在,這種區別 $ N $ 和 $ N \bmod 2^{64} $ 不會發生在 64 位,而是在 $ 2^{64}= 18,446,744,073,709,551,626 $ 位,或大約 2000000 TB。從來沒有人用 MD5 散列過這麼長的消息。即使我們假設 MD5 壓縮函式可以在 1nsec 內計算出來(嚴重過度樂觀),也需要一年多的時間來散列這麼大的消息(並且並行性無濟於事)。

引用自:https://crypto.stackexchange.com/questions/8181