Hash

是什麼讓像 SHA1 這樣的雜湊能夠抵抗衝突?

  • June 22, 2017

我一直在閱讀有關 SHA1 和 SHA256 以及它們實際上如何將一串文本散列到唯一散列消息的資訊。但我不明白是什麼讓它們能夠抵抗碰撞。

找到雜湊衝突的最佳方法是什麼?是什麼讓雜湊算法能夠抵抗衝突?如果我們發現 1 次沖突是因為它必須是由特定輸入引起的,那麼我們不能將 SHA 結果視為有問題的雜湊的可能候選者,並假設大多數其他結果都可以嗎?

由於無限大小的輸入空間和有限大小的輸出空間(鴿籠原理),衝突總是會發生。所以目標是在更短的時間內找不到碰撞,然後簡單地嘗試隨機輸入,直到發現碰撞——不可能有一個不存在碰撞的壓縮散列函式,它們必須存在,所以我們必須適應反而讓他們很難找到。

是什麼讓雜湊算法能夠抵抗衝突?

第一件事實際上是消息的填充。如果不這樣做,碰撞通常很容易產生。

任何輸入的函式輸出都應該是不可預測的。輸出中任何程度的可預測性都可用於比蠻力更快地搜尋碰撞。

在最壞的情況下,雜湊是完全線性的,並且可以從一個簡單的表達式中計算出衝突。

在最好的情況下,雜湊輸出中任何特定位的值都不能以高於 50% 的機率被猜測。

生成產生不可預測輸出的雜湊函式的確切、具體、最佳方法並沒有真正的確切答案。有多種方法可以嘗試預測函式的輸出,例如線性差分密碼分析。雜湊函式的設計考慮了這些類型的攻擊。

理想情況下,該函式的作者將確定最好的攻擊是什麼,然後簡單地將函式參數配置為足夠大,以使攻擊不再適用。雖然很難知道最好的攻擊是什麼,但通過正確的設計策略,您可以確保對已知類型的攻擊具有高水平的抵抗力。

找到雜湊衝突的最佳方法是什麼

這取決於所討論的特定雜湊函式。

  • 如果它是非加密雜湊,則可能存在一個簡單的表達式,允許您直接計算衝突而無需搜尋。
  • 如果您對 SHA1 感到好奇,那麼您會想了解最近對 SHA1 的攻擊
  • 如果它是其他一些散列函式,那麼您將需要找到一些分析它的預先存在的研究(或者如果它是您自己的構造,則您自己執行此類分析)。

如果我們發現 1 次沖突是因為它必須是由特定輸入引起的,那麼我們不能將 SHA 結果視為有問題的雜湊的可能候選者,並假設大多數其他結果都可以嗎?

你問的不是很清楚:聽起來你正在測試其他一些雜湊函式,並且想知道,儘管發現了一個衝突,但是否可以安全地“假設”它沒有以某種方式被破壞並且找不到其他衝突。

如果是這種情況,那麼不,做出這種假設是不安全的(或合理的)。如果散列被正確填充並且具有足夠大的輸出大小,那麼您永遠不應該看到它的衝突。如果你這樣做了,那麼最終可能會發生其他碰撞(攻擊會變得更好,而不是更糟)。

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