Proof-of-Work

是什麼阻止了比特幣中發生的與 Verge 類似的時間扭曲攻擊?

  • October 3, 2018

現在(2018 年 5 月),Verge(一種具有工作證明的山寨幣)受到時間扭曲攻擊的攻擊。更多可以在這裡閱讀

<https://blog.theabacus.io/the-verge-hack-explained-7942f63a3017>

究竟是什麼阻止了類似的攻擊發生在比特幣上?

Verge 有不同的雜湊邏輯(更頻繁的重定向,更多並發的雜湊算法),但在我的閱讀中,攻擊的邏輯應該也適用於比特幣。

由於它從未在比特幣中發生過,我可能錯過了一些東西。Verge 與比特幣有何不同,這發生在 Verge 中,但不是在比特幣中?

沒有什麼能直接阻止它在比特幣中,事實上,這種攻擊已經在 testnet3 上被多次證明——這是 testnet3 目前擁有幾乎是比特幣的三倍的區塊的主要原因,儘管它是在比特幣主網之後幾年推出的,並且有一些東西類似於 [1] 比特幣的 10 分鐘平均區塊間隔。

間接地,時間扭曲攻擊在比特幣主網上不如 testnet3 或 Verge 等山寨幣實用性有以下幾個原因:

  1. **顯而易見:**一旦廣播用於時間扭曲攻擊的塊,任何人都可以看到過去的中位時間(比特幣中的單調時鐘)遠遠落後於實時。
  2. **慢:**時間扭曲攻擊利用了用於重定向的公式,但重定向僅每 2,016 個塊執行一次(以正常速度為兩週),並且每個週期最多只能將難度降低 75%。現在,75% 是很多,但花費兩週時間執行公開可見的攻擊也是如此。由於修改了難度,進一步降低難度可以更快地執行,但它們仍然很慢:第二次重新定位需要 3.5 天;第三次約1天;第四次約 6 小時;等等…
  3. **礦工很容易修復:**如果誠實的礦工控制了大部分雜湊率,他們可以簡單地拒絕在時間戳太遠的區塊之上建構。如果過去的中位時間在最初的 2,016 個區塊重新定位期結束之前恢復到其正常的追踪平均值,則難度不會比正常變化更多。

如果所有這些原因確實提供了間接緩解,那麼為什麼我們每隔幾個月就會看到對 testnet3 的攻擊呢?主要是因為 testnet3 使用與比特幣相同的 SHA256d 工作證明功能,因此任何想要真正快速探勘區塊的人都可以連接一些現代 ASIC 礦工來快速創建一堆 testnet 區塊。這通常會迅速增加難度,但使用時間扭曲攻擊可以防止增加難度。也就是說,在過去的至少一個案例中,時間扭曲攻擊者使 testnet3 在很長一段時間內無法使用,一些慷慨的人將他們自己的巨大採礦設備指向 testnet3,以壓倒攻擊者並恢復難度。

在比特幣主網上,如果攻擊被執行,我認為情況會有所不同。幾天之內,很大一部分使用者群會知道攻擊正在加劇,並開始向誠實的礦工施壓,要求他們拒絕攻擊者的區塊。我個人預計礦工會遵守(因為下一步將是人們開始拋出諸如“PoW 功能更改”之類的片語),這將擊敗攻擊者並讓他為每個被拒絕的區塊損失預期的收入。

如果攻擊者預計該場景會以我認為的基本相同方式進行,那麼他們首先發起攻擊是沒有意義的——我認為這最終會阻止對比特幣的時間扭曲攻擊。

[1] 與比特幣不同,Testnet3 有一個規則,如果在 20 分鐘內(根據區塊頭時間)沒有挖出任何區塊,礦工可以創建難度為 1 的區塊(最低難度)。這意味著即使是在 testnet3 上進行完全誠實的探勘也比在主網上更快,因為在主網上,大約 20% 的塊需要超過 20 分鐘才能找到。


一些額外的說明:

  1. 分叉可以更改重定向計算以使用過去的中位時間而不是原始塊頭時間。這可以修復對比特幣的時間扭曲攻擊,但它可能必須是一個硬分叉。
  2. BIP113軟分叉以來,過去的中位時間已被用於限制礦工可以在其區塊中包含哪些 nLockTime 交易。目前沒有多少交易使用 nLockTime 和時間,但如果發生時間扭曲攻擊,使用者可以開始這樣做,為礦工創造大量費用激勵,使過去的中位時間更接近實時。

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