Hash
不需要抗碰撞特性的密碼散列函式的應用
我不明白為什麼某些應用程序不需要加密雜湊函式的抗碰撞性。例如,如果我們儲存了一個文件或程序的可信雜湊值,然後當我們打開文件並重新計算雜湊值並將其與可信雜湊值進行比較時,我們是否需要它具有抗衝突性?
儲存文件/程序的兩種情況;
- 在您的文件/程序上
在這種情況下,給定輸入的是二次原像攻擊 $ 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 這樣的鍵控散列。
- 第三方文件/程序
如果您接受來自第三方的文件/程序,則使用兩個或多個文件/程序衝突的經典攻擊在Luis Casillas 的答案中起作用,並且在Squeamish Ossifrage 的答案中得到了很好的解決,包括好的、壞的和偷偷摸摸的版本。因此需要抗碰撞性。您可以使用 HMAC 緩解這種情況。
碰撞阻力並非一直都是必需的。