比特幣擬修復時間扭曲攻擊漏洞 軟分叉方案呼之欲出

比特幣協議中的時間扭曲攻擊漏洞

比特幣開發者Antoine Poinsot於2025年3月26日提出了一項新的改進提案,旨在通過軟分叉修復比特幣協議中長期存在的幾個漏洞和弱點。這個被稱爲"大共識清理"的提案不僅解決了之前討論過的重復交易問題,還針對一個更爲嚴重的漏洞——"時間扭曲攻擊"提出了解決方案。

比特幣安全漏洞:時間扭曲攻擊

比特幣的時間戳保護機制

在探討時間扭曲攻擊之前,我們先回顧一下比特幣現有的時間操縱保護規則:

  1. 中位過去時間(MPT)規則:區塊時間戳必須晚於前11個區塊的中位時間。

  2. 未來區塊時間規則:區塊時間戳不得超過節點對等體中位時間2小時以上。另外,節點時間與本地系統時鍾的最大允許差距爲90分鍾。

這些規則的目的是防止區塊時間戳過於偏離實際時間,無論是向過去還是向未來。然而,時間扭曲攻擊正是通過僞造遠早於實際時間的時間戳來進行的。

比特幣安全漏洞:時間扭曲攻擊

中本聰的"差一"錯誤

比特幣的難度調整周期包含2016個區塊,理論上約爲兩周時間。在計算挖礦難度調整時,協議會計算這2016個區塊中首尾兩個區塊的時間戳差。然而,這2016個區塊實際上只包含2015個區塊間隔。正確的目標時間應該是60秒 × 10分鍾 × 2015 = 1,209,000秒,但比特幣協議卻使用了2016這個數字,導致計算結果爲1,209,600秒。這個微小的差錯使得目標時間比實際應有的長了0.05%。

雖然這個誤差看似微不足道,但它引發了一個更嚴重的問題。難度計算是基於每個2016區塊窗口內的第一個和最後一個區塊,而不是前一個窗口的最後一個區塊與當前窗口的最後一個區塊之間的差異。這種計算方式爲時間扭曲攻擊創造了可能。

時間扭曲攻擊的原理

時間扭曲攻擊大約在2011年被首次發現。在這種攻擊中,假設挖礦完全中心化,礦工可以在協議允許的範圍內任意設置時間戳。攻擊者會將大多數區塊的時間戳設置爲比前一個區塊僅提前一秒,或者每六個區塊才向前移動一秒,以盡可能慢地推進時間。

這種操作會導致區塊鏈時間逐漸落後於現實時間,同時難度不斷增加。爲了加強攻擊效果,在每個難度調整周期的最後一個區塊,攻擊者會將時間戳設置爲真實世界時間。而下一個週期的第一個區塊則會被設置回過去,比前一周期倒數第二個區塊早一秒。

通過這種方式,攻擊者可以在第二個調整周期後顯著降低挖礦難度,從而以極快的速度創建區塊,獲取大量比特幣。

比特幣安全漏洞:時間扭曲攻擊

攻擊的可行性與挑戰

盡管理論上這種攻擊可能造成嚴重後果,但實際實施面臨多重挑戰:

  1. 需要控制大部分算力。
  2. 誠實礦工的存在會增加攻擊難度。
  3. MTP規則和誠實時間戳會限制惡意時間戳的回溯程度。
  4. 如果誠實礦工產生任一難度調整窗口的第一個區塊,該週期的攻擊將失效。
  5. 攻擊過程對所有人可見,可能觸發緊急軟分叉修復。

比特幣安全漏洞:時間扭曲攻擊

解決方案

修復這個漏洞有幾種可能的方法:

  1. 改變難度調整算法,計算不同2016窗口區塊間的時間跨度並修正"差一"錯誤。
  2. 取消MTP規則,要求每個區塊的時間必須向前移動。
  3. 設置新的限制規則,要求新難度週期第一個區塊的時間不早於前一周期最後一個區塊特定分鍾數。

Poinsot的"大共識清理"提案採用了第三種方法,建議將時間限制設爲2小時。這一方案既能有效緩解時間扭曲攻擊,又能最大限度降低意外產生無效區塊的風險。

總的來說,比特幣社區正在積極應對這一潛在威脅,通過軟分叉等方式不斷完善協議,以確保網路的長期安全和穩定運行。

比特幣安全漏洞:時間扭曲攻擊

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
SatoshiSherpavip
· 07-14 18:42
修bug真的像修bug啊
回復0
FUD_Whisperervip
· 07-14 18:38
修bug了?早该修修了
回復0
老韭の自白vip
· 07-14 18:38
这bug都修了4年了啊?
回復0
Gwei_Watchervip
· 07-14 18:35
这bug该修早该修了 真是看不下去了
回復0
拉盘牛角包vip
· 07-14 18:34
2025年才修 这bug得等好久啊
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)