Hash

雙 SHA-256 是比特幣的最佳選擇嗎?

  • February 14, 2021

所以我只是好奇。

我真的很看重區塊鏈技術,並且我讀到比特幣使用雙 SHA-256 進行散列。

(據我了解,雙sha256本質上是 $ \operatorname{SHA-256}(\operatorname{SHA256}(value)) $ ).

雙 SHA-256 是否比 SHA-512 或比特幣可以使用的任何其他散列算法更好?或者也許還有其他替代方案可以比比特幣的雙 SHA-256 帶來一些好處?

由於比特幣的初始版本是 2009 年 1 月 9 日,因此設計者將這些 NIST 雜湊函式 ( NIST-FIPS 180-4 ) 作為可用選項:SHA-1(1995)、SHA-256 (2001)、SHA-512 (2001) ,還有更多

SHA-256 和 SHA-512 的主要區別在於目標 CPU。SHA-256 設計用於 32 位 CPU,SHA-512 設計用於 64 位 CPU。這對目標 CPU 產生了巨大的影響。

有人可能會爭辯說,設計者想要保護免受長度擴展攻擊。但是,SHA-512/256 具有與 SHA256 相同的原像、次級原像和抗碰撞性,可以抵禦長度擴展攻擊。雖然當時還沒有正式提供,但簡單地從 SHA-512 的輸出中修整 256 位就是對策。自從 SHA-384 (2001) 可用以來,知識就在那裡,並且它是從 SHA-512 中修剪出來的,具有不同的域分隔初始值 *。

顯而易見的選擇可以認為是速度。根據Blake2 網站,SHA512 比 SHA-256 快 50%。SHA-1 比 SHA-256 快 2 倍。但是,SHA-1 的輸出大小為 160 位,對於 2009 年的安全性和採礦空間而言,可以認為它很小。

選擇 256 位的另一個參數是比特幣使用 ECDSA-SHA-256 簽名。散列消息的明顯選擇是使用 SHA-256。

因此,**我們可以得出結論,**設計者不想要快速探勘,兼容 ECDSA-SHA-256 簽名所以選擇 $ \operatorname{SHA-256} $ 並且,為了防止長度擴展攻擊,選擇了雙重雜湊。雙重雜湊是由 Ferguson 和 Schneier 在他們的《實用密碼學》一書中發明的,用於對抗長度擴展攻擊。


作為旁注,雙重雜湊並不能防止碰撞攻擊,因為任何碰撞 $ \operatorname{SHA256}(x)=\operatorname{SHA256}(y) $ 也是一種碰撞 $$ \operatorname{SHA256}(\operatorname{SHA256}(x))=\operatorname{SHA256}(\operatorname{SHA256}(y)). $$


*在學術界,第一次出現作為針對長度擴展攻擊的對策的修剪可以追溯到1995 年

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