长程攻击详解:攻击者可能如何改写区块链历史
长程攻击挑战了人们对区块链系统最根深蒂固的认识之一:历史不可篡改。
New to Nervos? Start here.
Explore the guide
长程攻击(long-range attack)是指从遥远的过去开始,往往接近创世区块或早期检查点,重新构建另一版本的链,试图改写区块链历史。
对多数用户来说,区块链历史似乎是永久的:交易得到确认,区块不断累积,经过足够时间后,人们认为过去已经确定。但在某些共识系统中,尤其是权益证明(Proof-of-Stake,PoS)系统,这一假设值得进一步审视。
区块链历史与共识机制
区块链历史是一系列有序区块,记录了网络创世以来所有被接受的交易。每个区块包含一批交易,以及指向前一区块的密码学引用。由此形成的链式结构,使修改过去某个区块会改变其后的每个区块。这一性质常被视为区块链不可篡改性的基础。
实际上,区块链历史并非仅靠密码学保障。密码学确保区块相互关联、篡改可被发现,但当存在多条有效链时,它并不决定哪条链正确。这个决定由共识规则作出。因此,区块链历史不只是数据,也是网络参与者就哪一串区块应被视为事实而形成的社会和经济共识。
共识机制回答一个基本问题:“谁有权决定下一个区块?”在比特币等工作量证明(Proof-of-Work,PoW)系统中,这一决定与计算工作相关。矿工竞相求解密码学难题,累积工作量最多的最长链会被接受为有效链。改写历史需要重做海量工作,随着区块数量累积,很快就变得不切实际。
权益证明系统用经济权益取代计算工作。验证者(validators)根据锁定为抵押品的加密货币数量,被随机选出提议区块并对区块进行证明。这种方式减少了能源消耗、提高了效率,但也改变了安全模型。安全性不再依赖电力等物理成本,而是依赖经济激励、惩罚和协议规则。
两类系统都旨在维护一段共同认可的历史,但依赖的假设不同。工作量证明假设攻击者的算力无法超过诚实多数,权益证明则假设攻击者无法随着时间推移,以足以令人信服的方式伪造基于权益的共识。长程攻击考验的就是后一种假设的边界。
什么是长程攻击
长程攻击试图从很久以前开始构建另一个版本的区块链,一直延伸到现在,最终与规范链(canonical chain)竞争,甚至取而代之。攻击者并不直接压倒当前网络,而是悄悄重建过去。
这类攻击通常涉及曾在网络中拥有合法权限的验证者或参与者。他们过去可能持有权益或签名密钥。即使如今已不再参与,仍可利用昔日的权限,为另一段历史签名。
长程攻击的显著特点,是在视野之外进行。攻击者不必逐块与当前网络竞赛,可以缓慢、低成本、私下生成另一条链。如果之后把这条链呈现给长期离线的节点,该节点可能把伪造历史接受为有效历史。
为什么长程攻击主要是 PoS 的问题
长程攻击主要在权益证明语境中讨论,原因是成本结构和时间假设不同。在工作量证明中,改写历史极其昂贵。攻击者必须为每个想替换的区块重新完成计算工作,而这些工作代表了无法收回的现实能源成本。
在权益证明中,出块基于权益所有权和密码学签名。验证者一旦签署区块,该签名就不附带物理成本。即使验证者后来出售权益或退出系统,他在过去本可生成的签名也不会突然消失。
这造成了独特的不对称。攻击者可以收集不再活跃的验证者的旧私钥。这些密钥可能被出售、泄露,或只是遭到遗弃。攻击者凭它们签署区块,就仿佛自己仍是过去某个时点的合法验证者。
权益证明没有挖矿难度,因此攻击者可以极快地生成一条很长的替代链,几秒内就能签署数千个区块。从协议规则的角度,这条链可能看起来完全有效。
长程攻击如何逐步发生
设想一条已经运行数年的权益证明区块链。期间许多验证者加入又退出,其密钥不再使用,但仍存在于某处。
攻击者首先收集旧验证者密钥,可以通过入侵、社会工程,或直接向疏于防范的前参与者购买。随后,攻击者选择链上很久以前的一个时点。
从该时点开始,攻击者构建另一条链,使用旧密钥签署区块,遵循所有协议规则。他们纳入交易,以正确的间隔生成区块,并遵守当时的质押规则。
由于在离线环境下工作,攻击者没有竞争对手,也不必竞赛。他们可以在几分钟内生成数年的区块链历史,最终带着一条完整的替代链追上当前时间。
关键时刻到了:攻击者把这条链展示给一个长期离线的节点。按节点的规则,它看到的是两条有效链。一条是真实链,但节点并不知道;另一条是攻击者的链,按照简单的规则,甚至可能显得更长或更好。
如果节点接受攻击者的链,就会对历史形成完全不同的认识。这就是长程攻击成功的本质。
最终性的作用与重要性
最终性(finality)是防范长程攻击的核心手段。最简单地说,最终性意味着区块一旦最终确定,按协议规则就不能撤销。不只是改变的可能性很小,而是被明确禁止。
有些区块链提供概率最终性(probabilistic finality)。在这类系统中,一个区块之上累积的区块越多,撤销它就越困难。不存在某个离散时点,让区块突然变成最终确定;相反,信心随时间累积。比特币是典型例子:每增加一次确认,链重组(reorganization)的概率就会降低,但永远不会完全消失。
其他区块链则追求经济最终性(economic finality)或密码学最终性(cryptographic finality)。验证者通过结构化投票机制,明确同意将特定区块最终确定。区块一旦最终确定,要撤销它,就需要违反密码学假设,或触发严重经济惩罚,例如罚没(slashing)总质押权益中的相当一部分。
长程攻击利用的是最终性的缺失或薄弱。如果协议允许无限期重新考虑足够久远的区块,攻击者就总能提出另一条历史链。最终性划出明确的历史界限:在此之前的区块,无论后来发生什么,都不再允许修改。
因此,现代权益证明系统往往包含强最终性组件(finality gadgets),以太坊就是重要例子。这些机制确保,即使历史验证者密钥后来被攻破,也无法用来改写已最终确定的历史,从而维护链上过去记录的完整性。
弱主观性与社会共识
弱主观性(weak subjectivity)听起来抽象,解决的却是一个实际问题。它承认,某些情况下,节点需要来自协议之外的少量可信信息,才能判断哪段链上历史有效。这些信息不必持续更新,但必须足够新,才有意义。
在实践中,弱主观性通常通过检查点(checkpoints)实现。检查点是特定高度上一个已知可靠的区块哈希。新节点或恢复运行的节点,可以从这一参照点初始化,只接受从它延伸的链,而不必从创世区块开始评估所有可能的历史分叉。
权益证明系统通过明确承认并正式规定这一现实,减少而不是增加了歧义。弱主观性显著限制了长程攻击的可行性。攻击者或许能构建另一条历史链,但如果不同时颠覆支撑集体共识的可信检查点,就难以让更广泛的网络信服并接受它。
现代区块链如何防范长程攻击
长程攻击的防御很少只依赖一种机制。现代区块链采用相互加强的分层策略:强最终性机制防止旧区块被撤销,密钥过期策略限制历史验证者密钥的有效期限,罚没条件则惩罚为相互冲突的历史签名的验证者。
检查点为新节点或恢复运行的节点提供可信的起始参照,弱主观性假设也被明确记录和执行。客户端软件被设计为拒绝违反这些假设的链,缩小替代历史能够竞争的空间。
任何单一防御都不足以独立解决问题,但组合起来便形成分层安全模型。目标不是让长程攻击在数学上绝无可能,而是使其在经济上不理性、在社会层面难以被接受。
一个自然的问题是,现实中是否发生过长程攻击?
在主要区块链中,目前没有已知成功长程攻击造成现实损害的案例。这并不证明威胁是虚构的,而是反映出协议设计者了解风险,并积极防范。许多攻击恰恰因为防御有效而未能发生,就像即使建筑物并非经常起火,仍要进行消防演练。
长程攻击与 51% 攻击
当某个矿工或协作团体控制了网络当前的大多数算力时,就会发生 51% 攻击。借助这种优势,攻击者可以重新排列交易、审查活动,或尝试短程链重组。这类攻击需要大量资本、持续投入,而且十分显眼。
长程攻击采用根本不同的模型,不要求当前占据主导地位,而是利用过去的权限,例如旧验证者密钥或历史权益。它的执行成本可以很低,大体悄无声息,直到节点遇到替代历史才可能被发现。
这一区别决定了防御设计。防范 51% 攻击,重在去中心化、实时经济成本和持续资源支出;防范长程攻击,则重在最终性、密钥生命周期管理,以及对节点同步和信任的明确假设。
结语
长程攻击挑战了人们对区块链系统最根深蒂固的认识之一:历史不可篡改。它表明,在特定条件下,历史至少在理论上可以被改写。
与此同时,它也凸显了良好协议设计的韧性。通过强最终性、弱主观性和活跃社区,区块链可以有效防御这些威胁。
这并不是说区块链很脆弱,而是说安全取决于具体条件。安全来自激励、假设、协议设计和人类行为的相互作用,而不只是密码学。
More from CKB
无利害关系问题:理解权益证明面临的最大挑战
无利害关系问题揭示了权益证明系统的一项根本挑战。

什么是区块链重组?
链重组既是区块链达成共识的自然产物,也可能成为攻击手段。

区块链中的区块构建者是什么?
区块链运行的核心能力,是维护一本安全、不可篡改且透明的交易账本。
