Caloogy 文章
English

跨链桥为什么总被盗

日期
2025 年 6 月 29 日
系列
链上
阅读
4 分钟
主题
OnchainBridgeCross chainRonin

一句话版本

两条区块链彼此看不见对方。跨链桥的做法通常是:在 A 链上锁住你的资产,在 B 链上铸造等量的"凭证币"。问题在于:B 链怎么确认 A 链上真的锁了?这个"确认"环节由谁来做、怎么验证,就是桥的全部安全性所在。 跨链桥是加密货币史上损失最惨重的一类系统:Ronin(6.2 亿美元)、Wormhole(3.2 亿美元)、Nomad(1.9 亿美元)……原因各不相同,但本质一样:大量资金锁在一处,而验证环节比链本身弱得多。

全文分三层:

  1. 通俗理解:寄存处和取货单
  2. 实际用处:三起代表性事件
  3. 原理与工程要点:几种验证模型的安全性对比、用户该注意什么

第一层:通俗理解

1.1 寄存处和取货单

你在城市 A 的寄存处存了一箱金子,拿到一张取货单,然后在城市 B 用这张单子换到同样价值的东西。

问题是:城市 B 怎么知道这张取货单是真的?

1.2 为什么特别招贼

特点 后果
资产高度集中 一个合约里锁着几亿甚至几十亿美元
验证环节通常比链本身弱 链有几千个验证者,桥可能只有几个签名人
涉及两条链、两套代码 攻击面翻倍,边界条件更多
可升级、有管理员 管理权限本身就是攻击目标

第二层:实际用处

事件 损失 原因
Ronin(2022 年 3 月) 约 6.2 亿美元 桥由 9 个验证者节点控制,需要 5 个签名。攻击者(后被美国财政部归因于朝鲜 Lazarus 组织)通过社会工程拿到了其中 4 个节点的私钥,又利用一个之前临时授权、却一直没有撤销的签名权限拿到第 5 个。被盗近一周后才被发现
Wormhole(2022 年 2 月) 约 3.2 亿美元 Solana 端的合约在验证"守护者签名"时,调用了一个已被弃用、不检查调用来源的系统函数,攻击者伪造了验证结果,凭空铸造了 12 万枚 wETH
Nomad(2022 年 8 月) 约 1.9 亿美元 一次合约升级中,可信根被初始化为 0,导致任何消息都被视为已验证。第一个攻击者成功后,数百个地址照抄他的交易,只改了收款地址,"人人都来抢"

三个事件分别对应三种失败:密钥管理、签名验证代码、升级与初始化。


第三层:原理与工程要点

3.1 验证模型

模型 谁来确认"A 链上真的锁了" 信任假设
多签 / 委员会 一组签名人 门限以上的签名人诚实且私钥安全
MPC / 门限签名 同上,但合成一个签名 同上(见《MPC钱包的工程坑》)
乐观验证 默认相信,设挑战期,任何人可以举报欺诈 挑战期内至少有一个诚实的监察者
轻客户端 / 零知识证明 B 链上的合约直接验证 A 链的区块头和共识(或其 ZK 证明) 只信任两条链本身
原生桥(如 L2 官方桥) 由 L2 的证明系统保证 和 L2 本身一样安全

越往下,越接近"和链一样安全",但实现越复杂、成本越高。

3.2 工程要点

3.3 用户该注意什么


总结

层次 要点
本质 一条链要相信另一条链发生了什么,验证环节就是安全性
为什么招贼 资金集中;验证比链弱;双链代码;可升级
三种失败 密钥管理(Ronin)、签名验证(Wormhole)、初始化(Nomad)
防御 签名人去相关;临时权限到期;轻客户端 / ZK;速率限制与监控