Lesson 3

储备金如何与zk-SNARK技术结合?

本章将讲解什么是zkSANRK技术以及储备金是如何利用zk-SANRK技术得到优化的

背景知识

零知识证明(Zero-Knowledge Proof,ZKP)是一种密码学技术,最早由由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初的一篇名为《The Knowledge Complexity Of Interactive Proof Systems》的论文中提出。在该文中,它是作为一个理论模型被构想出来,解决的是在不透露证据的情况下如何验证数学陈述的问题。这一概念在学术界引起了广泛关注,因为它挑战了传统加密技术的界限,并为处理敏感信息提供了全新的方法。
随着时间的推移,ZKP从一个抽象的理论构想逐步演变成具体的协议,它们能够被集成进各种应用中。在2010年,Groth发表了一篇名为《Short Pairing-based Non-interactive Zero-Knowledge Arguments》的论文,这篇论文成为了ZKP中重要的解决方案zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)的理论先驱文章。零知识证明在应用上最重要的进展就是 2015 年 Z-cash 使用的零知识证明系统,实现了对交易及金额隐私的保护,后来发展到 zk-SNARK 和智能合约相结合,zk-SNARK 进入了更为广泛的应用场景。

zk-SANRK的基本原理

传统的ZKP需要的遵守的原则有三点:

  • 完备性(Completeness,也译作完整性) - 如果陈述是真实的,诚实的证明者总能够通过验证者的检验。
  • 健壮性(Soundness,也译作合理性) - 如果陈述是假的,任何欺诈的证明者都将只有微小的概率能够误导验证者相信该陈述是真的。
  • 零知识性(Zero-knowledge) - 如果陈述是真实的,验证者除了得知该陈述是正确外,将无法学习任何其他的信息。换句话说,验证过程不会泄露任何能够用于构造证明的信息。

ZKP的原理可用简单的例子来理解:如果我需要向A证明我拥有B的电话号码,我不需要直接把B的电话号码告诉B,而是可以直接通过拨打B的电话,在打通后即可证明我确实拥有B的电话号码,这个过程并不会泄露B的号码信息。

而zk-SNARK则是在此基础进一步升级,其具有以下特点:

  • 零知识:验证者不能从证明中获得任何有用的信息;
  • 简洁:证明的大小很小(通常只有几十字节),验证时间很短(通常只需几毫秒);
  • 非交互式:证明者只需要发送一次证明给验证者,无需进一步沟通;
  • 可信参数:证明者和验证者都需要使用一个由可信第三方生成的CRS(公共参考字符串),这个CRS可能包含一些敏感信息,如果泄露或篡改,可能会导致系统的安全性受到威胁。

在Groth的论文中, 他提出基于配对的非交互式零知识论证方法将一个计算问题转化为一个二次算术程序(QAP),然后利用椭圆曲线密码学和哈希函数构造一个有效的证明。后来的zk-SNARK一般在设计时分为四个步骤:

  • 系统设置:由一个可信第三方执行,生成一个CRS,包括一个用于生成证明的密钥 pk 和一个用于验证证明的密钥 vk。这个过程只需要执行一次,CRS可以被多次重用。
  • 问题编码:将一个计算问题 f(x) = y 转化为一个 QAP 的形式 A(x)·B(x) = C(x)·Z(x),其中 A(x)、B(x)、C(x) 是由 f 的电路结构决定的多项式,Z(x) 是一个固定的多项式,x 是一个随机选择的点,y 是 f 的输出。这个过程可以由证明者或验证者执行,或者由第三方提前完成。
  • 证明生成:由证明者执行,使用 pk、x 和 f 的输入 w 生成一个证明 \pi ,证明他知道一个满足 f(w) = y 的 w,而不透露 w 的具体值。这个过程涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终生成一个由几个椭圆曲线点和一个哈希值组成的 \pi 。
  • 证明验证:由验证者执行,使用 vk、x、y 和 \pi 进行验证,判断证明者是否真的知道一个满足 f(w) = y 的 w。这个

