解析 DeGate 采用的零知识证明技术 Groth16
2023-06-25 13:03
DeGate
2023-06-25 13:03
订阅此专栏
收藏此文章
与其他 zk-SNARK 相比,Groth16 具有相对较小的证明大小和快速的验证时间,这使其非常适合 DeGate 对高效和安全交易处理的要求。


撰文:Carlos Ramos


DeGate 是一个建立在以太坊上基于零知识(ZK)技术的去中心化交易协议。作为一个 ZK Rollup 去中心化交易所(DEX),DeGate 提供类似于热门中心化交易所(CEX)如币安或 Bybit 的交易体验。该协议支持多种功能,包括现货交易和网格交易,并将不断添加更多功能以确保交易体验的流畅性。DeGate 的设计目的是使得交易快速的同时费用低廉,为用户获取各种资产代币时提供更高效和便捷的交易。


在本文中,我们将深入探讨 DeGate 的架构以及其背后的零知识和 Groth16 技术。


DeGate 的技术架构


DeGate 的核心技术是零知识汇总(ZK-Rollup),它包含一些链上和链下组件。账户和资产变动在链下进行处理,并被汇总到链上智能合约中。


链上组件


DeGate 智能合约是链上组件。该智能合约部署在以太坊区块链上,任何想与交易所进行交互的人都可以访问。这使得交易变得无需信任且透明,用户对其资金拥有完全控制权,其资产可以在完全不依赖于 DeGate 的情况下自行取出(参照 Exodus 模式)。在 EVM 网络上部署的智能合约存储资产,验证零知识证明,并提充值和提现的方法。


链下组件


DeGate 还利用链下订单撮合和订单簿管理来降低交易成本并提高交易执行速度。这得益于 zk-rollups 技术,它允许快速高效地处理大量的交易,而无需给以太坊网络增加负担,同时保持安全和无需信任。


DeGate 链下节点主要包括:


  • 交易系统:处理用户的订单,在订单簿中进行订单匹配,处理帐户和资产状态变化的事件。
  • Operator:定期处理链下帐户和资产交易,生成 zkBlock,调用 zkp-worker,提交证明(zkBlock 数据)。
  • zkp-worker:描述需要零知识证明的事件,并生成零知识证明。 默克尔树:以树形结构存储 DeGate 协议的帐户、资产和订单。
  • 链同步:观察和确认在 DeGate 智能合约内发生的所有交易。
  • Postman:在 EVM 网络上调用 DeGate 智能合约方法,并向智能合约提交 zkBlock 数据。

 


ZK-Rollup 技术


 

从前面的图中,我们可以看到 DeGate 有一个名为 DeGate Node L2 的主要组件,而 Rollup 过程可以总结为以下三个步骤:


  1. 用户签署请求,可以通过 DeGate 使用资产私钥(PK)或用户钱包 PK(转账、存款)完成。
  2. 节点验证并处理用户请求,将链下交易分批打包成区块,并调用电路生成零知识证明。
  3. 节点将证明结果发送给链上智能合约进行验证,完成 ZK-Rollup 并实现数据可用性。


数据可用性


DeGate 的 ZK-Rollup 由两个关键因素来保障:证明生成和证明验证。在 DeGate 协议中,证明生成由节点通过链下电路程序来完成。中继器收集大量交易以生成 SNARK 证明。SNARK 证明是一种类似哈希的内容,表示对 DeGate 状态的更改集。为了实现和证明区块链系统的去中心化信任,DeGate 使用开源智能合约和固定的验证密钥进行验证。


电路程序


关于电路:零知识证明的电路是由一些逻辑门组成的逻辑电路。任何计算都可以描述为算术电路。基于这个前提,复杂的逻辑操作可以被分解并用简单的加法和乘法门来描述。


零知识证明(Zero Knowledge Proof)是一种协议,使得一个参与方(证明者)可以说服另一个参与方(验证者)某个陈述为真,而无需透露任何关于该陈述的信息。非交互式零知识证明(NIZK)是一种特定类型的零知识证明,其中证明者可以在与验证者无需互动的情况下生成证明。NIZK 协议非常适用于以太坊应用,因为它们允许智能合约充当验证者。这样,任何人都可以生成一个证明,并将其作为交易的一部分发送给智能合约,智能合约可以根据证明的有效性执行某些操作。在这个背景下,最受欢迎的 NIZK 是 zk-SNARK(零知识简洁非交互知识证明),它是一组非交互式零知识协议,具有简洁的证明大小和亚线性的验证时间。这些协议的重要性体现在两个方面:一方面,它们有助于提高隐私保护程度,另一方面,它们是解决可扩展性问题的可能解决方案,因此非常适合 DeGate 的架构。


