Hash

帶或不帶密鑰的散列函式

  • March 17, 2014

散列函式的經典定義(在書中找到)是可以的,但是當研究得更多時,有很多對我來說似乎模棱兩可(矛盾)的概念:

  • 有時我們有需要密鑰的雜湊函式 $ 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 $ (但知道其他消息的標籤)。 現在回答你的問題

  1. 每當您需要一個抗衝突的雜湊函式時,您都可以根據您的安全要求和環境限制選擇一個具體的函式。您不必為家庭而煩惱,它們是為理論家服務的。
  2. 它通常是 MAC,但也可以是密鑰派生函式。通常 MAC 不稱為散列函式(帶鍵)。當我們談論帶有密鑰的散列函式時,它通常是一個通常的散列函式,其部分輸入是保密的。

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