Md5

MD5 實現

  • March 9, 2021

作為個人項目,我想在 FPGA 上實現 MD5,但我對實現的細節有些疑問。我如何實現算法的第一個來源是 RFC 1321,其中有一個虛擬碼解釋了第 1 輪將按以下方式執行:

/* Round 1. */
/* Let [abcd k s i] denote the operation
     a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD  0  7  1]  [DABC  1 12  2]  [CDAB  2 17  3]  [BCDA  3 22  4]
[ABCD  4  7  5]  [DABC  5 12  6]  [CDAB  6 17  7]  [BCDA  7 22  8]
[ABCD  8  7  9]  [DABC  9 12 10]  [CDAB 10 17 11]  [BCDA 11 22 12]
[ABCD 12  7 13]  [DABC 13 12 14]  [CDAB 14 17 15]  [BCDA 15 22 16]

行。很公平。能夠並行化算法打破了我的夢想,因為在每一步中都會更新一個變數(A、B、C 或 D),並且每一步都需要先前的值。

因此,為了尋找某種方法來並行化算法的某些部分,我發現了一本書的這一章:

雜湊函式的硬體實現

第 31(5) 頁的表 2.1 給出了該算法的另一個公式。當然,它是相似的,但不一樣。根據這本書,唯一更新的值是 B。顯然,這與RFC 1321 中的原始實現不同。

我的問題是:

  • 這是具有完全相同結果的原始實現的另一種形式嗎?(我想是這樣,但由於這本書沒有解釋導致方程的步驟,我想確定一下)
  • 這些新方程是如何推導出來的?

RFC 1321中的描述是正確的。本書樣本中的那個也是如此。差異相當於符號。書中提到的 ABCD 相當於第一個、第二個、第三個和第四個參數

$$ abcd k s i $$RFC 1321 中的符號和問題。 本書在每一輪訪問相同的變數。RFC 的變數訪問模式不同,每輪節省三個 32 位分配,這將在軟體方面產生可觀的成本。詳細說明(以下評論):

  1. 從書本開始 $ A,B,C,D $ 匹配 RFC 的A, B, C, D, 第一步[ABCD 0 7 1](在 RFC 中)
  • 這本書移動了前者 $ D $ 對新 $ A $ , 前者 $ C $ 對新 $ D $ , 前者 $ B $ 對新 $ C $ , 計算 $ B_\text{new} $ 並將其分配給新的 $ B $ .
  • RFC 計算相同的值 $ B_\text{new} $ RFC 註釋a,將其分配給A,並保留BC並且未D更改。
  1. 現在有了這本書 $ A,B,C,D $ 在 RFC 中註明的第二步中匹配 RFC 的D, A, B, ,C``[DABC 1 12 2]
  • 這本書移動了前者 $ D $ 對新 $ A $ , 前者 $ C $ 對新 $ D $ , 前者 $ B $ 對新 $ C $ , 計算 $ B_\text{new} $ 並將其分配給新的 $ B $ .
  • RFC 計算相同的值 $ B_\text{new} $ RFC 註釋a,將其分配給D,並保留AB並且未C更改。那時書的 $ A,B,C,D $ 匹配 RFC 的C, D, A, B.

這種每一步的輪換繼續進行。步驟後 $ i $ 和 $ i $ 倍數 $ 4 $ ,包括在最後一輪之後,這本書的 $ A,B,C,D $ 匹配 RFC 的A, B, C, D.


我在 MD5 中知道的唯一變化是 32 位字中的字節順序錯誤。這發生在第一個給出 MD5 碰撞的出版物中,並迅速得到糾正。

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