🎉 Gate xStocks 交易开启啦,现货、合约、Alpha齐上线!
📝 在Gate广场发帖,晒出你的交易体验或精彩截图,瓜分$1,000大奖池!
🎁 广场优质创作者5名,每人独享$100合约体验券!
🎉 帖文同步分享到X(推特),浏览量前十再得$50奖励!
参与方式:
1️⃣ 关注 @Gate广场_Official
2️⃣ 带 #Gate xStocks 交易体验# ,原创发帖(不少于20字,仅用活动标签)
3️⃣ 若分享到推特,请将链接提交表单:https://www.gate.com/questionnaire/6854
注:表单可多次提交,发布更多帖文可提升获奖机会!
📅 7月3日16:00—7月9日24:00(UTC+8)
详情:https://www.gate.com/announcements/article/45926
每一条体验,都有机会赢取大奖!快在Gate广场show出你的操作吧!
比特币时间扭曲攻击漏洞解析:原理、影响与修复方案
比特币安全漏洞:时间扭曲攻击
近日,比特币开发者Antoine Poinsot提出了一项名为"大共识清理"的软分叉提案。该提案旨在修复比特币协议中长期存在的几个漏洞和弱点,其中包括我们最近讨论过的重复交易问题,以及本文将重点探讨的更为严重的"时间扭曲攻击"漏洞。
比特币区块时间戳保护机制
在探讨时间扭曲攻击之前,我们需要了解当前的时间操纵保护规则:
中位过去时间(MPT)规则:区块时间戳必须晚于前11个区块的中位时间。
未来区块时间规则:区块时间戳不得超过节点对等体中位时间2小时以上。节点时间与本地系统时钟的最大允许差异为90分钟。
MPT规则防止区块时间戳过于远离过去,而未来区块规则则限制时间戳不能过度进入未来。值得注意的是,无法实施类似未来区块规则的机制来阻止过去的时间戳,因为这可能会影响初始区块链同步。时间扭曲攻击正是利用了伪造远古时间戳的可能性。
中本聪的"差一"错误
比特币的难度调整周期包含2016个区块,按10分钟的目标出块时间计算,约为两周。在计算挖矿难度调整时,协议会计算相关2016区块窗口中第一个和最后一个区块之间的时间戳差。这个2016区块的窗口实际包含2015个区块间隔(即2016减1)。因此,正确的目标时间应为60秒 × 10分钟 × 2015个间隔 = 1,209,000秒。然而,比特币协议使用了2016这个数字来计算目标:60秒 × 10分钟 × 2016 = 1,209,600秒。这是一个典型的差一错误,可能是中本聪混淆了区块与区块间隔的概念。
这个错误导致目标时间比应有的长0.05%。实际上,比特币的目标间隔时间不是10分钟,而是10分钟零0.3秒。虽然这个漏洞看似微不足道,但自比特币启动以来,平均区块间隔一直是9分钟36秒,明显少于10分钟。这主要是因为自2009年以来,平均算力一直在增加。这也解释了为什么最近的减半事件发生在2024年4月,而不是2025年1月。我们实际上提前了进度。从长远来看,当价格和算力趋于稳定时,这个0.3秒的误差可能会帮助我们重新回到原定进度。
时间扭曲攻击
时间扭曲攻击大约在2011年首次被发现,它利用了中本聪在难度计算中的错误。假设挖矿完全中心化,矿工可以在协议允许的范围内设置任意时间戳。攻击者会将大多数区块的时间戳设置为比前一个区块仅提前一秒,以尽可能缓慢地推进区块链时间,同时遵守MTP规则。为了最大限度地减缓时间推进,矿工可以连续六个区块保持相同的时间戳,然后在第七个区块中将时间增加一秒,如此循环。
这种攻击会导致区块链时间越来越落后于实际时间,同时难度会不断增加,使挖矿变得越来越困难。然而,为了增强攻击效果,在每个难度调整周期的最后一个区块中,矿工会将时间戳设置为真实世界时间。随后,新难度调整周期的第一个区块的时间戳会被设置回过去,比前一个周期的倒数第二个区块仅提前一秒。这种操作仍然符合MTP规则,因为单个异常不会影响11个区块的中位数。
实施这种攻击后,第一个周期的难度不会受到影响。但从第二个调整周期开始,难度将开始下调。此时,矿工可以以极快的速度创建区块,可能短时间内创造大量比特币,从而获取不当利益。
攻击的可行性与挑战
尽管理论上这种攻击具有毁灭性,但实际实施面临多重挑战:
解决方案
修复这个漏洞有几种可能的方法:
改变难度调整算法,计算不同2016窗口中区块之间的时间跨度,并完全修复差一错误。但这可能需要硬分叉。
取消MTP规则,要求时间在每个区块中总是向前移动。但这可能导致时间卡在远未来,并给使用系统时钟的矿工带来麻烦。
一个更简单的解决方案是要求新难度周期的第一个区块的时间不早于前一周期最后一个区块之前的特定分钟数。Poinsot的大共识清理提案中将这个时间设定为2小时。
这个2小时的限制有以下优点:
虽然这仍然允许攻击者每个周期将难度向下操纵约0.6%,但这只会是一次性变化,无法叠加。总的来说,这种解决方案在保护网络安全和维持系统稳定性之间取得了良好的平衡。