Hash
術語幫助:散列函式和偽隨機函式
我對散列函式和偽隨機函式這兩個術語有點困惑。據我所知,我可以使用加密的強雜湊函式作為 PRF。散列函式有一個 IV 並且是完全公開的 - 每個人都可以查看構造和細節。一個好的散列函式以偽隨機方式將輸入映射到其輸出(確定性)。
所以偽隨機函式非常相似。在這裡,您不採用修復雜湊函式,而是從一組函式中獲取一個函式。該模型是通過使用鍵控函式來暗示的。因此,經常使用鍵控散列函式,例如 HMAC 被視為 PRF。
所以從有限的角度來看,說攻擊者不知道我的 PRF 的“內部條件”是否正確?(我的意思是我目前的設置:我使用哪個鍵和哪個散列函式,或者如果我使用 HMAC,他不知道我的鍵和我的常量以及我的散列函式。)
你的問題有兩個問題:
- 術語“散列函式”的定義並不像您想像的那麼明確。
- 密碼學家最常見的定義並不意味著偽隨機性。
通常,您需要非常小心地區分:
安全定義,例如:
- 偽隨機函式
- 抗碰撞雜湊函式
加密算法,例如:
- SHA-2
- HMAC
- AES
某些給定算法符合指定安全定義的論點。
“偽隨機函式”和“抗碰撞雜湊函式”是安全定義:
偽隨機函式是一個鍵控函式,不知道鍵的對手無法有效地區分相同域和範圍內隨機選擇的函式。
抗碰撞雜湊函式 (CRHF) 是一個具有以下特點的函式:
- 壓縮(將可變大小的輸入轉換為固定大小的輸出);
- 抗原像性
- 第二原像電阻
- 碰撞阻力
現在,您需要了解抗碰撞雜湊函式的安全定義並不意味著偽隨機函式的安全定義:
- 偽隨機函式不需要壓縮其輸入。範例:AES 或任何分組密碼(設計為固定大小塊上的偽隨機排列)。
- 然而,提供原像、第二原像和抗碰撞性的函式可以有效地與隨機函式區分開來。
這意味著,如果您對散列函式的所有假設都是它滿足 CRHF 要求,那麼您不能斷定它也提供 PRF 要求。首先是因為 CRHF 可能沒有鍵控;其次,因為鍵控 CRHF 可以與隨機函式區分開來。
然而,在實踐中,我們使用的常見散列函式算法被認為(或只是假設)不僅滿足抗衝突散列函式定義,而且還滿足:
- 成為偽隨機函式的合適建構塊,使用 HMAC 或其他一些構造;
- 通常它們也被視為隨機預言機:產生隨機輸出的公共函式(無密鑰)。
但是,當您假設 #2 時,一些密碼學家會感到緊張,因為他們希望盡量減少我們對原語安全性所做的假設。