對非加密雜湊函式的原像攻擊
我不擅長密碼學,所以請:)
在閱讀了這個討論之後,我現在很清楚xxHash不能抵抗衝突攻擊,並且對於MAC的使用也不安全。但是看了之後還是不明白 XXH3(xxHash 家族之一)對原像攻擊的抵抗力如何。
是的,XXH3 輸出是 $ 64 $ / $ 128 $ bits 這意味著找到圖像的機率是 $ 2^{64} $ / $ 2^{128} $ 相應的。但我也讀到不抵抗碰撞攻擊的雜湊更容易恢復。考慮一下,要恢復這個散列函式( $ 128 $ 位版本)使用蠻力將圍繞 $ 2^{64} $ 有大量時間的計算。根據這個問題,即使 XXH3 比 SHA-512/64 快 1000 倍,也至少需要恢復 $ \frac{2^{64}}{1000 * 2^{20}} $ 秒或 557 年。
這讓我想到了我的第一個問題。我的結論是真的嗎,XXH3 幾乎和 SHA-512/64 一樣抗原像攻擊?我錯過了什麼嗎?也許有某種非暴力攻擊?
第二個問題讓我很困擾。散列(尤其是 XXH3)產生衝突並不是什麼秘密。對於加密雜湊,很難找到它們,但它們是存在的。當我們成功執行原像攻擊後,如何確定我們找到的值是原始值?如果攻擊者設法獲取圖像,那麼這是原始圖像而不是眾多衝突之一的可能性有多大?
先感謝您。
但是看了之後還是不明白 XXH3(xxHash 家族之一)對原像攻擊的抵抗力如何。
一點也不 - 創建一個散列到任意值的圖像很容易。
是的,XXH3 輸出是 64/128 位,這意味著找到圖像的機率是 $ 2^{64}/2^{128} $ 相應的。
如果您使用的策略是“選擇圖像,對其進行雜湊處理,然後看看結果如何”,則機率成立。還有更有效的策略。
也許有某種非暴力攻擊?
當然是。
xxhash 由以下步驟組成:
- 以可逆的方式轉換目前狀態;或者
- 添加一個依賴於圖像的下一個詞的詞(同樣,以一種可逆的方式)(並且 xxhash 中沒有其他操作依賴於該輸入詞)。
因此,要生成散列到特定值的圖像,您需要做的就是選擇一個包含除一個單詞之外的值的模板;然後,向前評估 xxhash 直到找到那個單詞,得出一個內部狀態值 A。然後,獲取目標雜湊值,然後向後計算 xxhash,直到找到那個單詞,得出一個內部狀態值 B。然後,您需要做的就是選擇一個未知詞作為將狀態值 A 轉換為狀態值 B 的東西——這很容易;將該單詞插入模板中,您就完成了。
並且,為了解決您的最後一個問題:
對於加密雜湊,很難找到它們,但它們是存在的。當我們成功執行原像攻擊後,如何確定我們找到的值是原始值?
顯然,對於任何將可能很長的字元串轉換為固定長度的較短字元串的函式,衝突都是不可避免的。現在,如果我們找到一個散列到相同值的圖像,我們如何確保它是最初散列的相同圖像?答:一般情況下,我們不能,除非我們對原始圖像有很多了解(例如在上面對 xxhash 的攻擊中,我們知道輸入的所有單詞,除了一個)。另一方面,對於大多數針對加密雜湊的攻擊,我們不在乎——如果攻擊者能找到任何原像,他通常會獲勝。