从小故事带你理解零知识证明 | 区块链一千零一问
Posted lwx-apollo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从小故事带你理解零知识证明 | 区块链一千零一问相关的知识,希望对你有一定的参考价值。
开胃小故事
阿里巴巴证明
阿里巴巴被强盗抓住,为了保命,他需要向强盗证明自己拥有打开石门的密码,同时又不能把密码告诉强盗。他想出一个解决办法,先让强盗离开自己一箭之地,距离足够远让强盗无法听到口令,足够近让阿里巴巴无法在强盗的弓箭下逃生。阿里巴巴就在这个距离下向强盗展示了石门的打开和关闭。
失物认领证明
小李子不小心丢了钱包,急急忙忙跑去派出所报案,几天之后派出所打电话联系他去失物认领,于是:
“姓名"
“小李子”
“年龄”
“别问,问就是18”
“性别”
“emmm…要不你抬头自己看下?”
“钱包还想不想要了?”
“要啊,那肯定得要,我自己的钱包我为啥不要”
“你怎么证明钱包是你的?”
“钱包是黑色的”
“这个证明不了,黑色的钱包多了去了”
“里面有几张银行卡和现金”
“废话,钱包不放卡和现金放什么?”
“有四张卡,还有250的现金”
“还有别的信息么?这些证明不够充分?”
“里面第二个夹层里面有个内夹层,里面有一张我珍藏多年的照片”
“嗯,行了,签个字把钱包领回去吧”
最后,小李子喜滋滋的拿着钱包回家了。
顺便附上珍藏图片:
手机归属证明
小李子兴高采烈的拿着失而复得的钱包准备回家大吃一顿,挤上了公交,戴上了耳机,突然发现没有声音,一低头,直呼一声好家伙,光天化日之下,一只手刚从他裤兜里拿出来,手里面还握着他的手机,小李子一把就把手机抢过来,还没开口,结果对方先开口了:
“来人啊,有人抢劫了。。。。。。”
小李子愣了一下:“好家伙,恶人先告状的本事可以啊”
小偷看小李子没说话,嚣张的补了一句:“麻溜的,手机乖乖还给我,不要不识好歹。”
小李子不能忍了:“你说手机是你的,那你怎么证明?”
小偷机智的反问:“我的手机我凭什么证明?,倒是你,手机上有写你的名字吗?”
小李子笑了笑:“哟,还挺犟的啊。手机上虽然没写我的名字,但是它有名字啊”
小偷:“呵呵,你在逗我呢?那你喊它一声它会应你吗?”
小李子:“当然会啊!hei,siri”
siri:“。。。。。。”
小偷:“大意了。。。。。。”
于是小李子带着苦逼的小偷,又回到了派出所。
背景
零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。其实,早在16世纪的文艺复兴时期,意大利有两位数学家为竞争一元三次方程求根公式发现者的桂冠,就采用了零知识证明的方法。当时,数学家塔尔塔里雅和菲奥都宣称自己掌握了这个求根公式,为了证明自己没有说谎,又不把公式的具体内容公布出来(可能在当时数学公式也是一种技术秘密),他们摆开了擂台:双方各出30个一元三次方程给对方解,谁能全部解出,就说明谁掌握了这个公式。比赛结果显示,塔尔塔里雅解出了菲奥出的全部30个方程,而菲奥一个也解不出。于是人们相信塔尔塔里雅是一元三次方程求根公式的真正发现者,虽然当时除了塔尔塔里雅外,谁也不知道这个公式到底是个什么样子。
概念
顾名思义,零知识证明就是既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄露出去——即给外界的“知识”为“零”。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
分类
交互式证明
零知识证明协议的基础是交互式的。它要求验证者不断对证明者所拥有的“知识”进行一系列提问。证明者通过回答一系列问题,让验证者相信证明者的确知道这些“知识”。然而,这种简单的方法并不能使人相信证明者和验证者都是真实的,两者可以提前串通,以便证明者可以在不知道答案的情况下依然通过验证。就像上面的失误认领证明小故事。
非交互式证明
非交互式零知识证明不需要交互过程,避免了串通的可能性,但是可能需要额外的机器和程序来确定实验的顺序。就像上面的手机归属证明小故事。
角色
证明人(prover)
证明人提供一系列的结论以供验证者进行验证
验证者(verifier)
验证者根据证明人提供的结论进行验证,无法获取其它的信息
特性
正确性
prover无法欺骗verifier。换言之,若prover不知道一个定理的证明方法,则P使verifier相信他会证明定理的概率很低。
完备性
verifier无法欺骗prover。若prover知道一个定理的证明方法,则prover使verifier以绝对优势的概率相信他能证明。
零知识性
verifier无法获取任何额外的知识。
条件
零知识证明需要满足三个条件。
1、如果语句为真,诚实的验证者(即:正确遵循协议的验证者)将由诚实的证明者确信这一事实。
2、如果语句为假,不排除有概率欺骗者可以说服诚实的验证者它是真的。
3、如果语句为真,证明者的目的就是向验证者证明并使验证者相信自己知道或拥有某一消息,而在证明过程中不可向验证者泄漏任何有关被证明消息的内容。
零知识证明是概率证明而不是确定性证明,但是也可以通过技术将误差降低到可以忽略的值。
应用
zk-SNARK
zk-SNARK是zero-knowledge succint non-interactive arguments of knowledge的简称,全称里面每个单词都有特定的含义:
zero knowledge:零知识,证明过程中不会透露任何信息。
succinct:证据信息较短,方便验证
non-interactivity:无交互的,证明者基本上只要提供一个字符串以供验证。对于区块链来说,这一点至关重要,意味着可以把该消息放在链上公开验证。
arguments:证明过程是计算完好(computationally soundness)的,证明者无法在合理的时间内造出伪证(破解)。跟计算完好对应的是理论完好(perfect soundness),密码学里面一般都是要求计算完好。
of knowledge:对于一个证明者来说,在不知晓特定证明 (witness) 的前提下,构建一个有效的零知识证据是不可能的。
前景
相信大家对当前网络的发达程度并不陌生,经常会有因为肖像权,隐私权等引起的诉讼新闻。而在零知识证明的网络中,能够很好的隔离窥探者、爬虫,完美的保护用户的隐私。
以上是关于从小故事带你理解零知识证明 | 区块链一千零一问的主要内容,如果未能解决你的问题,请参考以下文章
DBA最好的“枕边故事”丨真实世界Oracle故障诊断之一千零一夜