zkVM零知识证明是什么?一文详解zkVM

时间:2024-06-06  分类:电子


什么是zkVM零知识证明?在未来5年内,我们将像谈论区块链协议的应用一样谈论零知识协议的应用。过去几年的突破所释放的潜力将席卷加密主流。 EspressoSystemsCSOJill,2021年5月


自2021年以来,零知识证明(ZK)格局已经演变成一个由跨多个领域的原语、网络和应用程序组成的多样化生态系统。然而,尽管ZK在逐渐发展,ZK驱动的rollup(如Starknet和zkSyncEra)的推出标志着该领域的最新进展,但对于ZK用户和整个加密领域来说,ZK的绝大部分仍然是一个谜。


但时代在变。我们认为,零知识加密是一种强大的、普适工具,可用于扩展以及保护软件安全。简单地说,ZK是加密大规模采用的桥梁。再次引用Jill的话,无论是web2还是web3,任何涉及到零知识证明(ZKP)的东西都将创造出巨大的价值(包括基础价值和投机价值)。加密领域最优秀的人才正在努力更新迭代,使ZK经济可行、生产就绪。即便如此,在我们设想的模式成为现实之前,行业需要做的还有很多。


将ZK采用与比特币采用进行比较,比特币从边缘爱好者论坛的互联网货币演变为贝莱德(BlackRock)批准的数字黄金的一个原因就是,开发者和社区创作内容的激增,培养了人们的兴趣。就目前而言,ZK存在于气泡中的气泡中。信息是分散极化的,文章里要么充斥着晦涩难懂的术语,要么过于外行,除了重复使用的例子之外,没有传达任何有意义的信息。似乎所有人(专家和外行)都知道什么是零知识证明,但没有人能描述它实际上是如何工作的。


作为贡献于零知识范式的团队之一,我们希望揭开我们工作的神秘面纱,帮助更广泛的受众建立理解和分析ZK系统和应用程序的规范基础,以推动相关各方之间的教育宣传和讨论,使相关信息得以传播扩散。


今天非常好学习小编给我们介绍零知识证明和零知识虚拟机的基础知识,对zkVM的运作过程进行高层次的总结,最后对zkVM的评估标准进行分析。喜欢的朋友不要错过哦!


1、零知识证明基础知识


什么是零知识证明(ZKP)?


简而言之,ZKP使一方(prover证明者)能够向另一方(verifier验证者)证明他们知道某事物,但无需透露该事物的具体内容或任何其他信息。更具体地说,ZKP证明了对一段数据或对计算结果的认知,而不透露该数据或输入内容。创建零知识证明的过程涉及一系列数学模型,将计算结果转换为证明代码成功执行的在其他情况下无意义的信息,这些信息将于稍后被验证。


在某些情况下,验证经过多轮代数转换和密码学构建的证明所需的工作量比运行计算所需的工作量要少。正是这种安全性和可扩展性的独特组合使零知识加密成为如此强大的工具。


zkSNARK:零知识简洁非交互式知识论证


 依赖于初始(受信或不受信)设置过程来建立用于验证的参数


 要求证明者和验证者之间至少有一次交互


 证明较小,易于验证


 像zkSync、Scroll和Linea这样的rollup使用基于SNARK的证明


zkSTARK:零知识可扩展透明知识论证


 无需受信设置


 通过使用可公开验证的随机性来创建无需信任的可验证系统,即生成可证明的随机参数来进行证明和验证,从而提供高透明度。


 高度可扩展,因为它们可以快速(并非总是)生成和验证证明,即使底层见证(数据)很大。


 证明者和验证者之间不需要交互


 代价是STARK会生成更大的证明,这比SNARK更难验证。


 证明比一些zkSNARK证明更难验证,但相对于其他证明更易验证。


 Starknet和zkVM(如Lita、RiscZero和SuccinctLabs)都使用STARK。


(注意:Succinctbridge使用SNARK,但SP1是基于STARK的协议)


值得注意的是,所有的STARK都是SNARK,但并非所有的SNARK都是STARK。


2、什么是zkVM


虚拟机(VM)是运行程序的程序。在上下文中,zkVM是一种虚拟计算机,它被实现为生成零知识证明的系统、通用电路或工具,用于为任何程序或计算生成zkVM。


zkVM不要求学习复杂的数学和密码学来设计和编码ZK,让任何开发人员都可以执行用他们喜欢的语言编写的程序并生成ZKP(零知识证明),从而更容易与零知识集成和交互。从广义上讲,大多数zkVM都意味着包括附加到执行程序的虚拟机的编译器工具链和证明系统,而不仅仅是虚拟机本身。下面,我们总结了zkVM的主要组件及其功能:


