Hash

是什麼讓 SHA-2 和 SHA-3 的安全級別是其輸出雜湊長度的一半?

  • June 5, 2015

sha-256的標籤 wiki部分錶示:

SHA-256 … 處理 512 位塊中的輸入並具有 256 位輸出,用於 128 位安全級別。

我不是密碼學家,只是一個有興趣的業餘愛好者,但SHA-256 的安全級別只有 128 位,這是怎麼回事?(更一般地,關於整個 SHA-2 和 SHA-3 系列。)另外,這被認為是針對什麼類型的攻擊?

我查看了維基百科,這並沒有真正幫助我解決困惑。列出的密碼分析結果(截至 2014 年)都是針對減少輪數的變體,大多數 SHA-256 的數量級為 $ 2^{250} $ 複雜性或更多。SHA 函式的比較給出了每個 SHA-2 和 SHA-3 系列函式的安全性為輸出雜湊長度的一半,但沒有說明如何得出該數字。

安全級別是否與輸入處理塊大小和輸出雜湊長度之間的關係有關?

請在數學上放輕鬆;最好有一些數學支持的簡單英語解釋。

在沒有任何給定上下文的情況下,您不能說 SHA-2 的安全級別是其雜湊長度的一半。 128位針對什麼類型的攻擊? 攻擊者試圖做什麼?執行碰撞?好的,是的,它有 128 位防止碰撞。執行原像?不,它具有針對原像攻擊的 256 位安全性。

如果平均情況的預期操作數為 2^n,則任何算法都被視為 n 位強度。對於完整的密碼散列,強度為 2^(n/2) 對抗碰撞和 2^n 對抗原像。由於生日問題,碰撞比原像攻擊“更容易” 。它們需要更少的操作,因此您需要更大的搜尋空間(摘要長度)來實現相同級別的安全性。

因此,SHA-256 具有 128 位安全性的說法是不完整的,它忽略了衝突並不總是相關的事實。 對於許多類型的場景,碰撞是沒有價值的。 衝突不是威脅的一個例子是散列密碼。攻擊者要破解特定密碼,他們需要找到密碼雜湊的原像。在該應用程序中,SHA-256 具有 256 位安全性,因為衝突不存在安全風險(即攻擊者確定 abc 和 xyz 都是雜湊 1234,並且與任何密碼雜湊都不匹配)。 碰撞一詞在通用語言中用於指代原像的場景無濟於事。 還要記住,有兩種類型的原像攻擊,一旦算法部分受到損害,它們可能具有不同的安全級別,具體取決於它是第一次還是第二次原像攻擊。當然,一旦算法受到損害,您應該尋求遷移到更安全的算法,但這種區別在某些情況下可能是相關的。

嗯。寫這篇文章的人相當隨意。摘錄有些不可避免,因為您無法用幾句話解釋所有細微差別,但維基正文應該更準確。

粗略地說,密碼算法的安全級別(也稱為強度)是破解它所需的計算量。它是所需基本操作的對數;例如,具有 128 位安全級別的算法需要 $ 2^{128} $ 操作。什麼算作一項操作並沒有精確定義;通常,這是對相關函式的一次呼叫,以及其他大致相同複雜性的計算。

安全級別不考慮特定的攻擊:它衡量一個最聰明的對手的最小計算量。換句話說,它考慮了最知名的攻擊。

此聲明中缺少的是安全級別考慮特定問題。例如,AES-128-CBC 加密的安全級別將基於在沒有密鑰的情況下解密消息。談論“AES-128 的安全級別”仍然有意義,因為對於所有常見問題,該值都是相同的。另一方面,說 AES-256 具有 256 位安全級別並不完全正確:這是加密的安全級別,但存在諸如 MAC 偽造之類的問題,可以通過暴力破解一個塊的價值來破解,而 AES-256 塊只有 128 位。

像 SHA-256 這樣的加密散列具有幾個基本屬性,並且它們的強度並不相同:

  • 原像電阻:給定 $ h $ , 尋找 $ m $ 這樣 $ h = \mathrm{SHA256}(m) $ . 這具有 256 位安全級別。
  • 第二原像電阻:給定 $ m_1 $ , 尋找 $ m_2 $ 這樣 $ m_1 \ne m_2 $ 和 $ \mathrm{SHA256}(m_1) = \mathrm{SHA256}(m_2) $ . 這具有 256 位安全級別。
  • 碰撞阻力:找到 $ m_1 $ 和 $ m_2 $ 這樣 $ m_1 \ne m_2 $ 和 $ \mathrm{SHA256}(m_1) = \mathrm{SHA256}(m_2) $ . 這有一個(大約)128 位的安全級別,因為這個問題很容易受到生日攻擊

正如我們在 AES-256 中看到的那樣,安全級別不一定是密鑰大小,即使對於沒有被破壞的算法也是如此。密鑰大小並不總是暴力攻擊的決定因素,就像雜湊大小並不總是雜湊的決定因素一樣。在這兩種情況下,生日攻擊都會將只需要發現衝突的問題的安全級別降低一半。

即使對於加密算法,安全級別也不總是密鑰大小。具有任何密鑰大小和體面模式的 AES 就是這種情況,但這裡有一些不是這樣的範例:

  • 對於DES,密鑰只有 56 個“有用”位,但表示為 8 個字節和 8 個奇偶校驗位。因此,64 位密鑰只有 56 位安全級別(即,當算法被認為未損壞時的原始安全級別,現在它已部分損壞)。
  • 2DES(使用兩個密鑰的連續 DES 操作)僅具有 57 位的理論安全級別,因為中間相遇攻擊有效地使第二個密鑰僅使破解它所需的計算量增加一倍。
  • 3DES — 具有 3 個密鑰的連續 DES — 具有 112 位安全級別(兩個密鑰的強度)。
  • 非對稱算法通常具有明顯低於其密鑰大小的安全級別,因為它們基於具有某種結構的數學對象,這些結構允許比嘗試所有可能的密鑰更好的攻擊。基本操作的定義可能導致相對較大的變化,因此為非對稱算法引用的強度是估計值。RSA 與模數大小相關的安全強度是對這個主題的有益閱讀。keylength.com列出了一些常用算法強度的參考資料。

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