浅析零知识汇编代码zk-ASM:代表Web2与Web3的现实汇合点?

zk-SNARK 是 zk-Proof 皇冠上的宝石:它们是一种简洁的证明,证明某个陈述是正确的,在证明时没有透露任何关于被证明数据的信息。例如,假设某人断言「我知道一个 m 使得 C(m) = 0」,其中 m 是一个千兆字节长的消息,C 是一个函数。zk-SNARK 将是一个非常简短的证明 (<1GB),可以快速验证,并且不会透露任何关于 m 的信息 ( 除了公开可用的信息 )。

简介

零知识证明,特别是 zk-SNARK (Succinct Non-interactive Arguments of Knowledge) 可能是 Web 3 前沿最重要的技术之一。虽然该子领域的大多数媒体和投资的关注都集中在 zk- Rollup 上,这种扩展解决方案为以太坊等 L1 区块链提供了巨大的可扩展性,但这绝不是 zk-SNARK 的唯一应用。在这篇文章中,我们将深入分析零知识汇编代码 ( 或 zkASM) 的概念,评估它在 zk- Rollup 和其他领域的用例,探索它在重新发明我们所知道的互联网方面的理论可能性。

技术原理

zk-ASM,顾名思义,主要包含两个技术部分:zk 和 ASM。zk 部分指的是 zk-SNARK,而 ASM 部分指的是汇编代码。要理解 zk-ASM 的潜力,我们必须首先理解这两个看似神秘的概念的理论基础。

zk-SNARK

zk-SNARK 是 zk-Proof 皇冠上的宝石:它们是一种简洁的证明,证明某个陈述是正确的,在证明时没有透露任何关于被证明数据的信息。例如,假设某人断言「我知道一个 m 使得 C(m) = 0」,其中 m 是一个千兆字节长的消息,C 是一个函数。zk-SNARK 将是一个非常简短的证明 (<1GB),可以快速验证,并且不会透露任何关于 m 的信息 ( 除了公开可用的信息 )。

那么 C(m) 到底是什么?它有什么用?这个函数实际上是一个算数电路,或者是我们想要执行的特定函数的有向无环图 (DAG) 表示,如图所示。「m」本质上是进入电路的输入数据,电路中的特定「节点」是单独的逻辑门或算数运算。例如,「+」节点可能有「2」和「3」作为输入,并将「5」输出到下一个运算符。因此,可以在「算数电路」中对任意算数或逻辑运算进行编码。

浅析零知识汇编代码zk-ASM:代表Web2与Web3的现实汇合点?
算数电路的例子。资料来源:https ://cs251.stanford.edu/lectures/lecture14.pdf

一旦我们有了这个算数电路作为我们想要运行 zk-SNARK 的代码的表示,我们就可以开始构建这个 zk-SNARK 了。从根本上说,因为「代数基本定理」,使得 zk-SNARK 是可能的,该定理指出,一个「d」次多项式最多有「d」个根。数学技巧分为两个步骤🙁1) 以某种方式将我们想要证明的函数「f(m)」转换为一个多项式 ( 并坚持下去 ),(2) 使用「代数基本定理」与多项式相互作用,并提供一个简洁的证明。在技术术语中,第一部分被称为「Polynomial Committment Scheme」(PCS:多项式承诺方案 ),第二部分被称为「Polynomial Interactive Oracle Proof」(PIOP)。

浅析零知识汇编代码zk-ASM:代表Web2与Web3的现实汇合点?
通用电路的有效 SNARK 的组成部分。资料来源:https ://cs251.stanford.edu/lectures/lecture15.pdf

虽然 PCS 和 PIOP 的具体实现超出了本文的范围,但到目前为止,我们已经获得了 zk-SNARK 核心步骤的粗略草图:

  • 想运行 zk-SNARK,就需要有一个函数的选择 ( 代码函数,数学方程等 );
  • 将此函数编码为算数电路 C(m);
  • 运行 PCS 得到该算数电路的多项式表示;
  • 运行 PIOP 以获得原始「m」大小的对数的简洁证明。

我们有一个定制的 zk-SNARK 可以证明某人知道某个信息而不用透露信息是什么。

汇编代码

zk-ASM 的第二个难题是汇编代码的思想。汇编代码是一种包含非常低级语言指令的类语言,机器很容易阅读,但人类很难破译。与 Python、Java 等高级语言不同,汇编语言包含非常原始的函数,例如会在处理器和硬编码内存位置上的一系列数据寄存器上移动、比较、添加和跳转。例如,在屏幕上打印数字 1 到 9 的 Python 代码为 123456789:

浅析零知识汇编代码zk-ASM:代表Web2与Web3的现实汇合点?

下面是它的 x86 汇编版本:

浅析零知识汇编代码zk-ASM:代表Web2与Web3的现实汇合点?

对这么简单的操作来说,其实变得更麻烦了。那么为什么还要使用汇编语言呢?如上所述,虽然这些指令对人类来说可能不容易阅读,但它们很容易「组装」到 110011001 字节码中,供机器读取和执行 ( 这称为汇编程序 )。相对而言,Python 和 Java 等高级语言更易于阅读,但用这些语言编写的程序不能直接由处理器执行。相反,我们需要依赖于一个「编译器」,它咀嚼我们编写的 Python 或 Java 代码,并吐出一堆汇编代码,然后由机器组装和执行。我们可以期望同一段 Python 或 Java 在不同的处理器和不同的操作系统上平稳运行,因为编译器完成了繁重的工作,将源代码编译为特定于该处理器或操作系统的汇编语言。

因为所有语言都可以编译成汇编代码 ( 汇编代码本身可以编译成可执行的二进制代码 ),所以汇编程序本质上就像「所有语言之母」。现在假设我们能够将汇编语言 ( 如 x86 或 RISC-V) 中的所有操作数转换为一种算数电路表示,这样我们就能够提供这种汇编语言中所有操作数的 zk-SNARK 证明。这意味着理论上我们能够提供任何用任意高级语言 ( 如 Python 或 Java) 编写的程序的 zk-SNARK,这些程序可以编译成汇编语言。这就是为什么我们需要考虑 zk-ASM。

实际应用

zk-EVM Rollup:Polygon zk-ASM

zk-ASM 最重要的应用之一是创建与以太坊虚拟机兼容的 zk- Rollup,或 zk- EVM。zk-EVM 对于区块链的可扩展性非常重要,因为它允许程序员部署在基于 zk-Rollup 的 L2 链上,而无需修改太多 ( 如果有的话 ) 他们的代码]。在这个领域,Polygon 的 zk-EVM 是一个典型的案例研究,它展示了如何使用 zk-ASM 来实现这一目标。

浅析零知识汇编代码zk-ASM:代表Web2与Web3的现实汇合点?
EVM 和 Polygon zk-EVM 技术栈的比较。来源:Original Content

当程序员在以太坊 L1 区块链上开发时,他们通常使用 Solidity 进行编码。这种 Solidity 代码在执行前会被编译成一系列 EVM 操作码,如 ADD、SLOAD 和 EQ。默认情况下,这个过程显然不会创建任何类型的 zk-Proof。Polygon 的诀窍是创建一个方法,将每个 EVM 操作码解释为它们自定义编写的 zk-ASM,这对 zk-SNARK 非常友好。然后,他们的 L2 zk-EVM 将执行 zk-ASM,同时还创建 ASM 的 zk-SNARK 电路,以创建 zk-SNARK 证明。例如,EVM 中的 ADD 操作码将被翻译成 Polygon 的 zk-ASM,如下图:

浅析零知识汇编代码zk-ASM:代表Web2与Web3的现实汇合点?
EVM ADD 操作码的 Polygon zk-ASM 解释示例。资料来源:https ://wiki.polygon.technology/docs/zkEVM/zkASM/some-examples

因为 Polygon zk-EVM 的招数在汇编级别上,它从普通以太坊程序员接触的代码中删除了两个级别,即「Solidity」级别。这就是为什么大多数开发人员可以将他们为以太坊主网构建的 EVM 代码直接移植到 Polygon zk-EVM 的原因。此外,由于 Polygon zk-EVM 将以太坊的技术堆栈「保持」到操作码级别,所有依赖于分析编译的操作码的调试基础设施都将保持可用和完整。这与其他一些 zk-EVM 设计不同,例如 zkSync,后者不提供操作码级别的 zk-Proof。因此,即使 Polygon 发明并证明了自己的汇编语言,Vitalik 写道:「它仍然可以验证 EVM 代码,它只是使用了一些不同的内部逻辑来完成它。」

超越 Rollup:zk-WASM

zk- EVM 绝不是 zk-ASM 的唯一应用程序。回想一下我们之前的断言,汇编语言本质上是「所有语言之母」,并且 zk-ASM 的创建将为用任何编译成该汇编语言的语言编写的通用程序解锁 zk-Proof。Web Assembly,或称 WASM,是最重要的新兴汇编语言之一。WASM 于 2018 年首次发布,其目的是创建一种汇编语言,以提高 Web 应用程序的执行速度,并为 Javascript (Web 背后的主要编码语言 ) 提供执行补充。