像大多数零知识证明(ZKP)一样,zk-SNARK 允许证明计算性陈述。例如,可以证明以下事实:与特定公钥相关联的私钥的知识,交易的正确计算,或特定哈希的原像的知识。重要的是,可以在不泄露有关这些陈述的任何信息的情况下进行这些操作。换句话说,不泄露任何关于私钥、交易细节或原像值的信息。更具体地说,zk-SNARK 允许证明可以用算术电路模拟的任何计算性陈述,这类电路通常称为 zk-SNARK 电路。值得一提的是,大多数 zk-SNARK 协议(例如 Pinnochio、GGPR13 和 Groth16)的实现使用椭圆曲线密码学。


详细介绍 Groth16


Groth16 是一种使用椭圆曲线实现的零知识证明系统,可实现对涉及算术电路的计算的高效验证。该构造基于以下组件:


  1. G1 和 G2 两组点之间的双线性配对 e:G1 x G2 -> GT,G1,G2 为相关椭圆曲线上一些点的集合,两个点集的大小都为 r;GT 为对应有限域的乘法群。
  2. 公共参考字符串(CRS),它是一组提前生成并在证明生成和验证过程中使用的公共参数。
  3. 描述待证明计算的电路 C(x),其中 x 是电路输入的向量。 Groth16 构造包括三个阶段:密钥生成、证明生成和验证。


Groth16 构造涉及多个数学公式和概念,包括椭圆曲线、双线性配对函数和零知识证明。


Groth16:可信设置


在 Groth16 中,可信设置过程涉及生成用于证明生成和验证过程的公共参考字符串(CRS)。CRS 是一组提前生成并分发给所有相关方的公共参数。该过程涉及生成随机值,这些随机值用于以一种确保无法预测或操纵的方式创建 CRS 的公共参数。用于生成公共参数的私有值随后被销毁,以防止它们被用于损害系统的安全性。可信设置过程对于确保系统的安全性和完整性至关重要。


Groth16:QAP 和 FFT


在 Groth16 中,证明生成过程涉及创建表示待证明计算的二次算术程序(QAP)。然后,使用快速傅里叶变换(FFT)算法对 QAP 进行转换,以创建可在证明中使用的计算的简洁表示。


QAP 将待证明计算表示为一组二次方程组,其中变量是计算的输入和中间值。然后,使用 FFT 算法对 QAP 进行转换,创建表示计算的多项式承诺,以简洁形式表示计算。该多项式承诺随后用于证明验证计算的正确性。


Groth16 中使用的 FFT 算法基于 Cooley-Tukey 算法,该算法是计算序列的离散傅里叶变换(DFT)的广泛使用算法。Cooley-Tukey 算法用于对 QAP 执行 FFT,将其转换为比原始 QAP 小得多的多项式承诺。

在 Groth16 中使用 QAP 和 FFT 可以实现对涉及算术电路的计算的高效生成和验证的零知识证明。使用 FFT 可以减小证明的大小,使得计算和验证更加高效,而使用 QAP 则允许更自然地表示待证明的计算。


Groth16:ALT_BN128


曲线 ALT_BN128 是一种已知的椭圆曲线。以太坊的 EIP196 和 EIP197 中已添加了此曲线的预编译合约,这使得通过使用该曲线进行链上计算可以节省更多的 gas。


ALT_BN128 曲线是基于配对的密码学的流行选择,也是以太坊最早支持,广泛使用的配对曲线。DeGate 将其用于协议中有效验证交易。以下是 ALT_BN128 曲线与一些在区块链应用中常用的其他曲线的比较:


1. secp256k1:secp256k1 曲线在区块链应用中广泛使用,包括比特币。它由方程 y^2=x^3+7(mod p) 定义,其中 p 为 2²⁵⁶-2³²-2⁹-2⁸-2⁷-2⁶-2⁴-1,是一个 256bit 的大素数。secp256k1 曲线在某些操作上比 ALT_BN128 曲线更快,但不适用于 FFT 计算,因此不被采用在 zk-SNARK 方案中。


2. BLS12-381:BLS12-381 曲线是基于配对的密码学的另一个流行选择,用于几个区块链应用,包括 Zcash。它由方程 y^2=x^3+4(mod p), 其中 p=2^381-3。BLS12-381 曲线在某些操作上比 ALT_BN128 曲线较慢,但具有更高的安全强度。


DeGate 中的 Groth16 和 ZK 区块大小


在经过大量的研究和讨论后,DeGate 最终选择了 Groth16 作为其 zk-SNARK 协议。Groth16 被 Zcash 等许多著名项目广泛使用,并且具有丰富的程序实现库,使其对开发人员友好。它还使 DeGate 能够在较高的安全强度下实现快速的证明生成和较低的 ZK-Rollup 成本。