过程也涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终得到一个布尔值,表示证明是否有效。
举个简单的例子理解就是,假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但你不想揭露宝藏图的内容或宝藏的实际位置。如果你使用zk-SNARK技术的话,你需要制作了一份藏宝图的复杂拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,这些标记用来证明你的拼图片段是真实的。

交易所储备金与zk-SANRK的结合

上文中提到了zk-SNARK是允许设置公共参考字符串的,即可以在运行的电路上设置约束,以Gate储备金为例,其在电路中设置了五个核心约束:

①用户净资产插入Merkle树之前,用户ID对应的节点为空。
②根据用户的资产列表及每种资产的价格计算用户的总资产/负债,总资产必须大于总负债。
③将用户的资产/负债加到交易所的资产/负债中。
④使用用户ID、总资产/负债、资产列表计算用户状态哈希,将用户状态插入Merkle树得到新的Merkle Root。
⑤前一个用户在创建用户的操作之前,树的根节点的哈希值必须与后一个用户创建用户的操作之后的树的根节点的哈希值相等。
(①操作可避免节点数据不真实,②操作可避免负值账户,⑤操作可保证操作前后,用户数据不被更改。)

这样就可以保证负值问题的解决。交易所数据只需要通过电路后就会自动进行约束检查,然后得到资产数。不过这种方案需要一定的运算能力和硬件条件。在一台32核、运行内存128G的机器上计算1,000万用户的资产证明需要15天。储备金证明的计算可以并行化,如果是10台机器,则只需要1.5天。

小结

通过设置相关的约束,zk-SNARK可以避免负值问题的出现,同时更好的保护用户的隐私安全。Gate现在的储备金证明已经可以针对100+币种进行储备金率证明,只需要点击链接即可进入储备金页面查看。在下一节中,我们将会带您3min内验证您的资产安全。

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 3

储备金如何与zk-SNARK技术结合?

本章将讲解什么是zkSANRK技术以及储备金是如何利用zk-SANRK技术得到优化的

背景知识

零知识证明(Zero-Knowledge Proof,ZKP)是一种密码学技术,最早由由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初的一篇名为《The Knowledge Complexity Of Interactive Proof Systems》的论文中提出。在该文中,它是作为一个理论模型被构想出来,解决的是在不透露证据的情况下如何验证数学陈述的问题。这一概念在学术界引起了广泛关注,因为它挑战了传统加密技术的界限,并为处理敏感信息提供了全新的方法。
随着时间的推移,ZKP从一个抽象的理论构想逐步演变成具体的协议,它们能够被集成进各种应用中。在2010年,Groth发表了一篇名为《Short Pairing-based Non-interactive Zero-Knowledge Arguments》的论文,这篇论文成为了ZKP中重要的解决方案zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)的理论先驱文章。零知识证明在应用上最重要的进展就是 2015 年 Z-cash 使用的零知识证明系统,实现了对交易及金额隐私的保护,后来发展到 zk-SNARK 和智能合约相结合,zk-SNARK 进入了更为广泛的应用场景。

zk-SANRK的基本原理

传统的ZKP需要的遵守的原则有三点:

  • 完备性(Completeness,也译作完整性) - 如果陈述是真实的,诚实的证明者总能够通过验证者的检验。
  • 健壮性(Soundness,也译作合理性) - 如果陈述是假的,任何欺诈的证明者都将只有微小的概率能够误导验证者相信该陈述是真的。
  • 零知识性(Zero-knowledge) - 如果陈述是真实的,验证者除了得知该陈述是正确外,将无法学习任何其他的信息。换句话说,验证过程不会泄露任何能够用于构造证明的信息。

