跨链桥是促进区块链之间信息传输(如消息,资金或其他数据)的通信协议。虽然很有用,但建立跨链桥是一项有风险的业务。区块链历史上一些最恐怖的黑客攻击大部分都是针对跨链桥。截至2022年,过去一年损失的资金中有69%是由于对跨链桥的攻击造成的,导致损失达数十亿美元。
在本文中,我们将重点介绍使用零知识证明 (ZKP) 的跨链桥结构的具体实现。虽然一些黑客攻击是无法避免的,但ZKP的合理性将区块链共识协议的安全性扩展到了跨链桥。
跨链桥和零知识证明
近年来,我们看到零知识证明(ZKP)在rollup中的应用取得了巨大进展,其健全性属性允许构建安全和去中心化的应用程序。因此,用ZKP探索制定跨链桥结构是有合理的。在下文中,我们回顾并比较了该领域的三个有趣的发展:
使用 zkSNARKS简洁地验证共识:使用单个 zk-SNARK 实现以太坊 PoS(权益证明)轻量级客户端。
使用zkSNARKS将IBC(区块链间通信)带到以太坊:使用单个zk-SNARK将宇宙SDK(招标敏特)的工作原型带到以太坊轻型客户端。
zkbridge:无信任的跨链桥:使用2步递归zk-SNARK将Cosmos SDK实施到以太坊轻量级客户端,用于以太坊到EVM兼容区块链的轻量级客户端(本文未涵盖)。
这些项目利用zk-SNARKS的特性来重新定义跨链桥的设计方式。上述所有内容都假设存在一个轻量级客户端协议,该协议可确保节点可以同步最终确定区块链状态的块头。
将ZKProllup背后的思想应用于网桥的两个主要挑战是,首先,与rollup相比,网桥中涉及的链路尺寸要大几个数量级,其次,如何减少链上的存储和计算开销。
简洁验证共识证明
Succinct Labs为以太坊2.0权益证明共识构建了一个轻量级客户端,以在Gnosis和以太坊之间构建一个信任最小化的跨链桥,该桥使用zk-SNARKS(不是零知识)的简洁属性来有效地验证链上的共识有效性证明。
该设置由以太坊中512个验证器组成的同步委员会组成,每27小时随机选择一次。这些验证者需要在其期间签署每个区块头,如果超过2/3的验证人签署每个区块头,则以太坊的状态被视为有效状态。验证过程主要包括验证:
标题的默克尔证明;
同步委员会中验证者的默克尔证明;
用于正确轮换同步委员会的 BLS 签名;
上述验证需要每27小时在链上存储512个BLS公钥,并且对于每个标头验证验证签名,这导致512个椭圆曲线添加(在曲线BLS12-381中)和链上的配对检查,这是成本过高的。
这里的核心思想是使用zk-SNARK(Groth16)来生成有效性证明(大小恒定),并且可以在Gnosis上的链上有效地验证。
使用 zk-SNARKS 的简洁性卸载昂贵的链下验证
以太坊轻量级客户端在Gnosis链上使用智能合约,而链下计算包括构建circom电路来验证验证器及其BLS签名,然后计算zk-SNARK证明。在此之后,块头和证明被提交给智能合约,然后在Gnosis链上执行验证。计算中 SNARK 部分的电路尺寸和证明时间总结如下:
优化包括使用验证器的 512 公钥 (PK) 输入作为使用 ZK 友好型波塞冬哈希的承诺。波塞冬哈希解决了存储开销问题并减小了电路大小。电路大小的缩减如下:受信任的委员会在 27 小时后更新,而前一个委员会使用 SSZ(简单序列化)来对新委员会进行数字签名。不是直接在创建大型电路的SNARK中使用它(每个按位操作都需要一个门,并且在SHA中有大量的按位操作),而是使用波塞冬哈希对当前PK进行承诺,这是一种导致相应电路的SNARK友好表示的计算。
使用的这种桥接方法非常特定于应用程序(依赖于共识协议),并且从zk-SNARK的健全性属性中派生其安全性。此外,通过优化,它实现了低存储开销,降低了电路复杂性和简洁的验证,并且看起来可以推广。然而,zk-SNARK的使用降低了信任假设。
将IBC带到以太坊
Cosmos SDK生态系统使用IBC(区块链间通信)在框架中定义的所有主权区块链之间进行通信。
这种设置与前面讨论的情况类似,但方向相反,轻型客户端(来自cosmos SDK)需要在以太坊上的智能合约中进行验证。从实际意义上讲,从以太坊上的其他区块链运行一个轻量级客户端似乎具有挑战性。
在Cosmos SDK中,Tendermint轻量级客户端在扭曲的爱德华兹曲线(Ed25519)上运行,这在以太坊链上不受本机支持。因此,在以太坊(BN254)上对Ed25519签名进行链上验证变得效率低下且成本过高。
在cosmos中使用zkSNARKS到以太坊的桥
与我们之前的讨论类似,Cosmos SDK 上的每个块标头(每个块标头由曲线 ed25519 上的大约 128 个 EdDSA 签名组成)由一组验证程序签名(验证块需要 32 个高风险签名)。验证签名会生成大型电路,这是一个重要的计算组件。
因此,基本问题是如何在以太坊链上有效且廉价地验证来自cosmos SDK中任何区块链的ed25519签名。解决方案是构建一个zkSNARK,该zkSNARK在链下生成签名有效性证明,并且仅在以太坊链上验证证明本身。
Circom 库支持曲线 BN128、BLS12–381 和 Ed448-Goldilocks,因此,为了在质数 p=2^(255)-19 的 ed25519 曲线上执行模块化算术,可以将字段元素的表示形式分解为更小的 85 位整数 (85*3=255),以实现高效的模块化算术。
circom 生成的电路是 ed25519 签名验证电路的 R1CS 表示,它由椭圆曲线点加法/加倍数和上面定义的模块化算术组成。签名验证电路是使用circom库构建的,每个签名验证产生约2M个约束。
在见证计算之后,Rapidsnark 库生成了用于 ed25519 签名验证的 Groth16 证明。与BLS签名不同,ed25519曲线签名不是可聚合的,因此无法为聚合签名生成单个zk-SNARK证明。相反,签名是分批验证的,并且观察到证明时间相对于批处理中的签名数呈线性比例。
因此,如果要减少批量处理中的签名数量,它将降低证明时间(减少延迟),但由于每批生成的证明数量增加,因此会增加成本(gas费用)。
这种桥接方法也特定于其应用,并且从zk-SNARK证明的健全性特性中享有安全级别。特别是,它验证了以太坊上Tendermint轻型客户端的ed25519签名,而没有引入任何新的信任假设。场外模算术是链上验证计算的宝贵优化。
一个特定技术问题是延迟。cosmos SDK中的区块生产率约为7秒,为了跟上这个速度,证明时间应该大大降低。Electronlabs建议使用多台机器并行计算,以与块生产率相同的速率生成证明,并进行递归以生成单个zk-Snark证明。
zkbridge
与其他两个行业领先的ZKP跨链桥结构不同,zkbridge是一个框架,可以在其上构建多个应用程序。这个想法与前面讨论的两种方法类似,并且需要在两条链上都有一个轻量级客户端和智能合约,以跟踪对应于任何一方的最新状态。网桥的核心组件是块标头中继网络、更新程序协定和特定于应用程序的协定(发送方:SC1、接收方:SC2)。
桥接组件是灰色阴影区域
块头中继网络由中继节点网络组成,这些中继节点侦听桥接链上的状态更改,并从块中的完整节点检索块标头。网桥上中继节点的主要功能是生成一个 ZKP,该 ZKP 证明来自一个链的块标头的正确性,并将其中继到另一个链上的更新程序合约。
更新程序协定验证并接受或拒绝来自中继网络中节点的证明。行业主导的方法和zkbridge之间的主要区别在于,信任假设基本上被简化为中继网络中存在一个诚实的节点,并且zk-SNARK是合理的。
这种结构的一个关键创新是使用并行使用zkSNARK:deVirgo,它具有简洁的验证/证明大小,并且不需要可信的设置。其动机是,用于验证N个签名的电路基本上由相同子电路的N个副本组成,称为数据并行电路,每个子电路与其他子电路相互排斥。例如,在前面一节中讨论的 ed25519 签名验证中就是这种情况。
deVirgo的核心组件基于GKR协议的零知识扩展,该协议为分层电路中的每个子电路运行求和检查参数和多项式承诺方案。deVirgo 泛化实质上是在一组中继节点上运行处女座证明器,并通过将证明和多项式承诺聚合到主节点中来避免证明大小的线性增长。
对于使用大约10M门验证100个签名的电路,证明大小为210KB。zkbridge使用两步递归。在第一步中,生成一个处女座证明,然后使用Groth16证明器对其进行压缩。Groth16 验证器生成德维尔戈电路执行完整性的证明。递归的主要目的是实现简洁性(证明大小)并降低验证气体成本。
然后,中继网络将 Groth16 证明提交给更新程序合约,该合约可以在链上验证它。deVirgo证明系统是后量子抗性的,因为它只依赖于抗碰撞的哈希函数,主要的计算瓶颈是大型电路中的数论变换(NTT)。似乎没有被提及的一件事是,中继网络计算将遭受与MPC相同的通信复杂性,这也将影响证明者的时间。GKR多层求和校验协议对中继网络中N台机器的通信复杂度为O(N log_2(每层门))。
即使对于中继网络中有32台机器的32个签名情况,这也会导致网络中相对大量的通信轮次,这可能会完全扼杀分布式计算的性能。使用上述方法解决了前面讨论的来自 cosmos SDK-以太坊轻量级客户端的 ed25519 签名的验证问题。该网桥由一个中继网络组成,该中继网络获取 Cosmos 块标头并生成用于分布式证明生成的 deVirgo 证明。之后,由优化签名验证电路(用于场外算术)的Gnark改编在递归的第二步中生成Groth16证明。
更新合约在以太坊上的Solidity中实现,并跟踪宇宙区块头和中继网络的Groth16证明。验证成本是恒定的<230K气体,这是由于Groth16证明的恒定尺寸。此外,还可以批量验证 B 连续块标头,并为 B 标头生成单个证明。然而,增加批次的规模也增加了验证时间,但由于链条上的验证负担较小,因此降低了gas成本。和以前一样,硬件加速也可能进一步改善Gnark证明者。
zk 桥是用于在桥上构建应用程序的框架。网桥设计使用中继网络来生成 zkp,并且具有最不信任的假设。只要能够克服中继网络中类似MPC的通信复杂性,就可以使用任何可并行化的ZK证明器。更具体地说,撇开处女座中继网络的MPC复杂性不谈,NTT是中继节点的单个处女座证明器组件的瓶颈。
综合比较
下面我们快速比较本文中讨论的三种跨链桥结构的各种特征。
总之,使用ZKP设计网桥解决了去中心化和安全性的问题,但由于电路尺寸大,会产生计算瓶颈。
计算开销的问题可以通过硬件加速来改善,特别是SNARKS的使用,以及提交公共数据的技巧,可以减少存储开销。由于大部分桥接工作都是为了证明数据并联电路,因此像deVirgo这样的用于并行性的ZKP的推广是有价值的研究方向。
此外,由于多链宇宙中的区块链是根据应用在各种领域(场,曲线)上定义的,因此场内和场外算术优化是最低级别的重要构建块。通过MPC生成证明的并行性带来了通信复杂性方面的瓶颈,这些瓶颈仍然是悬而未决的问题。
为什么多链宇宙是支离破碎的?
区块链生态系统的当前状态类似于气泡宇宙(碎片化的多链宇宙)的异构分布,每个宇宙都有自己的共识机制、设计、应用和用例规则。截至撰写本文时,有超过100个第1层(L1)区块链协议,用户数量不断增加,并且随着区块链用例的增加,这个数字可能会增长。
区块链三难困境指出,很难同时实现理想区块链实现的三个基石:
分散
可伸缩性
安全
区块链三难困境
根据用例的不同,除了吞吐量和成本之外,这三个基石的重要性顺序可能会有所不同。三难困境中的不同权衡可以想象为三角形的变形,同时保持面积固定。当然,当两个角落相互接近时,第三个角落会进一步移动。这些权衡导致了区块链的不同概念化,从而使开发人员能够自由地为合适的应用程序选择不同的平台。这导致了碎片化的多链宇宙,每个区块链基本上都是孤立运行的,完全忘记了其他区块链的存在。
多链宇宙中的链间通信,通常被称为互操作性层,是一种基础基础设施,充当不同区块链之间的跨链桥。桥使用户能够在链之间传递消息,包括数字资产(加密货币),链的状态,合约请求,证明等。简而言之,跨链桥对碎片化的多链宇宙进行了“碎片整理”。因此,有很多研究和开发集中在多链宇宙中构建这个关键组件上。
搭建跨链桥
跨链桥是一种双向通信协议,它证明一个链 C1 中的事件发生到另一个链 C2 中的应用程序,反之亦然。为简单起见,我们使用术语,原点链(C1)和目标链(C2),尽管它是可互换的。C1 上的状态更改必须在 C2 上“链上”进行验证。这通常由轻量级客户端完成:C2上的合约,跟踪C1上的一组块头,并使用对应于从源链提交的根的Merkle证明来验证它们。
通常,C1 和 C2 可以在不同的域中运行,并且验证操作需要场外算术。除了标头列表继续增加之外,客户端还需要存储和验证新标头。这会导致大量的计算和存储开销,并且通常效率低下。为了绕过这个问题,许多跨链桥建设采取了更集中的方法。
致命弱点:一种轻量级客户端协议,具有一小组受信任的验证程序来签署状态更改。
这通常发生在资金转移的情况下,其中对集中式过桥实体进行了实质性的信任假设,该实体通常由少数受信任方组成。尽管这违背了区块链的基本原则,但它带来了与审查和安全相关的问题。
区块链历史上一些最大的黑客攻击都发生在桥上
安全漏洞的主要原因是由于跨链桥作为中心化存储单元的方式。大多数现有的跨链桥(用于流动性)通过锁定 - 燃烧 - 释放机制运行。典型的用户通过将链C1上的资金发送到将这些资金“锁定”到合约的桥协议来与桥进行交互,即这些资金在C1中不可用。
然后,该桥允许用户在另一个区块链C2中铸造等效资金。一旦用户花费了一些资金并希望将剩余资金返还给C1,他就会“烧掉”C2中的资金,桥接实体对其进行验证,并“释放”C1中的剩余资金。在这样的链间跨链桥中,大量资金可能位于跨链桥中,其安全性依赖于少数受信任的各方,使其成为攻击的活跃目标。
总而言之,建造跨链桥的主要技术挑战是
低计算开销(高效处理跨域数据,场外算术)。
低存储开销。(简洁)
安全性/不可信。(稳健性)
来源:金色财经