火星链 火星链
Ctrl+D收藏火星链
首页 > MATIC > 正文

RIF:带你一文了解零知识证明

作者:

时间:1900/1/1 0:00:00

原标题:干货|零知识证明引论

作者:Cyte

继上一次?Shor发出了对支付网络中路由问题的全面研究之后,又有一位热爱研究的Nervos小伙伴Cyte对零知识证明做了详细的研究。

在这篇文章中,Cyte?会和大家介绍零知识证明(ZKP)?的定义,并将零知识证明与SNARK和STARK这两个概念进行辨析。

ZKP、SNARK和STARK等这些密码学概念随着最近区块链的兴起变得热?起来。但是,它们经常会被误解和混用。其实,所有这些概念都属于一个更广义的范畴,叫做证明系统(ProofSystem),或者叫做密码学证明。零知识证明和SNARK、STARK之间都有交叉的部分,但并不相互包含。它们之间的关系可以用一张图来表示。

本文将首先介绍证明系统的定义,并讨论证明系统的各类性质,重点讨论「零知识性」、「知识证明」、「简洁性」和「非交互性」。特别的,如果一个证明系统具有「零知识性」,那么它就被称为一个「零知识证明」。最后,文章会讨论?SNARK?和?STARK的定义并将其进行比较。

证明系统

一个证明系统(ProofSystem)?是一个交互式协议,包含两个参与方Prover和Verifier,以及一个算法Setup。证明系统的作用是让Prover说服Verifier相信一件事,我们把这件事叫做一个陈述(Statement)。

协议开始前,需要由某人调用Setup算法。Setup算法接受一些公共参数作为输入,并输出Prover和Verifier所需的Setup信息,其中Verifier获知的信息记为?,Prover获知的信息记为?。?和??的公共部分称为公共参考字符串(CommonReferenceString,CRS)。具体由谁、在什么时候调用Setup算法,取决于证明系统的设计。协议一开始,Prover和Verifier同时得到输入陈述?。Prover相对于Verifier必然要有一些额外的优势,例如更强大的计算能力,或者得到了一些额外的输入?。除此之外,Prover和Verifier还分别获知了??和?。Setup信息获取的时间取决于证明系统的设计。例如,有可能是Prover和Verifier早就下载好存在各自硬盘里可以反复使用的,也可能是协议开始前当场输入的。然后Prover和Verifier开始执行证明系统规定的协议。如果Prover和Verifier都是诚实的,那么它们都严格遵守协议执行。不过,也有可能某一方是恶意的,没有按照协议规定来执行,此时会发生什么事情,取决于证明系统的安全性。如果两方都是恶意的,它们都不遵守协议,那就和这个证明系统没关系了。最后,Verifier输出accept或reject,表示是否相信陈述?。一个证明系统需要满足两个性质:

破产索赔交易平台Xclaim完成700万美元的A轮融资:金色财经报道,破产索赔交易平台 Xclaim 已完成 700 万美元的 A 轮融资。Xclaim 允许交易主要的破产债权人债权,包括 FTX、Genesis 和 BlockFi。目前,FTX 的索赔价格为 19 美分,高于今年早些时候的 13 美分,而 Genesis 为 52.5 美分,BlockFi 为 18 美分。[2023/4/11 13:57:24]

完整性(Completeness):如果陈述??是正确的,而Prover和Verifier都遵守这个协议,那么Verifier以至少??的概率输出accept,这里??被称为证明系统的完整性误差(Completenesserror)可靠性(Soundness):如果陈述??是不正确的,此时Prover必然是不诚实的,而Verifier遵守协议,那么任何Prover都不能让Verifier输出accept的概率超过?,这个??被称为证明系统的可靠性误差(Soundnesserror)这两个要求是使得一个证明系统成立的最基本的要求。少了哪个要求,我们都可以得到符合条件但完全没用的证明系统。例如,如果我们只要求完整性,那就无论Prover做什么,Verifier永远只输出accept就好了;如果只要求可靠性,那就让Verifier永远只输出reject。此外,一般希望??和??都不超过?,并且加起来小于?,否则这个证明系统误差太大,也近乎无用。如果将一个证明系统的可靠性只对任何计算能力受限的?Prover成立,也就是说,计算能力无限的敌手是有可能Verifier的,此时这个证明系统只有计算可靠性(ComputationalSoundness),这样的系统又称为?论证系统(ArgumentSystem)。相比之下,对任何Prover都安全的可靠性被称为统计可靠性(StatisticalSoundness)。

