零知识证明(一)——初探阿里巴巴的零知识洞穴

零知识证明(一)——初探阿里巴巴的零知识洞穴

  由于参加了导师的一个项目要用到零知识证明,所以最近入了零知识证明的坑。作为一个才大四还未真正进入研究生阶段的的小白,突然接触一个全新的未知的领域真的手足无措。还好国内的安比实验室发表了很多关于零知识证明的文章,自己读完一部分后感觉受益匪浅。


  第一次看到零知识证明(Zero-Knowledge Proof, ZKP),我想大家跟我一样,对这个概念非常陌生。零知识证明技术是现代密码学三大基础之一,由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世纪 80 年代初提出。

零知识证明(Zero-Knowledge Proof, ZKP):指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的,它实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。

  通俗的来讲,零知识证明就是我让你相信我说的一句话或一个结论而不需要向你透露任何有关该结论的有用信息.举个简单的例子,比如说最近很火的凡尔赛文学,我可以再不向你透露我有多少资产的前提下让你相信我非常有钱,毕竟财产总数是我的私人信息,我不想告诉任何人。
零知识证明(一)——初探阿里巴巴的零知识洞穴_第1张图片
  当然这只是一个开玩笑的例子,大多数人第一次查阅关于零知识证明的资料遇到的例子应该还是阿里巴巴的故事吧。当然这里的阿里巴巴并不是马老板的阿里巴巴,而是童话故事阿里巴巴与四十大盗中的阿里巴巴

阿里巴巴知道打开藏着财宝的山洞的咒语。四十大盗抓住他,让他说出咒语。
如果阿里巴巴说出咒语,就会因为没有利用价值而被杀死。如果阿里巴巴坚持不说,强盗不会相信他真的掌握咒语,也会杀死他。
但阿里巴巴想了一个好办法,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”

  我们可以看下面的一张图

零知识证明(一)——初探阿里巴巴的零知识洞穴_第2张图片
  在这张图中,阿里巴巴知道C与D之间密门的钥匙,那么他可以这么做让强盗相信他有打开密门的咒语并且不告诉强盗咒语是什么

1.强盗在A点站立,并让阿里巴巴走到B点,阿里巴巴随机的从左右两个方向进入洞穴,因此阿里巴巴可能到达C处,也可能到达D处
2.强盗走到B点,并随机让阿里巴巴从左边或从右边出来。如果阿里巴巴拥有密门的咒语,那么无论他现在在C点或者是在D点都可以按照强盗的指令从正确的方向走出洞穴;但如果阿里巴巴如果没有密门的咒语,那么他只有 1 2 \frac{1}{2} 21的可能从正确的方向出来

  到这里,可能有疑惑说 1 2 \frac{1}{2} 21的概率不依然有很大的概率蒙对吗?但是如果重复这个过程50次,如果阿里巴巴拥有咒语,那么他成功的概率肯定为1;如果阿里巴巴没有密门的咒语,那么他保证每一次都猜对的概率仅为 1 2 50 \frac{1}{2^{50}} 2501,所以这个概率是非常小的。强盗可以依此判断阿里巴巴是否在骗自己。
  到这里,我们可以提出零知识证明所具备的三个性质,即:完备性(Completeness),可靠性(Soundness)和零知识性(Zero-knowledgeness)

1.完备性(Completeness):若一个证明方确实掌握了某论断的答案,则他肯定能找到方法向验证方证明他手中掌握的数据的正确性。即我真的很有钱,我必须有充分的理由让你相信我很有钱
2.可靠性(Soundness):若一证明方根本不掌握某论断的答案,则他无法(或只能以极低概率)说服验证方他手中所谓答案的准确性。即我如果不是大土豪,你必须有足够的把握能够拆穿我。
3.零知识性(Zero-knowledgeness):验证方除了知道证明的结果外,对其他信息一无所知。即我在向你证明我有钱的过程中始终没告诉你我到底有多少资产。

  当然,这个例子只是让我们更快地理解零知识证明的小例子。零知识证明作为一项黑科技,在区块链领域大放异彩,并且在隐私保护领域也有非常重要的作用。我们真正能够用的是如何讲一个计算机程序转化为一个零知识证明问题。目前已经有一些开源库实现了零知识证明的通用协议,比如libsnark,它的开发者们是这个领域内顶尖的学者或研究牛人,我们站在巨人的肩膀上已经可以开发出我们自己的零知识证明程序。当然这实现背后复杂的数学原理,还需要我去慢慢深入学习…

你可能感兴趣的:(零知识证明,区块链)