Hash

什麼是抗原像性和抗碰撞性,如何利用它們的不足?

  • March 12, 2018

什麼是*“原像抗性”*,如何利用它的不足?這與抗碰撞性有何不同,是否有任何已知的原像攻擊被認為是可行的?

原像抗性是關於散列函式的最基本屬性,可以考慮。它的意思是:

對於給定的 $ h $ 在散列函式的輸出空間中,很難找到任何消息 $ x $ 和 $ H(x) = h $ .

(請注意,這里和下一個定義中的這很難被正式定義,但可以通過查看帶有安全參數的雜湊函式族來正式化 $ n $ (通常是雜湊輸出大小),並說 »hard =沒有多項式 $ P $ 所以這可以及時完成 $ P(n) $ 為家庭的所有功能«。對於實際應用,我們通常只查看單個雜湊函式,並且滿足於 »hard = 比任何假設的攻擊者都可以投入更多的時間/成本«,最好是對要完成的工作進行一些估計。)

具有此屬性的函式也稱為單向函式(儘管該術語也用於具有此屬性的非散列函式,例如非對稱加密原語)。

一個相關的屬性是第二原像電阻

對於給定的消息 $ x_1 $ 很難找到第二條消息 $ x_2 \neq x_1 $ 和 $ H(x_1) = H(x_2) $ .

沒有原像抗性的功能通常也不具有第二原像抗性:給定一條消息 $ x_1 $ , 計算 $ h := H(x_1) $ 然後得到一個原像 $ x_2 $ 從 $ h $ ,那麼我們通常有 $ x_1 \neq x_2 $ 和 $ H(x_1) = H(x_2) $ . (“通常”的例外是當函式(對於有趣消息的空間)本質上是單射的,並且原像查找器將始終返回唯一有趣的原像。這樣的函式將是第二原像和抗碰撞的,但是仍然是一個非常糟糕的散列函式。通常有趣消息的空間比散列空間大得多,這在實踐中不會出現。)

碰撞阻力是一個更難的屬性,對於大多數雜湊函式的使用,我們仍然需要它:

很難找到一對消息 $ x_1 \neq x_2 $ 和 $ H(x_1) = H(x_2) $ .

當然,從(第二次)原像攻擊中,我們也得到了碰撞攻擊。另一個方向並不那麼容易工作,儘管對損壞的雜湊函式的一些碰撞攻擊似乎可以擴展為幾乎與第二原像攻擊一樣有用(即我們發現攻擊者可以任意修復大部分消息的碰撞) .

此外,還有對雜湊函式的通用生日攻擊(甚至適用於隨機預言機),這需要 $ O(\sqrt N) $ 試圖有很好的機率擊中重複,其中 $ N $ 是函式輸出空間的大小,其中對第二個原像和原像抗性進行類似的通用暴力攻擊需要大約 $ O(N) $ 查詢(這對於實踐中使用的所有散列函式的輸出大小是不可行的)。

我知道對於通常的雜湊函式沒有實際的原像攻擊(請在其他答案中添加它們,或作為評論),而例如對於 MD5,抗碰撞性幾乎完全損壞,並且 SHA-1 開始出現裂縫(在2017 年,Google的一個研究團隊產生了兩個相互衝突的文件)。

怎麼能利用這種不足呢?這在很大程度上取決於在更高級別的協議(或在其之上建構的算法)中使用散列函式。在某些協議中,僅直接使用其他屬性,但如前所述,缺少原像電阻總是會導致缺少第二原像和碰撞電阻。例如,在簽名方案中,我們通常首先對消息進行雜湊處理,並且(第二個)原像攻擊允許創建與第一個具有相同雜湊值的第二個消息,即相同的簽名適合。

需要原像抗性本身的一個例子是密碼的散列,或者通常是密碼和攻擊者已知的鹽。(實際上,這裡的消息空間通常很小,因此使用常見的快速散列函式進行暴力搜尋變得可行,這就是為什麼使用慢速散列函式進行密碼散列的原因。)

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