首页 >> 计算机科学 >> 文章

战争中你被俘了,敌人拷问你情报。你是这么想的:如果我把情报都告诉他们,他们就会认为我没有价值了,就会杀了我省粮食,但如果我死活不说,他们也会认为我没有价值而杀了我。怎样才能做到既让他们确信我知道情报,但又一丁点情报也不泄露呢?

这的确是一个令人纠结的问题,但阿里巴巴想了一个好办法,当强盗向他拷问打开山洞石门的咒语时,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”

强盗们当然会同意,因为这个方案不仅对他们没有任何损失,而且还能帮助他们搞清楚阿里巴巴到底是否知道咒语这个问题。阿里巴巴也没损失,因为处于一箭之地的强盗听不到他念的咒语,不必担心泄露了秘密,而且他确信自己的咒语有效,也不会发生被射死的杯具。

强盗举起了右手,只见阿里巴巴的嘴动了几下,石门果真打开了,强盗举起了左手,阿里巴巴的嘴动了几下后石门又关上了。强盗还是有点不信,说不准这是巧合呢,他们不断地换着节奏举右手举左手,石门跟着他们的节奏开开关关,最后强盗们想,如果还认为这只是巧合,自己未免是个傻瓜,那还是相信了阿里巴巴吧。

“零知识证明”说的是示证者向验证者表明他知道某种秘密,不仅能使验证者完全确信他的确知道这个秘密,同时还保证一丁点秘密也不泄露给验证者。阿里巴巴的这个方案,就是认证理论“零知识证明”的一个重要协议。

除了被俘后如何靠情报保命这个问题,零知识证明在社会领域中还有着很多应用场合。例如你证明了一个世界级的数学难题,但在发表出来之前,总是要找个泰斗级的数学家审稿吧,于是你将证明过程发给了他,他看懂后却动了歪心思,他把你的稿子压住,把你的证明用自己的名义发表,他名利双收,你郁闷至死,你去告他也没用,因为学术界更相信的是这位泰斗,而不是你这个无名之辈。

这并不是天方夜谭,而是学术界常见的难题,前些年有个博士生告他的泰斗级导师剽窃他的成果,但除了令师生关系恶化外没有任何效果,最后他使出了撒手锏,称他在给导师审阅的论文的关键公式中,故意标错了一个下标,而这会导致整个推导失败。学术委员会一查果真如此,但还是有倾向于泰斗的声音,有人说那是泰斗的笔误,只不过让你发现了而矣,并不能证明那公式就是你推导出来的。

这个博士生故意标错下标,不能说他没有心眼,但他没有把“零知识证明”理论用好,以致于落到这种地步。“零知识证明”早在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图的哈米尔顿回路。

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

大家已经看出来了,零知识证明需要示证者和验证者的密切配合,但如果你只是一个数学界的无名之辈,即使你宣称你解决了数学难题,也不会有人跟你配合着玩零知识证明,那你该怎么办呢?

我告诉你一个可以在法庭上都能当作有效证据的招数,你将证明打印好,选择一个最可靠最权威的邮政公司,把它寄给自己,当你收到这个扣着邮戳的包裹后,不要打开,把它放好,然后就可以把证明寄给数学泰斗。如果他用自己的名义发表了,不必着急,等他依靠其影响力把这个证明炒热后再出手,你上法庭控告他,他当然不承认,在法庭上你将那个没开封的包裹拿出来,上面清清楚楚地盖着时间戳,这就证明了你包裹里的证明是发生在那个时间戳之前的,加上之后的你邮给泰斗论文的邮件存根,和泰斗以自己名义发表论文的时间,三者就构成了一个完整的证据链,泰斗灰头土脸名声扫地,而你大获全胜名利双收。

参考文献:《通信网的安全-理论与技术》,王育民等编著,西安电子科技大学出版社,2000.5

