零知识证明(ZK proofs)正引领着web3领域的创新潮流。这一技术已在Polygon的zkEVM[1]和Polygon ID[2]等产品中得以运用,不仅赋予以太坊可验证的扩展性,同时还实现了身份验证而不泄露个人隐私信息。
一句话概括:零知识证明允许你在证明一件事的真实性时,无需揭示该事物本身的任何信息,例如在未提供完整护照信息的情况下就能证明自己的成年身份。零知识证明是如何运作的呢?
零知识证明涉及三方参与:
证明者:意图证明某个声明的人。
验证者:试图确认声明真实性的人。
颁发者(可选):向证明者发放凭证(如许可证)的第三方,验证者信任该颁发者的证明。
举例来说,你想在一个网站上证明自己已满18岁,却又不�干洗ふ�照片。这里涉及的角色包括:
证明者:你自己,意图证明已达合法年龄。
验证者:网站所有者,需确认你是否达龄。
颁发者:发放护照的政府,其出具的文件被视为年龄证明的可靠来源。
通常,我们需要上传护照的全屏截图给网站以证明成年身份,然而这无疑增加了个人信息泄露的风险。
以Stephen[3]提出的海绵宝宝为例,海绵宝宝想证明自己的名字就是“海绵宝宝”,但为此不得不向验证者(比如一条警察鱼)出示含有诸如出生日期、住址、性别等敏感信息的驾驶证。
但如果海绵宝宝能以某种方式仅证明其名字,或我们能以类似的方式证明已满18岁,而无需过多暴露个人信息,那将会是非常有益的。这就是零知识证明在现实世界中创造巨大价值的典型案例。借助零知识证明,我们现在可以向验证者证明我们的一部分身份(或任何内容),无需透露任何身份信息或支撑材料。
这样做的好处在于,我们无需把敏感的个人信息交给第三方存储于易受攻击和泄露的数据库中,而如今,我们在注册大多数网站时往往面临着这样的风险。
那么,究竟如何在不泄露任何内容的前提下证明某事属实呢?要深入了解这个问题,我们得探究零知识证明的基本构成。
在构建零知识证明时,主要分为两类:
交互式
非交互式
在web3领域,我们关注的是非交互式证明,不过先来简要了解一下交互式证明的概念。
设想一个环形山洞,其中一扇门需要用密码开启。作为证明者,你要向朋友(验证者)证明你掌握了秘密密码(即“见证人”),但不能告诉他们实际密码。
你不希望透露密码,只需证明你知道它。你随机进入山洞一侧,然后在对方视线之外。
此刻,你的朋友不知道你身处山洞的那一边。作为挑战,他们会叫你从A侧或B侧离开洞口。
在这个简单的场景中,两种情况各占50%的可能性:
1. 你处于A侧,因此需要密码才能通过大门到达B侧。
2. 你处于B侧,无需密码即可直接离开。
仅靠一次这样的挑战不足以确保你掌握密码,因此你需要多次应对其提出的挑战,直至验证者确信你具备见证人(密码)的知识。
这里的交互性意味着证明者和验证者之间需要多次交流互动:验证者提出“挑战”,证明者作出“回应”。这个过程不断重复,直到验证者对证明者拥有见证人的知识表示满意。
交互式证明的局限性在于需要证明者和验证者之间多次交互沟通,效率低下,并且不适合区块链环境。此外,交互式证明仅限于验证者一方独立验证,其他人无法信赖此类证据。
非交互式零知识证明仅需一次从证明者到验证者的通信。证明者利用特定算法计算出零知识证明并发送给验证者,后者用另一套算法进行核验。
非交互式证明的另一个优势在于任何人都可以进行独立验证,这意味着不仅验证者可以从其角度验证证据,而且每个人都可以自行验证——这对区块链尤其适用。
用于生成和验证这些证明的“算法”类型各异,而在区块链环境中,通常采用两种零知识证明系统:ZK-SNARK和ZK-STARK。
ZK-SNARK的含义是零知识简洁非交互式知识论证。
ZK:现在你应该猜到了,这意味着零知识。
简洁:证明小巧,可快速被验证者核实。
非交互式:我们前面已经讲过了,证明者与验证者之间只需一轮通信。
论证:理论上来说,欺骗系统几乎是不可能的。
(的)知识:如果不接触秘密信息(见证人),就无法构造出知识。
ZK-SNARKs利用名为椭圆曲线配对[6]的加密原语来进行证明的创建和验证(本文不深入讨论数学部分)。
需要注意的是,ZK-SNARK在初始化阶段,证明者和验证者必须就一个“共享密钥”达成一致,也就是公共参考字符串(CRS)。任何拥有这个共享密钥的人都能验证这些证明。这种共享密钥使得ZK-SNARK成为可能,但也成为它的潜在弱点,因为它创建了一个所谓“可信环境”。生成CRS的值(有时被称为“有害废物”)需要在CRS生成后立即销毁。否则,恶意证明者有可能计算出无效证明,因此用户必须信任这些值已被销毁。
另外,ZK-SNARK并不具有抗量子安全性,这意味着它们将来可能容易受到量子计算机的攻击,虽然未来或许可以通过升级来获得抗量子能力。
ZK-STARK意指零知识可扩展透明知识论证。
可扩展:它们并非简洁型,而是可扩展的;这意味着相比于ZK-SNARK,它们可以更高效地生成和验证更多数量的见证人的证明。
透明:不需要可信设置。它们依赖于可用于公众验证的随机性来生成共享密钥。
相比椭圆曲线,ZK-STARK使用多项式[7]进行操作。对此,Vitalik Buterin撰写了一篇三部曲系列文章深入探讨该主题:[8], [9], [10]。
ZK-STARK解决了与ZK-SNARK相关的两个问题:
1. 不需要“可信环境”。
2. 显示出后量子安全性,这意味着它们在未来不太可能容易受到量子计算机的攻击。
现在我们了解了零知识证明的工作原理以及在web3世界中常见的两种ZKP形式,接下来我们将讨论其中一个基于ZKP的最新创新应用——zkEVM(零知识以太坊虚拟机)。
zkEVM有多种形式,正如Vitalik在他的文章《不同类型的ZK-EVM》[11]中所述。本文引用的是Polygon zkEVM[12]的具体案例。
zkEVM旨在在保持安全、去中心化和EVM兼容的同时提高以太坊区块链的扩展性。具体实现过程较为复杂,但基本原理与我们此前讨论的内容相似。如同所有的ZKP系统,其中涉及到:
证明者:生成一组交易有效性的ZK证明,代表用户提交的交易。
验证者:在以太坊主网上部署的Polygon zkEVM智能合约担任验证者的角色。
请参阅以下简化版Polygon zkEVM中的数据流图表,便于更好地理解流程:
提交交易:作为用户,你可以像往常使用其他EVM链(例如以太坊)一样提交交易,通过签名并发送JSON RPC交易请求。
批量交易:排序器节点会选择并将交易批量合并成一个,然后提交给存储在以太坊主网(以及Goerli测试网上一个单独实例)上的Polygon zkEVM智能合约。
验证交易:使用ZKP,Polygon zkEVM智能合约充当验证者,
文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系多特删除。(联系邮箱:[email protected])
近期热点