Cointime

扫码下载App
iOS & Android

一文读懂SNARK术语:对zk SNARK概念的解释!

本文作者:Jackson Kelley  编译:Cointime Candice

在过去的几个月里,我一直在研究zk-SNARK材料,我回忆起在我了解zk-SNALK研究人员使用的许多术语的含义之前,听到这些词的感觉。

嗯,你看,首先你需要FRI PLONK系统,使其成为一个R1CS…

我已经决定为zk SNARK术语编写ELI15,因为我在学习期间还没有遇到类似的东西。注意1(ELI15)。在我的解释中,我将假设对密码学(哈希函数、Merkle树等)、多项式和计算机科学有一些基本的理解。

这篇文章是为我自己的利益而写的。毕竟

如果你不能向一个六岁的孩子解释,那么你自己也不了解它。——Albert Einstein

我希望在这方面提出主张,以便其他人能够纠正我对这一问题的任何误解。然而,我希望这篇文章也对其他人有益。出于这些原因,我将公开发表。

注意,这篇文章的目标读者是不熟悉zk-SNARK的人,因此许多定义在数学上是不精确的(例如,请参见下面的有限域定义)。


交互式证明

交互式证明是证明者和验证者彼此通信的协议,从而证明者可以向验证者证明他们正确地进行了一些计算。这些通常是作为SNARKs的前奏被教授的,因为相同的心理模型可以在两者之间进行,而且交互式证明可以通过Fiat-Shamir转换变成SNARK。

Fiat-Shamir变换

那么Fiat-Shamir变换是什么?

这是一种使交互式证明系统非交互式的方法(SNARK中的N)。Dan Boneh在这里提供了很好的解释。通常,你可以用哈希函数替换证明方和验证方之间的往返网络调用,验证方可以检查证明方是否正确执行以产生其随机性。

随机Oracle模型

这与Fiat-Shamir变换有关。当有人谈论随机Oracle模型时,他们会说“我们假设存在某种理想化的随机哈希函数”。你可以将随机Oracle模型看作是一种心理模型,它被用来开发Fiat Shamir变换技术,以从交互式证明中去除交互性。

交互式Oracle证明

既然我们已经定义了这些术语中的大部分,那么定义这个术语将更容易,因为我们可以在这个定义中使用这些术语。

交互式Oracle证明(称为IOP)是一种交互式证明,它使用Oracle来提高证明和验证的效率。

Schwartz-Zippel引理

这种观察正是SNARK成为可能的原因。——Dan Boneh

Schwartz-Zippel引理指出,如果随机评估一个非零多项式,评估等于0的概率最多是多项式的次数(称为d)除以多项式的可能输入数(称为p)。

这听起来很复杂,但直觉上这意味着从所有可能的值中选择多项式(d)的根的概率是d/p。

这个引理有趣的是,它也适用于多元多项式。

总和检查协议

该交互协议使用Schwartz-Zippel引理来概率地检查两个多项式是否彼此相等,而不直接评估两个多项式。

布尔超立方体

你会经常看到这个写为{0,1}^n。数学记数法将其作为长度为n的位串集合。例如:{0,1}²将为{00,01,10,11}。

GKR协议

GKR代表协议的作者:Goldwasser、Kalai和Rothblum。GKR协议是首批使用和校验协议验证通用算术电路评估的协议之一(2015年发布)。

算术电路

如果你熟悉传统的电路,它对布尔值和运算符进行运算,这是相同的概念,但适用于算术。关于这些电路的门需要注意的一件有趣的事情是,在zk-SNARK的背景下,在写这篇文章的时候,它们只对加法和乘法运算符进行操作。

R1CS

R1CS代表“1阶约束系统”。1阶来自线性代数,意味着约束系统使用矩阵。从计算到zk SNARK,直到2019年PLONK出现之前,它一直是算术电路的常见中间表示。

Vitalik有一篇文章解释了如何从计算到zk SNARK,其中包含一张图片,我发现在思考这个问题时很有用。

多项式承诺方案

多项式承诺方案(你可能会从研究人员那里听到这个名字,即PCS)是一种让验证者承诺给定多项式而不向验证者透露多项式系数的方法。

在写这篇文章的时候,有两种常见的多项式承诺方案是KZG和FRI,但也有其他的版本,比如Dory、Ligero和Brakedown,人们正在进行实验。

同样,Dan Boneh在本视频中给出了很好的深层次解释。

多项式承诺方案通常与多项式交互式oracle证明和Fiat Shamir变换相结合以产生SNARK。

KZG

KZG是Kate, Zaverucha, and Goldberg的缩写,他们是这个多项式承诺方案的作者。

它使用“Tau的幂”来生成全局参数,然后这些参数用于提交多项式。这是一个可信的设置,因此它要求在使用Tau的幂生成全局参数后删除它们。由于它们需要删除,你经常会听到Tau的幂被称为“有毒废物”。

你也会听到“KZG仪式”,这是每个参加仪式的人都可以为Tau的幂贡献随机性的方式,这样,只有一个参加仪式的人需要删除他们对随机性的贡献,才能丢弃有毒废物。

Tau的幂

那么,Tau的幂是什么?Tau是一个随机场元素,在KZG多项式承诺方案中,它被自身和组元素反复相乘。

有限域

说到“场元素”,你可能会听到研究人员经常提到的“有限域”,那是什么?

在写这篇文章时,SNARK不能对所有整数进行运算,因此有限域是SNARK定义的要在其中进行运算的整数的子集。我在Tau幂定义中提到的域元素是这个定义的有限域的元素。

有限域使用模块化算法将域约束到所需的大小。

Fast Reed-Solomon Interactive Oracle Proofs of Proximity (FRI)

FRI是KZG的一种流行的替代多项式承诺方案,不涉及可信设置(称为“透明”,因此是STARK中的T、)。它使用Reed-Solomon编码和Merkle树,使用小于D的查询来概率地检查D次多项式的有效性(因此称为“快速”)。

拉格朗日插值

拉格朗日插值是一种构建通过给定点集的多项式的方法。它被用作Reed-Solomon编码的多项式类似物,如果两个多项式相差很小,它们的拉格朗日插值的评估就会有很大的不同。

多线性扩展

多线性扩展(通常简称为MLE)是通过拉格朗日插值从多变量多项式(如3x² + 2xy + y³ + 5)构建的多线性多项式(如x_1*x_2 + 4*x_1 + 3*x_2)。这些多线性多项式在zk-SNARK背景下是有用的,因为它们通常可以更快地验证。

Witness

Witness是某些计算的输入,用于在不需要直接提供陈述情况下证明陈述的正确性。

在算术电路的上下文中,witness是验证者构建其执行算术电路的计算“轨迹”的一种方式,它允许验证者在亚线性时间内概率地检查验证者执行的正确性,而不会泄露电路本身。

请注意,验证者的witness是秘密的,这意味着它不直接提供给验证者,而是用一个简洁的证明来代替它(因此SNARK中的S)。

为共同的非交互的知识论证的拉格朗日基的排列(PLONK)

PLONK是一种流行的SNARK,它涉及证明算术电路的4个方面:

  • 电路的门是正确的
  • 电路输入正确
  • 门之间的接线正确
  • 电路输出正确

术语“排列”来自于布线的证明方式,因为PLONK使用多项式的排列来证明布线的正确性。

*本文由CoinTime整理编译,转载请注明来源。

评论

所有评论

推荐阅读