多攻击者自私挖矿实证:三种共识协议的安全性对比

发布时间:2026/10/13 2:30:17
多攻击者自私挖矿实证:三种共识协议的安全性对比
1. 为什么单攻击者假设已经脱离现实矿池格局1.1 自私挖矿的本质私藏区块与视图分裂聊这项研究之前先把手里的概念对齐一下。自私挖矿这个攻击模型最早由Ilya Eyal和Emin Gun Sirer在2014年提出核心动作只有两步攻击者出块后不广播先私藏起来等对手链长度赶上甚至超过自己时再一次性把私藏的区块全部抛出去。由于网络传播有延迟诚实矿工看到的是两条竞争链其中一部分算力会跑到攻击者的私链上继续工作这些算力实际上是在给攻击者打工。很多人把自私挖矿理解为隐藏区块然后追平长度其实更精确的说法是攻击者利用的是诚实矿工之间的信息不对称。诚实矿工在没有收到私链消息时会继续在旧链上出块而这些块最终会被攻击者抛出的更长的链给废掉。经典结论是在没有网络延迟的理想假设下攻击者算力超过全网1/3时就能获得超过自身算力占比的收益。换句话说一个拥有33%算力的矿池不需要做任何坏事就能按33%分钱而一旦采用自私策略他的相对收益会跳到33%以上——这就是超额收益的来源也是整个攻击研究最核心的度量。1.2 现实矿池格局一个大实体不够还要防多个大实体现在把视线拉回真实网络。比特币全网算力高度集中在几个大型矿池手里前三大矿池的联合算力经常超过全网50%。即便矿池本身没有恶意这已经说明一个问题攻击模型里只放一个自私攻击者和真实世界的算力分布完全对不上。Fruitchain和Strongchain这类协议在做安全分析时通常也是先假设只有一个敌手来证明安全性。但一旦网络里存在两个、三个甚至更多的大算力实体他们之间会产生交互可能互相竞争算力可能在私藏策略上形成隐性默契也可能一个攻击者的自私行为恰恰中和了另一个攻击者的优势。这种多攻击者博弈下的协议安全性单攻击者模型根本没有覆盖到。这也是这项实证评估有意思的地方它没有停留在理论推导而是直接跑了多攻击者的模拟实验把Nakamoto共识、Fruitchain、Strongchain三种协议放在同样的算力分布和攻击策略下做横向对比看各自的收益边界和诚实矿工的损失到底差多少。1.3 多攻击者场景下博弈结构完全变了单攻击者场景下的自私挖矿本质上是一个攻击者 vs 诚实矿工的双方博弈攻击者的最优策略可以用马尔可夫决策过程MDP求出来。多攻击者场景就不一样了它变成了多方博弈攻击者之间既有合作空间也有竞争关系。举一个典型的情景假设诚实算力50%攻击者A有30%攻击者B有20%。A如果私藏区块B完全可能观察到A没有发布新区块这个异常信号然后选择也私藏——因为B知道A在憋大招如果B不私藏自己的区块很可能成为A抛链时的牺牲品。这个过程中A和B并没有任何交流但策略会互相影响。更复杂的情况是A和B私藏的区块数量不同、抛出的时机不同最终被网络接受的分叉可能完全偏离双方预期。多攻击者场景还有一个关键推论攻击者人数增加不代表系统一定更不安全也不代表一定更安全要看具体的算力结构和协议规则。某些参数下两个自私矿工的策略会互相抵消你藏我也藏最后谁都不敢先抛诚实链反而跑赢某些参数下双方又会形成事实上的联合挖矿对诚实矿工的伤害比单个攻击者大得多。这种非单调性正是实证研究比纯理论分析更让人信服的原因。2. 三种共识的防御思路被动奖励、水果分级、重铸时效2.1 Nakamoto共识没有主动防御靠瞬时随机性硬扛先说实话Nakamoto共识本身并没有专门针对自私挖矿设计过防御机制。它的安全保障来自最朴素的假设全网大多数算力是诚实的。在这个前提下诚实链以压倒性概率追上任何分叉攻击者私藏区块只能换取一时优势。但在多攻击者场景里这个压倒性概率被削弱了。假设全网有35%算力在私藏区块还有15%算力也在私藏诚实算力只剩50%攻击者一旦同步抛链诚实矿工就会面临一个严重的视图分裂问题沿着旧链继续挖的矿工浪费了工作切换到新链的矿工则帮助攻击者巩固了优势。Nakamoto共识下自私挖矿的获利边界完全取决于攻击者相对诚实算力的比例而没有引入任何额外的惩罚机制这意味着一旦算力分布逼近失衡点协议的防御能力就完全失效了。实证评估中Nakamoto共识扮演的是基线角色——所有对比都围绕它展开。它的价值恰恰在于让研究者看清楚不加任何主动防御的共识在多攻击者场景下有多脆弱进而凸显另外两种协议改进的重要性。2.2 Fruitchain把奖励拆成水果让攻击者藏无可藏Fruitchain的思路非常巧妙它没有试图阻止矿工私藏区块而是改变了奖励的粒度。传统Nakamoto共识下一个区块就是一个完整的奖励单元你私藏一个区块就相当于藏了一份完整奖励。Fruitchain在区块里引入水果fruit这个更小的奖励单元。每个区块可以携带多个水果水果被确认进主链后矿工才能获得对应奖励。为什么水果机制能削弱自私挖矿关键在于水果的奖励分配规则和区块的确认规则是松耦合的。一个矿工即使找到了水果并把它放进一个区块里这个水果想真正变成收益还得等它所在的区块被后续的区块引用确认。攻击者私藏一个装了水果的区块面临两个问题一是水果在等待确认期间可能被其他矿工的区块引用走因为区块创建者可以选择引用哪些水果二是私藏的时间越长水果变成陈果的概率越大后续区块很可能优先引用更新鲜的水果毕竟协议可以设置新鲜度奖励。这类设计直接让囤积待涨失去了意义。从奖励结构上看Fruitchain比Nakamoto共识更平滑挖矿收益不再是一锤子买卖而是分成很多小份陆续发放。攻击者想通过私藏区块来操控奖励分配需要控制的水果集合变得极其复杂而且容易被其他矿工截胡。多攻击者场景下这种优势更明显A攻击者私藏的水果B攻击者完全可能在不知情的情况下通过自己发布的区块把它引用走——攻击者之间的竞争会进一步压缩自私策略的获利空间。2.3 Strongchain给区块设重铸期过期就贬值Strongchain走了另一条路它给每一个发布的区块加了一个重铸窗口期。在这个窗口期内发布者可以撤回并重新组织区块内容也就是重铸。听起来好像给了攻击者更多操作空间但实际上这个机制是在惩罚私藏行为。具体逻辑是这样的区块发布得越早在网络里被其他矿工知晓的时间越早重铸窗口期内各方博弈会促使区块内容趋于稳定相反一个被私藏了很久才发布的区块由于在窗口期内可以被矿工们共同重铸攻击者无法再保证这个区块的收益归自己。用大白话说你在Nakamoto共识下私藏区块可以在关键时刻抛出来收割在Strongchain下你私藏区块的结果是——等你想抛的时候这个区块已经不值得被确认了发布它的人拿不到预期的收益。Strongchain对多攻击者场景的鲁棒性主要来自它的时效性惩罚机制对每个自私矿工都生效。哪怕全网有多个攻击者同时私藏区块只要这些区块超过了重铸有效期其奖励价值就会被大幅稀释。攻击者可以尝试在窗口期内卡点发布但多个攻击者同时卡点的结果是互相看穿策略私藏的时间窗口被不断压缩最后退化成老老实实播区块的诚实行为。实证评估里这条链在多攻击者条件下的收益曲线往往是最平稳的但代价是参数选择比较敏感——重铸期设短了攻击者还能卡BUG设长了正常矿工的奖励确认延迟也会被拉高。3. 实验设计事件驱动模拟与量化基线3.1 模拟器架构为什么选离散事件而不是简单蒙特卡洛要把三种协议放在同一赛道上对比第一步就是搭一个可控的实验环境。我在研究这份实证评估时最关心的不是论文里的某个具体数值而是它的模拟器设计逻辑。这里的核心技术点是区块链网络模拟必须采用离散事件驱动的架构而不是把时间切成固定步长。原因很简单区块传播是一个基于事件的过程——发现区块是一个事件接到新区块消息是一个事件攻击者决定抛私藏链也是一个事件。如果用固定时间步长推进你需要处理同一个时间片内多个事件谁先谁后的问题模拟精度会因为步长选择不同而产生巨大偏差。事件驱动则完全避免了这个问题每个事件带一个时间戳按时间顺序逐个处理区块传播延迟、挖矿时间间隔这些关键参数都可以直接用概率分布采样。模拟器的基本骨架是全网N个矿工节点每个节点有自己的算力权重、网络连接和策略模式。挖矿事件的时间间隔按照指数分布采样均值由全网总算力和该矿工算力占比共同决定。矿工挖到区块后根据协议规则Nakamoto、Fruitchain或Strongchain决定是否广播、何时广播、广播多少。诚实矿工收到区块消息后更新本地视图攻击者则执行预设的自私策略——可以选择完全不广播、延迟广播或者在有多个攻击者的场景下响应对方的行为。这里有一个非常容易出错的地方新区块的传播延迟不是常数。真实网络里区块从一个矿工传播到另一个矿工经过P2P网络逐级转发延迟服从一个近似指数分布而不是固定值。很多简化模拟器把传播延迟设成固定常数这在单攻击者场景下还能接受多攻击者场景下就会严重失真——因为多个攻击者同时抛链时网络中同时存在多条传播路径信息到达顺序的随机性会直接决定分叉的走向。3.2 决定结论可信度的参数算力分布、网络延迟阈值与攻击者数量我梳理实验设计时觉得有三个参数对最终结论的影响最大值得展开说一下。第一个是算力分布。实验里采用的典型配置是控制全网总算力不变设定诚实矿工数量再把剩余算力拆成不同数量的攻击者。比如A组实验设2个攻击者算力分别为30%和20%B组设3个攻击者算力分别为25%、15%、10%。每组都跑足够多的随机种子确保输出的收益曲线有统计意义。这里有个容易被忽略的细节攻击者之间算力悬殊时策略行为完全不同。20%算力的攻击者更倾向于搭便车等大攻击者抛链后再跟风30%算力的大攻击者则更倾向于主动制造分叉。单攻击者模型根本模拟不出这种大小攻击者协同的复杂局面。第二个是网络延迟参数。比特币网络的区块传播时间中位数大约在几秒到十几秒之间但这个数字在模拟里会影响攻击者的抛链窗口。延迟越大攻击者抛链时诚实矿工切换视图的时间差就越大攻击收益越高。实验中通常设置一组基准延迟比如2秒、10秒、30秒做敏感性分析而不是只跑一个值。多攻击者场景下延迟的方差比均值更关键——因为攻击者之间的异步交互恰恰是靠着传播延迟的随机性才产生策略空间的。第三个是攻击者策略。这里要区分显性合谋和隐性协调。显性合谋好理解两个攻击者共享策略约定谁先抛链、谁后抛链收益按比例分成。隐性协调则完全不需要沟通攻击者A观察到B没有按时发布区块推断B在私藏于是A也选择私藏——两个人在没有任何约定的情况下形成了一个心照不宣的攻击同盟。实验设计必须把这两种情况分开跑因为它们在真实世界里对应着不同的威胁模型矿池之间有公开合作合谋挖矿和私下默契观察策略是完全两回事。3.3 量化基线相对收益、诚实损失与视图分歧时长评估指标设计得是否合理直接决定实验结论能不能让人信服。这套实证评估使用了四个核心指标我逐个说一下。第一个是攻击者相对收益Relative Revenue。定义是攻击者实际获得的区块奖励除以他的算力占比。等于1表示不好不坏大于1说明自私策略带来了超额收益。这个指标的好处是跨协议可比——不管Fruitchain的奖励怎么切分最后都能归一化成相对收益来判断攻击是否成功。第二个是诚实矿工损失率。攻击者多拿的那部分必然来自诚实矿工少拿的份额。这个指标直接反映协议对普通参与者的友好程度。单攻击者场景里攻击者多拿5%诚实矿工就少拿5%多攻击者场景里攻击者之间互相内耗可能最后诚实矿工反而少亏了——这种反直觉现象只有实证实验能揭示。第三个是视图分歧时长占比。在Nakamoto共识里诚实矿工之间对哪条链是主链的认知可能会长期不一致这是分叉的直接结果。视图分歧时间越长交易确认延迟越高系统体验越差。Strongchain和Fruitchain的设计初衷都是压缩这个时间窗口。第四个是确认安全性也就是攻击者能否在分叉后逆转已经确认的区块。多攻击者场景下攻击者之间的配合可能导致更危险的双重深度攻击——不只是逆转一个区块而是连续逆转多个区块。这个指标倾向于用最坏情况而非平均值来评估因为安全协议关心的是攻击者能造成的最大伤害。4. 多攻击者下最有价值的几个观察结果4.1 攻击者之间的内卷在Nakamoto下意外显著在Nakamoto共识的模拟结果里最让人意外的现象是两个势均力敌的自私攻击者同时存在时系统反而比单攻击者时更稳定。具体场景是这样的两个攻击者各占25%算力诚实矿工50%。单攻击者模型下25%算力的攻击者通过自私策略大约能获得1.04到1.08倍相对收益视网络延迟而定。但两个25%的攻击者同时私藏区块时会出现一种囚徒困境A想等B先抛私藏链然后自己抛更长的链压过BB也是这么想的。结果两个人都在等谁也不先动诚实链反而在两边都没有私链压力的情况下正常推进。偶尔有一个攻击者憋不住先抛链另一个立刻抛更长的链回应两个人的收益在互相踩踏中被狠狠压缩最后只能拿到接近甚至低于算力占比的收益。这个现象在博弈论里叫互相威慑但在区块链协议研究里它提示了一个非常重要的事实自私挖矿的超额收益严重依赖你是唯一的藏块者。一旦出现多个藏块者信息优势变成信息博弈攻击者的收益预期会剧烈波动不再有稳定的获利空间。当然这个结论有前提条件——攻击者之间不能合谋。所以实验里显性合谋的场景才那么关键。4.2 合谋攻击模型下Fruitchain的优势彻底体现切换到显性合谋场景两个攻击者约定协同抛链、按比例分赃之后Nakamoto协议就撑不住了。合谋攻击者可以做到一个人憋大招另一个人负责分散诚实算力其效果相当于把两个攻击者的算力合并成一个大型攻击者——总算力一旦突破阈值相对收益就会显著大于1。这时候诚实矿工的损失开始呈非线性放大。Fruitchain在这个场景下的表现要好得多。原因在于合谋攻击的核心手段是通过控制主链视图来垄断区块确认权但Fruitchain中区块和奖励的解耦让攻击者即使暂时控制了主链视图也无法独占奖励——因为水果可以被任意区块引用这一规则让奖励归属权的竞争不局限于自己发布的区块内部。攻击者合谋后可以操纵区块顺序却拦截不住所有水果的引用路径。实验中Fruitchain下合谋攻击者的相对收益虽然仍大于1但增幅明显低于Nakamoto并且在攻击者总算力低于40%时合谋的相对收益优势几乎被完全抹平。4.3 Strongchain的卡点发布攻防参数设定左右一切Strongchain在多攻击者场景下的表现最值得研究的就是它的时效惩罚机制带来的策略变形。因为Strongchain规定了重铸窗口期攻击者在窗口期内发布私藏区块可能被其他矿工重铸奖励被摊薄过了窗口期再发布区块甚至可能不再有机会进入主链。所以攻击者的最优策略变成卡着窗口期结束的那一刻发布——既保留私藏优势又避免被重铸。但多攻击者场景下卡点发布这个策略会失效两个攻击者如果都卡点后发布的一方必然看到前者的区块可以针对性地调整自己的私藏链长度。于是攻防节奏变成了比谁更能憋。实证评估中Strongchain在不同重铸参数下的表现差异非常大。重铸期较短比如等于2倍区块间隔时攻击者还能找到卡点获利的缝隙重铸期较长比如5倍区块间隔以上时攻击者的卡点收益急剧下降多攻击者场景中几乎观察不到稳定的超额收益。但代价是正常矿工的奖励确认延迟也变长了。这个参数就像一把双刃剑如何在抑制攻击和确认效率之间取平衡是Strongchain落地时躲不掉的问题。4.4 一个关键的非对称现象小攻击者更容易被吃掉多攻击者场景还有一个有意思的结论大小攻击者之间的博弈往往以小攻击者退出自私策略告终。假设攻击者A有30%算力攻击者B只有10%算力两个人都执行自私策略时B会发现自己的私藏区块经常被A的更长私链覆盖B的私藏几乎无法转化成实际收益反而拖累了正常挖矿效率。这种大鱼吃小鱼的现象在三种协议下都存在但强度不同。Nakamoto下小攻击者被吃得最狠10%算力的攻击者如果坚持自私策略最终相对收益可能跌到0.9以下——比诚实挖矿还亏。Fruitchain下由于奖励粒度变细小攻击者还能靠水果的碎片化收益勉强保本。Strongchain下重铸机制的惩罚对小攻击者太过严厉自私策略基本没有生存空间聪明的小算力实体应该直接选择诚实挖矿。这个结论的实际价值在于协议设计者不需要假设所有矿池都是诚实的只需要让不诚实策略对非主导矿池毫无吸引力。5. 复现这套评估时我踩到的坑和调整心得5.1 模拟时长和随机种子数据看着正确其实可能是噪声这类模拟实验最容易栽的跟头就是跑完一轮发现结论很漂亮但换个随机种子就完全变样。多攻击者场景下的自私挖矿模拟有一个特点事件序列高度依赖随机性——哪个矿工先出块、哪条链先传播到某个节点、攻击者何时决定抛链每一步都有随机因素。如果每个参数配置只跑几十轮输出的相对收益曲线标准差会大得离谱甚至可能出现Nakamoto比Fruitchain还安全这种完全相反的结论。我的经验是每个参数配置至少要跑数百轮独立模拟不同随机种子并且计算置信区间而不是只看均值。更关键的是模拟的区块产出数量要足够多——比如每个配置至少模拟产生5万到10万个区块才能让收益统计收敛。很多复现者以为模拟时间够长就行其实区块数量才是统计有效性的硬指标时间再长但如果网络规模大、出块率低样本量依然不够。5.2 网络延迟的真实分布固定值是最低级的错误我在最早一版模拟器里偷了个懒给全区块传播设了固定5秒延迟结果跑出来的多攻击者结果和论文差距非常大。后来仔细排查才发现固定延迟完全抹掉了传播顺序随机性这个关键因素。多攻击者场景下攻击者的收益极度依赖诚实矿工先看到哪条链——如果两个攻击者几乎同时抛链先被大部分矿工接收的那条链会迅速吸引算力另一个攻击者的私链瞬间失去价值。正确的做法是把区块传播延迟建模为独立采样中位数15秒方差按真实P2P网络的测量值设定。更精细的做法是引入逐跳传播模型每跳有独立的延迟分布而不是全局一刀切。虽然计算量大一些但多攻击者实验对传播顺序极其敏感这个计算量不能省。5.3 攻击者策略的反应时延比算力本身更影响结果多攻击者模拟还有一个反直觉的敏感参数攻击者观察到对手异动后多久做出反应。如果反应时延设为0假设攻击者瞬间发现对手私藏Nakamoto下两个攻击者很容易形成相互威慑如果反应时延设为2到3个区块间隔攻击者就有足够时间观察到对手的私藏倾向从而调整自己的策略隐性协调更容易形成。这个参数在真实世界里对应的是矿池监控系统的预警速度。大型矿池通常有专门的工具监控链上异常信号观察某个大算力实体长时间没出块就是典型的自私挖矿信号。实证评估中把这个参数设定在0.5倍区块间隔和2倍区块间隔两个级别分别跑一遍能看出不同协议对这种现实因素的敏感性。我自己复现时刚开始忽略了这个参数导致很多场景下合谋收益被严重高估——因为攻击者被设定成永远慢半拍永远无法形成默契配合。5.4 给实际项目参与者的三条建议把这项研究消化完之后我想给三类人分别提一条建议。如果你想基于这些协议做二次开发请一定先跑通多攻击者模拟再谈优化。单攻击者模型下表现良好的参数组合在双攻击者场景下可能完全失效。哪怕你的目标网络算力集中度不高也要把最坏情况——两个大实体同时尝试私藏——纳入测试基线。如果你在运营矿池研究结论其实给你提了个醒纯粹依靠算力优势无法保证稳定超额收益因为其他矿池同样可能在私藏。与其花力气研究如何卡分叉窗口获利不如把重点放在观察异常出块模式上做好监控预警保护自己的正常收益不被别的攻击者劫持。如果你只是研究共识机制的学生我给的建议是把Fruitchain和Strongchain的白皮书都读了同时把Nakamoto共识为什么在单攻击者下脆弱、在多攻击者下反而可能稳定这个反直觉现象当作理解博弈论和区块链安全之间关系的绝佳案例来消化。这个现象是近几年区块链安全研究里少有的理论推不出来、必须靠实证才能发现的结论——它提醒我们复杂系统的安全性永远不要只靠直觉判断。