本文深入探讨了zkVM(零知识虚拟机)的概念、原理和应用。zkVM利用零知识证明技术保障计算的完整性和隐私,在数据隐私、安全交易和去中心化金融等领域具有巨大潜力。文章还介绍了zkEVM以及评估zkVM解决方案的框架,并提出了评估 zkVM 的标准,包括正确性、安全性、信任假设、效率、速度和简洁性。
zkVM(零知识虚拟机)是一种强大的虚拟机,它利用零知识证明(ZKP)来保证计算的完整性和隐私性。零知识证明是一种密码学技术,它允许一方在不泄露任何额外信息的情况下向另一方证明某个陈述的有效性。简单来说,就像证明你知道一个秘密,但实际上并没有泄露秘密本身。
zkVM 正在推动可验证计算的未来。通过为数据隐私、安全交易、去中心化金融(DeFi)、法规遵从等提供强大的解决方案,这项技术具有彻底改变各个行业的巨大潜力。通过在不泄露敏感信息的情况下实现计算的验证,zkVM 促成了一种向无需信任系统转变的范式。
本文深入探讨了 zkVM 的世界。我们将探索 ZKP 的基本原理,揭示 zkVM 的内部运作,介绍 zkEVM(一种特定类型的 zkVM)的概念,并为你提供一个评估不同 zkVM 解决方案的框架。
这是分为三个部分系列文章的第一部分:
“在未来 5 年内,我们将以讨论区块链协议应用的方式来讨论零知识协议的应用。过去几年突破所释放的潜力将席卷主流”
- 来自 Espresso Systems 的 Jill Gunter,2021 年 5 月
自 2021 年以来,零知识领域(ZK)已经发展成为一个多元化的基元、网络和应用生态系统,横跨多个领域。然而,尽管 ZK 的发展历史和最近取得的进展以 Starknet 和 zkSync Era 等 ZK 驱动的 Rollup 的推出为标志,但对于其用户和整个加密货币领域而言,大多数 ZK 仍然是一个谜。
但时代正在改变。我们认为零知识密码学是一种强大的、普遍适用的工具,用于扩展和保护任何软件。简而言之,ZK 是密码学大规模采用的桥梁。再次引用 Jill 的话,大量的价值(包括基本价值和投机价值)将围绕任何涉及零知识证明的事物而创造,无论是在 web2 还是 web3 中。加密货币领域最聪明的人正在努力迭代,以使 ZK 在经济上可行并为生产做好准备。即便如此,该行业也必须承认,在我们的设想范式成为现实之前,还有一些进展需要取得。
为了将 ZK 与比特币的采用进行类比,比特币从边缘的业余爱好者论坛互联网货币发展成为 BlackRock 批准的“数字黄金”的原因之一是开发者和社区生成的文献的普及,这些文献培养了人们的兴趣。就目前而言,ZK 存在于泡沫中的泡沫中。信息分散且两极分化;文章要么充斥着过于难以理解的术语,要么过于外行,无法传达任何超出回收示例(例如“沃尔多在哪里”)的有意义的内容。似乎每个人(专家和外行)都知道什么是零知识,但没有人能描述它的实际运作方式。
作为为零知识范式做出贡献的团队之一,我们希望揭秘我们的工作,并帮助更广泛的受众为理解和分析 ZK 系统和应用程序奠定规范的基础,以促进感兴趣的各方之间的教育和讨论,并促使相关信息的传播。
tl;dr:你无法用零知识来发展零知识。
如果你之前对零知识证明(ZKP)一无所知,Wired 发布的这个视频 以交互方式,用易于理解的例子和演示,在五个难度级别解释了这个概念。强烈推荐。
简而言之,ZKP 使一方(证明者)能够向另一方(验证者)证明他们知道某些东西,而无需透露该东西是什么或任何额外信息。更具体地说,ZKP 证明对某条数据的了解,或对计算结果的了解,而无需透露数据或输入。创建零知识证明的过程涉及一系列数学模型,将计算结果转换为一条原本无意义的信息,该信息证明代码执行成功,并且可以稍后进行验证。
在某些情况下,验证证明所需的工作量比运行计算所需的工作量更少,该证明是在多轮代数转换和密码学之后构建的。这种安全性和可扩展性的独特结合使零知识密码学成为一种非常强大的工具。
(注意:Succinct 的桥使用 SNARK,但 SP1 是基于 STARK 的协议)
值得注意的是,所有 STARK 都是 SNARK,但并非所有 SNARK 都是 STARK。
为了更好地全面理解 SNARK 和 STARK,我们建议阅读 Yan Zhang 和 Yi Sun(来自 Axiom)撰写的 系列文章 以及 Ventali Tan 的 github 中的这篇文章集合。
虚拟机(VM)是一个运行程序的程序。在上下文中,zkVM 是一个虚拟计算机,它被实现为一个用于生成零知识证明的系统,或者是一个通用的电路或工具,用于为任何程序或计算生成 ZKP。
zkVM 消除了学习复杂数学和密码学来设计和编码 ZK 的需要,并使任何开发人员都可以执行以他们喜欢的语言编写的程序并生成 ZKP,从而更容易地集成和与零知识交互。广义地说,大多数对 zkVM 的引用都隐式地包括附加到执行程序的虚拟机之上的编译器工具链和证明系统,而不仅仅是虚拟机本身。下面,我们总结了 zkVM 的主要组件及其功能:
zkVM 的主要组件及其功能
每个组件的设计和实现都由证明(SNARK 或 STARK)的选择和 zkVM 的指令集架构(ISA)决定。传统上,ISA 指定了 CPU 的能力(数据类型、寄存器、内存等)以及 CPU 在执行程序时执行的操作序列。在上下文中,ISA 确定了可由 VM 解释和执行的机器代码。选择 ISA 可能会导致 zkVM 的可访问性和可用性发生根本性的变化,以及证明生成过程的速度和效率,并构成任何 zkVM 的基础。
以下是一些 zkVM 及其组件的示例供你参考。
每个组件的设计和实现都由证明(SNARK 或 STARK)的选择和 zkVM 的指令集架构(ISA)决定。
目前,我们将专注于每个组件之间的高级交互,以便为理解代数和密码学过程以及 zkVM 的设计权衡提供一个框架,我们将在以后的文章中介绍。
zkEVM(零知识以太坊虚拟机)是一种专门的 zkVM,专为以太坊区块链量身定制。它旨在利用 ZKP 执行以太坊智能合约,同时保持与以太坊虚拟机(EVM)的兼容性。zkEVM 的主要优点是它能够增强以太坊的可扩展性和隐私性。通过离链处理多个交易,然后使用一个证明在链上证明其有效性,zkEVM 减少了以太坊主网上的计算负担,并确保了用户隐私。这使得 zkEVM 成为提高基于以太坊的应用程序和交易的效率和安全性的重要工具。
zkVM 和 zkEVM 之间的关系在于它们都使用零知识证明来提供隐私和可扩展性。虽然 zkVM 为各种区块链和应用程序提供了一个通用的解决方案,但 zkEVM 专门针对以太坊生态系统进行了优化。这两种技术都在区块链的未来中发挥着至关重要的作用,满足了对私有、安全和高效的无需信任的交互的日益增长的需求。
下图是一个抽象的、通用的 zkVM 流程图,按程序通过 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 上执行时,该输入会导致给定的程序产生给定的输出。
我们应该使用什么标准来评估 zkVM?换句话说,我们应该在什么时候说一个 zkVM 比另一个 zkVM 更好?事实上,答案取决于用例。
Lita 的市场调研表明,对于大多数商业用例而言,在速度、效率和简洁性中,最重要的属性要么是速度,要么是核心时间效率,具体取决于应用程序。某些应用程序对价格敏感,并且希望优化低能耗和低资本使用以进行证明;对于这些应用程序,核心时间效率可能是要优化的最重要指标。其他应用程序,尤其是与金融或交易相关的应用程序,对延迟敏感,并且希望优化速度。
大多数已公开的性能比较都只关注速度,这很重要,但不是对性能的整体衡量。还有一些重要的属性可以衡量 zkVM 的可靠性;即使对于市场领先的现有企业而言,其中大多数属性也没有达到生产就绪的标准。
我们在此建议应按照以下标准评估 zkVM,将其分为两个子集:
Lita 提出了一种更全面的 zkVM 评估方法。
在评估用于关键任务应用的 zkVM 时,应将正确性和安全性视为基线。需要有充分的理由对正确性充满信心,并且需要有足够强的声明安全性。此外,信任假设需要足够弱以用于该应用程序。
如果没有这些属性,则 zkVM 可能比用于该应用程序的无用更糟糕,因为它可能无法按指定的方式执行并将用户暴露于黑客攻击和漏洞利用。
正确性由三个属性组成:
你可以拥有完整性而没有可靠性;如果证明系统证明一切(包括谬论),显然它是完整的但不可靠。相反,你可以拥有可靠性而没有完整性;如果证明系统证明程序存在但不能证明计算,显然它是可靠的(毕竟,它从未证明任何谬论),但不完整。
当 zkVM 具有信任假设时,这通常采用可信设置过程的形式。ZK 证明系统的设置过程运行一次,在首次使用证明系统之前生成证明,以便生成一些称为“设置数据”的信息。在可信设置过程中,一个人或多个人生成一些随机性,这些随机性会被纳入设置数据中,并且需要假设至少其中一个人删除了他们纳入设置数据中的随机性。
实践中有两种常见的信任假设模型。
诚实多数信任假设声明,在某些 N 个人的集合中,超过 N/2 的人在某些特定交互中(与系统)表现出诚信,这通常被区块链使用
“N 中取 1”信任假设声明,在某些 N 个人的集合中,至少其中一个人在某些特定交互中(与系统)表现出诚信,这通常被基于 MPC 的工具和应用程序使用。
人们普遍认为,在所有其他条件相同的情况下,没有信任假设的 zkVM 比需要信任假设的 zkVM 更安全。
实际上,所有三个正确性属性都具有非零容差。这意味着所有证明都是正确性的统计概率,而不是绝对确定性。容差是指一个属性将失败的最大可容忍概率。当然,零容差是理想的,但 zkVM 实际上并未在所有这些属性上实现零容差。完美的可靠性和完整性似乎与简洁性不兼容,并且没有已知的方法来实现完美的零知识。衡量安全性的一种常用方法是以安全位为单位,其中 1 / (2^n) 的容差称为 n 位安全性。更多的安全位更好。
如果 zkVM 是完全正确的,这并不一定意味着它是可靠的。正确性仅意味着 zkVM 在声明的容差范围内满足其安全性属性。这并不意味着声明的容差足够低以达到市场准备就绪状态。此外,如果 zkVM 足够安全,这并不意味着它是正确的;安全性是指声明的容差,而不是实际实现的容差。仅当 zkVM 既完全正确又足够安全时,才能说该 zkVM 在声明的容差范围内是可靠的。
当我们在这里谈论安全性时,它主要与 zkVM 的设计和评估指标相关。但是,零知识安全性也指利用零知识证明来增强隐私和安全性的系统和协议。
例如,零知识云存储是零知识安全性的一种应用。它使用 ZKP 来确保服务提供商无法访问加密密钥或存储的数据。这保证了只有数据所有者才能解密和访问其信息,从而提供高级别的隐私和安全性。通过应用零知识安全性原则,零知识云存储可以保护敏感数据免受未经授权的访问和泄露,从而确保强大的数据隐私和完整性。
速度、效率和简洁性都是滑动比例属性。所有这些因素都会影响 zkVM 的最终用户成本。它们在评估中的权重应取决于应用程序。通常,最快的解决方案不是最高效或最简洁的;最简洁的解决方案不是最快或最高效的;依此类推。让我们先定义每个属性,然后再解释它们之间的关系
zkVM 三难困境:在 zkVM 中平衡速度、效率和简洁性
速度应相对于特定的测试程序、输入和系统进行定义和衡量,以确保可以对其进行定量评估。此指标对于延迟敏感型应用程序至关重要,在这些应用程序中,及时提供证明至关重要,但会带来更高的开销和更大的证明大小
证明者消耗两种资源:核心时间和空间。因此,可以将效率细分为核心时间效率和空间效率。
_核心时间效率:_证明者在所有核心上运行的平均时间乘以运行证明者的核心数。对于单核证明者,核心时间消耗与速度相同。对于在多核系统上以多核模式运行的多核证明者,核心时间消耗与速度不同。如果一个程序完全利用 5 个核心或线程 5 秒,则用户时间为 25 秒,挂钟时间为 5 秒。
_空间效率:_指的是使用的存储容量,例如 RAM
用户时间作为运行计算所消耗能量的代理非常有趣。在几乎所有时间都完全利用所有核心的情况下,CPU 的能耗应保持相对恒定。在这种情况下,主要由用户模式代码执行、CPU 绑定的代码执行所花费的用户时间应该与该代码执行所消耗的瓦时(即,能量)大致成线性比例。
从任何具有足够规模以至于其证明的电费(或云计算费用)是可观运营成本的证明操作的角度来看,节省能耗或计算资源的使用应该非常有趣。因此,用户时间是一个有趣的指标。较低的证明成本允许服务提供商将较低的证明价格传递给对成本敏感的客户。
两种效率都与证明过程的能耗量和证明过程使用的资本量相关,这与证明的财务成本相关。为了使效率的定义可用于测量,该定义必须与一个或多个测试程序、每个程序的至少一个测试输入以及至少一个测试系统相关。
简洁性是三个不同指标的组合,其中证明验证的复杂性进一步细分:
验证通常是单核操作,因此速度和核心时间效率在这种情况下通常是等效的。与速度和效率一样,要使简洁性的定义可操作,需要指定测试程序集、测试输入和测试系统。
在定义了每个性能属性后,我们现在说明了优化一个属性对其他属性的减少效应。
一般来说,优化一种质量意味着不优化另一种质量,因此需要进行多维分析才能在具体情况下选择最佳解决方案。
在评估中加权这些属性的好方法可能是为每个属性定义可接受的水平,然后确定哪些属性最重要。应优化最重要的属性,但须保持所有其他属性的良好水平。
下面我们总结了每个属性及其主要考虑因素:
评估 zkVM 的属性:正确性、安全性、信任假设、速度、效率、简洁性
有了上表,我们在此结束本系列的第一篇文章。在接下来的文章中,我们将以上面显示的流程图为基础,解释 zkVM 中常见的算术和密码学过程。
如果你觉得这有帮助,请访问我们的 网站 和 gitbook 以了解更多关于我们在 Lita 构建的内容。
另外,请在 X 和 Discord 上关注我们,以便及时了解最新信息,这样你就不会错过本系列的其余部分
如有任何问题或许可,请联系 Lita Foundation.
- 原文链接: lita.foundation/blog/zer...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!