Hash
可擴展輸出功能 (XOF) 的案例,例如 SHAKE128/SHAKE256
FIPS 202定義了 2 個函式 SHAKE128 和 SHAKE256,作為可以具有可變輸出長度的**可擴展輸出函式(XOF)。**但在附錄 A.2 中標記:
通過選擇固定的輸出長度,可以將 XOF 用作散列函式。然而,XOF 具有生成相關輸出的潛力——安全應用程序/協議/系統的設計者可能不會期望散列函式的屬性
後來它描述了一個理論案例(並明確禁止這種用途):
例如,一種簡單(且未經批准)的方式,讓兩方同意從指定為
keymaterial
計算的消息中派生 112 位三重 DES 密鑰SHAKE128(keymaterial, keylength)
,其中keylength
112。但是,如果攻擊者能夠誘導一個的各方對 使用不同的值keylength
,例如 168 位,但對 使用相同的值keymaterial
那麼這些功能的案例是什麼?是否有任何合理的案例應該使用這些函式而不是標準(固定大小的輸出函式)SHA-3 函式?
到目前為止,我可以想到 XOF 的四種不同應用。
請注意,有些會根據請求的輸出大小更改填充,因此輸出確實不相關,Skein 會這樣做。
- 簽名消息散列。使用 XOF,您不必依賴臨時構造將簽名方案中的消息散列到適當的大小。例如,使用 XOF 實現RSA-FDH是微不足道的,而使用固定大小的雜湊則不是那麼容易。作為另一個例子,IRTF 的CFRG採用SHAKE -256 作為Ed448簽名標準的內部散列函式(內部需要 912 位散列)。
- 流密碼。這可能是人為的,但如果您不想相信經過充分研究的AES - CTR或Salsa結構,您*實際上可以濫用 XOF 作為流密碼。*這確實是在 Skein 規範中提出的。
- 密鑰推導。假設您不知道 HKDF。在大多數情況下,您可以輕鬆地將 HKDF 替換為 XOF,因為您可以在處理主密鑰後簡單地保存狀態,然後用每個密鑰派生的上下文填充它。或者,如果您只需要一個巨大的派生位塊,則需要多次呼叫HKDF或固定大小的散列,但您的 XOF 只需呼叫一次。
- 更容易實例化隨機預言。一些安全證明依靠所謂的隨機預言模型來證明給定方案的安全性。通常,您會圍繞固定大小的散列函式使用一些人工構造來獲得所需的輸出大小,但是使用 XOF,您可以直接將它們插入,而不必擔心您這邊的任何錯誤可能會破壞證明(大多數人不會在很多情況下不知道/理解,包括我在內)。
TL;DR:本機 XOF 不是必需的,可以使用已知的“臨時”結構來模擬,但它們在基於隨機預言機的方案、簽名消息散列和快速簡單的密鑰派生中非常方便。