1.
前面我们花费了5集,来介绍一类数学轶事,分别是:
- 毕达哥拉斯也许证明了勾股定理,但是没有成书留世;
- 欧几里得也许证明了勾股定理,他的《几何原本》可做证据;
- 商高也许证明了勾股定理,但他要做相,没有成书留世;
- 牛顿最早创立了微积分,但是没有发表公布;
- 莱布尼茨稍晚一点创立了微积分,但是率先发表;
- 塔塔利亚最先发现了一元三次方程公式,但是保密;
- 卡丹从塔塔利亚处得来一元三次方程公式,但是写进自己书里。
世事难料,人心难测,那么问题来了,如果我知道了某事,并且要向别人证明我确实知道,但是并不能透露出关于这事的任何有用信息,怎么办呢?答曰:用零知识证明。
零知识证明(Zero - Knowledge Proof)是由S.Goldwasser、S.Micali、C.Rackoff 在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
阿里巴巴认识马云后,变成了一个快乐的青年2.
我们先用阿里巴巴的故事说明一下。
强盗抓住了阿里巴巴,向他拷问进入山洞的咒语。阿里巴巴心里想:如果我把咒语告诉了他们,他们会认为我没有价值了,就会杀了我还可以节省粮食;但如果我死活不说,他们会认为我没有价值而杀了我。怎样才能做到既让他们相信我确实知道咒语,但又一丁点咒语也不泄露给他们呢?
这的确是一个令人头疼的问题,但阿里巴巴想了一个好办法。他对强盗说:“你们在离开我十米远的地方,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”
强盗们当然会同意,这个方案不仅对他们没有任何损失,而且还能搞清楚阿里巴巴到底是不是真的知道咒语。阿里巴巴也没有损失,因为处于一箭之地的强盗们听不到他念的咒语,不必担心泄露了秘密,同时又让强盗确信自己有咒语,自己不会被射死。
强盗举起了右手,阿里巴巴的嘴唇动了几下,石门果真打开了,强盗举起了左手,阿里巴巴的嘴唇又动了几下后石门关上了。强盗还是有点不信,说不准这是巧合呢,他们不断地换着节奏举右手举左手,石门跟着他们的节奏开开关关,最后强盗们确信阿里巴巴确实掌握了通关的咒语。
这样,阿里巴巴既没有告诉强盗打开山洞石门的咒语,同时又向强盗们证明了,他是知道这个咒语的。
这就是阿里巴巴的零知识证明。
3.
零知识证明需要满足三个属性。
- 如果语句为真,诚实的验证者(即:正确遵循协议的验证者)将由诚实的证明者确信这一事实。
- 如果语句为假,不排除有概率欺骗者可以说服诚实的验证者它是真的。
- 如果语句为真,证明者的目的就是向验证者证明并使验证者相信自己知道或拥有某一消息,而在证明过程中不可向验证者泄漏任何有关被证明消息的内容。
接下来,我们看另一个更经典的洞穴例子。
R和S之间存在一道密门,并且只有知道咒语的人才能打开。明兰知道咒语并想对盛紘证明,但证明过程中不想泄露咒语。他该怎么办呢?
- 首先盛紘走到P,明兰走到R或者S。
- 盛紘走到Q,然后让明兰从洞穴的一边或者另一边出来。
- 如果明兰知道咒语,就能正确地从盛紘要求的那一边出来。
盛紘重复上述过程很多次,直到他相信明兰确实知道打开密门的咒语为止。
在这里,明兰是证明方,盛紘是验证方。明兰通过上述方法证明了自己确实知道咒语,但是没有向盛紘透露任何咒语的相关信息,这一过程也就是零知识证明。
零知识洞穴零知识证明就说到这里,感兴趣的同学自行搜索其他资料吧!
网友评论