《zkBridge: Trustless Cross-chain Bridges Made Practical》

780 阅读14分钟

ZKbridge(2022-11-22)

zkBridge: Trustless Cross-chain Bridges Made Practical

Author:Tiancheng Xie, Jiaheng Zhang, Zerui Cheng, Fan Zhang, Yupeng Zhang, Yongzheng Jia, Dan Boneh, Dawn Song

论文链接:zkBridge

查看被盗事件:rekt.news/leaderboard…

Abstract

  • zkBridge,一个高效的跨链桥,保证了的安全性的桥。在没有外部信任假设的情况下保证强大的安全性。通过简洁的证明,zkBridge不仅保证了正确性,而且还极大地显著降低了链上验证的成本。通过模块化设计,zkBridge
  • 可以实现广泛的用例和功能,包括消息传递、令牌转移和其他计算逻辑对来自不同链的状态变化进行操作。为了证明为了证明zkBridge的实用性,我们实现了一个原型桥梁从Cosmos到Ethereum,这是一个特别具有挑战性的方向。涉及现有系统无法有效处理的大型证明电路处理。
  • 评估表明,zkBridge实现了实用的性能:证明生成需要不到20秒,而在链上验证证明的成本低于230K的gas。为了完整起见。我们还实现并评估了从Ethereum到其他与EVM兼容的链(如BSC),这涉及到更小的电路,产生的开销也少得多。

先进性:本文的zkBridge协议比现有的解决方案在zkBridge中的工作量要快好几个数量级

1.Introduction

这部分比较长,其中有一句很经典的话可以提炼出来:

A central challenge in the multi-chain universe is how to enable secure cross-chain bridges through which applications on different blockchains can communicate.

跨链桥的最终目的就是让不同链上的应用程序可以通信。实际上,一个高效的桥接系统对区块链的作用就像互联网对孤立的通信网络的作用一样。

core

桥的运行取决于两个链的共识协议。

The Problem

虽然在实践中已经建立了跨链桥[3, 4, 9, 18],但现有的解决方案要么性能不佳,要么依赖中心方。

如果𝒞1运行工作证明,一个自然的想法是使用一个轻客户端协议(例如SPV[61])。具体来说,一个𝒞2上的智能合约,用𝒮𝒞2表示,将跟踪𝒞1的块头,基于𝒞2将跟踪𝒞1的区块头。 用默克尔证明来验证。然而,这种方法会产生大量的计算和存储开销,因为𝒮𝒞2需要验证所有的块头,并保持一个长的和不断增长的列表。对于非PoW链,验证可能更加昂贵。例如,对于取证链(如Cosmos)和以太坊之间的桥接和以太坊之间的桥梁,在以太坊上验证一个区块头将会价值约为6400万gas[15](在撰写本文时约为6300美元)。这是一个令人望而却步的价格。

目前,作为一个有效的替代方案,许多桥接协议(PolyNetwork, Wormhole, Ronin, etc.)采用了一种基于委员会的方法的方法:一个验证者委员会被委托来签署状态的转移

在这些系统中,安全性归结为,例如,假设大多数节点都是诚实的,这是有问题的,原因有二:

  • 首先,委员会中额外的信任假设意味着桥接的资产不像本地资产那样安全,使下游应用的安全分析变得复杂。

  • 第二,依赖一个小的委员会可能导致单点故障。事实上,在最近一次对Ronin桥的攻击中[27],攻击者能够获得9个验证器密钥中的5个,通过它盗取了6.24亿美元,使其成为DeFi历史上最大的攻击。 2021年4月前,这次攻击成为DeFi历史上最大的一次攻击。甚至第二和第三大攻击也是针对bridge的(6.11亿美元被盗自PolyNetwork [6] 和从PolyNetwork [6]和从Wormhole [10]盗取了3.26亿美元)。而在PolyNetwork的攻击中,还怀疑有密钥泄露的情况。

Approach

zkBridge的思想是利用zk-SNARK,它是简洁的、非交互式的知识证明。

zk-SNARK使验证者能够有效地说服𝒮𝒞2认为某个状态的转换发生在𝒞1上。为了做到这一点,𝒮𝒞2将跟踪𝐷1的最新提示的摘要𝒞。为了使𝒮𝒞2同步于𝒞1中的新区块,任何人都可以生成并提交一个zk-SNARK向𝒮𝒞2证明𝒞1的顶端已经从𝐷推进到𝐷。

这种设计有三个好处。

  1. 首先,zk-SNARK的健全性确保了桥梁的安全性。因此,除了底层区块链的安全之外,我们不需要额外要求底层区块链的安全。特别是zkBridge,它并不依赖一个委员会来保证安全。

  2. 第二,通过建立专门的zk-SNARK,𝒞2可以验证𝒞1的状态转换,其效率远远高于编码。𝒞1的共识逻辑在𝒮𝒞2中的效率要高得多。这样一来,作为一个例子的zkBridge,在从Cosmos到Ethereum,我们在𝒞2上将证明验证成本从80𝑀气减少到230𝐾气以下,并且将存储桥的存储开销减少到一个常数。

  3. 第三,通过将桥与特定应用的逻辑相分离,zkBridge使其很容易在桥的基础上启用额外的应用程序。

