零知识证明

战争中你被俘了,敌人拷问你情报。你是这么想的:如果我把情报都告诉他们,他们就会认为我没有价值了,就会杀了我省粮食,但如果我死活不说,他们也 会认为我没有价值而杀了我。怎样才能做到既让他们确信我知道情报,但又一丁点情报也不泄露呢? 这的确是一个令人纠结的问题,但阿里巴巴想了一个好办法,当强盗向他拷问打开山洞石门的咒语时,他对强盗说:“你们离我一箭之地,用弓箭指着我,你 们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。” 强盗们当然会同意,因为这个方案不仅对他们没有任何损失,而且还能帮助他们搞清楚阿里巴巴到底是否知道咒语这个问题。阿里巴巴也没损失,因为处于一 箭之地的强盗听不到他念的咒语,不必担心泄露了秘密,而且他确信自己的咒语有效,也不会发生被射死的杯具。 强盗举起了右手,只见阿里巴巴的嘴动了几下,石门果真打开了,强盗举起了左手,阿里巴巴的嘴动了几下后石门又关上了。强盗还是有点不信,说不准这是 巧合呢,他们不断地换着节奏举右手举左手,石门跟着他们的节奏开开关关,最后强盗们想,如果还认为这只是巧合,自己未免是个傻瓜,那还是相信了阿里巴巴 吧。

“零知识证明”说的是示证者向验证者表明他知道某种秘密,不仅能使验证者完全确信他的确知道这个秘密,同时还保证一丁点秘密也不泄露给验证者。阿里 巴巴的这个方案,就是认证理论“零知识证明”的一个重要协议。 除了被俘后如何靠情报保命这个问题,零知识证明在社会领域中还有着很多应用场合。例如你证明了一个世界级的数学难题,但在发表出来之前,总是要找个 泰斗级的数学家审稿吧,于是你将证明过程发给了他,他看懂后却动了歪心思,他把你的稿子压住,把你的证明用自己的名义发表,他名利双收,你郁闷至死,你去 告他也没用,因为学术界更相信的是这位泰斗,而不是你这个无名之辈。 这并不是天方夜谭,而是学术界常见的难题,前些年有个博士生告他的泰斗级导师剽窃他的成果,但除了令师生关系恶化外没有任何效果,最后他使出了撒手 锏,称他在给导师审阅的论文的关键公式中,故意标错了一个下标,而这会导致整个推导失败。学术委员会一查果真如此,但还是有倾向于泰斗的声音,有人说那是 泰斗的笔误,只不过让你发现了而矣,并不能证明那公式就是你推导出来的。 这个博士生故意标错下标,不能说他没有心眼,但他没有把“零知识证明”理论用好,以致于落到这种地步。

“零知识证明”早在1986年就被 A.Fiat和A.Shamir用数学的方法给出了解决方案,并在同年申请了美国专利,但由于该理论可能被用于军事领域,专利局被军方密令搁置,6个月 后,军方命令:“该申请发表后会有害于国家安全……所有美国人的研究未经许可而泄露将会被判刑罚款”。看来军方认为作者肯定是美国人了,但作者实际上是在 美国申请专利的以色列人,研究也是在以色列的大学里做的,军方这个命令摆了个大乌龙,虽然两天后撤消了,但已经成为了学术界的笑柄。 这个笑柄也说明了一个问题,即“零知识证明”非常重要。基于数学的推理虽然非常复杂,但思路却很简单,上述的阿里巴巴方案就是其中之一。

其它的一些 方案,也都是像这样遵循着分割和选择(Cut and Chose)协议的。 例如图论中有个哈米尔顿回路(Hamiltonian Cyclic)问题,说的是多个顶点的全连通图,若有一条通路通过了所有顶点,且每个顶点只通过一次,那这就是哈米尔顿回路。如果顶点较多的话,即使用计 算机穷举计算很难找出这条回路,因为通路的可能性真在是太多了。 如果松鼠会贴了一张全连通图(命名为A图)悬赏哈米尔顿回路,而且任命我(奥卡姆剃刀)作为评审官,你幸运的找到了一条,那该怎么办呢,将结果直接 发给我吗?千万不要,因为保不齐我会将你的成果让给了我的亲信。那你该怎么办呢?应该这么办:

