区块链之间无法相互通信。以太坊无法读取Solana的状态,Arbitrum无法验证Avalanche上的交易。每条链都维护着自己的账本、共识机制和最终性规则。这种隔离是安全设计的一个特性,但同时也带来了一个实际问题:用户在一条链上持有资产,却希望在另一条链上使用它们。
桥接系统就是为了解决这一问题而存在的。桥是一种允许用户将资产存入链A,并在链B上获得相应资产的系统。这个概念听起来简单,但实际实现过程中却导致了数十亿美元的损失。
核心难点在于验证。当用户声称已在以太坊上存入100 ETH,并要求在Arbitrum上获得100 ETH时,必须有人或某种机制来验证该存款是否确实发生。为此选择的验证机制决定了桥的安全模型、速度、成本以及攻击面。正如一份对桥接黑客攻击的分析所指出的,桥接安全故障始终源于桥声称的信任假设与其实际执行的信任假设之间的差距。
本指南将介绍主流桥接架构的工作原理、最大规模攻击成功的原因,以及在将资金托付给桥之前应检查哪些事项。
最早且最常见的桥接设计是锁定与铸造。该机制分三步进行:
锁定。用户将代币发送到源链上的智能合约。代币被锁定在该合约中,而不是被销毁或转移。
验证。一组验证者、中继者或预言机观察到源链上的存款,并在目标链上确认其有效性。
铸造。目标链上的智能合约铸造出锁定代币的合成版本。用户收到"封装ETH"或"桥接USDC",这些代币代表对锁定原始资产的索取权。
若要返回,流程则相反:用户在目标链上销毁合成代币,验证者确认销毁,原始代币在源链上被解锁。
锁定与铸造的安全完全取决于验证步骤。如果攻击者能够诱使目标链相信一笔从未发生的存款存在,他们就可以铸造无支撑的代币。这正是最大规模桥接攻击中所发生的情况。
算术问题。锁定与铸造桥必须在锁定的原始代币与铸造的合成代币之间保持1:1的比例。如果在以太坊上锁定了10,000 ETH,那么目标链上应该恰好存在10,000个桥接ETH。任何差异都意味着某些桥接代币是没有支撑的。当攻击产生无支撑的合成代币时,最后赎回的用户会发现金库已空。这会造成一种银行挤兑动态:一旦攻击消息传开,每个封装代币的持有者都会争相赎回,因为他们知道只有最先到达的人才能获得真实资产。
销毁与铸造通过销毁原始代币并创建新代币来消除封装代币问题。
销毁。代币在源链上被永久销毁。
验证。销毁事件在目标链上被验证。
铸造。新代币在目标链上原生铸造出来。
这种模式仅适用于发行方在多个链上控制铸造权的代币。Circle的跨链传输协议(CCTP)用于USDC,是最大的实现案例。当用户通过CCTP将USDC从以太坊桥接到Avalanche时,以太坊上的USDC被销毁,原生USDC在Avalanche上被铸造。没有封装代币,没有流动性碎片化,也没有无支撑的合成代币。
局限性在于,销毁与铸造要求代币发行方在每个支持的链上部署并运行基础设施。这不是一种通用机制。除非开发者构建了跨链铸造基础设施,否则任意ERC-20代币无法使用销毁与铸造。CCTP目前支持十余条链,但每次集成都需要Circle的直接参与。
第三种模式通过在每条链上使用预注资的流动性池,避免了封装和销毁。
机制如下:
存款。用户将代币存入源链上的资金池。
提款。用户(或代表用户的中继者)从目标链上的资金池中提取等值代币。
再平衡。协议定期跨链再平衡资金池,以维持充足的流动性。
Stargate(基于LayerZero构建)和Across Protocol使用了该模式的变体。优势在于速度:由于代币已存在于目标链上,因此没有铸造延迟。用户立即收到真实的原生代币。
代价是资本效率。流动性必须预先部署在每条支持的链上,并且只有在桥被积极使用时,这些资本才能获得回报。在低交易量时期,流动性提供者几乎无收益,而资本闲置。所有支持链上的总资本需求可能达到数亿美元,这造成了准入门槛,并且如果单一流动性提供者占据主导地位,还会带来集中风险。
2022年3月23日,攻击者从Ronin桥盗取了6.24亿美元的ETH和USDC。该桥连接以太坊与游戏Axie Infinity所使用的Ronin侧链。
Ronin桥使用了多签验证方案。九个验证节点负责验证桥接交易,其中任意五个节点可授权提款。安全假设是,同时攻破九个独立验证节点中的五个是不切实际的。
但这个假设是错误的。Axie Infinity背后的公司Sky Mavis控制了九个验证节点中的四个。第五个验证节点曾在高交易量期间授予Sky Mavis临时签署权限,且从未撤销该权限。
攻击者(后被FBI认定为朝鲜的Lazarus Group)攻破了Sky Mavis的系统,并获取了全部五个验证者的私钥。凭借五分之九的签名,他们授权了两笔欺诈性提款:173,600 ETH和2550万USDC。
这次攻击在六天后才被发现。直到有用户试图提取5,000 ETH却发现桥中资金不足时,事件才得以曝光。
教训。多签的安全性与签名者的独立性成正比。当单一组织控制多数密钥时,多签就成了一个徒有步骤的单一故障点。
2022年2月2日,一名攻击者利用Wormhole桥在Solana上铸造了120,000个wETH(封装ETH),而并未在以太坊上存入任何ETH。该攻击价值约3.26亿美元。
Wormhole桥依赖一组19个守护者来验证跨链消息。守护者会观察以太坊上的存款,生成一个签名的证明(称为VAA,已验证行动批准),然后Solana端的合约在铸造前验证这些签名。
漏洞存在于Solana端的签名验证中。Wormhole的Solana合约使用了一个已弃用的系统指令(verify_signatures),该指令未能正确验证传递给它的账户。攻击者伪造了一个守护者集,提交了一个带有该伪造集签名的虚假VAA,合约将其视为有效。
实际上,攻击者告诉Solana合约"这些守护者批准了这次铸造",而合约并未检查守护者是否真实。
支持Wormhole的Jump Crypto从其自有储备中替换了被盗的120,000 ETH。全额恢复在24小时内完成,这是一次前所未有的响应,防止了损失在持有wETH的Solana DeFi协议中连锁蔓延。
教训。桥接验证代码是高价值攻击面。签名验证逻辑中的单个错误就可能允许无限量的未经授权铸造。
2022年8月1日,Nomad桥被抽走了约1.9亿美元。与Ronin和Wormhole不同,Nomad并非被一个复杂的组织攻击。在初始攻击公开后,数百个模仿者蜂拥而至,将其掏空。
Nomad使用了乐观验证模型。跨链消息被提交后,如果在30分钟内无人质疑,则被视为有效。一次常规合约升级引入了一个漏洞:合约被初始化为信任根0x00,即零字节的bytes32值。
在Nomad的验证逻辑中,每条消息都会与信任根进行比对。由于0x00是Solidity中未初始化存储的默认值,每条消息都自动通过了验证。任何用户都可以提交任何消息,合约都会将其视为已证明。
一旦第一个攻击者证明任意消息都能被接受,其他人便复制交易,更改收款地址并重放。桥被一群机会主义攻击者洗劫一空,其中包括后来归还了约3600万美元回收资金的白帽黑客。
教训。桥接合约中的初始化漏洞可能是灾难性的。一个错误配置的参数将Nomad的安全模型从"带欺诈证明的乐观验证"变成了"完全没有验证"。
2022年6月,Harmony Horizon桥损失了1亿美元,攻击者攻破了桥多签中五个验证者中两个的私钥。Harmony的桥只需要五个签名者中的两个批准一笔交易,对于一个持有1亿美元资产的桥来说,这个门槛异常低。
这次攻击强化了Ronin的教训:多签桥的安全性仅取决于其最薄弱的签名者集。当门槛相对于签名者数量较低时,单一基础设施的攻破就足以造成损失。安全研究人员在攻击发生前曾公开批评Harmony的二签五签门槛。
教训。门槛的选择与验证者数量同样重要。五签九多签与二签五多签提供的安全性截然不同,尽管两者使用相同的底层机制。
桥接损失规模在智能合约安全领域史无前例。桥接攻击约占过去十年总计170亿美元加密货币黑客攻击中的30亿美元,使桥成为智能合约中被攻击最多的类别。
攻击模式可分为三类:
密钥泄露。攻击者获取足够多的验证者或签名者密钥,以伪造桥接消息。Ronin和Harmony遵循此模式。漏洞不在代码中,而在签名者基础设施的操作安全中。
验证绕过。攻击者在验证逻辑中发现漏洞,使伪造消息得以通过。Wormhole遵循此模式。漏洞是桥合约最关键功能中的代码级错误。
初始化或升级错误。攻击者利用部署或升级过程中引入的错误配置。Nomad遵循此模式。漏洞是程序性的:团队在常规操作中犯了一个错误。
每种模式需要不同的防御措施。密钥泄露通过增加签名者多样性并使用硬件安全模块来缓解。验证绕过通过审计和形式化验证来缓解。初始化错误通过包含在分叉网络上强制测试运行的升级流程来缓解。
第四种新兴模式值得提及:治理攻击。攻击者积累足够的治理代币以控制桥的升级机制后,可以修改桥合约以耗尽资金。这种攻击比其他攻击更慢、更明显,但它针对的是治理集中或升级时间锁过短的桥。桥团队越来越多地对合约升级使用多天时间锁(48至72小时),以便用户在恶意变更生效前有时间撤出资金。
一种较新的方法完全绕过了桥合约,转而使用基于意图的跨链转账。Across Protocol和UniswapX的跨链模式允许用户表达一个桥接意图:"我在以太坊上有1,000 USDC,希望在Arbitrum上获得1,000 USDC。"一个求解者(称为中继者)立即从其目标链上的自有库存中发送代币,随后再申请报销。
这种模式减少了信任面。用户无需将代币存入持有汇集资金的桥合约。求解者承担报销风险,结算合约强制执行用户已收到承诺的输出。没有大量锁定的资产可供攻击者瞄准。
代价是依赖求解者:如果没有求解者愿意以可接受的价格满足意图,交易将无法执行。对于高流量路径(以太坊到Arbitrum、以太坊到Base),求解者竞争激烈。对于低流量路径,求解者可能不活跃。
上述攻击有一个共同弱点:它们依赖外部验证者或多签来证明另一条链上发生的事件。如果这些证明者被攻破,桥就会失效。
轻客户端桥采取了不同的方法。它们不是信任一组验证者,而是由目标链运行一个轻客户端,直接验证源链的共识。
例如,一个连接到以太坊的轻客户端桥会跟踪以太坊的验证者集,并在链上验证区块头与状态证明。当用户声称在以太坊上存入了代币时,桥合约会根据已经验证的以太坊区块头来验证Merkle证明。
这种方法最小化了信任:桥信任源链的共识,而非外部委员会。但成本高昂。在另一条链上验证以太坊的共识需要大量计算,这转化为高昂的Gas费用。
零知识证明为成本问题提供了解决方案。无需在链上验证每个验证者的签名,ZK证明可以将验证压缩为一个简洁的证明。目标链只需验证一个证明,而非数百个签名。
Succinct Labs、Polymer和Lagrange等项目正在构建经过ZK验证的桥。这些技术仍在成熟中,但它们代表了跨链通信最强大的安全模型:信任数学,而非委员会。早期实现显示,随着ZK证明系统效率的提高,验证成本正在下降,一些桥已在主网上运行,证明时间不到30秒。
本指南解释了桥接机制及最大规模的攻击。它不涵盖:
特定代币的桥接策略或针对特定资产应使用哪个桥
桥接聚合器(Li.Fi、Socket、Bungee)的详细比较
桥接池流动性提供的经济学
超出其桥接功能的跨链消息协议(作为通用消息层的LayerZero、Axelar、Chainlink CCIP)
检查验证机制。多签桥是最弱的模型。轻客户端和ZK验证的桥是最强的。乐观桥介于两者之间。了解你在信任什么。
查看验证者或守护者集。对于多签桥,检查有多少签名者,谁在运营它们,以及它们是否真正独立。如果大多数签名者属于同一组织或同一司法管辖区,那么多签提供的安全性有限。
审查审计历史。桥合约是高价值目标。寻找来自知名公司的多次独立审计。未经审计或仅审计过一次的桥需要格外谨慎。注意审计范围:代币合约的审计并不涵盖验证逻辑。
考虑总锁定价值与安全预算。一个持有5亿美元资产且采用五签九多签的桥,与一个持有500万美元的桥相比,风险状况截然不同。攻击者会瞄准潜在回报值得付出努力的目标。理性攻击者会计算攻破足够密钥的成本是否低于可提取的价值。
先小额测试。在桥接大额资金之前,先发送一笔小额测试交易。验证接收地址、代币和金额是否正确。桥接交易通常是不可逆的。
对于二层网络,优先使用原生桥。对于以太坊L2二层网络(Arbitrum、Optimism、Base),规范桥直接继承以太坊共识的安全性。第三方桥可能更快,但引入了额外的信任假设。对于安全性比速度更重要的较大转账,请使用规范桥。
什么是跨链桥?跨链桥是一种在无法原生通信的两条区块链之间转移资产或数据的系统。桥在一条链上锁定、销毁或汇集代币,并在另一条链上发行相应代币,使用验证机制确保转账合法。
为什么桥经常被攻击?桥是高价值目标,因为它们持有大量锁定的资产。它们还在两种不同安全模型之间的边界引入了复杂的信任假设。验证机制中的漏洞(密钥泄露、签名检查错误、初始化漏洞)可能使攻击者在一笔交易中耗尽整个资金池。
锁定与铸造和销毁与铸造有什么区别?锁定与铸造在源链上持有原始代币,并在目标链上铸造合成(封装)版本。销毁与铸造销毁原始代币,并在目标链上铸造新的原生代币。销毁与铸造产生原生代币而非合成代币,但要求代币发行方在两条链上都控制铸造权。
封装代币安全吗?封装代币的安全性与发行它们的桥相同。如果桥被攻击且支撑资产被耗尽,封装代币将失去支撑并脱锚。持有封装代币的用户承担的是桥的安全风险,而不仅仅是底层资产的风险。
桥接需要多长时间?因机制而异。流动性池桥和基于意图的桥(Across)可在几秒内完成。带多签验证的锁定与铸造桥通常需要10到30分钟。带欺诈证明窗口的乐观桥从乐观L2到以太坊的提款可能需要7天,但快速桥可以垫付流动性来缩短这一时间。
什么是轻客户端桥?轻客户端桥直接在目标链上验证源链的共识,而非依赖外部验证者集。它检查区块头和状态证明,信任源链自身的安全性。这比多签或乐观验证更减少信任,但运行成本更高。
使用桥会亏钱吗?会的。如果在桥被攻击后你已存入但尚未提取,你的锁定代币可能被盗。如果你持有封装代币且桥被攻击,你的封装代币可能变得一文不值。此外,错误的接收地址或不受支持的代币类型可能导致永久损失。
应该使用哪个桥?没有哪个桥适合所有情况。对于USDC,Circle的CCTP是最安全的选择,因为它使用销毁与铸造且无封装代币。对于通用ERC-20转账,比较可用桥的验证机制。优先选择具有轻客户端或ZK验证、多次独立审计以及安全运营记录的桥。Li.Fi等桥接聚合器可以帮助比较路径。