借助易于理解的阿里巴巴洞穴的类比,我了解零知识证明的概念。但是,这似乎需要验证者与另一方进行交互。

我还没有找到非交互零知识证明(NIZK)的解释。维基百科文章太复杂了,以至于没有经过高级培训的人都无法理解。

https://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof

有人可以吗?用一种简单的方式解释非交互式零知识的概念吗?

评论

这不是更多的算法问题吗?这与安全性有何关系?

#1 楼

当您自己玩游戏时,ZK非交互式证明。或者,更准确地说,是对自己的公正看法。

在正常的ZK证明中,证明者首先发出一堆承诺,然后验证者发出证明者遵守的挑战;这仅在假设验证者在没有事先与证明者了解的情况下正常发出挑战的情况下才可以证明任何事情。

在非交互式ZK证明中,验证者被哈希函数(或其他函数)取代类似)是在整个承诺集合上计算得出的:哈希函数的结果就是挑战。如果哈希函数确实是一个随机预言机,则证明者无法在尝试之前(即在做出承诺之前)猜测其输出,这就是安全性的来源。

评论


$ \ begingroup $
我想知道和自己一起玩时涉及多少个加密方案。
$ \ endgroup $
–史蒂夫
2014年2月6日在17:07

$ \ begingroup $
“零知识”具有精确的定义。此MAC协议不是ZK(尽管内部使用非交互式ZK证明)。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
2014年2月6日在18:01

$ \ begingroup $
@Steve:Schnorr签名使用了非交互式ZK证明。
$ \ endgroup $
– David天宇黄
2014年12月23日下午13:04

$ \ begingroup $
随机预言概念如何与零知识的定义相吻合,说明应该存在一个可以在概率政治时期重现证据的模拟器?如果模拟器不知道原始信息,如何找到正确的哈希值?
$ \ endgroup $
– Onheiron
15年2月22日在19:55

$ \ begingroup $
从现在开始,当我自己玩耍时,我会说“我正在制作非交互式ZK证明”
$ \ endgroup $
–cygnusv
15年7月1日在9:56

#2 楼

用非常简化的术语来说,NI-ZK证明分两个阶段起作用:首先,使用模拟器运行协议(后者只是一个验证者,但随机选择的方式有所不同),然后可以给出协议的抄本对任何人并说服他们证明是真实的。

实现此目标的最重要方法是:


在随机oracle模型中(假设您拥有访问理想的哈希函数),您可以使用Fiat Shamir启发式方法:将验证者替换为模拟器,并且每当验证者不得不随机选择时,到目前为止,您都可以在整个协议中使用哈希函数(最重要的是,承诺证明者)来模拟随机的,不可预测的选择。由于哈希函数是确定性的,因此如果不更改以前的交互操作就无法更改该值。完成协议后,您可以将成绩单拿给别人。但是,在安全级别上需要权衡取舍:如果证明者能够以一定的概率作弊,那么如果他不喜欢哈希函数的结果,他就可以尝试不同的承诺。所以为了得到例如小于$ 1/2 ^ {80} $的错误,则需要用小于$ 1/2 ^ {160} $的错误概率,用哈希函数代替真正的随机选择。 (这就是为什么它被称为启发式方法,对此没有任何证据)
使用通用的参考字符串,您可以实现NI-ZK。共同参考字符串是符号的随机字符串,它是从某种概率分布中得出的。假定这些随机值可供所有各方使用,但是没有一方对其实际选择有任何影响。并且,如果您根据公共参考字符串使用随机选择来模拟ZK证明,则应该获得与其他任何验证协议记录的结果相同的结果。我相信您在这种情况下不必将安全性参数加倍(例如对于Fiat Shamir),但是另一方面,公共引用字符串比哈希函数更难实现。


评论


$ \ begingroup $
那么在NI-ZKP中如何进行零知识证明呢?因为在交互式ZKP中,我们使用了一个模拟器,只要模拟器未正确猜出挑战,该模拟器就可以倒带验证者的随机磁带。但是,现在模拟器没有任何挑战。对?
$ \ endgroup $
–好奇
'16 Apr 1'在0:18



