Sha-256

這種基於 SHA256 的簡單工作量證明算法容易受到長度擴展攻擊嗎?

  • January 17, 2022

每個塊的內容被散列成 32 字節使用 $ \operatorname{SHA-256} $ (呼叫這個字元串 $ a $ )。為了讓塊被接受,必須有一個 256 位的隨機數(呼叫這個字元串 $ b $ ) 規定, $ \operatorname{SHA-256}(a\mathbin|b) $ ( $ a $ 與 $ b $ ) 有 $ N $ 或多個前導零位,其中 $ N $ 是難度參數。

這個簡單的工作證明算法是基於 $ \operatorname{SHA-256} $ 容易受到長度擴展攻擊?

  1. 長度擴展攻擊會改變雜湊結果,因此難度參數很有可能不再有效。由此$$ h = \operatorname{SHA-256}(a\mathbin|b\mathbin|pad1) $$在這個*。 $$ h’= \operatorname{SHA-256}(a\mathbin|b\mathbin| \text{pad1}\mathbin|\text{appended_data} \mathbin| \text{pad2}) $$ 我們不期望它們是平等的,平等是可以忽略不計的事件。

當然,攻擊者可能會搜尋這樣一個具有類似難度參數的擴展(appended_data)。但是,他們沒有太多時間,因為其中一個客戶端已經找到了對難度參數有效的隨機數,並且它已經在網路上傳播。 2. 驗證者將獲得 $ a $ 和 $ b $ 和雜湊結果 $ h’ $ (有限的尺寸是這裡的關鍵)。當他們計算雜湊值時,他們將計算 $ h = \operatorname{SHA-256}(a\mathbin|b) $ 他們會看到 $ h \neq h’ $ 平等是一個可以忽略不計的事件。

即使它們具有相同的雜湊值或有效的難度參數,正確實施的客戶端也會看到攻擊。

因此,通過適當的實現,長度擴展攻擊不是問題。但是,不要依賴這些實現,因為它們可能不正確,請像比特幣一樣使用雙 SHA-256。或者,使用 SHA-512/256、BLAKE2/3、SHA3-256 等抗長度擴展雜湊函式。

請記住,POW 被設計為需要大量工作,因此在比特幣設計開始時選擇雙 SHA-256 並不是一個壞主意。


*填充物

$ pad1 $ 是 SHA-256 的填充,其中1添加了 first 比盡可能小的0s,這樣當添加長度編碼時,消息是 512 的倍數。長度擴展攻擊者必須使用此填充,然後添加擴展消息,然後需要額外的填充作為 $ pad2 $ , 也。

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