HTLC攻击事件分析跨链桥的比较Rollup Bridge 和跨链桥的不同
本文将介绍跨链桥是什么并将跨链桥进行分类与比较,搭配一些著名跨链桥攻击事件进行分析。
什么是跨链桥
跨链桥是一个在不同链之间负责传递「讯息」的桥,至于是什么样的讯息,接下来会介绍。跨链桥的例子包含Multichain、Celer、LayerZero、Nomad、Hop等等。
链是不知道彼此的存在的
大家熟悉的跨链桥使用场景绝大多数都是将资产例如ETH、BTC 进行跨链。但实际上「资产」是没办法跨链的,这是因为每一条链都是各自独立的,它们不会知道彼此的存在、彼此的状态。
至于Solana 上的ETH 或是ETH 上的BTC 是怎么来的?那些都是跨链桥铸造出来的,只要这些跨链桥是安全的,这些铸造出来的币就是安全的。
注:其他像是USDT 或USDC,有些是Tether 和Circle 到不同链上去铸造出来的,剩下则一样是由跨链桥所铸造。
传递什么「讯息」?
表面虽然是资产在跨链,但背后实际上就只是「讯息」在跨链而已。这些讯息像是「我在A 链上把X 资产锁住/烧毁了」或「我在B 链上把Y 资产解锁/铸造出来了」,讯息的接收方就按照讯息内容来执行相对应的处理。
例如当Alice 想透过一个跨链桥把USDT 从A 链「转移」到B 链,实际上背后发生的是:
-
跨链桥在A 链的合约把USDT 从Alice 身上转过来,并送出一个讯息:「Alice 在我这锁住了10 USDT」
-
讯息被带至跨链桥在B 链的合约,合约从自己身上转10 USDT 给Alice 在B 链上的地址
资产跨链实际上背后是单纯的讯息传递,中间省略许多细节
「讯息」的传递是跨链桥的核心,现在最常见的资产跨链只是其中一种用途而已,像Aave的V3 版本就是一个运行在多个网路之上的抵押借贷平台。
限制与挑战
但跨链桥并没有像上面那个例子这么简单。跨链桥的一个最根本的限制来自于「链不知道彼此存在」这个事实,因此它需要「相信某个人来传递讯息」。所以跨链桥的主要挑战就在于「要怎么验证一个送来的讯息的有效性」。
注:这里的「相信」讯息传递者并非指完全相信,后面的段落中会介绍到有些桥是不需要相信讯息传递者的。传递者可能是好人也可能是坏人,但对传递者(们)的特质会有一些其他的假设。
安全性
基本上一个跨链桥的安全性取决于:
-
需要放多少信任在讯息传递者身上?对讯息传递者的行为有没有一些假设?是否假设讯息传递者只能诚实地执行他的工作?
-
如何验证讯息的有效性?
接下来将介绍不同跨链桥的分类。
跨链桥的分类
1. Trusted Relayers
顾名思义,Trusted Relayers 就是信任讯息传递者。基本上相信讯息传递者后,也不需要再验证讯息有效性了,只要是信任的讯息传递者带来的讯息都相信是有效的。而自然地当有了信任及中心化的假设,架构就会简单许多,而且成本会很低、使用体验会很好。
Trusted Relayers 的技术没什么特别之处或亮点,就看这些讯息传递者的组成,可以是单个或多个(就像多签);每一个讯息传递者背后也可以是多签或是MPC。
这里必须要提到的一点是Trusted Relayers 的安全假设是Honest Majority,也就是过半数的讯息传递者必须是诚实的好人。如果超过一半的讯息传递者是坏人或被骇客入侵,则这个跨链桥的就不再安全。
另外要提到的是Layer Zero 也是属于Trusted Relayers,即便在他们的定义里讯息传递者的角色被分成「Oracle」及「Relayer」,但还是不改变整个桥的安全性仰赖这两个角色不能都是坏人。不过Layer Zero 相较于其他Trusted Relayers 桥的优点是:每个dApp 能自己客制化自己需要的安全性。如果你很需要安全性,你可以把「Oracle」及「Relayer」的数量设定的很高。另一个优点是:每个dApp 的安全性彼此是独立、不互相影响的。
2. Optimistic Verification
和Optimistic Rollup 的Optimistic 一样,都是先乐观地接受传递过来的讯息,但会验证讯息的有效性,如果发现是无效的则发起挑战。优点是绝大多数的时间系统都会是正常运作(因为作恶会被挑战并惩罚),讯息都是有效所以不需发起挑战,所以成本非常低,因为不需要在链上去验证讯息。缺点是必须要有一段挑战期(Optimistic Window),让负责验证的人有足够多时间验证并发起挑战。接下来会以Nomad为例,介绍Optimistic Verification 的运作。
Nomad 里有三个角色:Updater、Relayer 及Watcher。
-
Updater 抵押担保品,并负责为讯息签名做担保,例如「我以我的担保品发誓Alice 申请要从链A 送XXX 讯息到链B」
-
Relayer 单纯负责把讯息及Updater 的签名送到目标链(链B)上
-
Watcher 负责监督Updater,并在Updater 作恶时反应
正常情况
Updater 作恶
Watcher 发现后,先到链B 把讯息作废,再把证据(Updater 签名)送到链A,没收Updater 担保品
链A 的合约可以很清楚验证Updater 所签名的讯息到底存不存在,因为只有使用者亲自送请求到合约,讯息才会真的存在。所以当Updater 对一个不存在的讯息签名,这个签名就会变成作恶的Updater 百口莫辩的证据,用来没收Updater 的担保品。
证据只在讯息来源链(链A)有效
目标链(链B)永远没办法知道链A 上有谁要送什么讯息过来,所以链B 合约没办法知道Updater 担保的讯息到底是不是真的。
那链B 能怎么办?答案是需要引入Permissioned Watcher。Permissioned Watcher 有权利能作废任何一个讯息,避免伪造的讯息造成任何破坏。但相反地它也可以作废一个正常的讯息,也因此这个角色必须要是Permissioned,他需要是一个被信任的角色。
如果有Permissioned Watcher 乱搞,恶意作废正常的讯息,则这时候只能仰赖另一层信任,可能是Governance 或是一个多签Admin 之类的来介入,将恶意的Watcher 剔除。
只需要假设至少有一个Watcher 有在做事
和Trusted Relayer 的安全假设非常不同,相对于Trusted Relayer 需要假设有过半数诚实参与者,Optimistic Verification 只需要假设至少有一个Watcher 是好人即可。这表示要攻破Optimistic Verification,你需要攻破(例如骇入、贿赂、DoS)全部的Watcher。
30 分钟挑战期
不同于Optimistic Rollup 挑战期多达七天,Optimistic Verification 的挑战期只有30 分钟。这是因为Optimistic Verification 的挑战不需要挑战者与被挑战者之间来回交互,而是直接提交一个一次定生死的证据:「Updater 签名的讯息存不存在?(yes/no)」。
3. Light client + Trustless relayers
这种跨链桥的方式是让目标链成为来源链的轻节点,可以是链下运行一个轻节点,也可以是用链上合约模拟一个轻节点:合约里记录来源链每个区块并验证每个区块的标头档(Block Header)。除了验证标头档的内容是有效的之外,还需要验证共识,也就是PoW 的验算或PoS 的投票结果。PoW 的验算还算简单,但PoS 的投票结果就复杂许多,尤其是像Ethereum Beacon Chain 多达四十多万的Validator,要维护这些名单在合约或计票的成本都非常高。
另外每条链的区块内容和共识机制都不一样,因此要支援新的一条链并非简单的工作,再加上验证成本会比其他跨链桥高上许多,这些都是这种跨链桥的主要缺点。不过优点是它非常安全,它不需要相信负责带区块资讯来的Relayer,它会自己验证区块和共识。