Technical Challenge

技术难点————采用压缩长证明的方法

要用zk-SNARK证明一个给定的计算结果的正确性,首先需要将计算表达为一个算术电路。虽然zk-SNARK验证是快速的(对数作为电路的大小,甚至是常数作为电路的大小),但证明生成时间至少是线性的,而且在实践中可能是令人望而却步的昂贵。此外,现实世界中的区块链所使用的组件不容易被表达为算术电路。 例如,广泛使用的EdDSA数字签名方案,在CPU上验证起来非常有效,但却很昂贵。 在CPU上验证是非常有效的,但是要表达成算术电路是非常昂贵的,甚至需要超过200万个门[13]。

在一个跨链桥中,每个状态转换可能需要验证数百个签名,这使得生成所需的zk-SNARK证明的成本过高。为了确保zkBridge的实用性,我们必须减少证明生成时间。

为此,我们提出了两个新的想法。

  1. 首先,我们观察到跨链桥所使用的电路是数据并行的,因为它们包含一个较小的子电路的多个相同的副本。具体来说,用于验证𝑁数字签名的电路包含𝑁签名验证子电路的副本

  2. 为了利用数据并行性,我们提出了deVirgo,一个基于Virgo[76]的新型分布式零知识证明协议。完美的线性可扩展性,即证明生成时间可以分布在𝑀以上,则证明时间可以减少𝑀。在CPU上验证是非常有效的,但是要表达成算术电路是非常昂贵的。在一个跨链桥中,每个状态转换可能需要验证数百个签名,这使得生成所需的zk-SNARK证明的成本过高。为了使zkBridge实用,我们必须减少证明生成时间。

虽然deVirgo大大减少了证明的生成时间,在链上验证deVirgo证明,特别是对于zkBridge的十亿门级别的电路,对于计算资源极其有限的智能合约来说,验证deVirgo证明是很昂贵的。为了压缩证明的大小和验证成本,我们使用经典的zk-SNARK来递归证明一个(潜在的大)deVirgo证明的正确性。以下简称Groth16,Groth16验证器 输出恒定大小的证明,可由EVM区块链上的智能合约快速验证。我们强调,人们不能使用Groth16来生成整个zkBridge证明,因为zkBridge所需的电路对于Groth16验证器来说太大。相反,我们使用Groth16压缩deVirgo证明的方法可以提供两者都是最好的情况:一个快速的deVirgo并行验证器用于大部分的证明,其结果是将证明压缩成一个简洁的Groth16证明,可以实现快速验证。 我们在第5节中详细阐述了这一技术。这种压缩长证明的方法也正在被在商业的zk-SNARK系统中采用,比如[23, 24, 26]。

Implementation and evaluation

为了证明zkBridge的实用性,我们实现了zkBridge的一个端到端原型,从Cosmos到Ethereum的端到端原型,考虑到这是最具挑战性的方向,因为它涉及正确性证明的大型电路。我们的实现包括deVirgo和递归协议与Groth16的证明,以及交易中继应用。实验表明,我们的系统实现了实用的性能。 deVirgo可以在20秒内生成一个区块头的中继证明,这比Groth16协议(可以看这个零知识证明的链接,;了解一下)快100倍以上,比使用单机的原始Virgo系统快100倍以上。此外,由于递归证明的缘故,链上验证的成本从80Mgas(直接签名验证)减少到23万gas以下。此外,作为一个原型例子,我们还实现了从以太坊到其他EVM兼容链的zkBridge,例如BSC,这涉及到较小的证明生成电路,并且产生的开销要少得多。

关于零知识证明的比较,可以参考:zhuanlan.zhihu.com/p/107339837

币安智能链(BSC, Binance Smart Chain):www.wwsww.cn/qkl/7246.ht… image.png

1.1 Our contribution

这一部分主要是在讲zkBridge的先进性。