证明系统的其他性质

一个证明系统还可以满足一些其他(并非必需的)性质

CRS模型(CRSmodel):如果Setup信息是对所有人公开可见的,即Setup=Setup=Setup,称这个证明系统是在CRS模型下的交互(Interactive)/非交互(Non-interactive):如果整个交互过程只有Prover向Verifier发送一条信息,就称这个系统是非交互证明系统;否则这个系统就是交互式证明系统可迁移(Transferable)/可抵赖(Deniable):如果陈述??是正确的,并且把交互过程发送给其他Verifier,也能够让其他Verifier相信陈述??的正确性,这个证明系统就是可迁移的;否则这个证明系统就是可抵赖的公开可验证(PublicVerifiable)/特定验证者(DesignatedVerifier):如果Setup?是对所有人公开可见的,即任何人都可以成为Verifier,这个零知识证明系统就是公开可验证的。否则这个系统就是针对特定验证者的公开随机(Publiccoin):如果Verifier的所有消息的选取都均匀随机且独立于Prover的消息,就称这个系统是公开随机的零知识(Zero-Knowledge):在陈述??是正确的情况下,如果除了??的正确性,Verifier无法从交互中获取任何其他“知识”,就称这个系统是零知识的简洁性(Succinctness):如果这个证明系统是用来证明NP语言的,并且证明系统的通信量比证据??还要小,那么这个证明系统就具有简洁性

Binance.US已将提款保留时间缩短至7天:据官方消息,Binance.US已将通过银行转账(ACH)、借记卡和与Apple Pay关联的借记卡进行所有存款的提款保留时间从10天缩短到7天,以便用户可以更自由地提取存入帐户的美元以及使用这些资金购买任何加密货币。

此外,Binance.US表示会出于风险管理和客户保护的原因会实施提现暂停。[2022/12/24 22:05:23]

例:证明两个球的颜色不同

Setup信息:有两个球

陈述?:这两个球颜色不同Verifier计算能力受限(蒙上双眼),Prover具有正常的视力

Verifier左右手各持一个球,展示给Prover看。Verifier把双手放到背后,接着(在心里)随机抛硬币,如果是正面朝上,就交换左右手里的球,否则不交换。Verifier把球拿出来给Prover看。Prover告诉Verifier两个球有没有交换。结果:如果Prover猜对了,Verifier输出accept,否则Verifier输出reject。性质讨论完整性如果两球颜色不同,显然Prover一定能以百分之百的概率猜中Verifier有没有交换球可靠性如果两球颜色相同,那么Prover只能盲目猜测,只有1/2的概率猜中。这个系统的可靠性误差为1/2CRS这个证明系统是在CRS模型下的,因为Setup信息是公开的交互性这是个交互系统,因为Prover和Verifier互相发送的信息超过一条可迁移性这个系统是不可迁移的,即可抵赖的。即使Verifier把交互过程记录下来展示给其他蒙住眼的人,他们也不能确信两个球颜色不同公开可验证性这个系统是公开可验证的,任何Verifier都可以和Prover进行这个协议公开随机性这个系统不是公开随机的,因为Verifier发送给Prover的信息不是均匀随机的零知识性这个系统是零知识的,因为在两个球颜色确实不同的情况下,Prover的猜测是Verifier意料之中的,除了表示陈述x的正确性外,没有任何额外知识

重要性

上文中我们给出了证明系统的定义,样例和性质。接下来我们讨论证明系统的几个重要的性质。

零知识性

零知识性用来保护诚实的Prover不被恶意的Verifier而泄露证明所需的秘密证据。