DeGate 将链下交易打包成 zk 区块并提交到区块链上。zk 区块中的交易数量在部署之前根据 ALT_BN128 曲线支持的约束数量和 FFT 计算的难度来确定。zk 区块中交易数量越多,问题就越复杂,R1CS 电路约束的数量也越大。为了确保 zk 区块的高效和安全处理,DeGate 确定了几个具有特定交易数量的 zk 区块大小。这些大小的范围从 5 到 355 个交易不等,不同的大小对应不同的 PK 和 VK 集合,目前,DeGate 生成的 zk 区块具有以下大小:355、300、250、200、150、100、50、25、10。


可信设置


当 DeGate 协议部署到以太坊主网时,电路和智能合约都会进行初始化。这个过程也被称为可信设置,涉及到随机熵。DeGate 协议的可信设置分为两个阶段:


  1. 参考 Power of Tau 配置作为初始值。
  2. 基于初始值,首先引用未来的比特币区块哈希,然后获取 5 个社区成员提供的随机熵,再引用另一个未来的比特币区块哈希。最后,计算并存储一个 Proving Key 和一个 Verifying Key,分别存储在电路和智能合约中。


Groth16 与其他方案的比较


以下是 Groth16 与其他一些流行的和现代化的 zk-SNARK 构造在证明大小和验证时间方面的比较:

 

参考来源:https://www.cth.group/insights/page/zk/


GROTH VS PLONK


虽然 Groth16 和 PLONK 都是高效的 zk-SNARK 构造,它们在设计和实现上有一些关键区别。


  • 易解释性:Groth16 被认为比 PLONK 更透明,因为它涉及的算法原理更为直观,更容易理解和审计。PLONK 涉及更复杂的数学运算和约束过程,这可能使得验证实现的正确性更加困难
  • 证明的大小:Groth16 的证明仅为 3 个群元素,而 Plonk 的证明大小在同等条件下一般是 Groth16 的 2.5 倍左右
  • 验证计算量:Groth16 验证时需要的配对计算多于 PLONK;特别的,在对 k 个证明做批量验证时,Groth16 需要做 (k+3) 次配对,而 PLONK 的验证都是可以合并的,始终只有 2 次配对计算
  • 灵活性:Groth16 采用 CRS,每次电路改变都需要重新做 trusted setup;PLONK 采用 SRS,电路结构变化并不需要重新做 setup,更适应多样化的任务和需求


总体而言,当一个应用程序需要为同一电路生成多个证明(例如单个逻辑计算)且存储相关性能至关重要时,Groth16 是最合适的选择,而当一个应用程序需要处理许多不同的电路(例如可快速更新的业务逻辑)且保持高性能时,PlonK 是较为合适的选择。


DeGate 的零知识证明方案选择


DeGate 选择 Groth16 是因为它具有高效和安全的特性。与其他 zk-SNARK 构造相比,Groth16 具有相对较小的证明大小和快速的验证时间,这使其非常适合 DeGate 对高效和安全交易处理的要求。Groth16 还具有简单易懂的优势,有助于进行安全审计和测试。


因此,对于 DeGate 来说,Groth16 是目前一种较为合适的 zk-SNARK 构造,因为它提供了在以太坊区块链上处理交易所需的效率、安全性和简洁性,但我们选择的技术也是为了产品和用户服务,所以基于下面几个特点会考虑各种先进 ZK 方案的采用和创新


  • 效率:根据 DeGate 产品概述,该协议设计用于处理高达 355 笔交易的区块。Groth16 非常适合这个任务,因为它已被证明在基于配对的密码学中非常高效,而在 zk-SNARK 中广泛使用了配对操作。
  • 安全性:正如前面提到的,Groth16 被认为非常安全,并且在区块链应用中有着强大的使用记录。这对于 DeGate 非常重要,因为它涉及处理金融交易并需要高水平的安全性。
  • 性能:Groth16 的验证时间在典型 CPU 上约为 10 毫秒,比其他 zk-SNARK 构造要快得多。此外,Groth16 的证明大小相对较小,这意味着在区块链上需要传输的数据更少。这对于 DeGate 非常重要,因为它有助于降低在以太坊区块链上处理交易所需的 gas 成本;另外,为了进一步降低验证等过程的成本,可以结合 PLONK 方案去提高验证阶段的性能
  • 可扩展性:为了支持更多的功能,实现可更新的电路结构和快速迭代,Degate 也将会采用 Halo2 等在多样化任务下更加强大先进的零知识证明方案,在保护用户隐私和资产安全的基础上降低交易成本和满足更多需求


总结


本文对 DeGate 协议及其基础的 Groth16 证明系统进行了深入分析,解释了 DeGate 如何利用 Groth16 证明系统创建安全高效的去中心化交易所平台。重点介绍了 DeGate 架构的各个组成部分,清晰阐述了 DeGate 采用的零知识证明技术。

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

DeGate
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开