比特幣面臨時間扭曲攻擊風險 新提案或可解決安全隱患

robot
摘要生成中

比特幣安全隱患:時間扭曲攻擊

概述

2025年3月26日,一位比特幣開發者提出了一項新的改進提案,被稱爲"大共識清理"的軟分叉方案。該升級旨在修復比特幣協議中長期存在的幾個漏洞和弱點。其中一個較爲嚴重的漏洞被稱爲"時間扭曲攻擊",這正是本文要重點探討的內容。

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

比特幣區塊時間戳保護機制

在討論時間扭曲攻擊之前,我們先回顧一下當前的時間操縱保護規則:

  1. 中位過去時間(MPT)規則:區塊時間戳必須比最後十一個區塊的中位時間更晚。

  2. 未來區塊時間規則:基於MAX_FUTURE_BLOCK_TIME常量,區塊時間戳不能比節點對等體的中位時間超前超過2小時。節點提供的時間與本地系統時鍾之間允許的最大差距是90分鍾,作爲另一重安全保障。

MPT規則確保區塊不會過於回到過去,而未來區塊規則則防止它們過度進入未來。值得注意的是,無法實施類似於未來區塊規則的機制來防止區塊有過去的時間戳,因爲這可能會影響初始區塊鏈同步。時間扭曲攻擊涉及僞造時間戳,使其遠遠回到過去。

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

原始代碼中的計算誤差

比特幣協議中存在一個微小但值得注意的計算誤差。在計算挖礦難度調整時,協議使用了2016個區塊作爲計算基礎,而實際上應該使用2015個區塊間隔。這導致目標時間比應有的長0.05%,使得比特幣實際目標出塊間隔爲10分鍾零0.3秒,而非10分鍾整。

雖然這個0.3秒的誤差在整體上影響不大,但它與另一個更嚴重的問題相關聯。難度計算基於每個2016區塊窗口內的第一個和最後一個區塊,這種方法存在缺陷。更合理的做法應該是計算前一個2016區塊窗口的最後一個區塊與當前窗口的最後一個區塊之間的時間差。

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

時間扭曲攻擊原理

時間扭曲攻擊利用了上述計算誤差。在理想情況下,假設挖礦完全中心化,攻擊者可以按以下方式操縱區塊時間戳:

  1. 大多數區塊的時間戳僅比前一個區塊提前一秒。
  2. 每六個區塊才將時間戳向前移動一秒,以遵守MTP規則。
  3. 在每個難度調整周期的最後一個區塊,將時間戳設置爲真實世界時間。
  4. 新難度週期的第一個區塊時間戳再次回到過去,比前一周期倒數第二個區塊提前一秒。

這種操作會導致區塊鏈時間逐漸落後於真實時間,同時難度不斷增加。然而,在每個難度調整周期結束時,由於最後一個區塊使用真實時間戳,會觸發難度向下調整。隨着攻擊持續,難度會大幅降低,使得攻擊者能夠以極快的速度創建區塊,潛在地獲取大量比特幣。

攻擊的可行性與挑戰

盡管理論上這種攻擊具有破壞性,但實施起來面臨諸多挑戰:

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

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

潛在解決方案

爲了修復這個漏洞,有幾種可能的解決方案:

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

最新的"大共識清理"提案中,建議採用2小時的時間限制。這一限制約爲難度調整周期目標時間的0.6%,可以有效地限制難度被操縱的程度。

通過實施這些改進,比特幣網路將能更好地抵御時間扭曲攻擊,進一步增強其安全性和穩定性。

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

BTC0.91%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 6
  • 分享
留言
0/400
盲盒开出大熊猫vip
· 15小時前
这bug说来说去还不如挖矿难度大
回復0
元宇宙流浪汉vip
· 15小時前
唉咪咪!又出问题了啊
回復0
数据酒保vip
· 15小時前
看起来又是神级bug 我先去搬个小板凳
回復0
Token风暴眼vip
· 15小時前
唉 又有人玩弄时间戳了 开多还是开空?大家别慌
回復0
airdrop_huntressvip
· 15小時前
又在搞啥 咋还扯到时间机器了??
回復0
just_another_walletvip
· 15小時前
唉 开发这么多年 漏洞一个接一个
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)