比特币拟修复时间扭曲攻击漏洞 软分叉方案呼之欲出

比特币协议中的时间扭曲攻击漏洞

比特币开发者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)