Implementation

如何解釋“FIPS 202”(SHA-3 / Keccak)中的特定數學符號

  • October 2, 2019

tl;博士 “d <= |Z|”是什麼意思 在位數組操作的上下文中是什麼意思?

作為一項學習練習,我正在研究 SHA-3 的實現。我無論如何都不是密碼學專家,但我過去曾實現過類似的算法,例如 MD5 和 SHA1,因此我大致熟悉此類算法中發生的各種操作。

我一直在研究“FIPS PUB 202”文件(在此處以 PDF 格式免費提供:http: //dx.doi.org/10.6028/NIST.FIPS.202)。

我發現這是一個很難理解的文件,但我快要完成程序了,我不確定第 4 節算法 8(第 19 頁)SPONGE 函式中以下文本行的含義……

在此處輸入圖像描述 我的問題是第 9 步。我不明白什麼是“|Z|” 在這種情況下的意思。

該算法處理截斷和連接位數組 Z(可能是幾百位長),直到滿足此條件,此時 Z 的前“d”位返回給呼叫函式。

  • 我的第一個想法是|Z| 表示“Z 的長度(以位為單位)”,但這會不一致——他們在第 1 步和第 2 步(以及文件的其他地方)中為此目的使用了“len(…)”。這是文件中此“|…|”的唯一位置 使用符號。
  • 我不認為這意味著將 Z 轉換為正值的數學意義上的“Abs(Z)”,因為在幾乎所有情況下,結果數字都會*非常大。*將 Z(實際上是隨機位列表)轉換為整數似乎毫無意義且隨意。
  • “|…|” 詞彙表部分未提及語法。(提到了“a || b”,但這是用於數組連接,這絕對不是)。
  • 我也對在這種情況下使用“<=”感到有些困惑。如果長度相等,為什麼還要截斷,只返回原樣?進一步建議它並不意味著“Z的長度”。

那麼,我該如何理解這段略顯奇怪的文字呢?我懷疑這是文件中的錯誤,因為它是如此重要的算法,並且會受到成千上萬比我聰明得多的人的嚴格審查。

這意味著長度 $ Z $ 以位為單位;換句話說,擠出連續的 $ r $ - 從海綿中鑽出塊,直到你有一個 $ d $ -bit 字元串,必要時截斷最後一個塊。

我希望您可能高估了仔細校對本文件的人數,以了解此類細節。大多數研究它的密碼學家都會閱讀Keccak 參考,它使用略有不同的符號表示相同的東西;大多數實現者可能會正確猜測 $ |Z| $ 和 $ \operatorname{len}(Z) $ 當 $ Z $ 是一個位串,或者比較另一個參考來確認。

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