Md5
MD5中原始消息的填充
如果我的原始消息大於 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 內計算出來(嚴重過度樂觀),也需要一年多的時間來散列這麼大的消息(並且並行性無濟於事)。