Hash

不需要抗碰撞特性的密碼散列函式的應用

  • December 16, 2020

我不明白為什麼某些應用程序不需要加密雜湊函式的抗碰撞性。例如,如果我們儲存了一個文件或程序的可信雜湊值,然後當我們打開文件並重新計算雜湊值並將其與可信雜湊值進行比較時,我們是否需要它具有抗衝突性?

儲存文件/程序的兩種情況;

  1. 在您的文件/程序上

在這種情況下,給定輸入的是二次原像攻擊 $ m $ 和一個雜湊值 $ h =Hash(m) $ 找到另一個輸入 $ \bar m $ 這樣 $ m \neq m’ $ 和 $ h = Hash(m’) $ . 只要雜湊值 $ h $ 不受攻擊者的控制,他們需要找到第二個輸入。在這種情況下,我們不需要碰撞攻擊

  • 碰撞攻擊正在尋找兩個輸入 $ a $ 和 $ b $ 和 $ a\neq b $ 這樣 $ Hash(a) = Hash(b) $ . 要具有抗碰撞性,找到這樣的一對必須不低於 $ \mathcal{O}(2^{n/2}) $ 對於散列函式 $ n $ 任何機率多項式時間對手的比特輸出大小。界限來自對雜湊函式的生日攻擊。如果攻擊者可以控制雜湊值,就有可能利用他們的優勢。為了防止這種情況,我們需要使用像HMAC、 KMAC 這樣的鍵控散列。
  1. 第三方文件/程序

如果您接受來自第三方的文件/程序,則使用兩個或多個文件/程序衝突的經典攻擊在Luis Casillas 的答案中起作用,並且在Squeamish Ossifrage 的答案中得到了很好的解決,包括好的、壞的和偷偷摸摸的版本。因此需要抗碰撞性。您可以使用 HMAC 緩解這種情況。

碰撞阻力並非一直都是必需的。

  • 一個很好的例子是將HMAC 擴展為密鑰散列消息認證程式碼或基於散列的消息認證程式碼)。僅假設壓縮函式是 PRF,HMAC 是 PRF$$ 1 $$由 Mihir Bellare 在 2006 年證明。PRF 不需要具有抗碰撞性。而且,通常,我們使用良好的雜湊函式(如 HMAC-SHA256 或 HMAC-SHA3-256)來實例化 HMAC。
  • 另一個例子是密碼散列,儘管我們不使用標準的加密散列函式,因為它們速度快而且不是記憶體硬函式——首選 Scrypt、PBKDF2 或 Argon2——它們仍然被認為是散列函式。在密碼散列中,原像攻擊和二次原像攻擊被認為是重要的。衝突不適用於密碼散列

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