上文中已经提到了证明系统的零知识性,将其简单描述为Verifier无法从交互中获取任何“知识”。这个描述是不确切的,因为它并没有给出一个严格的判断标准。零知识性的定义本身是违直觉的:Prover明明发送了一些比特数据给Verifier,为什么这个系统会是“零知识”的呢?实际上,“信息”并不等同于“知识”。如果Verifier获取了信息,但获得这些信息并不能让Verifier计算出更多结果,或者说这些信息是Verifier自己就能够计算出来的,那么Verifier就没有获取任何“知识”。在一个证明系统的执行过程中,Verifier获得的所有信息包括:;Verifier自己的随机数;Prover发送给Verifier的所有信息(记为?)。我们把这些信息称为Verifier的“视野”,记为?。这些信息是Verifier计算过程中的所有不确定性的来源。确定了这些信息后,其他的一切都可以确定性地计算出来。注意到,?是一个随机变量。当Verifier与Prover执行了证明系统之后,Verifier会获得这个随机变量的一个样本。如果Verifier能在没有Prover参与的情况下独自采样?,那么这个系统就是零知识的。我们把采样??这个随机变量的算法叫做模拟器(Simulator)。根据模拟器工作方式的不同,有如下不同的定义方式:

101枚Azuki匿名收藏家为周大福创始人郑裕彤长孙郑志刚:8月26日消息,香港新世界集团执行副主席兼行政总裁郑志刚(Adrian Cheng)在其社交平台表示,其本人就是持有101枚Azuki NFT的Web3匿名支持者LastKnight。除持有Azuki外,LastKnight还对RTFKT、Animoca Brands等多个项目进行过投资。郑志刚及其团队还表示将继续支持Azuki元宇宙和生态建设,并探索更多合作。

据公开信息显示,郑志刚1980年出生,系新世界发展有限公司主席郑家纯长子、周大福创始人郑裕彤长孙。其毕业于哈佛大学,曾在日本修习艺术文化课程,现任新世界集团执行副主席兼行政总裁。[2022/8/26 12:50:12]

非黑盒模拟器,相对应的零知识性叫做非黑盒零知识。这个零知识的定义允许每个Verifier都存在一个“独家定制”的模拟器,这种定义允许模拟器针对不同的Verifier的实现细节来定制不同的采样过程。黑盒模拟器,对应的就是黑盒零知识。这个零知识的定义要求存在唯一的模拟器,使得对所有的Verifier,它都能够采样出?。这个唯一的模拟器不可能知道所有Verifier的具体实现细节,所以它只能通过黑盒调用的方式来访问Verifier。不过,模拟器对Verifier具有完全的控制权。模拟器可以决定Verifier的随机数?,并给Verifier输入任何的Prover消息或?。所以,在模拟器的眼里,Verifier是一个黑盒的确定性算法。如果模拟器只针对诚实Verifier,对应的是诚实Verifier零知识(HonestVerifierZK)。因为诚实Verifier的行为是完全在预期中的,模拟器自然可以利用这些信息,因此这个模拟器对Verifier的访问是非黑盒的。非黑盒模拟器访问到的信息更多,所以非黑盒零知识性比黑盒零知识性更容易成立。而诚实Verifier零知识是最容易实现的。关于诚实Verifier零知识,这里的诚实Verifier更准确地说是半诚实(Semi-Honest)的,或者说“诚实但好奇的”。这样的Verifier表面上会遵守协议,但有可能私下里试图从消息中提取知识。相比之下,恶意Verifier的行为是完全不受限制的。Verifier可能宕机、发送不符合格式的消息、不按协议规定的分布采样,等等。要证明一个系统对恶意的Verifier满足零知识性,就要把所有这些情况都覆盖到。模拟器是一个随机算法,它的输出值也是一个随机变量,记为?。零知识性要求??和??这两个随机变量难以区分。不过,“难以区分”这个词也有很多种版本,由此可以推出零知识证明的多种定义:

如果两个随机变量的分布是统计不可区分的,也就是它们的统计距离(StatisticalDistance)可忽略,就称这个证明系统是统计零知识(StatisticallyZero-Knowledge)?的;如果统计距离就是0,又叫做完美零知识(PerfectZero-Knowledge)?的;如果两个随机变量的分布是计算不可区分的,也就是任何多项式时间的随机敌手都无法区分这两个分布,就称这个证明系统是计算零知识(ComputationallyZero-Knowledge)的。注意到,零知识的定义中,只要求对于正确的陈述?,?和??的分布难以区分。对于错误的陈述,我们并不关心Verifier能够获取什么知识,因为这种情况下Prover本身就是不诚实的,没有必要去保护它,或者说,Prover既然不遵守协议,那我们的协议设计得再好也保护不到它。不过,虽然??是错误的情况下,零知识性对??的分布不做任何假定,但如果输入错误的?采样得到的??被Verifier验证通过的概率和??正确的情况下有显著差别的话,我们就可以借此判断??的正确性。这就意味着??只能来自一个平凡的NP语言。所以,对于困难的NP问题,把错误的??输入给模拟器,得到的??也能够以一样的概率被验证通过。这么一来,零知识性和可靠性岂不是矛盾的?换句话说,对于错误的?,Prover为什么不能调用模拟器来Verifier?实际上,Prover不能控制Verifier,它也就不能为模拟器提供采样??所需要的资源。的确,一个恶意的Prover可以去调用模拟器,但是这对它来说没用,因为模拟器输出的??中的??并不是正在与Prover交互的Verifier的随机数。此外,模拟器输出的??也可能和Verifier收到的??不同而导致验证不通过。不过,Prover调起的模拟器无法获取Verifier的随机数,这已经足够保证安全性了,所以交互式证明中??即使是固定常量也没问题。

MetaThaicoin NFT与Project Galaxy项目平台达成战略合作:据官方消息,MetaThaicoin(TAC)宣布与银河计划Project Galaxy(GAL)Web3.0 的 NFT 凭证系统平台达成战略合作。

MetaThaicoin(TAC)元宇宙保险,推出的两套稀量NFT和平象系列“METATHAI ELEPHANT”以及交易猿系列“TRADING APE”,都已经与Quest3、银河计划Project Galaxy(GAL)达成合作。[2022/7/31 2:48:39]

知识证明

如果要求Prover必须“知道”一些信息才能让Verifier验证通过,这个系统就被称为知识证明(ProofofKnowledge)。知识证明可以看做可靠性的加强版。知识证明也有计算意义下的版本,叫做知识论证(ArgumentofKnowledge)。

知识证明系统通常是用来证明NP语言的。一个NP语言是指一个集合?,使得元素??属于?可以由一个证据??来证明,即存在一个多项式时间的算法能够判定??是否是??属于??的合法证据。普通的证明系统使得Prover可以向Verifier证明?。而知识证明系统使得Prover可以向Verifier证明的不仅是?,还可以证明Prover“知道”?。也就是说,即使?,如果Prover不知道对应的?,也难以验证通过。和上一节讨论的零知识性类似,“知识性”也需要严格的定义。一个程序P“知道”数据?,到底该怎样定义呢?想象一下把这个程序运行在一个虚拟机里,它的随机数是可以由我们随意指定的。它的整个运行过程中,CPU状态的完整历史记录,以及所有的内存读写操作,都可以由虚拟机记录下来。如果这个程序“知道”?,我们总该从这些记录中提取出??的信息吧。实际上,这就是提取器(Extractor)?的一种直观的理解方式。提取器就是一个算法,它能够和被提取的程序同时运行,并能够访问到被提取的程序的内部状态。最后,它可以输出提取的结果。上面描述的提取器是非黑盒提取器,因为它可以访问被提取程序的内部状态。非黑盒提取器的算法必然要随着被提取程序的不同而变化。所以,一个证明系统是一个知识证明,是这样定义的:“对于任意Prover?,存在一个提取器?,它和??同时执行,并能够访问到??的内部状态。如果??和??交互后??输出accept,那么??就会输出满足条件的?。”类似于零知识定义中的模拟器,提取器也可以用黑盒的方式定义。提取器无法访问程序的内部状态,但可以调用这个程序,控制这个程序的随机数,并读取这个程序的输出。我们引入这样一个记号?,表示提取器通过黑盒的方式访问一对Prover和Verifier的交互过程。黑盒提取器对所有的Prover只需要有一个就够了,所以知识性证明就可以如下定义:“存在一个提取器?,对于任意Prover?,如果??和??交互后??输出accept,那么??就会输出满足条件的?。”

BTC跌破20000美元:BTC跌破20000美元,现报19995.4美元,日内涨幅达到2.02%,行情波动较大,请做好风险控制。[2022/6/21 4:41:34]

简洁性

用??表示一个NP语言的实例,?表示??存在语言中的证据。简洁性(Succinctness)?是指一个证明系统所需的通信量低于??的线性函数。换句话说,Prover和Verifier执行这个证明系统,比Prover直接把??发送给Verifier,还要节省通信带宽。有时候,简洁性还可能要求Verifier在证明系统中的计算量要低于验证?。总之,简洁性要求证明系统在效率方面有优势。

