谢谢
@康克由同学的支持~虽然我真的觉得他的答案很好呢。。。为了让大家理解起来更方便一点,我补充了一个更生动例子,希望能够解释得更清楚,也欢迎大家指正~
试图给一个偏学院派的回答~
「零知识证明」是密码学中存在于「证明者(prover,以下用P代替)」和「验证者(verifier,以下用V代替)」双方的一种协议,这种协议的要求是:
- P使得V相信其拥有某知识
- V不能从证明过程中得到知识的任何信息
为了使得V相信P拥有知识,证明须满足:
- 完备性:如果P确实拥有知识,那么证明成功的概率大于2/3
- 可靠性:如果P并不拥有知识,那么证明成功的概率小于1/3
若证明满足上面的条件,则通过反复多次的证明,就能使得V相信P拥有知识的概率趋近1,P不拥有知识的概率趋近0。
概念结束(心累。。。)
下面举例说明:
第一个例子,也是
@康克由原答案中引用的文章里提到的
战争中你被俘了,敌人拷问你情报。你是这么想的:如果我把情报都告诉他们,他们就会认为我没有价值了,就会杀了我省粮食,但如果我死活不说,他们也会认为我没有价值而杀了我。怎样才能做到既让他们确信我知道情报,但又一丁点情报也不泄露呢?这的确是一个令人纠结的问题,但阿里巴巴想了一个好办法,当强盗向他拷问打开山洞石门的咒语时,他对强盗说:「你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。」
强盗们当然会同意,因为这个方案不仅对他们没有任何损失,而且还能帮助他们搞清楚阿里巴巴到底是否知道咒语这个问题。阿里巴巴也没损失,因为处于一箭之地的强盗听不到他念的咒语,不必担心泄露了秘密,而且他确信自己的咒语有效,也不会发生被射死的杯具。
这个方法是如何成为零知识证明的呢?
完备性:当阿里巴巴知道咒语时,他一定可以按照强盗的要求正确的开关石门,正确率100%。
可靠性:如果阿里巴巴并不知道咒语,那么他必然不能正确开关,强盗会立刻发现,他就挂了。就算阿里巴巴运气好,随口说了一句「哈库呐玛塔塔!」,正好石门里有人想开门透透气开了门,让强盗们以为他掌握了咒语,这种情况也不会总是发生(概率很小)。只要强盗们多下几次指令,就可以将这样的运气成分降低到可以忽略不计。
而强盗在验证了阿里巴巴确实拥有咒语的同时,又不能得到咒语的任何信息,因此这是一个成功的零知识证明。(当然我才不相信会有这么守规矩的强盗=.=,门一开还不直接毙了阿里巴巴冲进洞去吗。。)
第二个例子。
仍然拿楼上Hamilton回路举例。具体过程为:
- P随机构造一个图G的同构图G',将G'发给V
- V随机从以下两者中选择一项
那么首先我们来看P是否能证明他真的知道图G的Hamilton回路C:
接下来我们看V是否会从证明过程中获得知识:
如果V能够由C'得到C,那V就知道G‘和G的同构对应关系,而这在计算上是不可能的(这个证明方法的基础就是同构图的判断是很困难的)。
由此我们可以看出以上证明是一个零知识证明。
再举一个跟图有关的例子:
图的三色问题,是指找到这样一种染色方法,将图的顶点用三种颜色中的一种染色,并使得相邻顶点不同色。假如P找到了图G满足三色问题的一种染色方法,想要证明给V,他应该怎么做呢(O.O)?
步骤如下:
- P随机选择一种颜色的置换方式(如红-蓝,蓝-黄,黄-红),将原来的染色方案按照颜色置换重新染色。将染色过后的G放在密封的信封里发给V。
- V随机选择图中的一条边,并要求P打开这条边的两个顶点。
- P打开相应的信封,展示顶点的颜色。
- 如果展示的顶点颜色不同,则V接受证明。
完备性:如果P确实有三染色方案,那么证明必然成功。
可靠性:如果P没有三染色方案,那么他的染色方案中至少有一条边是顶点同色的。假设图G有n条边,那么证明失败的概率至少是1/n。如果证明进行m次,那么P人品爆表蒙混过关的概率就会小于(1-1/n)^m,当m足够大,这个概率就趋近于0。
而由于每次的随机颜色置换,V无法从揭示的边中获得任何染色方案的信息。因此这个证明是零知识证明。
至于如何构造这样的「信封」,使得V在P开启信封前不能看到信封中的内容,而P也无法通过不同的"拆封"方式而操纵信封中的内容,这就是另外一种密码协议「承诺协议」的范围了。