从本质上讲,随着 Web 多年来的发展,Web 应用程序的规模和复杂性不断增长,这意味着浏览器编译用 Javascript 编写的所有内容的速度通常非常慢,并且必须依赖复杂的编译 – 优化 – 重新加载周期。另一方面,WebAssembly 通过提供可移植的、模块化的、易于执行的汇编语言,消除了对复杂浏览器执行引擎的依赖。此外,作为一种汇编语言,WASM 允许程序员直接用 C 语言、C++、Rust、Java 或 Ruby 编写在浏览器中本机运行的代码片段。因此 WASM 已成为「提供分布式无服务器功能」的首选技术。

那么 zk-SNARK 为什么会出现,又是如何出现的呢?WASM 的独特之处在于它是一种客户端技术,能够直接与用户输入和数据交互。因为这通常包括敏感数据,如密码和个人信息,我们需要一种技术🙁1) 确保程序正确执行,(2) 我们的敏感信息不会被泄露。如上所述,zk-SNARK 是解决这两个问题的完美解决方案,因此是确保 WASM 安全的重要拼图。

虽然开发 zk-WASM 的工作仍处于早期阶段,但最近已经有一些项目发布了用于 WebAssembly 的 zk-SNARK 电路原型。例如,Delphinus Lab 的「ZAWA」zk-SNARK Emulator 提出了一种将 WASM 虚拟机的操作数和语义编码到算数电路中的方法,从而使其能够进行 zk-SNARK 证明。随着时间的推移,zk-WASM 电路无疑会不断优化,从而允许用通用语言 ( 如 C 语言、C++、Rust 和 Ruby) 编写的程序采用 zk-Proof 的范例。

结论

在这篇文章中,我们探索了 zk-ASM 的理论基础,并研究了 zk-ASM 的两个范例:Polygon 使用 zk-ASM 创建一个操作码级别的 zk-EVM,以及 zk-SNARK 在 WebAssembly 上的应用以创建 zk-WASM。最终,zk-ASM 的承诺是将 Web 2 的互操作性和规模与 Web 3 的可靠性和安全性结合在一起。

一方面,区块链越来越多地寻求超越当前吞吐量瓶颈的扩展,并有可能支持执行,而另一方面,Web 2 方法因未能充分保护用户数据和隐私而越来越受到攻击。由于程序员能够在他们的 Web 2 代码中使用 Web 3 设计范例,并在区块链上引入 Web 2 语言和代码,通用的 zk- ASM 可能代表 Web 2 和 Web 3 世界中的一个汇合点。正是在这个意义上,zk-ASM 可以让我们重新想象一个安全、无需信任的互联网。

(声明:请读者严格遵守所在地法律法规,本文不代表任何投资建议)

(0)
上一篇 2022年12月20日 下午3:36
下一篇 2022年12月20日 下午4:57

相关推荐

  • 消失的币:如何利用简单分析工具快速挽损

    加密资产安全存管是行业老生常谈的话题,回顾过去发生的一系列攻击事件不难看出,相对于传统盗窃、欺诈活动造成的损失,加密资产丢失更加难以挽回。其原因在于区块链网络的匿名特性,导致普通投资者与调查人员无法在链上地址与现实实体之间建立联系,进而错过及时的损失冻结机会,目前这一现状已经对加密行业的个人资产安全构成了普遍威胁。

    2023年10月30日
    547
  • 交易量新低、波动性下降,数据解读加密市场的严峻现状

    2023 年,加密货币现货交易量持续下降。交易量在 5 月份触及多年低点,然后在 8 月份再次触及多年低点。根据加密研究和分析公司 CCData 的数据,上个月中心化交易所的交易量仅为 4750 亿美元,下降了近 8%。该公司表示,这是自 2019 年 3 月以来现货交易量最低的月份。

    2023年9月18日
    259
  • Coinbase外,这6家涉币上市公司Q3表现也值得关注

    截止本周,各大上市公司的第三季度财报已经陆续发出,其中揭示了区块链领域的最新商业动态和财务趋势。这些报告不仅反映了各公司在这一领域的表现,也为我们提供了一个观察和分析区块链技术在全球经济中作用和影响的独特视角。

    2023年11月17日
    795

发表回复

登录后才能评论
微信

联系我们
邮箱:whylweb3@163.com
微信:gaoshuang613