一句话版本
两条区块链彼此看不见对方。跨链桥的做法通常是:在 A 链上锁住你的资产,在 B 链上铸造等量的"凭证币"。问题在于:B 链怎么确认 A 链上真的锁了?这个"确认"环节由谁来做、怎么验证,就是桥的全部安全性所在。 跨链桥是加密货币史上损失最惨重的一类系统:Ronin(6.2 亿美元)、Wormhole(3.2 亿美元)、Nomad(1.9 亿美元)……原因各不相同,但本质一样:大量资金锁在一处,而验证环节比链本身弱得多。
全文分三层:
- 通俗理解:寄存处和取货单
- 实际用处:三起代表性事件
- 原理与工程要点:几种验证模型的安全性对比、用户该注意什么
第一层:通俗理解
1.1 寄存处和取货单
你在城市 A 的寄存处存了一箱金子,拿到一张取货单,然后在城市 B 用这张单子换到同样价值的东西。
问题是:城市 B 怎么知道这张取货单是真的?
- 如果"城市 B 相信 5 个公证人中 3 人的签字",那偷到 3 个公证人的印章,就能凭空开出取货单;
- 如果城市 B 的验单程序有 bug,任何一张纸都能当取货单;
- 而城市 A 的寄存处里,堆着所有人存的金子。
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 工程要点
- 签名人去相关:不同组织、不同地域、不同基础设施、不同的人运维,避免像 Ronin 那样 5 个里有 4 个归同一家控制;
- 临时权限必须到期撤销:Ronin 的第 5 个签名来自一个"临时"授权,最小权限原则在这里直接决定了成败(见《最小权限与密钥管理》);
- 消息必须防重放:每条跨链消息带唯一编号、源链 ID、目标链 ID,处理过的记录下来(见《签名登录与防重放》);
- 升级和初始化要审查:Nomad 的教训是"把某个值设成 0"这种看似无害的操作,可能让所有验证失效(见《可升级合约与管理员私钥》);
- 速率限制和熔断:单位时间内流出超过某个阈值就自动暂停(见《Fail-closed》),把最坏情况从"全部被盗"变成"被盗一部分";
- 实时监控:Ronin 被盗将近一周才发现,原因是没有人在监控桥的大额流出。
3.3 用户该注意什么
- 桥上的"凭证币"(比如某条链上的 USDC.e)只有在桥安全时才值钱。桥被盗,凭证币可能瞬间脱锚;
- 优先使用官方原生桥,或者资产发行方自己提供的跨链方式(如稳定币发行方的原生跨链协议);
- 不要在桥里长期存放大额资产;
- 跨链前确认目标链上的接收地址确实是你控制的(同一个合约钱包地址在另一条链上可能不存在,见《EOA与智能合约钱包》)。
总结
| 层次 | 要点 |
|---|---|
| 本质 | 一条链要相信另一条链发生了什么,验证环节就是安全性 |
| 为什么招贼 | 资金集中;验证比链弱;双链代码;可升级 |
| 三种失败 | 密钥管理(Ronin)、签名验证(Wormhole)、初始化(Nomad) |
| 防御 | 签名人去相关;临时权限到期;轻客户端 / ZK;速率限制与监控 |