Hash
帶或不帶密鑰的散列函式
散列函式的經典定義(在書中找到)是可以的,但是當研究得更多時,有很多對我來說似乎模棱兩可(矛盾)的概念:
- 有時我們有需要密鑰的雜湊函式 $ k $
- 某些設計散列函式的論文談到了一系列散列函式,這意味著我認為有一個參數 $ k $ 我們隨機選擇在這個家族中選擇一個函式。我們可以認為這個參數是一個密鑰,或者不是,這對我來說並不清楚……
- 有時我們有不需要密鑰的雜湊函式。此外,如果我們考慮像 SHA-2 這樣的雜湊函式,我們不需要任何密鑰來使用它,也不需要選擇這樣的 $ k $ 隨機,我知道對於任何實現,SHA-2 對相同的輸入給出相同的結果(這個函式是確定性的……)
- 我讀過需要密鑰的雜湊函式實際上是 MAC。然而,一些關於雜湊函式需要密鑰的論文並沒有說這實際上是一個 MAC。
所以,我有幾個問題:
- 當我們想要使用特定的抗碰撞雜湊函式(為了將其用於簽名)時,從雜湊函式族的規範中,我必須如何選擇參數 $ k $ ?
- 需要密鑰的雜湊函式一定是 MAC 嗎?
- 如果不是,這種散列函式是否可以像任何其他無衝突散列函式一樣使用?在簽名中使用它(例如)?
謝謝你。
參數 $ k $ 出現在散列函式的定義中,因為很難為單個具體的散列函式制定許多屬性。例如,SHA-256 抗碰撞意味著什麼?顯然,有些值會發生衝突,並且存在一種非常短的算法,可以在很小的恆定時間內輸出衝突。為了有意義地定義碰撞阻力,理論家開始談論無限的雜湊函式族
$$ H = {H_k,|,k\in \mathbb{N}}, $$ 讓家人 $ H $ 如果對手需要漸近地花費,那麼是抗碰撞的 $ O(2^{n/2}) $ 尋找碰撞的時間 $ n $ 來自家庭的位雜湊函式。儘管定義變得合理,但它在實踐中並沒有幫助,因為很難將單個 SHA-256 擴展到無限的函式族。 這個參數 $ k $ ,僅僅為了簡化散列函式的理論而引入,經常與密鑰混淆。雜湊函式可能需要一個鍵 $ K $ 作為輸入,通常形成一個消息認證碼(MAC)。MAC應該很難偽造,即很難找到 $ M $ 並標記 $ T $ 這樣
$$ H(K,M) = T $$ 不知道 $ K $ (但知道其他消息的標籤)。 現在回答你的問題
- 每當您需要一個抗衝突的雜湊函式時,您都可以根據您的安全要求和環境限制選擇一個具體的函式。您不必為家庭而煩惱,它們是為理論家服務的。
- 它通常是 MAC,但也可以是密鑰派生函式。通常 MAC 不稱為散列函式(帶鍵)。當我們談論帶有密鑰的散列函式時,它通常是一個通常的散列函式,其部分輸入是保密的。