Hash

為什麼比特幣協議中的雜湊通常計算兩次(雙重計算)?

  • February 22, 2022

根據比特幣協議的 wiki 規範,雜湊通常“計算兩次”。例如

hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)
9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)

這是什麼原因?我想它以某種方式提供了額外的安全性,或針對潛在攻擊媒介的保護,但我無法推斷這些攻擊可能是什麼。

我們不確定,但最流行的理論是選擇雙雜湊來防止長度擴展攻擊

維基聲稱這是為了防止生日攻擊是錯誤的。如果您可以在一次呼叫雜湊函式時成功執行生日攻擊,那麼您將在第二次呼叫時成功執行生日攻擊。這很容易看出有hash(x) == hash(y)暗示hash(hash(x)) == hash(hash(y))

如果你真的想防範這種情況,你會做類似的事情hash(x||hash(x))。在這種情況下,在單個呼叫中發現衝突hash不會直接在雙重呼叫中產生衝突。

引用自:https://bitcoin.stackexchange.com/questions/6037