跨链协议陷安全风波后,详述跨链「桥」设计新思路
原标题:《跨链协议陷安全风波时,听 Dragonfly 详述跨链「桥」设计思路》
撰文:Celia Wan,Dragonfly Capital 初级合伙人
编译:Perry Wang
8 月 10 日,又有一个跨链互操作性协议遭遇了黑客攻击。
这次有点不同,因为它是加密历史上最大的黑客攻击,并被 主流媒体 争相报道。而黑客与以太坊社区之间的玩笑更给本次事件抹上了一层传奇的色彩,其中一名社区成员因为向黑客提供了有关如何躲避执法的 建议,以及与黑客进行了一次问答而收到 13.37 ETH,黑客透露他计划归还被盗的资金。
在这些喧嚣背后,是 Poly Network 遭黑客攻击事件,以及其他四个桥接器遭黑客攻击事件揭示了跨链互操作性解决方案当前不尽如人意的状态:
如今,许多互操作性解决方案使用起来并不安全,甚至无法使用。现在是很多「桥」被临时拼凑起来以满足项目的直接需求。但最终,它们或被更好的产品所取代,或演变成去中心化的解决方案或受信任的第三方。
要理解为什么会变成这样,我们需要了解如何使跨链交互成为可能,以及一些可能导致关键安全和用户体验缺陷的主要设计方案。
我们先从 Poly Network 被黑事件开始谈起。
到底发生了什么?
实际上,Poly Network 被利用的漏洞,部分原因在于其受信任的中继器(用他们的话来说,「keeper」)设置,部分是由于 Poly Network 在跨链发送信息时未能正确验证交易。
Poly Network 上的跨链交易由一组受信任的 keeper 促成,他们在源区块链上对区块签名。然后他们的签名在目标链上由「守门人」智能合约进行验证,然后执行交易。同一个智能合约还控制着一个 keeper 目录,并且可以在验证签名时对其进行修改。
黑客首先在 Ontology 链上调用了一个(无效的)函数,该函数产生了一个与签名哈希值碰撞的函数签名,而在正确签名时变更 keeper 目录的函数将会产生。这一函数被「守门人」智能合约批准,因为它是 Ontology 上的有效交易(尽管碰撞函数本身不存在)。黑客随后通过「守门人」智能合约的任意交易执行服务调用这一函数更改以太坊目录中的 keeper。合约被欺骗,相信了相应交易确实在 Ontology 上被调用并得到签名,因为黑客之前调用的碰撞函数产生了相同的函数签名。合约然后执行变更 keeper 功能,使得黑客能够将所有 keeper 更改为他控制的地址,随后将该网络洗劫一空。
Poly Network 跨链设计的直接缺陷似乎是:它不应该将「看门人」智能合约设置为 keeper 目录的控制器,但这种桥接设计更根本的问题是:用户的资产完全委托给 keeper,无需额外检查交易的有效性。
这里要注意,「看门人」合约并不验证链上的交易,而是盲目地相信 keeper 的签名,作为交易在源链上发生的证据。这意味着任何成功模仿 keeper 的人,都可以欺骗合约执行他们想要的任何交易。雪上加霜的是,keeper 人数较少,其对网络的访问记录存放在最终被攻陷的目录中。
综合以上两点,我们可以看出 Poly Network 的安全性完全依赖于两个假设:1) keeper 会诚实行事; 2) 没有人可以冒充 keeper。
而在第二个假设中,黑客发现了漏洞。
为了确保「桥」的安全,「桥」的去中心化程度应该有多高?「桥」开发者在其设计中做出的哪些假设会导致这些差异?我们先从通常如何构建跨链「桥」的基础知识开始谈起。
要了解对此次黑客事件更深入的分析,推荐 Mudit Gupta 和 BlockSec 团队的文章。
「桥」应该自问自答的五个问题
最广泛采用的「桥」设计是久经考验的真正「锁币-铸造-销毁」方法。
它的基本工作原理是:一个「桥」在链 A 上指定一个地址,供用户存入其资产。然后,该「桥」在 B 链上铸造打包版的代币,并将它们发送到用户选择的帐户。用户要提现,需要将打包代币发送回 B 链上的一个地址,供「桥」收集和销毁。然后「桥」将链 A 锁定的代币释放给用户。
在这种架构下,可以对资产映射「桥」根据其安全假设进行进一步归类,在中心化程度光谱图上逐一定位。
- 谁保管存入的资产?
- 信息如何从链 A 传递到链 B?
- 「桥」如何验证转发的信息是真实的?
- 如何激励人们传递信息?
- 谁能触发铸造和销毁?
中心化「桥」
中心化「桥」可以被视为最不安全的一类「桥」,但如果「桥」运营商有良好的声誉,它们可能是可以接受的。
一个很好的例证就是币安「桥」,币安公司作为 币安智能链(BSC)、币安链和其他区块链之间的中间商,从一条链接收用户资产,然后在 BSC 或币安链放出打包代币。 用户还可以通过其币安交易所账户直接将资产提现至 BSC 或币安链。
很难相信币安会故意欺骗其用户。毕竟如果他们这么做将声名狼藉,甚至失去交易所的用户。不过,这并不是说这座「桥」没有偿付能力问题。
通常,通过检查源链上「桥」的地址的总余额,是否与目标链上所流通的打包代币总数相等,来验证「桥」是否完全具有偿付能力是轻而易举的事情。但是在币安的设计中,执行审计很困难,因为无法确认用户在币安交易所内实际购买和提取了多少代币。
换句话说,币安发行的打包代币的数量可以多过它目前在储备中持有的代币,而社区无法对其进行验证。为了解决这个问题,币安在以太坊上锁定了一些资产作为「储备金证明」。
去中心化「桥」
「桥」通常引入一组验证人来放弃中心化控制。简单说,扩大验证人集可以解决上述五个问题,如下所示:
- 验证人共同托管用户所存入资产
- 验证人共同监控链 A 和 B 上的活动,并在两者之间传递信息
- 验证人就 A 链和 B 链的最终状态达成共识
- 验证人质押代币参与中继,当信息转发不正确时,其质押的资产会被削减
- 验证人共同控制打包代币的铸造和销毁
更仔细地观察,我们可以看到去中心化「桥」之间的最大区别在于:如何激励验证人以及如何确保信息准确性。换句话说,区别在于中继网络是否是无需许可的,以及中继者如何达成共识。
一个具有一定程度中心化的「桥」会有一组白名单中继者,他们通过多重签名共同控制打包代币的铸造和销毁。由于这些验证人通常是 经过 KYC 审核的,或在现实生活中彼此认识,因此他们之间是相互信任的。相应地,他们中的任何一个都可以将信息从 A 链传递到 B 链。目前只有 Terra Shuttle (Terra)、Chainswap (Solana)和 Chainsafe (Avalanche)等少数项目采用了这种设计,并且大多数有计划进一步实现「桥」的去中心化。
其他「桥」建立在权益证明(PoS) 网络上,其中允许任何人成为验证人。这些 PoS 网络可以是现有的网络,也可以是专门为跨链通信而打造的新网络。
例如,Matic PoS 「桥」、deBridge 和 Anyswap 都利用了现有的 PoS 区块链——分别是 Matic、Chainlink 和 Fusion。而第二种例子中,Axelar 正在从头开始构建这样的中继网络。
在 PoS 共识环境中,验证人被激励运行节点以换取瓜分交易费用。他们必须传达正确的信息,否则其质押的资产将被削减。
最后,虽然大多数基于 PoS 的「桥」依赖某种共识机制来准确地传递信息,但也有一些「桥」具有完全无需信任的中继者。在这种情况下,仍然需要中继者将信息从一条链传递到另一条链,但「桥」并不依赖他们来保证信息的准确性。
相反,这些「桥」创建链上轻客户端来验证中继信息,并相应地调用 「铸币 / 销毁 / 解锁」功能。 例如,NEAR 的彩虹桥一个是用 Rust 语言执行的以太坊轻型客户端(作为一个 NEAR 合约),另外采用一个 Solidity 语言执行的 NEAR 轻型客户端(作为一个以太坊合约)。这是最昂贵的跨链「桥」形式,因为它需要完整的 SPV 验证。但正因为如此,其无需信任程度是最高的。下一节将详细介绍这一点。
代币经济学问题
尽管乍一看,「桥」的建设听起来像是一个技术问题,但它在很大程度上也是一个经济问题。
几乎不可能在不破坏其代币经济学的情况下将资产改造为多链结构,而且多数资产的代币经济学最初并不是为多链世界设计的。在单链上拥有代币的项目需要决定是要增加其代币总供应量,还是在扩展到另一条链时进行某种资产映射。
例如,如果 Uniswap 原本是在以太坊上发行 UNI,UNI 如果也要在 Polygon 上流通,需要 Uniswap 社区同意在 Polygon 网络上铸造更多 UNI。然后可以通过两种方式将新铸造的 Polygon UNI 纳入 Uniswap 的代币经济学:可以锁定等量的以太坊 UNI,以维持固定供应量,或者社区可以决定实际增加总供应量,将新铸造的 Polygon UNI 授予 Polygon Uniswap 用户。
在实践中,大多数项目,例如 SUSHI 和 1INCH,倾向于采用第一种方法。最突出的例外是 USDT,它采用了第二种方法:虽然 USDT 最初是在 Omni 上推出的,但它目前由其发行机构 Tether 在包括以太坊、波场和 Solana 在内的多个链上铸造,没有单一的链作为结算场所。经济方面的考量也会影响「桥」如何处理这些资产。
更多问题,以及部分谨慎的答案
尽管当前市场上存在大量「桥」,但可以肯定地说,我们仍然还没有令人满意的「桥」解决方案。 一方面,大多数「桥」仍然不是通用的解决方案——每个链都建立了自己的定制桥接,彼此的稳定性和 API 大不相同。此外,由于大多数「桥」使用锁币-铸币-销毁模式,流动性非常碎片化,混乱的命名模式会导致对每个代币实际代表的意义存在混乱的理解。最后也许最重要的是,正如最近的黑客攻击所显示的那样,其中一些「桥」根本不够安全,无法让用户将其资金托付给它们。
从用户的角度来看,仍然没有包罗万象的跨链协议。最接近的解决方案是 Anyswap,它目前支持 BSC、以太坊、Matic、xDAI、Avalanche 等。即便如此,用户仍然会遇到诸如等待时间长、存在最低转账金额以及有时会有提款限制等问题。
流动性碎片化仍然是跨链转移的一个严重问题。归根结底,「桥」只有在流动时才能成功。以比特币(BTC) 为例,WBTC 已经建立了相对于其他竞品的巨大优势,并已成为以太坊上默认的打包 BTC。依靠中心化「桥」的代币在市场上占据主导地位,占总市值的 70% 以上。 其他资产很可能也会发生同样的演变——那些行动迅速并率先交付有效打包代币的项目将在抢占市场方面占据优势,即使后来者可能有更好的设计。
WBTC 的垄断地位 (来源: DeBank)
其中的制胜法则似乎是在尽可能多的主流链上积累尽可能多的流动性。相比之下,「桥」是否具有技术上最合理的设计显得次要,因为多数外行用户不太关心底层架构,而只是简单地快速、廉价地移动他们的资产来完成自己的目的。
话虽如此,「桥」设计差异的更多技术含义目前尚未得到充分探索,其中最突出的是安全性。
2020 年见证了非以太坊 L1 公链和侧链的兴起,以及对跨链资产转移的需求激增。例如,仅 Matic PoS 「桥」就能够积累 超过 30 亿美元 的资产,锁仓价值创下历史最高水平。更不用说,目前市场上已经出现了 20 多种跨链「桥」。
在很大程度上,这种跨链流量的激增让许多项目措手不及。因此很多人不得不建造自己的临时「桥」来满足目前的需求。但是这些「桥」安全吗?
一些「寄生」在现有区块链上或建立在受信任中继网络上的现有「桥」,或多或少是临时性解决方案,无法满足长期的用户需求。这些「桥」的用户通常受到以下事实因素的约束:没有其他「桥」可以连接到他们想要将资产移动到的特定链(以 Poly Network 事件为例)。因此他们被迫相信这些「桥」背后的 keeper 或中继者会诚实行事,而实际上对这个组织知之甚少。
如果运营这座「桥」的公司是知名企业且享有盛誉,那么一个完全中心化的桥可能会解决这个问题。然而如上所述,这类操作的不透明性引发了对偿付能力的新担忧。
我们最后的希望似乎寄托在去中心化、无需许可的「桥」上。它们会成为互操作性竞赛的赢家吗?很难说,原因很简单,它们的建造难度很高。一个比较有效且具有最大流动性的平庸跨链协议最终成为生态系统标准?这并非全无可能。不管最终结果如何,追求更安全的「桥」始终是我们的目标,因为整个生态系统都将从安全性和良好的设计中受益。
我们将在同名文章的第二部分更详细地讨论一些「桥」的设计,以及它们在连接不同共识机制区块链时面临的技术挑战。
感谢 Rahul Bishnoi、Haseeb Qureshi、Xin Yan 和 Karim Helmy 的深刻见解和反馈。
来源链接: medium.com