1、你将A图的顶点搞乱了,并生成一张新图,只是顶点的位置变了,而新图顶点之间的连线关系与A图是完全一致的。这时,新图中每个顶点与A图中每个 顶点的对应关系你是清楚的,而且新图中的哈米尔顿回路你也是知道的。

2、你将这张新图发给我,没错,就是仅仅一张新图,上面并没有画着你发现的牛B回路。

3、我收到后,对你提出两个问题中的一个:一是证明新图就是从A图变形过来的,所有顶点和连线的关系完全一致,二是画出新图中的哈米尔顿回路。

4、如果你真的找到了A图的哈米尔顿回路,这两个问题当然都能轻松回答。需要注意的是:你只需要回答第3步的其中一个问题,千万不要两个问题一并回 答,否则我就知道你关于A图的哈米尔顿回路了,你就SB了。

5、我还是不相信你,因为有可能你只是将A图变了形,却根本不知道A图的哈米尔顿回路,而我在第3步时恰好要求你证明新图就是从A图变形过来的,你 当然能证明。或者有可能你找了个你知道哈米尔顿回路的图,但这张图跟A图一点关系都没有,而我在第3步恰好要求你画出这张图的哈米尔顿回路。

6、我要求你从第1步开始重复这个验证过程,随着次数的增加,第5步那种巧合的可能性就越来越低,如果你多次能回答对第3步中的问题,那我还不相信 你已经找到了A图的哈米尔顿回路,那我就是一个傻瓜。

7、为了表明我不是傻瓜,我在松鼠会群博里宣布你找到了A图的哈米尔顿回路,而这时我并没有看到你所画的A图的哈米尔顿回路。

回到你证明了世界级的数学难题的问题,你可以用这种分割和选择协议来进行零知识证明,来保护你的权利。你公开声称你解决了这个数学难题后,验证者会 给你出一个其它的题,而能做出这道题的前提条件是已经解决了那个数学难题,否则的话无解,而且这个条件是学术界所公认的,这个题就是所谓的平行问题。不出 所料,你靠着已经解开数学难题的基础把这个平行问题做出来了,但验证者还是不信,他又出了一道平行问题,你又做出来了,多次较量后,验证者就确信了你已经 解决了那个数学难题,虽然他并没有看到具体的解法。

大家已经看出来了,零知识证明需要示证者和验证者的密切配合,但如果你只是一个数学界的无名之辈,即使你宣称你解决了数学难题,也不会有人跟你配合 着玩零知识证明,那你该怎么办呢? 我告诉你一个可以在法庭上都能当作有效证据的招数,你将证明打印好,选择一个最可靠最权威的邮政公司,把它寄给自己,当你收到这个扣着邮戳的包裹 后,不要打开,把它放好,然后就可以把证明寄给数学泰斗。如果他用自己的名义发表了,不必着急,等他依靠其影响力把这个证明炒热后再出手,你上法庭控告 他,他当然不承认,在法庭上你将那个没开封的包裹拿出来,上面清清楚楚地盖着时间戳,这就证明了你包裹里的证明是发生在那个时间戳之前的,加上之后的你邮 给泰斗论文的邮件存根,和泰斗以自己名义发表论文的时间,三者就构成了一个完整的证据链,泰斗灰头土脸名声扫地,而你大获全胜名利双收。

时间: 2024-11-02 21:22:58

零知识证明的相关文章

零知识证明,中间人攻击,盲签名:原理和应用——三篇密码学科普文章

Cocoa:转自科学松鼠会.作者奥卡姆剃刀,貌似是松鼠会的新人,大学教授,写的东西还是很不错的哈- 文章太长,直接附地址了: 盲签名(维基):http://songshuhui.net/archives/37439.html 零知识证明(维基):http://songshuhui.net/archives/36968.html 中间人攻击(维基):http://songshuhui.net/archives/35810.html 零知识证明,中间人攻击,盲签名:原理和应用--三篇密码学科普文章

密码学之《零知识证明》

零知识证明是什么? 假设我们知道某些秘密信息,如果我们想让别人相信我们知道这些秘密信息,同时还不想让别人知道这些秘密信息,则我们可以用零知识证明来向被人证明我们知道这些密码信息. 从程序猿的角度来看,就相当于我掌握了一个很酷炫的算法,可以计算什么东西,我不想告诉你具体的算法,但是还想让你炫耀.于是让你给我一组数字,我用这个函数做计算之后,把结果告诉你,多次下来,如果我每次都能正确快速的计算,那证明我是有一个很炫的算法的,在证明过程中,你对算法的具体内容完全没有了解. 为了说明,零知识证明,有两个

