零知识证明(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 进入了更为广泛的应用场景。
传统的ZKP需要的遵守的原则有三点:
ZKP的原理可用简单的例子来理解:如果我需要向A证明我拥有B的电话号码,我不需要直接把B的电话号码告诉B,而是可以直接通过拨打B的电话,在打通后即可证明我确实拥有B的电话号码,这个过程并不会泄露B的号码信息。
而zk-SNARK则是在此基础进一步升级,其具有以下特点:
在Groth的论文中, 他提出基于配对的非交互式零知识论证方法将一个计算问题转化为一个二次算术程序(QAP),然后利用椭圆曲线密码学和哈希函数构造一个有效的证明。后来的zk-SNARK一般在设计时分为四个步骤:
过程也涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终得到一个布尔值,表示证明是否有效。
举个简单的例子理解就是,假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但你不想揭露宝藏图的内容或宝藏的实际位置。如果你使用zk-SNARK技术的话,你需要制作了一份藏宝图的复杂拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,这些标记用来证明你的拼图片段是真实的。
上文中提到了zk-SNARK是允许设置公共参考字符串的,即可以在运行的电路上设置约束,以Gate储备金为例,其在电路中设置了五个核心约束:
①用户净资产插入Merkle树之前,用户ID对应的节点为空。
②根据用户的资产列表及每种资产的价格计算用户的总资产/负债,总资产必须大于总负债。
③将用户的资产/负债加到交易所的资产/负债中。
④使用用户ID、总资产/负债、资产列表计算用户状态哈希,将用户状态插入Merkle树得到新的Merkle Root。
⑤前一个用户在创建用户的操作之前,树的根节点的哈希值必须与后一个用户创建用户的操作之后的树的根节点的哈希值相等。
(①操作可避免节点数据不真实,②操作可避免负值账户,⑤操作可保证操作前后,用户数据不被更改。)
这样就可以保证负值问题的解决。交易所数据只需要通过电路后就会自动进行约束检查,然后得到资产数。不过这种方案需要一定的运算能力和硬件条件。在一台32核、运行内存128G的机器上计算1,000万用户的资产证明需要15天。储备金证明的计算可以并行化,如果是10台机器,则只需要1.5天。
通过设置相关的约束,zk-SNARK可以避免负值问题的出现,同时更好的保护用户的隐私安全。Gate现在的储备金证明已经可以针对100+币种进行储备金率证明,只需要点击链接即可进入储备金页面查看。在下一节中,我们将会带您3min内验证您的资产安全。
零知识证明(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 进入了更为广泛的应用场景。
传统的ZKP需要的遵守的原则有三点:
ZKP的原理可用简单的例子来理解:如果我需要向A证明我拥有B的电话号码,我不需要直接把B的电话号码告诉B,而是可以直接通过拨打B的电话,在打通后即可证明我确实拥有B的电话号码,这个过程并不会泄露B的号码信息。
而zk-SNARK则是在此基础进一步升级,其具有以下特点:
在Groth的论文中, 他提出基于配对的非交互式零知识论证方法将一个计算问题转化为一个二次算术程序(QAP),然后利用椭圆曲线密码学和哈希函数构造一个有效的证明。后来的zk-SNARK一般在设计时分为四个步骤:
过程也涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终得到一个布尔值,表示证明是否有效。
举个简单的例子理解就是,假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但你不想揭露宝藏图的内容或宝藏的实际位置。如果你使用zk-SNARK技术的话,你需要制作了一份藏宝图的复杂拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,这些标记用来证明你的拼图片段是真实的。
上文中提到了zk-SNARK是允许设置公共参考字符串的,即可以在运行的电路上设置约束,以Gate储备金为例,其在电路中设置了五个核心约束:
①用户净资产插入Merkle树之前,用户ID对应的节点为空。
②根据用户的资产列表及每种资产的价格计算用户的总资产/负债,总资产必须大于总负债。
③将用户的资产/负债加到交易所的资产/负债中。
④使用用户ID、总资产/负债、资产列表计算用户状态哈希,将用户状态插入Merkle树得到新的Merkle Root。
⑤前一个用户在创建用户的操作之前,树的根节点的哈希值必须与后一个用户创建用户的操作之后的树的根节点的哈希值相等。
(①操作可避免节点数据不真实,②操作可避免负值账户,⑤操作可保证操作前后,用户数据不被更改。)
这样就可以保证负值问题的解决。交易所数据只需要通过电路后就会自动进行约束检查,然后得到资产数。不过这种方案需要一定的运算能力和硬件条件。在一台32核、运行内存128G的机器上计算1,000万用户的资产证明需要15天。储备金证明的计算可以并行化,如果是10台机器,则只需要1.5天。
通过设置相关的约束,zk-SNARK可以避免负值问题的出现,同时更好的保护用户的隐私安全。Gate现在的储备金证明已经可以针对100+币种进行储备金率证明,只需要点击链接即可进入储备金页面查看。在下一节中,我们将会带您3min内验证您的资产安全。