在本文中,作者做出了以下贡献。

  • 在本文中,我们提出了zkBridge,一种无信任、高效和安全的跨链桥,其安全性依赖于简洁的证明(加密学假设),而不是委员会(外部信任假设)。与现有的跨链桥项目相比,zkBridge是第一个同时实现以下特性的解决方案。
  • 无信任和安全。远程区块链上的区块头的正确性是由zk-SNARKs证明的,因此没有引入外部信任假设。事实上,只要是连接的区块链和底层轻客户端协议是安全的,并且在区块头中继网络中至少存在一个诚实的节点。区块头中继网络中存在至少一个诚实的节点,zkBridge就是安全的。(zkBridge的安全性是很高的)
  • 无许可和去中心化。任何节点都可以自由加入网络来中继区块头,生成证明,并要求获得奖励。由于取消了常用的中央或抽样证明式的区块头委员会验证,zkBridge也享有更好的分散性
  • 可扩展性。使用zkBridge的智能合约享有最大的灵活性,因为他们可以调用更新器合约来检索经过验证的区块头,然后执行其特定的应用验证和功能(例如,通过辅助的Merkle证明验证交易的包含性)。通过将桥与特定应用的逻辑相分离,zkBridge使使得在桥接之上开发应用变得容易。
  • 通用性。zkBridge中的区块头中继网络和底层证明方案是通用的,只要区块链支持定义2.1中的轻型客户端协议。
  • 高效。通过我们高度优化的递归证明方案,块头可以在很短的时间内被转发(通常是几十秒的证明生成,并且转发的信息可以在很短的时间内完成,通常是几十秒的证明生成)。一旦证明被验证,就可以迅速完成,因此支持快速和灵活的信息桥接。

综上所述,zkBridge是一个建立区块链互操作性的安全、无信任基础安全的巨大飞跃。

  • 我们提出了一个新颖的2层递归证明系统,它具有独立的特点,作为zk-SNARK协议的底层,以实现合理的证明生成时间和链上验证成本。通过deVirgo和Groth16的协调,我们在效率和成本之间实现了一个理想的平衡。
  • 对于第一层,旨在迅速生成证明,我们引入了deVirgo,一个分布式的Virgo证明系统。 deVirgo结合了分布式sumcheck和分布式多项式承诺,以实现最佳的并行性,通过这种方式,证明生成阶段通过在分布式机器上运行而大大加速。

sumcheck链接:blog.csdn.net/mutourend/a…

deVirgo在分布式机器上运行时,速度比Virgo快100倍以上。

对于zkBridge中的工作负载,deVirgo比Virgo快100倍以上。(你很牛嘛[^]_[^])

  • 对于第二层,为了达到可接受的链上验证的目的成本,我们使用Groth16来递归证明之前由deVirgo生成的证明确实证明了远程块头的有效性。通过第二层,核查气体成本从估计的80%∼80𝑀减少到小于230%,降低到230𝐾以下,使链上验证成为现实。
  • 我们实现了zkBridge的端到端原型,并在两个场景中评估其性能:从Cosmos到Ethereum(这是主要的焦点,因为它涉及到现有系统无法有效处理的大型证明电路)。现有系统无法有效处理的大型证明电路),以及从Ethereum到其他与EVM兼容的链(相比之下,这涉及到的电路要小得多)。实验结果表明,zkBridge实现了实用的性能,是第一个实用的跨链桥,实现了密码学上的正确性保证。

(11-30日更新)

2.Background

将介绍前言、区块链的基本背景和零知识证明。区块链的基本背景,以及零知识证明。

2.1 符号

Merkle树

默克尔树[59]是一种广泛用于建立向量承诺的数据结构。由于其简单和高效,被广泛用于建立对向量的承诺。验证者的时间与向量的大小成线性关系,而验证者的时间和证明大小与向量的大小成对数关系。 给定一个x=(𝑥0,--,𝑥𝑁-1)的向量,它由三个算法组成:

image.png

2.2 区块链

区块链是一种分布式协议,一组节点共同维护一个由有序的区块列表组成的账本。一个区块blk是一个数据结构,它存储了一个头blkH和交易列表,用blk={blkH;trx1,...,trx𝑡}表示。一个块块头包含了关于该块的元数据,包括一个指向块的元数据,包括指向前一个块的指针,交易的紧凑表示(的紧凑表示(通常是一个Merkle树根),有效性证明,如对工作证明系统中的密码谜题的解决方案,或在取证系统中的验证人签名。

区块链安全

区块链的安全性已经得到了广泛的研究,每一个块都是与前一个相联系的。

image.png

智能合约与gas

这部分没什么可说的,都是一些可有可无的介绍。

轻客户端协议

在一个区块链网络中,有全节点,也有轻节点。 完整的节点存储区块链的全部历史,并验证所有的节点,除了验证区块头之外,还验证所有交易。轻客户端,只存储区块头,因此只能验证正确性属性的一个子集。 轻客户端的工作原理取决于底层的consensus协议。最初的比特币论文包含了一个轻客户端协议(SPV [61]),该协议使用Merkle证明,使一个只存储最近头文件的轻客户端能够验证交易。 只存储最近的头文件来验证交易是否包含。此后,人们提出了大量的改进方案。比如说。 在Proof-of-Stake中,通常一个轻型客户端需要验证整个区块链历史中的账户余额。 在整个区块链历史中的余额(或直到快照),并考虑远距离攻击的风险。 考虑到远距离攻击的风险。对于基于BFT的共识。