Hash

為什麼 XOF 在建模隨機預言機時比散列函式更方便

  • September 13, 2019

在這個答案中,提到了

更容易實例化隨機預言。一些安全證明依靠所謂的隨機預言模型來證明給定方案的安全性。通常,您會圍繞固定大小的散列函式使用一些人工構造來獲得所需的輸出大小,但是使用 XOF,您可以直接將它們插入,而不必擔心您這邊的任何錯誤可能會破壞證明(大多數人不會在很多情況下不知道/理解,包括我在內)。

NIST.FIPS.202

可擴展輸出函式與散列函式不同,但可以以類似的方式使用它們,並且可以靈活地直接適應單個應用程序的要求,但需要考慮額外的安全考慮。

實際上,我們可以通過雜湊函式創建任意長度 $ h_0 = H(m) $ 然後 $ h_i = H(h|i), i>0 $ 輸出是 $ h_0|h_1|\ldots $ - 我並不是說這是無碰撞的。

然而,在 NIST 文件的第 24 頁,標題為Additional Consideration for Extendable-Output Functions的部分;

XOF 具有生成相關輸出的潛力——安全應用程序/協議/系統的設計者可能不會期望散列函式的屬性。

所以;

  • 為什麼 XOF 在隨機預言機建模方面優於散列函式?

假設您正在實例化一個密碼系統,例如具有 2048 位模數的 RSA-FDH 簽名,或基於 $ b $ -位曲線 $ b \gg 256 $ 像 edwards448,它需要一個由隨機預言機建模的相當大的散列函式。但是您可以使用的散列函式只有 SHA-2。

  • EdDSA 需要一個 $ 2b $ 位散列函式。對於 edwards25519,使用 SHA-512 就足夠了,但對於 edwards448 則不行。
  • 具有 2048 位模數的 RSA-FDH 需要一個 $ {\approx}2048 $ 位散列函式。沒有一個 SHA-2 散列函式足夠大。

你做什麼工作?為了實例化這些密碼系統之一,您必須選擇某種方式將 SHA-2 函式組合成更大輸出的散列函式。選擇什麼實例化並不是先驗的。

  1. 可能會天真地選擇 $ H(x) \mathbin| H(H(x)) \mathbin| \dotsb \mathbin| H^n(x) $ ,但這顯然與隨機預言機不可區分。(你和我可能不會選擇這個,但我已經看到人們在實踐中達到它。)
  2. 一個人可能會選擇 $ H(x \mathbin| 1) \mathbin| H(x \mathbin| 2) \mathbin| \dotsb \mathbin| H(x \mathbin| n) $ ; 當然,還必須選擇數字的寬度、填充方式等。
  3. 一個人可能會選擇 $ H(H(x) \mathbin| 1) \mathbin| H(H(x) \mathbin| 2) \mathbin| \dotsb \mathbin| H(H(x) \mathbin| n) $ 就像你建議的那樣,但不清楚額外的目的是什麼 $ H(x) $ 供應。

就我個人而言,我會選擇帶有 little-endian 64 位整數的選項 (2),但要證明該選擇的合理性需要進一步的思考和解釋,並不是每個人都會做出相同的選擇。 使用標準 XOF 無需考慮這些問題:您只需向 SHAKE128 詢問所需的輸出時間即可。

這就是為什麼 Ed448 被設計為不使用 SHA3-512(在某些計數器模式或其他模式下)的部分原因,類似於 Ed25519 使用 SHA-512,而是使用具有適當長輸出的 SHAKE256。OAEP 標準之所以復雜,部分原因是沒有可用的 XOF,因此必鬚髮明一個(“MGF”);如果 XOF 可用,它會更簡單、更容易理解。

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