自 2021 年以来,零知识领域 (ZK) 已发展成为一个涵盖多个领域的原语、网络和应用程序的多样化生态系统。我们认为零知识加密是一种功能强大、普遍适用的工具,可用于扩展和保护任何软件。简而言之,零知识加密是大规模采用加密技术的桥梁。再次引用 Jill 的话,在 web2 和 web3 中,任何涉及零知识证明的东西都会创造巨大的价值(包括基本价值和投资价值)。
1. 什么是zkVM?
虚拟机 (VM) 是运行程序的程序。在上下文中,zkVM 是作为生成零知识证明的系统实现的虚拟计算机,或用于为任何程序或计算生成 ZKP 的通用电路或工具。
zkVM 消除了设计和编写 ZK 时学习复杂数学和密码学的需要,并允许任何开发人员执行用他们喜欢的语言编写的程序并生成 ZKP,从而更容易与零知识集成和交互。从广义上讲,大多数对 zkVM 的引用都隐含地包括附加到执行程序的虚拟机上的编译器工具链和证明系统,而不仅仅是虚拟机本身。下面,我们总结了 zkVM 的主要组件及其功能:
A. 编译器 Complier:
将用Rust,C,Solidity,C++编写的普通程序转换成机器码(VM可读码)
B. 虚拟机 VM:
以机器码的形式执行编译好的程序,而不显示程序的任何信息,并生成执行跟踪
C. 证明者 Prover:
使用加密技术将执行跟踪转换为零知识证明,并将输出缩小为几千字节,作为程序执行的SNARK或STARK证明
D. 验证者 Verifier:
使用证明验证已执行程序的加密结果
每个组件的设计和实现都由证明的选择(SNARK 或 STARK)和 zkVM 的指令集架构 (ISA) 决定。传统上,ISA 指定 CPU 的功能(数据类型、寄存器、内存等)以及 CPU 执行程序时执行的操作顺序。在上下文中,ISA 确定 VM 可解释和执行的机器代码。选择 ISA 可能会对 zkVM 的可访问性和可用性以及证明生成过程的速度和效率产生根本性的影响,并支撑任何 zkVM 的构建。
2. zkVM 与 zkEVM:了解主要区别
zkEVM(零知识以太坊虚拟机)是一种专门为以太坊区块链量身定制的 zkVM。它旨在使用 ZKP 执行以太坊智能合约,同时保持与以太坊虚拟机 (EVM) 的兼容性。zkEVM 的主要优势在于它能够增强以太坊的可扩展性和隐私性。通过在链下处理多个交易,然后在链上使用单一证明来证明其有效性,zkEVM 减少了以太坊主网上的计算负载并确保了用户的隐私。这使得 zkEVM 成为提高基于以太坊的应用程序和交易效率和安全性的重要工具。
zkVM 和 zkEVM 之间的关系在于它们共同使用零知识证明来提供隐私和可扩展性。虽然 zkVM 为各种区块链和应用程序提供了通用解决方案,但 zkEVM 专门针对以太坊生态系统进行了优化。这两种技术在区块链的未来中都发挥着至关重要的作用,满足了人们对私密、安全和高效的无信任交互日益增长的需求。
3. 抽象的zkVM流程
下图是 zkVM 的抽象、通用流程图,在程序通过 zkVM 组件时,根据程序的格式(输入/输出)进行拆分和分类。
zkVM 的进程流程一般如下:
编译器阶段
1. 编译器首先将用传统语言(C、C++、Rust、Solidity)编写的程序编译为机器代码。机器代码的格式由 ISA 的选择决定。
虚拟机阶段
2. VM 执行机器代码并生成执行轨迹,即底层程序的一系列步骤。其格式由算术化选择以及多项式约束集预先确定。常见的算术化方案包括Groth16中的 R1CS 、halo2中的PLONKish 算术化以及plonky2和plonky3中的 AIR 。
证明者阶段
3. 证明者接收轨迹并将其表示为一组受一组约束约束的多项式,本质上是通过以数学方式映射事实将计算转化为代数。
4. 证明者使用多项式承诺方案 (PCS) 对这些多项式做出承诺。承诺方案是一种协议,允许证明者创建某些数据 X 的指纹,这称为对 X 的承诺,然后使用对 X 的承诺在不透露 X 的情况下证明有关 X 的事实。PCS 就是指纹:计算约束的“预处理”简洁版本。这允许证明者使用验证者在以下步骤中提出的随机值来证明有关计算的事实(现在以多项式方程表示)。
5. 证明者运行多项式交互式预言证明 (PIOP),以表明已提交的多项式代表满足给定约束的执行轨迹。PIOP 是一种交互式证明协议,由一系列轮次组成,其中证明者向多项式发送承诺,验证者用随机字段值响应,证明者在这些随机值下提供多项式的评估,类似于使用随机值“求解”多项式方程以概率说服验证者。
6. 应用 Fiat-Shamir 启发式算法;证明者以非交互模式运行 PIOP,其中验证者的行为仅限于发送伪随机质询点。在密码学中,Fiat-Shamir 启发式算法将交互式知识证明转换为数字签名以供验证。此步骤对证明进行加密并使其成为零知识。
7. 证明者必须让验证者相信,相对于它发送给验证者的多项式承诺,所声称的多项式评估是正确的。为此,证明者生成“评估”或“开场”证明,该证明由多项式承诺方案(指纹)提供。
验证者阶段
8. 验证者按照证明系统的验证协议检查证明,可以使用约束或承诺。验证者根据证明的有效性接受或拒绝结果。
概括来说,zkVM 的证明可以证明,对于给定的程序,给定的结果和给定的初始条件,存在一些输入,当从给定的初始条件执行时,程序会产生给定的结果。我们可以将此陈述与流程相结合,得出以下对 zkVM 的描述。
zkVM 证明可以证明,对于给定的 VM 程序和给定的输出,存在某些输入会导致给定的程序在 VM 上执行时产生给定的输出。
4. 如何评估zkVM?
我们应该用什么标准来评估 zkVM?换句话说,什么时候我们应该说一个 zkVM 比另一个更好?说实话,答案取决于用例。
市场研究表明,对于大多数商业用例,在速度、效率和简洁性中,最重要的属性是速度或核心时间效率,具体取决于应用程序。有些应用程序对价格敏感,希望优化低能耗和低资本使用;对于这些应用程序,核心时间效率可能是最重要的优化指标。其他应用程序,特别是金融或交易相关的应用程序,对延迟敏感,希望优化速度。
大多数公开的性能比较都只关注速度,这很重要,但不是性能的整体衡量标准。还有一些重要的属性可以衡量 zkVM 的可靠性;其中大多数都达不到生产就绪标准,即使对于市场领先的现有企业来说也是如此。
我们在此建议根据以下标准对 zkVM 进行评估,并将其分为两个子集:
基线:衡量 zkVM 的可靠性
正确性
安全
信任假设
性能:衡量 zkVM 的功能
效率
速度
简洁
在评估 zkVM 是否适用于关键任务应用程序时,应将正确性和安全性视为基准。需要有足够的理由对正确性充满信心,并声称具有足够强的安全性。此外,对于应用程序来说,信任假设需要足够弱。
如果没有这些属性,zkVM 对于应用程序来说可能比无用更糟糕,因为它可能无法按规定执行并使用户面临黑客攻击和漏洞利用。
5. 基准:正确性、安全性和信任假设
i. 正确性
VM 必须按预期执行计算
证明系统必须满足其声称的安全属性
正确性由三个属性组成:
健全性:证明系统是真实的,因此它所证明的一切都是正确的。验证者拒绝虚假陈述的证明;只有当输入确实产生结果时,它才会接受计算结果。
完备性:证明系统是完备的,可以证明所有真实陈述。如果证明者声称它可以证明计算结果,那么它必须能够提供验证者接受的证明。
零知识:拥有证明并不会透露更多关于计算输入的信息,就像知道结果本身一样。
你可以有完备性而无可靠性;如果证明系统证明了一切,包括虚假性,显然它是完备的,但不可靠。相反,你可以有可靠性而无完备性;如果证明系统证明了某个程序存在,但无法证明计算,显然它是可靠的(毕竟,它从未证明过任何虚假性),但不完备。
ii. 信任假设
假设证明者和验证者诚实,从而得出 zkVM 可靠运行的结论
当 zkVM 具有信任假设时,这通常采用可信设置过程的形式。在使用证明系统生成第一个证明之前,ZK 证明系统的设置过程会运行一次,以生成一些称为“设置数据”的信息。在可信设置过程中,一个或多个人会生成一些随机性,这些随机性会被纳入设置数据中,并且需要假设其中至少有一个人删除了他们纳入设置数据的随机性。
实践中有两种常见的信任假设模型:
诚实多数信任假设是指在一组 N 个个体中,超过 N/2 的个体在与系统的某些特定交互中表现出诚信,这在区块链中很常见。
“N 中 1” 信任假设指出,在一组 N 个个体中,至少有一个人在与系统的一些特定交互中表现出诚信,这通常用于基于 MPC 的工具和应用程序。
人们普遍认为,在其他条件相同的情况下,没有信任假设的 zkVM 比需要信任假设的 zkVM 更安全。
iii. 安全性
与健全性、完整性和零知识的容忍度有关
实际上,所有三个正确性属性都具有非零容差。这意味着所有证明都是正确性的统计概率,而不是绝对确定性。容差是指一个属性失败的最大可容忍概率。零容差当然是理想的,但 zkVM 在实践中并没有对所有这些属性都实现零容差。完美的健全性和完整性似乎与简洁性不相容,并且没有已知的方法可以实现完美的零知识。衡量安全性的一种常见方法是使用安全位,其中 1 / (2^n) 的容差称为n位安全。安全位越多越好。
如果 zkVM 完全正确,那并不一定意味着它是可靠的。正确性仅意味着 zkVM 满足其安全属性,直至声明的容差。这并不意味着声明的容差足够低,可以投入市场。此外,如果 zkVM 足够安全,那并不意味着它是正确的;安全性指的是声明的容差,而不是实际实现的容差。只有当 zkVM 既完全正确又足够安全时,才能说 zkVM 可靠,直至声明的容差。
理解零知识安全
当我们在这里谈论安全性时,它主要与 zkVM 的设计和评估指标有关。然而,零知识安全也指利用零知识证明来增强隐私和安全性的系统和协议。
例如,零知识云存储是零知识安全的一种应用。它使用 ZKP 来确保服务提供商无法访问加密密钥或存储的数据。这保证了只有数据所有者才能解密和访问其信息,从而提供高水平的隐私和安全性。通过应用零知识安全原则,零知识云存储可保护敏感数据免遭未经授权的访问和泄露,从而确保强大的数据隐私和完整性。
6. zkVM 三难困境:在 zkVM 中平衡—速度、效率和简洁性
速度、效率和简洁性都是可变的属性。所有这些因素都会影响 zkVM 的最终用户成本。在评估中如何衡量它们取决于应用程序。通常,最快的解决方案不是最高效或最简洁的;最简洁的解决方案不是最快或最高效的;
i. 速度
证明者能多快生成证明
以时钟时间来衡量,即从计算开始到结束所用的时间
速度应根据特定的测试程序、输入和系统进行定义和测量,以确保可以对其进行定量评估。此指标对于对延迟敏感的应用程序至关重要,因为这些应用程序必须能够及时获得证明,但随之而来的是更高的开销和更大的证明大小
ii. 效率
证明者消耗的资源,越少越好
可以用用户时间(即程序代码所耗费的计算机时间)来近似
证明者消耗两种资源:核心时间和空间。因此效率可以细分为核心时间效率和空间效率。
核心时间效率:证明者在所有核心上运行的平均时间乘以运行证明者的核心数量。对于单核证明者,核心时间消耗和速度是一回事。对于在多核系统上以多核模式运行的多核证明者,核心时间消耗和速度不是一回事。如果一个程序充分利用了 5 个核心或线程 5 秒,那么用户时间就是 25 秒,时钟时间就是 5 秒。
空间效率:指使用的存储容量,例如 RAM
用户时间是衡量运行计算所消耗能量的指标,这一点很有意思。在几乎所有时间所有核心都得到充分利用的情况下,CPU 的能耗应该保持相对稳定。在这种情况下,受 CPU 限制、主要为用户模式的代码执行所花费的用户时间应该与该代码执行所消耗的瓦时数(即能量)大致成线性比例。
对于任何规模足够大的验证运营而言,节约能源消耗或计算资源的使用应该是一件有趣的事情,因为验证的能源费用(或云计算费用)是一笔可观的运营成本。出于这些原因,用户时间是一个有趣的指标。较低的验证成本使服务提供商能够将较低的验证价格转嫁给对成本敏感的客户。
这两种效率都与验证过程的能耗和验证过程所用的资本量有关,而资本量又与验证的财务成本有关。为了使效率的定义可操作化以便于测量,必须相对于一个或多个测试程序、每个程序的一个或多个测试输入以及一个或多个测试系统进行定义。
iii. 简洁
生成证明的大小以及验证证明的复杂性
简洁性是三个不同指标的综合,其中证明验证的复杂性进一步细分为:
证明大小:证明的物理大小,通常以千字节为单位
证明验证时间:验证证明所需的时间。
证明验证空间:证明验证期间的内存使用情况
验证通常是单核操作,因此速度和核心时间效率在这种情况下通常是等同的。与速度和效率一样,实施简洁性的定义需要指定测试程序、测试输入和测试系统的集合。
定义了每个性能属性后,我们现在来说明优化一个属性相对于其他属性的微小影响。
速度:证明生成速度快,证明规模大,但证明验证速度慢,生成证明需要消耗更多资源,效率低下
简洁性:证明者需要更多时间来压缩证明。但证明验证速度很快。证明越简洁,计算开销就越高
效率:最小化资源使用会降低证明生成的速度和证明的简洁性
一般来说,优化一种意味着不会优化另一种,因此需要进行多维分析,根据具体情况选择最佳解决方案。
在评估中对这些属性进行加权的一个好方法可能是定义每个属性的可接受水平,然后确定哪些属性最重要。最重要的属性应该进行优化,但其他所有属性的水平应保持足够好。
PS:本文大部分来自于对于专业网站的搜集整理撰稿。
ZKT 纯GPU锄头,第一梯队,仅限大算力合作!
ZKT Aleo-ASIC芯片机整机预售中,台积电代工!
2024年全球ZK峰会 Aleo-ASIC 最有竞争力品牌!
感兴趣的小伙伴扫码联系,仅限大客户和渠道!
全网最全Aleo中文WiKi
专访 Aleo 基金会执行董事:ZK 证明耗时已大幅下降,「实时证明」进一步逼近
测试网Beta激励 | Aleo全网算力超过1亿算力,近期要点解读!
Aleo主网倒计时 | Aleo最新Puzzle谜题算法深度解析!
Aleo主网倒计时 | 测试网Beta发布,距离主网还有多远?
重磅分析!以太坊真的会开倒车转回“PoW”么?还是会效仿Aleo模式?
Aleo主网倒计时 | Aleo 完成 snarkOS 和 snarkVM 的代码安全审计
Aleo主网倒计时 | Aleo Systems 公司 CEO Alex Pruden 卸任感言
重磅!Aleo初始经济模型重大更新!主网上线时间是否有变化?
ALEO 问答集锦 | 关于质押者、证明者和验证者官方最新解答
ALEO 问答集锦 | Aleo积分到底有什么用?区块奖励重大变化?
重磅分析!为什么说FPGA或者ZK通用服务器在Aleo项目上机会是零?