Elea Notes.

词条 · 加密与分布式 · 核心

51% 攻击

攻击者算力超过全网一半后,可以重写最近的历史。

也称:51% 攻击、51%攻击、51% attack、majority attack、多数算力攻击、51

一句话

如果一个人的算力超过全网诚实算力的总和,他就能持续造出比诚实链更长的链,从而把最近的交易记录改掉——通常是为了把已经付出去的钱重新花一遍。

它能做什么,不能做什么

先划清范围,因为夸大的说法太多了。

能做的:

  • 把自己发出的交易撤销掉,实现双重支付
  • 拒绝把某些交易打包进自己挖的区块
  • 让别人挖的区块变成孤块,独占出块奖励

做不到的:

  • 偷走不属于他的币。花钱需要私钥,算力再多也伪造不出签名
  • 凭空增发超出协议规定的币,其他节点会直接拒绝这种区块
  • 改掉很久以前的交易。要改第 100 个区块,就得把第 101 块之后的所有工作量重做一遍,同时还要跑得比全网更快

所以”51% 攻击”的准确描述是重排最近的历史,不是”控制整条链”。

术语考古:白皮书里没有 51 这个数字

关键事实:51% 在白皮书里出现 0 次。字符串 51 一次都没有。

白皮书说的是两件事。一是文字条件:

As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they’ll generate the longest chain and outpace attackers.

二是数学条件,第 11 节用 p 和 q 表示——p 是诚实节点找到下一个区块的概率,q 是攻击者的。整节的推导建立在 p > q 上。

这两种写法都没有给出一个整数门槛。而”51%“这个说法是后人为了方便传播造出来的,它带来一个真实的误解。

为什么 51% 是个误导性的门槛

概率是连续的,不是开关。攻击在 50% 以下同样可能成功,只是要等更久、更靠运气。白皮书第 11 节自己列了一张表,给出”攻击者成功概率低于 0.1% 所需的确认数 z”:

  • q = 10% → z = 5
  • q = 15% → z = 8
  • q = 20% → z = 11
  • q = 25% → z = 15
  • q = 30% → z = 24
  • q = 35% → z = 41
  • q = 40% → z = 89
  • q = 45% → z = 340

看最后一行。攻击者只有 45% 算力,远不到”51%“,但只要商家等的确认数少于 340,风险就超过 0.1%。而现实中几乎没人等 340 个确认——按 10 分钟一块算,那是两天多。

反过来看 q = 10% 那一行:即便只有一成算力,等 4 个确认仍然不够安全。所以正确的心智模型不是”到了 51% 才危险”,而是攻击成功率随算力占比连续上升,安全性由算力占比和确认数共同决定

50% 的特殊之处只在于它是极限的位置:一旦超过,成功概率收敛到 1,等多少确认都无济于事——这是白皮书里那句”attacker’s success probability approaches 1”的含义。它是渐近性质的分界,不是安全与不安全的开关。

边界与常见误解

51% 不是协议里的参数。 代码里没有任何一处写着 51 或 0.51。它是从随机过程的行为里浮出来的一个渐近边界。

攻击成本不只是硬件。 攻击者在攻击期间放弃了诚实挖矿的收益,攻击成功还会砸掉自己持有资产的价值。白皮书第 6 节结尾正是这个论证:按规则玩比破坏系统更有利可图。

小链上这不是理论问题。 算力占比是相对的。对一条总算力很小的链,租用算力就能凑到多数,历史上已经发生过多次。安全性来自算力的绝对规模,不是来自”用了工作量证明”这件事本身。