我们可能会希望一个简洁证明系统的通信量达到对数级别或更低,即?。然而这样的简洁性要求会带来安全性的损失。因为如果通信量低达对数级别,那么Prover的消息组合??所在的整个空间是可以在??时间内穷举的。然而,系统的可靠性要求,对于错误的陈述?,Prover不能找到让Verifier验证通过的?。假如能够验证通过的??压根不存在,这样确实能够保证可靠性。但这样就可以通过穷举??来判断?的合法性,那么??就不是一个困难问题,这就排除了一般的NP语言。如果我们想要一般的NP语言的证明系统,我们必须允许即使对于错误的?,也存在少量的能够验证通过的?。这种情况下,我们只能额外引入一个安全参数?,将通信量的大小放宽为?,使得穷举??的复杂度达到?,这样至少实现了计算意义下的可靠性。同时,通信量相对于??仍然是对数级别的,所以满足了简洁性。综上,对于一般的NP语言,(对数级别的)简洁证明系统只能是论证系统。

非交互性

非交互性(Non-Interactivity)?是指证明系统的全部交互只有Prover向Verifier发送的一条消息,这个消息叫做一个证明,记为?。非交互性可以带来许多的便利,为证明系统带来更多的应用场景。例如,在区块链系统中,非交互性的零知识证明可以附在交易中,供任何人随时查验,而不需要交易的作者随时在线与验证者交互。

任何NP语言都天然具有一个非交互证明协议,也就是Prover直接将证据发送给Verifier,而且这个证明是知识证明。所以,构造一个单纯具有非交互性的证明系统意义不大。非交互性只有和前面讨论的两个性质,即零知识性或简洁性组合起来才有意思。非交互性+零知识将零知识性和非交互性结合起来,就有了非交互零知识(Non-InteractiveZero-Knowledge,NIZK)。我们之前在讨论零知识性时讲到,零知识性之所以和可靠性不矛盾,是因为调用模拟器采样的??中的??大概率和与Prover交互的Verifier的随机数不同。但是,对于非交互零知识,我们要重新审视一下这个推理过程。在交互证明中,一个随机数为??的Verifier能够验证通过的Prover消息?,直接搬到随机数为??的Verifier那里就很可能验证不通过了。所以,在交互式证明中,?的正确性不是全局的,而是依赖??的。而在非交互证明中,Prover没有收到Verifier的任何消息,所以Prover的计算过程没有用到Verifier的随机数?。所以,为了达到证明系统的完整性,诚实的Prover输出的?,对于大部分Verifier随机数??都是能验证通过的。所以,非交互证明中的??的正确性是全局的,不依赖任何。零知识性要求,Verifier的视野??和模拟器的输出??不可区分。这意味着,如果单独观察这它们部分分量,它们也是不可区分的。即??和??中的??也是不可区分的。所以,一个恶意的Prover可以调用模拟器来输出?。这在交互式证明中不成问题,恶意的Prover仅仅是得到了关于某个??正确的??罢了。但在非交互证明中,?的正确性是不依赖??的,就会带来安全问题。这时候,就要轮到??发挥作用了。虽然??的正确性不再依赖于?,但还是依赖于?的。为了可靠性,我们希望,给定??和陈述??难以计算出能够通过验证的?。虽然模拟器在给定??时可以同时输出一对?,但是难以先计算前者再计算后者。具体是怎样做到这一点的,后续文章中介绍具体方案时会详细讲解。非交互性+简洁性上文提到,简洁性的证明系统必然是论证系统。结合非交互性,就有了简洁非交互式论证(SuccinctNon-interactiveARGument,SNARG)。实际上,满足SNARG定义的系统早在2000年就由Micali构造出来了,而这个名字是后来才出现的。如果一个SNARG同时是一个知识论证,它就被称为简洁非交互式知识性论证(SuccinctNon-interactiveARgumentofKnowledge,SNARK)。SNARK这个名称由论文BCCT12首创,现在已经成为零知识证明领域最热门的概念之一。其实SNARK只具有简洁性和非交互性,并不一定具有零知识性。如果有零知识性,应该叫zkSNARK。STARK和SNARK辨析另一个经常和SNARK一起提到的概念是STARK。它和SNARK只有一字之差,但有很多不同。下面我们比较一下这两个概念。共同点:

都是知识论证(ARK),即只有计算意义下的可靠性,且证明是知识性的区别:

SNARK的“S”是简洁性(Succintness),而STARK的“S”是可扩展性(Scalability),它在简洁性的基础上还要求Prover复杂度至多是拟线性(Quasi-linear)的,即?,而Setup的计算复杂度最多是对数的透明性(Transparent):STARK不需要可信第三方Setup;而SNARK没有这个限制非交互性(Non-Interactivity):SNARK一定是非交互的,而STARK没有这个限制可以看出,SNARK比STARK唯一多出的限制就是非交互性。尽管如此,通过后续文章将要介绍的Fiat-Shamir变换,STARK一般都可以转化为非交互证明,转化的结果必然是一个SNARK。在这种意义上,可以把STARK看做SNARK的子集。上述SNARK和STARK的定义是这两个名词的广义涵义。狭义上,它们分别指代两个具体的构造方案。其中SNARK指的是以Groth16方案为代表的一系列基于QAP和双线性对的zkSNARK构造方案。而STARK在狭义上就专门指代Ben-Sasson等人在2018年提出的基于AIR和FRI的那一个方案。

小结

本文介绍了证明系统的定义,并讨论了证明系统的各类性质,重点讨论了“零知识性”、“知识证明”、“简洁性”和“非交互性”,解释了如何用模拟器来定义零知识性,以及用提取器来定义知识性证明。最后,文章讨论并比较了SNARK和STARK。

参考资

Goldreich.?FoundationsofCryptography,Volume1.BasicTools.2001.ZKProofCommunity.?ZKProofCommunityReference.2019.https://docs.zkproof.org/reference.pdfYehudaLindell.?HowToSimulateIt–ATutorialontheSimulationProofTechnique.2018.EliBen-Sasson.?ACambrianExplosionofCryptoProofs.https://nakamoto.com/cambrian-explosion-of-crypto-proofs/

标签:VERRIFIRIFVERIUniversal DollarRIFI币VERIFY价格Veritaseum

MATIC热门资讯
ENT:随着存款合约上线,以太坊 2.0的发布近在咫尺

导12月1日很可能是以太坊2.0的发布日期。文:SHEVCHENKO编译:Zion??????责编:Rose以太坊2.0阶段0已经正式确定在12月1日左右发布.

1900/1/1 0:00:00
COI:比特币成功按照预期站上15000 后市如何去看

大家好,我是渔夫。?这一次的上涨从大选的期间就已经开始一路上冲不回头了,也很多人并没有上到车。?我一直在提大饼的后市我是非常看好的,渔夫也是在周一撒下了网,如今收获颇丰?今日凌晨6点,行情从13.

1900/1/1 0:00:00
GON:八哥币圈:11/6凌晨BTC行情分析与操作策略 多头能量充足 能否继续突破新高呢?

前言:?????????一个成功的投资者所依靠的并不是一门独特的技术指标,也不是非常精准的技术面的分析,而是具备正确的操作理念和方法,尊重趋势顺势操作,避免武断、茫然,积小胜为大胜.

1900/1/1 0:00:00
SEC:11/6 ETH技术分析

作为人,水是饱满的,文字仍是柔软,如果你不了解我的方式,不要打问我的成绩,故事我有,就是费酒,长夜漫漫,无心睡眠,南来北往,不辜负生活,不迷失方向,笑而不答是成长,痛而不语是历练.

1900/1/1 0:00:00
ARBI:火星一线 | 以太坊扩容方案开发团队Offchain Labs推出Arbitrum Rollup上的Uniswap V2端口

文|梁雨山火星财经APP一线11月6日报道,以太坊扩容方案ArbitrumRollup开发团队OffchainLabs宣布推出在ArbitrumRollup上的UniswapV2端口「Arbis.

1900/1/1 0:00:00
RES:文秦:11.7-8下周黄金白银还会跌吗最新行情分析及操作策略

  -黄金行情分析:    黄金触底破位上涨,黄金从低位1858反弹至今日高点1952一线,近100美金的反弹幅度,破位前期的高点,涨势得到延续,金价在上周震荡止跌后,本周开盘即大幅走高.

1900/1/1 0:00:00