$ \ begingroup $
那是另一种模拟器。您认为模拟器实际上证明了零知识属性。但是,这不是这里提到的模拟器。为了获得NIZK协议,您首先必须证明它实际上是零知识。然后您可以申请Fiat-Shamir或使用公共参考字符串使其不交互。这里提到的模拟器只是运行协议并根据启发式或CRS(或任何其他设置假设)进行选择,仅此而已。您不能使用它代替零知识证明。
$ \ endgroup $
– tylo
16年4月11日在11:17

$ \ begingroup $
对不起,要求进一步的阐述,但这似乎是我试图理解许多科学论文之后最可理解的解释:如何实际使用CRS?如果Prover和Verifier共享,为什么Prover只看适当的位置就不能知道接下来的挑战?恶意的Prover是否会从CRS做出一项承诺是否正确的决定,如果不正确,就重做一次?如果您可以用常见的明信片方案进行说明,那就太好了:)
$ \ endgroup $
–詹姆斯·卡梅隆(James Cameron)
16 Sep 7'20:33



#3 楼

考虑NP语言SAT。
以下是SAT的非交互式证明:


Prover给出SAT的一个实例(即,n变量的布尔公式)向验证者返回有效分配。
给定实例的验证者和证明将证明所定义的分配应用于实例,并检查其求值是否为1。

显然证明系统不是“零知识”,实际上,验证者在这里知道实例在SAT中,而且还为实例集学习了有效的分配,例如,变量x_1为0,变量x_6为1。 >
现在,我们希望在上面的设置中具有相同的ZK概念,证明者与验证者之间没有交互。
因此,NIZK的思想是证明者可以在其中进行证明的系统产生一个没有任何交互作用的证明,并且该证明应该揭示实例是有效的唯一知识。

ZK的标准定义假定存在无需提供证人即可提供“漂亮”证据的模拟器。
很容易看出,此定义不能在此处直接使用。
为什么?好吧,如果存在这样的模拟器,那么我们要么破坏其健全性,要么使用BPP语言。
实际上,模拟器可以产生有效的漂亮证据,例如$ x \ in L $,但是如果我们将其与实例$ x \ not \ in L $一起使用会发生什么情况:有两种情况:1 ),它可以产生美观的证明,但现在我们有了一个破坏健全性的对手(即,可以使验证者提供虚假陈述的证据的机器),2)它无法产生美观的证明,但是现在我们有一台概率机器可以有效地确定语言$ L $,因此可以确定BPP $中的$ L \。

由于这种不可能的结果,我们需要给模拟器一些额外的力量,一种方法要做到这一点,就是要依靠可信设置假设作为CRS模型。 NIZK通常是这样制定的:


天空中存在一些良好的随机数,这是验证者和证明者的共同参数,证明者提供的NIZK依赖于此。


模拟器获得了一些额外的功能,因为在理想的世界中,它可以控制来自天空的随机性。

因此定义(或更准确地说,定义一种可能的风味) NIZK的一个)需要存在两个模拟器$ S_0,S_1 $,其中第一个可以生成外观良好的通用参考字符串(仅模拟器知道的陷门),第二个可以生成有效语句的美观证明。 br />
在随机预言模型中,概念相似,来自天空的良好随机性是RO,模拟器具有额外的功能,因为它可以与RO进行编程/交互。

#4 楼

直观上,您想将NIZK视为更多的“静态”证明,在您(验证者)拥有证明记录(由证明者交给您)后,您应该能够使用该记录说服自己(在)证明声明的有效性,而无需任何其他帮助或询问以进行验证。

在交互式证明系统中,证明者和验证者之间的回合涉及更多的查询和答案。 NIZK证明几乎总是1个回合。要证明签名的有效性,很容易受到中间人攻击,如果它们使用交互式版本,则NIZK在那里特别有趣。