每个组件的设计和实现都由zkVM的证明(SNARKs或STARKs)和指令集架构(ISA)的选择来控制。传统上,ISA指定了CPU的能力(数据类型、寄存器、内存等)以及CPU在执行程序时执行的操作顺序。在上下文中,ISA确定可由VM解释和执行的机器码。选择ISA可以在zkVM的可访问性和可用性,以及证明生成过程的速度和效率方面产生根本性的差异,并支持任何zkVM的构建。


下面是一些zkVM及其组件的示例,仅供参考。


现在,我们将重点关注每个组件之间的高层交互,以便在后面的文章中提供一个框架,用于理解代数和加密过程以及zkVM的设计权衡。


3、抽象的zkVM流程


下图是一个抽象的、一般化的zkVM流程图,当程序在zkVM组件之间移动时,进行格式(输入/输出)的拆分和分类。


zkVM的流程一般如下:


1)编译阶段


编译器首先将使用传统语言(C、C++、Rust、Solidity)编写的程序编译成机器码。机器码的格式由所选的ISA来决定。


2VM阶段


VM执行机器码并生成执行跟踪,这是底层程序的系列步骤。它的格式由算法的选择和多项式约束集来决定。常见的算法方案包括Groth16中的R1CS、halo2中的PLONKish算法以及plonky2和plonky3中的AIR。


3)验证阶段


证明者接收跟踪并将其表示为一组受一组约束限制的多项式,本质上是通过数学映射事实将计算转换为代数。


证明者使用多项式承诺方案(PCS)提交这些多项式。承诺方案是一个协议,它允许证明者创建一些数据X的指纹,这被称为对X的承诺,然后使用对X的承诺来证明关于X的事实而同时不泄露X的内容。PCS就是指纹,计算约束的预处理简明版本。这允许证明者使用验证者在接下来的步骤中提出的随机值来证明有关计算的事实,现在用多项式方程来表示。


证明者运行一个多项式交互Oracle证明(PIOP)来证明所提交的多项式代表了满足给定约束条件的执行轨迹。PIOP是一个交互式证明协议,其中证明者向多项式发送承诺,验证者用随机字段值响应,证明者提供对多项式的评估,类似于使用随机值求解多项式方程以概率方式来说服验证者。


Fiat-Shamir启发式的应用;证明者以非交互模式运行PIOP,在这种模式下,验证者的行为仅限于发送匿名随机挑战点。在密码学中,Fiat-Shamir启发式将交互式知识证明转换为用于验证的数字签名。这一步加密了证明并使其成为零知识证明。


证明者必须说服验证者,关于它发送给验证者的多项式承诺,声称的多项式评估是正确的。为了做到这一点,证明者产生一个evaluation或opening证明,由多项式承诺方案(指纹)提供。


4)验证者阶段


验证者通过遵循证明系统的验证协议来检查证明,要么使用约束,要么使用承诺。验证者根据证明的有效性接受或拒绝结果。


总之,zkVM证明可以证明,对于给定的程序、给定的结果和给定的初始条件,存在一些输入,使程序从给定的初始条件执行产生给定的结果。我们可以将该语句与流程结合起来,得到关于zkVM的以下描述。


zkVM证明将证明,对于给定的VM程序和给定的输出,存在一些输入,导致给定的程序在VM上执行时产生给定的输出。


4、评估zkVM


我们评估zkVM的标准是什么?换句话说,我们应该在什么情况下说一个zkVM比另一个更好?实际上,答案取决于用例。


Lita的市场研究表明,对于大多数商业用例,在速度、效率和简洁性之间,最重要的属性要么是速度,要么是内核时间效率,这取决于应用程序。一些应用对价格敏感,希望将证明过程优化为低能耗和低成本的,对于这些应用而言,内核时间效率可能是最重要的优化指标。其他应用程序,特别是金融或交易相关的应用程序,对延迟非常敏感,需要优化速度。


大多数公开的性能比较只关注速度,速度当然很重要,但却不是性能的全面衡量。还有一些重要的属性可以衡量zkVM的可靠性,其中大多数都达不到生产标准,即使是市场领先的老牌企业。


我们建议按照以下标准对zkVM进行评估,并将其分为两小类:


基线:用于度量zkVM的可靠性


-->> 1/2 文章未完,请继续阅读

以上就是zkVM零知识证明是什么?一文详解zkVM的全部内容,望能这篇zkVM零知识证明是什么?一文详解zkVM可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。