ZKP的原理可用简单的例子来理解:如果我需要向A证明我拥有B的电话号码,我不需要直接把B的电话号码告诉B,而是可以直接通过拨打B的电话,在打通后即可证明我确实拥有B的电话号码,这个过程并不会泄露B的号码信息。

而zk-SNARK则是在此基础进一步升级,其具有以下特点:

  • 零知识:验证者不能从证明中获得任何有用的信息;
  • 简洁:证明的大小很小(通常只有几十字节),验证时间很短(通常只需几毫秒);
  • 非交互式:证明者只需要发送一次证明给验证者,无需进一步沟通;
  • 可信参数:证明者和验证者都需要使用一个由可信第三方生成的CRS(公共参考字符串),这个CRS可能包含一些敏感信息,如果泄露或篡改,可能会导致系统的安全性受到威胁。

在Groth的论文中, 他提出基于配对的非交互式零知识论证方法将一个计算问题转化为一个二次算术程序(QAP),然后利用椭圆曲线密码学和哈希函数构造一个有效的证明。后来的zk-SNARK一般在设计时分为四个步骤:

  • 系统设置:由一个可信第三方执行,生成一个CRS,包括一个用于生成证明的密钥 pk 和一个用于验证证明的密钥 vk。这个过程只需要执行一次,CRS可以被多次重用。
  • 问题编码:将一个计算问题 f(x) = y 转化为一个 QAP 的形式 A(x)·B(x) = C(x)·Z(x),其中 A(x)、B(x)、C(x) 是由 f 的电路结构决定的多项式,Z(x) 是一个固定的多项式,x 是一个随机选择的点,y 是 f 的输出。这个过程可以由证明者或验证者执行,或者由第三方提前完成。
  • 证明生成:由证明者执行,使用 pk、x 和 f 的输入 w 生成一个证明 \pi ,证明他知道一个满足 f(w) = y 的 w,而不透露 w 的具体值。这个过程涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终生成一个由几个椭圆曲线点和一个哈希值组成的 \pi 。
  • 证明验证:由验证者执行,使用 vk、x、y 和 \pi 进行验证,判断证明者是否真的知道一个满足 f(w) = y 的 w。这个

过程也涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终得到一个布尔值,表示证明是否有效。
举个简单的例子理解就是,假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但你不想揭露宝藏图的内容或宝藏的实际位置。如果你使用zk-SNARK技术的话,你需要制作了一份藏宝图的复杂拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,这些标记用来证明你的拼图片段是真实的。

交易所储备金与zk-SANRK的结合

上文中提到了zk-SNARK是允许设置公共参考字符串的,即可以在运行的电路上设置约束,以Gate储备金为例,其在电路中设置了五个核心约束:

①用户净资产插入Merkle树之前,用户ID对应的节点为空。
②根据用户的资产列表及每种资产的价格计算用户的总资产/负债,总资产必须大于总负债。
③将用户的资产/负债加到交易所的资产/负债中。
④使用用户ID、总资产/负债、资产列表计算用户状态哈希,将用户状态插入Merkle树得到新的Merkle Root。
⑤前一个用户在创建用户的操作之前,树的根节点的哈希值必须与后一个用户创建用户的操作之后的树的根节点的哈希值相等。
(①操作可避免节点数据不真实,②操作可避免负值账户,⑤操作可保证操作前后,用户数据不被更改。)

这样就可以保证负值问题的解决。交易所数据只需要通过电路后就会自动进行约束检查,然后得到资产数。不过这种方案需要一定的运算能力和硬件条件。在一台32核、运行内存128G的机器上计算1,000万用户的资产证明需要15天。储备金证明的计算可以并行化,如果是10台机器,则只需要1.5天。

小结

通过设置相关的约束,zk-SNARK可以避免负值问题的出现,同时更好的保护用户的隐私安全。Gate现在的储备金证明已经可以针对100+币种进行储备金率证明,只需要点击链接即可进入储备金页面查看。在下一节中,我们将会带您3min内验证您的资产安全。

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.