Security

玩“一對一”的錯誤(根據 2015 年而不是 2016 年的區塊時間跨度重新定位困難)?

  • January 4, 2018

在 Gavin Andresen 的這篇論壇文章中,他寫道:

第二:我編寫了“discourage blocks”基礎設施: https ://github.com/gavinandresen/bitcoin-git/tree/discourageblocks (歡迎程式碼審查)

……這應該讓我們有能力推動礦工做正確的事情。勸阻那些似乎在玩一個錯誤的區塊應該足以阻止 50% 以上的卡特爾形成,而無需進行區塊鏈拆分更改。

我相信一個錯誤是指難度重新定位是基於之前的 2015 塊而不是 2016 塊所花費的時間 - 如果我錯了,請糾正我。

我想知道的是礦工怎麼玩這個bug?他們能做什麼,給他們帶來什麼優勢?

該攻擊允許一組擁有超過 50% 網路計算能力的礦工任意改變難度。

在調整難度時,只考慮重定位週期內第一個和最後一個塊(即具有一定難度的第一個和最後一個塊)的次數。這種攻擊通過操縱這兩個塊之一的時間戳來起作用。

如果塊的時間大於最後 11 個塊的中位數且小於 currentTime + 2 小時,則塊被認為是有效的,因此攻擊者可以創建具有遙遠未來時間的舊塊的新版本是合法的。如果這是重新定位期間的第一個區塊,那麼在此之後難度將翻兩番。如果是最後一個區塊,則難度將除以四。(難度調整僅限於 *4 或 /4。)

請注意,不可能對最近的區塊進行這些重大更改,因為未來的時間將超過兩個小時。它需要使用歷史區塊來完成,然後攻擊者需要重新執行該區塊之後的所有區塊。所以這種攻擊只有在你擁有比合法網路更多的計算能力時才有可能。

如果重新定位週期之間存在重疊塊,這將不是什麼大問題。在重新定位期間,不要使用第一個和最後一個塊,而是使用舊難度的最後一個塊和新難度的最後一個塊。然後攻擊者仍然可以在一個重定向周期內搞砸,但它會在下一個重定向周期內得到糾正。

我認為更好的解決方案是查看重新定位期間的每個區塊,以及該期間之前的一些區塊。賦予某些區塊“特殊權力”似乎是個壞主意。

不鼓勵的塊被認為是有效的(它向交易添加確認,在它也有效之後的塊等),但您的節點拒絕中繼它或在其上建構未來的塊。如果大多數網路不鼓勵一個塊,那麼它幾乎肯定會被替換。即使是少數人不鼓勵區塊也會損害區塊的機會。但是,當大多數網路都不是時,礦工阻止一個塊是非常無利可圖的。

(感謝 gmaxwell 向我解釋了這次攻擊。)

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