我的兄弟,老王,目前对零知识证明很有兴趣,我在给他讲的过程中,为什么不出一个教程呢?这样给他当教案也很方便。老王,莫要催更
什么是证明呢?Wiki给出如下定义:
A mathematical proof is an inferential argument for a mathematical statement, showing that the stated assumptions logically guarantee the conclusion.
----Wiki
上边是摘自wiki百科的数学证明的定义,翻译下来就是:
数学证明是数学陈述的推论论证,表明所陈述的假设在逻辑上保证了结论。
Note:
argument-------论证,证据
statement-----陈述
这两个东西是很重要的,在接下来的系列教程会用到。
比如,大家都熟悉的欧几里得几何:
五大公理:
由五大公理可以推出整个欧式几何。而这个推理的过程和形式化的表达就是证明
什么是零知识证明呢?零知识证明是如何产生的呢?
下面是一个故事:
Alice:”我知道公司主机的密码“
Bob:”不,你不知道“
Alice:”我知道!“
Bob:”你证明给我看!“
Alice:”是:XXXX“
Bob:”我这就去告诉敌手公司“
Alice:”mmp“
零知识证明在这种背景下产生了。
零知识证明是一种证明,它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。 [ 1 ] ^{[1]} [1]
Jean-JacquesQuisquater 和 Louis Guillou [ 2 ] ^{[2]} [2] 用洞穴故事来解释零知识证明:
洞穴里有一个秘密,知道咒语的人能打开C和D之间的密门。对其他人来说,两条道路都是死胡同。
Peggy知道这个洞穴的秘密。她想对Victor证明这一点,但她不想泄露咒语。下面是她如 何使Victor相信的过程:
如果Peggy不知道咒语,那么她不能打开门,她只能猜测Victor会让他从左边出来还是右边出来,然后她选择到C还是到D,这样她正确的概率就是1/2
那么,随着Victor要求2,3,…n次,Peggey成功的概率就是1/4,1/8,…, ( 1 / 2 ) n (1/2)^n (1/2)n, 总会小到可以忽略。
所以,Peggy只有知道这个秘密才能每次都对,而且Peggy没有泄露这个秘密就让Vicotr相信她,这样就证明成功了。
下面来总结一下零知识证明的一般步骤:
假没Peggy知道一部分信息而且这个信息是一个难题的解法,基本的零知识证明又下面几轮组成:
如果Peggy知道这个问题的解法,那么她很容易就提供了难题的同构并给出新解法。
如果Peggy在骗人,那么她只能:
这样就像上边的洞穴问题,她只能猜测而且猜对的概率是 ( 1 / 2 ) n (1/2)^n (1/2)n。
OK,第一节课就到此为止了,讲解了零知识证明的大概概念,给老王一个基本的印象。
参考文献:
【1】百度,零知识证明,https://baike.baidu.com/item/%E9%9B%B6%E7%9F%A5%E8%AF%86%E8%AF%81%E6%98%8E
【2】Quisquater JJ. et al. (1990) How to Explain Zero-Knowledge Protocols to Your Children. In: Brassard G. (eds) Advances in Cryptology — CRYPTO’ 89 Proceedings. CRYPTO 1989. Lecture Notes in Computer Science, vol 435. Springer, New York, NY. https://doi.org/10.1007/0-387-34805-0_60
【3】应用密码学—协议、算法与c源程序,第二版,Bruce Schneier