当前位置:主页 > 列表页 > 正文

一文了解ZCash背后的零知识证明

2023-06-04 10:01 | 出处: odaily

在复杂的密码学领域,零知识证明为一项看似矛盾的任务提供了独特的解决方案:在不透露信息本身的情况下证明知道某一信息。这种加密方法涉及两方:证明者及验证者。证明者的目的是证明他们拥有某一信息(我们称之为 x),而不透露任何关于 x 本身的数据。验证者则从交流中了解到的只是证明者拥有这种知识的简单事实。最重要的是,验证者并没有获得关于 x 的额外信息。

比如当小零与小十在玩密室逃脱,此时小零告诉小十他已经破解了某“宝箱”的密码。但是小零不愿意直接分享现成的“答案”,也不愿当着小十的面将宝箱打开。那么怎样证明给小十,他真的破解了迷题并且知道宝箱密码呢?

于是他让小十在一张纸上写一段只有自己知道的字符串,同时签上自己名字,将纸张从宝箱的缝隙中塞了进去。

随后小零打开宝箱取出了小十放进去的纸张,并展示给了小十看,小十核对字符串和签名无误。这证明了小零确实知道宝箱密码,而且这张纸确实是宝箱里拿出来的。

该解密过程既没有被小十知晓,同时小零又证明了他已破解了宝箱密码。

零知识证明

密码学中,零知识证明(Zero Knowledge Proof,也称 ZKP)或零知识协议是一种方法,该方法可令证明者在不透露信息本身或其他任何信息的情况下,让验证者相信或证明给验证者某个陈述或论断的真实性。

零知识证明最初是于由麻省理工教授 Shafi Goldwasser、Silvio Micali 以及密码学大师 Charles Rockoff 三位作者在《The Knowledge Complexity of Interactive Proof Systems》论文中提出的。该一算法概念为现代密码学奠定了一定基础。

零知识证明有两个额外的属性:简明性和零知识简明性允许验证者接受一个大型计算的正确性,而无需自己计算该语句或陈述。而零知识保证了没有任何关于输入的数据被泄露。

零知识证明对于确保许多加密协议的隐私和安全至关重要。它们是防止潜在信息泄露的保障,是 Crypto 世界的隐形防弹衣。知识的应用可延伸至不同领域,包括区块链技术和安全认证系统,其中敏感数据的保护是最重要的。

应用领域广泛

区块链及加密技术:像 Zcash 这样的区块链技术使用了零知识证明来保护交易隐私。一个人可以证明他们有足够的 Cypto 货币来进行交易但又不透露其资金的确切数额。这保证了隐私的同时确保了交易的完整性。

身份验证认证:零知识证明还可以在不透露不必要的信息同时,用于确认身份。例如,一个人可以在不提供确切的出生日期的情况下证明他们已经超过 18 岁,或者在不分享密码等敏感数据的情况下证明他们的身份。这最大限度地减少了盗取身份或未经授权访问的风险。

安全多方计算(SMPC):零知识证明可以促进多方之间的复杂互动,其中每一方都可以证明他们遵循商定的协议,而不透露其输入的具体内容。这在如保护隐私的数据挖掘、安全投票系统等诸多方面都十分有效。

网络安全:零知识证明可以提供改进的安全协议,如安全密码政策。其可以验证用户提出的密码是否符合某些安全标准,而不让服务器知晓或记录实际密码。因为密码不会被储存在任何地方,因此可以防止潜在的违规行为。

保护隐私的同时共享数据:零知识证明可以用来证明某些数据符合特定的要求,而不透露数据本身,这在医疗或金融等领域尤其重要。这些领域对数据隐私的规定很严格,但以安全、保护隐私的方式分享信息或许会带来巨大收益,比如促进医疗事业的发展等等。

零知识证明已经在区块链中释放了新的技术可能性。这可以从 ZKSync 和 Polygon 的 zkEVM 等各种 Layer 2 中看到。然而,这仅仅是零知识证明创建的区块链的一个子集。

如何表示一个证明

在这一节以及文章的其余部分,我们将重点讨论为基于 PLONK 证明系统构建的证明。

PLONK是一种零知识证明系其全称是

“Permutations over Lagrange-bases for Oecumenical Noninteractive arguments of Knowledge”,即“基于拉格朗日基数的全局非交互式知识证明排列”。

从本质上讲,PLONK 是一个通用的、可更新的加密证明系统,这一创新允许在区块链系统和其他分布式网络中进行有效的验证和扩展。

PLONK 背后的想法是构建一个通用的且可更新的证明系统。在零知识证明系统的背景下,“通用”意味着它可以被用于任何类型的计算;“可更新”则意味着加密参考字符串(用于生成和验证证明的一段数据)可以随着时间的推移安全地更新。

PLONK 因其高效和简单性而引人注目,也因此成为了对安全、私密交易系统有需求的项目及公司的热门选择。与其他系统相比,它每个 gate(计算的基本单位,我们下文统称“门”)使用的约束条件更少,这使得计算速度更快且可扩展性更高。

Vitalik Buterin 已经发表了关于 PLONK 的更全面的描述。【复制下链接至浏览器即可查看原文 https://vitalik.ca/general/2019/09/22/plonk.html】

证明

在证明某个陈述前,我们先将该陈述用电路表示。一个电路将计算中的值与另外两种类型的数据一起编码:

1. 操作:比如对输入数据进行的乘法和加法计算
2. 操作执行的顺序

为了编码这些数据,PLONKish 电路会被表示为一组向量和约束条件。约束条件是向量中单元必须遵守的关系,其中约束类型有:门约束和复制约束,他们分别表示电路中的操作和操作的顺序。

采用不同的门和电路架构,有多种方法来表达电路。

您可能感兴趣的文章:

相关文章