相关文章
  1. 真是既有专业知识又有法律头脑,文理通吃啊!

  2. 剃刀大叔好阴险……
    不过防人之心不可无呀!

  3. 邮戳是很容易伪造的。
    现在都是PGP 的加密算法,你把加密后的内容传给N(N>1)人,然后把未加密内容发表。因为加密算法的不可破性,只需要时间证明,保证了原创。

    这篇文章观点不清晰,没有一个明确理论,没有一个科学界定(到底几次才安全),又没有一个理论不成立的断点的说明。(比如:如果强盗中有一个读唇语的。)(比如:后面AB图转换和B图线路就可能被专家解读从而推导出原解决办法)。
    另外这后面的文章依然没有办法说明最初关于敌人和情报的问题。

    建议作者只针对一个问题来写。写得透彻些。

  4. 学术界为防止被泰斗剽窃,最简单的是到 arXiv 预印本库贴出去,全世界都知道了是你干的,没人敢和你抢了。原因是 arXiv 的公开性以及在学术界公认的公正性。比如证明庞加莱猜想,就是在那里公布的,直到现在都没在任何期刊发表,但数学界都承认是他干的,给他发了菲尔兹奖

  5. 我告诉你一个可以在法庭上都能当作有效证据的招数,你将证明打印好,选择一个最可靠最权威的邮政公司,把它寄给自己,当你收到这个扣着邮戳的包裹后,不要打开,把它放好,然后就可以把证明寄给数学泰斗。如果他用自己的名义发表了,不必着急,等他依靠其影响力把这个证明炒热后再出手,你上法庭控告他,他当然不承认,在法庭上你将那个没开封的包裹拿出来,上面清清楚楚地盖着时间戳,这就证明了你包裹里的证明是发生在那个时间戳之前的,加上之后的你邮给泰斗论文的邮件存根,和泰斗以自己名义发表论文的时间,三者就构成了一个完整的证据链,泰斗灰头土脸名声扫地,而你大获全胜名利双收。

    学术界为防止被泰斗剽窃,最简单的是到 arXiv 预印本库贴出去,全世界都知道了是你干的,没人敢和你抢了。原因是 arXiv 的公开性以及在学术界公认的公正性。比如证明庞加莱猜想,就是在那里公布的,直到现在都没在任何期刊发表,但数学界都承认是他干的,给他发了菲尔兹奖
    邮戳是很容易伪造的。
    现在都是PGP 的加密算法,你把加密后的内容传给N(N>1)人,然后把未加密内容发表。因为加密算法的不可破性,只需要时间证明,保证了原创。

    这篇文章观点不清晰,没有一个明确理论,没有一个科学界定(到底几次才安全),又没有一个理论不成立的断点的说明。(比如:如果强盗中有一个读唇语的。)(比如:后面AB图转换和B图线路就可能被专家解读从而推导出原解决办法)。
    另外这后面的文章依然没有办法说明最初关于敌人和情报的问题。

    建议作者只针对一个问题来写。写得透彻些。
    好主意啊~~~~~!

  6. 最后一个方法只能针对部分情况,比如像文学内容的,因为要想写得一模一样的可能性是几乎为零的,而数学推算之类的,由于其严密性,做到一样是有可能的,并且完全有可能被对手反咬一口说你剽窃了他的。。。就像专利一样,谁先注册算谁的
    敌人和情报的问题。。这个完全是无解的,都要看对象和情形
    任何一个方法获得的结果可能都是多样的

  7. 目前我最想知道的是。。。楼主是不是对我们用了。。零知识证明。。。

  8. 第一个回路的例子没看懂。但是最后的邮包还是看懂了。学到了很多东西,可以说是举一反三。几乎所有有风险的东西都可以用这个办法解决,是一种保护自己利益的手段。

    不得不说这也算是人类的一种悲哀。

  9. 光兄说的太对了
    不是只认发表吗
    数学证明再相似也无所谓,所以权威完全可以说
    啊 原来这个小伙子两个月前也想到这个方法,不过不好意思,我两年前在大便时使劲时就想到了,今天心血来潮所以发表了

  10. 看了这文章,我才知道我还算有点聪明,初中时候上学,有些算术题答不上来,我就用这方法.吓蒙一个答案,往回算,不对就接近点再算,基本试几次就行了,算术题都要四舍五入,所以答案都是正确的,问题是我都没解题过程,老师也为此郁闷.

  11. 文中介绍的是Interactive Zero-Knowledge Proof,阿里巴巴和强盗之间需要多次通信。如果双方的通信比较困难(例如距离很远),那么证明将不适用或难以实现。另外,如果通信次数过多,第三方有可能窃听,并且破解其证明内容(即获得哈米尔顿回路和其对应的A图)。

    目前较新的研究的领域是其扩展: Non-Interactive Zero-Knowledge Proof 。

    • 你的理解也是有偏差的,non-interactive zero-knowledge 是需要有初始设置的,比如说通信双方共享一个随机字符串等,而这些初始设置是需要双方都信任的一个人帮他们完成的,也是有不足之处的。现在ZK的热点不是NIZK,而是适合更复杂环境的高效零知识协议的实现,比如concurrent non-malleable zero-knowledge, resettable sound resettable zero knowledge. 另外还有些纯粹理论上热点。

  12. 看完文章,受益匪浅
    也不禁的想起,邮件中的密送和抄送.
    自己却找不出当中的关联性.

  13. 作者也太水太业余了吧?

    “你将A图的顶点搞乱了,并生成一张新图,只是顶点的位置变了,而新图顶点之间的连线关系与A图是完全一致的。”

    按照这个描述,所谓的“新图”,与A图完全是同构的,其实也就是A图。

    语言也很水,适合吹牛,不适合科普。

    • 两个图本来就是同构的,可能作者害怕用专业术语的话,有的人会不懂吧,呵呵。判定两个图是否同构是NPC问题的。

  14. 这篇文章吧我引领到了科学松鼠会,特来顶贴。

  15. 这个世界就是如此。玩的就是智力。要学会保护自己。

  16. 这是个很有意思的题目啊 也教会了怎么防备别人剽窃自己成果~~~

  17. 很牛的文章,不过解释同构上不太清楚。
    以前公司的专利在国内发表没有什么问题,现在确实遇上零知识证明的困境了,谢谢该文及该文的作者

  18. 我只是想说,四十大盗举起右手,阿里巴巴那白痴念了芝麻开门,门开了,于是强盗就一箭射死他了……而门还是开着的

    这个例子至少得说有两道门

    • 哈哈,我也觉得强盗很白痴啊,门开了把阿里巴巴射死了怎么办?

  19. 很NB,其实基本原理很简单,就是把问题一分为二,或者是两个步骤或者是两个方面,这两方合并就可以解决问题。
    只是在论证时,把问题衍生成同类的若干问题,而面对这若干问题,我们只需回答这两个问题中的一个。
    公正者经过若干次提问之后就会认为问题已解决(依据心理学重复相信)

    同学们,你们也不要纠结了,剃刀老师只是告诉我们零知识证明的理论,不要在举的例子上钻牛角尖了。关键是在实际应用当中活学活用。

  20. 估计大家多多的地方很近的软硬件的几乎每持有的

  21. 阿里巴巴惨了,会被四十大盗打到生不如死的%>_<%
    那个无名小辈也惨了,会被教授迫害到死的T-T