Kevin Riedl

8 分钟 阅读 · 2026年5月31日

为什么跨链桥不断被掏空(以及你到底需不需要一座桥)

跨链桥是加密领域最有油水的攻击目标。仅在 2022 年,桥的漏洞就掏走了大约 20 亿美元,约占当年从 DeFi 被盗资金的 69%,而所有已报告桥事件的累计金额如今已远超 25 亿美元。诚实的总结是:桥被掏空源于它们的信任假设,而不只是糟糕的代码。一座桥必须让一条链相信另一条它看不见的链上发生了某件事。无论你委派谁去做出这个声明,验证者、一个多签、一个签名者委员会,那个角色就是攻击者下手的地方。这篇文章先从大多数团队跳过的那个决策讲起:你到底需不需要一座桥,以及哪种信任模型会如何失败。

在做跨链?

 预约免费咨询

跨链桥究竟是怎么被掏空的?

一座桥只做一件难事:让链 B 相信链 A 上发生了一笔存款。链 B 没有原生方式去验证链 A,于是桥插入一个权威来为此作证。那个权威就是攻击面。掏空一座桥,几乎总是在做三件事之一:你窃取授权提款的密钥,你诱骗验证逻辑接受一条从来无效的消息,或者你利用一个为资金垫付的流动性池的经济模型。金额之所以巨大,是因为一座桥把所有曾经跨过它的锁定价值集中到了一个合约里。没有按用户分散的爆炸半径,只有一个蜜罐。

这个框架很重要,因为它告诉你该往哪里看。智能合约代码可以无可挑剔,但只要链下签名者被攻破(Ronin),桥照样被掏空。签名者可以是诚实的,但只要链上验证有漏洞(Wormhole、Nomad),桥照样被掏空。你在保护的是两个系统,而不是一个,而大多数事后复盘都追溯回团队一开始选择的信任模型。

三起失败的解剖:Ronin、Wormhole、Nomad,各自教会了什么

Ronin(约 6.25 亿美元,2022 年 3 月)。迄今最大的桥黑客事件。Ronin 使用九个验证者,批准一笔提款需要五个签名。攻击者拿到了五个密钥:四个由 Sky Mavis 控制,第五个来自一个 Axie DAO 验证者,其访问权限此前被授予且从未撤销。以五比九,这些提款按桥自己的规则完全合法。代码完全照吩咐执行。教训:一个外部验证者集合的安全性,只取决于它的密钥管理和诚实度阈值。五个签名者不是去中心化,而是一个五人单点故障。这次入侵六天无人察觉,因为没人在盯着签名者集合。

Wormhole(约 3.25 亿美元,2022 年 2 月)。纯粹的验证缺陷。Wormhole 依赖一组链下"guardians",其签名授权在目标链上铸币。Solana 一侧的合约用一条已废弃的指令来检查签名是否已被验证,但它从未验证那个签名验证程序是不是真的。攻击者提交了一个伪造账户,在一个不同的上下文里通过了检查,铸出了 12 万枚 wETH,背后什么都没有。教训:签名者是诚实的,信任他们的链上代码却不够谨慎。一个签名方案的好坏,只取决于检查它的合约。

Nomad(约 1.9 亿美元,2022 年 8 月)。一座乐观型桥,其验证被一次例行升级实质上关掉了。Nomad 的 Replica 合约把它的可信根初始化为 0x00,正是一条未经证明的消息所携带的值,于是每条带空证明的消息都被当作已经证明。一个用户发送 0.01 WBTC,取出了 100。这个漏洞不需要任何技巧:人们复制那笔成功的交易,换上自己的地址,重新提交。它演变成一场众包式的乱抢,数百个钱包在数小时内把桥掏空。教训:乐观型和欺诈证明型设计把整个安全模型押在一次验证检查上。破掉那次检查,就没有任何后备。

真正的问题:你到底需不需要一座桥?

大多数团队在问自己该不该用桥之前,就先伸手去拿桥了。最便宜的桥是你永远不去建的那座。在你接受这份责任之前,先问三个问题:

  • 你能不能留在单链?如果你的用户和流动性都在一条链上,那么桥就为一个你并不存在的问题增加了一个攻击面。选对链,然后留在那里。
  • 你能不能用一座官方 / 原生桥?大多数 L2 都提供一座由链团队维护的官方桥,由链自己的证明系统保障。它比第三方桥更慢、更不灵活,但你继承的是链的安全,而不是为自己的安全背书。对于几乎所有把资产搬进搬出 L2 的人来说,这都是正确的默认选项。
  • 你真的需要搬动资产,还是只需要传递消息?很多"我们需要一座桥"的需求,其实是"我们需要读取另一条链上的状态"。那是一个比锁定并铸造价值更小、更便宜的问题。

只有当你有一个官方桥和成熟的第三方选项都无法满足的具体理由时,才去建自定义桥,而且要对审计和运维成本心里有数。桥不是一个发布完就能忘掉的功能。它是一个保管所有人钱的合约,被每一个有动机破坏它的人盯着。

桥的信任模型,以及每种如何失败

每座桥都会选择一个信任模型。模型决定了你在信任谁,因此也决定了你会如何被掏空。这是在你写下一行代码之前就该有的对比。