《区块链100问》第58集:零知识证明是什么?

零知识证明是指证明者能够在不向验证者提供信息本身内容的情况下,使验证者相信某个论断是真实可信的一种技术.目前匿名性非常突出的数字资产ZCash的匿名交易就是依靠"零知识证明"实现的. 举个例子,A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开.这时候,A可以选择把钥匙交给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙. 或者A自己用钥匙打开房间,从房间里拿出来一个物体出示给B,B知道这个物体确实只有房间里有.方法二的原理就是零知识

轻松理解零知识证明

零知识证明是一种特殊的交互式证明,其中证明者知道问题的答案,他需要向验证者证明“他知道答案”这一事实,但是要求验证者不能获得答案的任何信息. 一个典型的零知识证明示例是阿里巴巴和强盗的故事: 阿里巴巴知道打开藏着财宝的山洞的咒语.强盗抓住他,让他说出咒语. 如果阿里巴巴说出咒语,就会因为没有利用价值而被杀死.如果阿里巴巴坚持不说,强盗不会相信他真的掌握咒语,也会杀死他. 但阿里巴巴想了一个好办法,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上

一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)

导言:原文的作者是著名的Ghost和Spectre 这两个协议的创始团队的领队Aviv Zohar.原文作者说他的这篇原文又是引用了以下这两篇学术论文: How to Explain Zero Knowledge Protocols to Your Children (Quisquater et. al.) Cryptographic and Physical Zero-Knowledge Proof Systems for Solutions of Sudoku Puzzles (Gradwo

零知识证明zk-snark算法Ubuntu环境搭建

1.环境搭建 1.1.Ubuntu环境搭建 使用的物料: Orcle VM VirtualBox-6.1.0-135406-Win.exe ubuntu-18.04.2-desktop-amd64.iso 1.2.Ubuntu网络设置 https://www.cnblogs.com/weschen/p/7096642.html 1.3.Ubuntu全屏设置 方法一:https://my.oschina.net/u/2454816/blog/1788356 方法二:https://blog.csd

如何学好计算机科学?

推荐:看文中描述应该出自一个本科生之手,但对计算机科学的认识的深度和广度都令人佩服,推荐给大家看看能引起一些思考.本文作者 & 来源不详,欢迎大家补充. 计算机科学与技术这一门科学深深的吸引着我们这些同学们,上计算机系已经有近三年了,自己也做了一些思考,我一直认为计算机科学与技术这门专业,在本科阶段是不可能切分成计算机科学和计算机技术的,因为计算机科学需要相当多的实践,而实践需要技术:每一个人(包括非计算机专业),掌握简单的计算机技术都很容易(包括程序设计),但计算机专业的优势就在于,我们掌握许

数学专业的数学与计算机专业的数学的比较(转)

 虾米大虾~~ 2011-09-20 11:01:54 计算机科学与技术这一门科学深深的吸引着我们这些同学们,上应用数学系已经有近三年了,自己也做了一些思考,原先不管是国内还是国外都喜欢把计算机系分为计算机软件理论.计算机系统.计算机技术与应用.后来又合到一起,变成了现在的计算机科学与技术.我一直认为计算机科学与技术这门专业,在本科阶段是不可能切分成计算机科学和计算机技术的,因为计算机科学需要相当多的实践,而实践需要技术:每一个人(包括非计算机专业),掌握简单的计算机技术都很容易(包括原先Maj

【转】《胡侃学习(理论)计算机》前后篇及两篇补充

今天推荐的是篇老帖,南京大学sir先生的<胡侃>以及后来的两篇补充帖子.算算是十几年前的帖子了,我知道帖子出自南京大学的BBS,百度了一下,却没有翻到原文.不过百度到了一大堆不负责任的转帖,我想我这也不算是抄袭了吧.当年有一位我很尊敬的学长给我推荐的这篇文章,让我受益匪浅(学长当年年轻气盛因为这事还吃过不少亏,他自己一直很内疚). 这几篇帖子适用于学习计算机理论,对于大学本科想要好好学计算机的同学,或者是工作后想要系统的学习计算机及数学理论的同学很有帮助. ==========转载需要分隔线=