比特币面临时间扭曲攻击风险 新提案或可解决安全隐患

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.94%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 6
  • 分享
评论
0/400
盲盒开出大熊猫vip
· 5小时前
这bug说来说去还不如挖矿难度大
回复0
元宇宙流浪汉vip
· 5小时前
唉咪咪!又出问题了啊
回复0
数据酒保vip
· 5小时前
看起来又是神级bug 我先去搬个小板凳
回复0
Token风暴眼vip
· 5小时前
唉 又有人玩弄时间戳了 开多还是开空?大家别慌
回复0
airdrop_huntressvip
· 5小时前
又在搞啥 咋还扯到时间机器了??
回复0
just_another_walletvip
· 5小时前
唉 开发这么多年 漏洞一个接一个
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)