信任模型你在信任谁它如何失败示例
外部验证者 / 多签一组固定的链下签名者及其密钥管理被攻破的密钥足以达到签名阈值Ronin(约 6.25 亿美元)
MPC / 门限签名一个共同产出一个签名的委员会,以及其仪式过程委员会串谋,或密钥生成 / 签名仪式有缺陷Multichain 类失败
带欺诈证明的乐观型相信会有观察者在争议窗口内挑战一条坏消息那一次验证检查被破坏,或者没人在看Nomad(约 1.9 亿美元)
原生 / 轻客户端验证源链共识的密码学,在链上验证轻客户端里的 bug;高 gas 成本诱使团队走捷径最安全,最昂贵
流动性网络流动性提供者和为兑换定价的 relayer池被掏空、预言机 / 定价操纵、relayer 被攻破池经济模型漏洞

原生 / 轻客户端验证最安全,因为它完全去掉了人类信任集合:目标链自己检查源链的共识证明。它也是建造和运行成本最高的,而这正是团队说服自己用多签、最终落到这份名单上的原因。Wormhole 的缺陷就卡在签名者模型与验证它的合约之间的缝隙里;关于为什么便宜的选项到头来很少便宜,参见我们关于 L1 与 L2 之间 gas 成本取舍 的笔记。

一份上线前的桥安全清单

简短、面向决策,并按真正能救你的程度排序。如果前三条你答不上来,你还没准备好上线。

  1. 把你的信任模型大声说出来。写清楚究竟谁能授权一笔提款,以及攻破他们需要什么。如果答案是"五个密钥",就把它当作一个五人单点故障来对待。
  2. 把两层一起审计。链上验证和链下签名者是一个系统。Wormhole 和 Nomad 是链上 bug,Ronin 是链下。审计接缝,而不只是合约。
  3. 积极撤销。Ronin 部分栽在一个没人移除的过期权限上。盘点每个密钥和授权,并让访问权限默认过期。
  4. 实时监控签名者集合和余额。Ronin 跑了六天无人察觉。你需要对每笔提款和每次签名者变更告警,并有人随时待命。
  5. 建一个暂停 / 断路器。一个速率限制或一个全局暂停,能把一次彻底掏空变成一起被控制住的事件。Nomad 在第一笔交易成功之后就没有刹车了。
  6. 给提款设上限并限速。蜜罐才是问题。上限缩小了奖金,也为你争取反应的时间。
  7. 规划升级路径。Nomad 的 bug 来自一次例行升级。把每次桥升级都当作一次全新审计,而不是一个补丁。
Kevin Riedl

"桥是一个保管所有人钱的合约,被每一个有理由破坏它的人盯着。最便宜的桥是你永远不去建的那座。"

问答:官方桥还是第三方桥?

当你把资产搬进搬出 L2 时,默认选官方桥。你继承的是链自己的安全和证明系统,而不是为一套单独的信任集合背书。第三方桥在速度上、在官方桥不连接的链上、在官方桥缺少的 UX 功能上占优,但你现在是在自己的链之外又信任了那个运营商的模型。选第三方桥,是为了它独有的东西,而不是因为它是搜索的第一个结果。

问答:一个多签足以保障一座桥吗?

多签是一个起点,不是一个安全模型。Ronin 就是个多签:五比九,它损失了 6.25 亿美元,因为五个密钥可被触及。多签只有在密钥真正独立、由无法串谋的各方持有、配备硬件托管和撤销纪律时才有用。一旦某个实体控制了一个法定人数,多签就是演戏。如果你的桥保管着可观的价值,多签应该是后面带着上限、监控和暂停的一层,而不是全部防御。

问答:审计能保证一座桥安全吗?

不能。审计降低了代码 bug 的概率,但它不改变你的信任模型。Nomad 那个致命的值是在审计之后、在一次升级里被引入的。Wormhole 是经过审计的。审计是某一层某一个版本的快照。它无法证明你的五个签名者会一直诚实,也无法证明你下一次升级不会重新引入一个漏洞。把审计当作必要但不充分。关于在审计前后该做什么,参见我们的审计前安全清单

问答:初创公司应该自己建桥吗?

几乎永远不该。损失排行榜上的团队不是粗心的业余玩家,他们是有审计、有工程师的、拿到融资的团队。桥所集中的风险,会随着每一个跨过它的东西而放大,而且它从第一天起就要求 7×24 监控和一份事件响应计划。如果你是初创公司,就留在单链,或使用官方桥,直到桥真正成为你的产品而不是一个功能。当它不可避免时,就把它当作你将要交付的风险最高的东西来界定范围,并相应地投入资源。关于我们如何对此界定范围,参见我们的区块链工程服务,上面的术语参见术语表

最终思考

跨链桥不断被掏空,是因为它们要求一条链去信任一个关于另一条它看不见的链的声明,而无论是什么做出这个声明,都会成为目标。Ronin 在代码无可挑剔的情况下因密钥被攻破损失了 6.25 亿美元。Wormhole 在签名者诚实的情况下因一个验证缝隙损失了 3.25 亿美元。Nomad 损失了 1.9 亿美元,因为一次例行升级把验证关掉了,而整个互联网把那个漏洞复制粘贴了一遍。三种不同的失败,一个共同的根源:信任模型,而不是孤立的代码。所以先从决策开始。能留在单链就留在单链。优先用官方或原生桥,继承一条链的安全,而不是为自己的背书。当价值足以证明成本时再去用原生轻客户端验证,并且把多签当作上限、监控和断路器后面的一层,绝不当作全部防御。只有在对保障和运行它的成本心里有数时,才去建自定义桥。最便宜的桥是你永远不去建的那座。次便宜的,是那座你能在写下一行代码之前就大声说出其信任模型的桥。

在做跨链?

 预约免费咨询
Kevin Riedl

8 分钟 阅读 · 2026年5月31日