[奥卡姆剃刀]盲签字和零知识证明
exp吧
全部回复
仅看楼主
level 7
作者就是140字科普的作者
https://tieba.baidu.com/f?kz=949124383
转两篇完整的科普过来,都出自科学松鼠会
写的科普有趣、实用、好记……这才叫科普嘛
不能泡到基友的豆知识不是好豆知识!

2010年12月14日 21点12分 1
level 7
盲签字
================
电影《无间道》里,梁朝伟饰演的角色陈永仁很尴尬,警校没毕业就被派到黑社会做卧底,到斗争最激烈的时候,他的身丅份证明被黑帮打入警局的刘建明(刘德华饰)彻底删除了,与陈永仁单线联系的黄督察(黄秋生饰)也死了,陈永仁再也没法证明自己是警丅察了,他成了一个黑人。剧情安排他被杀了,这是没办法的事,否则他完成任务之后,如何再回到警局去上班呢?谁又能帮他证明警丅察身份呢?
如果我是他,出于自保的目的,会在当卧底之前把各种可能性都考虑清楚,首先我会要求警局把我的电脑卧底资料加密,密码由我一人掌握,以防刘建明之流从中获取我的信息。但这还不够,因为刘建明之流虽然看不到我的具体信息,但他有可能找到卧底人信息的加密文件,他一鼓脑都删除了,那我也会同样地悲剧了。
命运要掌握在我自己手里,根据这个原则,我按与黄督察约定好的条款写了一份卧底证明,即我的掩护名为“阿仁”,韩琛帮覆灭后就回警局工作,升两级且获丅奖金50万元,并要求黄督察签字盖章。但是,我不能让他看到这份证明,因为黄督察有可能事后变节,把“阿仁”是卧底的情况泄露给黑帮。
我把证明打印好后,把文字部分遮挡住,只留下空白处让黄督察签字盖章。但是黄督察不干,因为他对我写的证明内容没信心,他认为我可能写的是“卧底1个月即退休,退休金2000万”。
如何才能让黄督察既看不到我写的证明内容,又让他确信他已经知道了我的证明内容呢?这看似不可能,但这却是信息安全理论中已经解决了的“盲签字”内容。
我设计了以下的签字流程:
1、我写了10份掩护名不同的证明,有的叫“阿仁”,有的叫“阿德”等等,其它内容都完全一致,用同一种加密方法进行加密,得到十份不同的密文。特别的是,这种加密方法对明文的变化很敏感,即使两份证明中仅有“仁”“德”两个字不同,那密文也显得毫无关系的样子,这叫作雪崩效应,即一丁点的扰动就会引起结果巨大的差别。
2、我找黄督察签字盖章,他随机挑出9份,让我当场解密,他看到解密后的明文与我们的约定相同,只是掩护名不同而矣。于是,黄督察放心地在第10张密文上签了字盖了章,他当然不知道我的掩护名是什么,现在我放心了。
3、我把这份签字盖章的证明妥善保管起来,以备将来回警局时使用,只是掩护名是10个我起好中的随机的一个了,这有点令我不爽,本来是想叫“阿德”的,但黄督察恰好把“阿仁”这份留下来了。
这里面还有3个问题:
1、我为什么选择了有雪崩效应的加密算法呢?
如果没有这种特性,那我加密后的十份密文会非常相似,只有个别位置不相同,黄督察当然会知道不相同之处就是掩护名的密文,他获得了十份掩护名的密文及一一对应的九份掩护名的明文,会很容易地根据这些规律推导出他签字盖章的那份证明的掩护名的明文。而有了雪崩效应,他就找不出掩护名所对应的密文是哪个了,我也就安全了。
2、如果对同一个密文有两种不同的解法,一种可解成不捣鬼的,一种解成捣鬼的,那我当着黄督察的面用前一种解密算法忽悠他签了字,下个月我拿他签字盖章的证明密文找他要钱,使用后一种捣鬼算法,那他不就傻了吗?
这其中涉及到了单向函数问题,什么是单向函数呢?给定了被除数和除数,余数就很容易确定了,例如被除数4除以除数3,余数是1,但给定了除数3和余数1,被除数会有无穷多个。正向推很容易得到确定解,反向推就难以得到确定解了,这就是一种单向函数。黄督察规定我必须使用单向函数加密,这就保证了我不可能有第二种解法,否则我就当知名数学家了,还做卧底这苦差干吗?
3、黄督察为什么也会放心呢?
因为我捣鬼了1份以上(不含)的证明,当场解开9份后一定会被发现,我只捣鬼了1张,而黄督察恰巧没抽到的概率只占1/10,这是我欺骗成功的唯一机会。为了避免欺骗的发生,他事先跟我约定了一个严重的欺诈惩罚条例,只要发现我作弊就开除甚至法办我,如果他还不放心,可以要求我搞100份或更多的证明来,直到他认定我不会傻到为了这么小的可能性而去冒这么大的风险。
在“盲签字”运用中,10个样本是极少的,实际中的样本量可能有几百万个之多,几百万分之一的可能性才能获益,而在绝大多数的情况下会受到严重惩戒的事,但凡有一点理智的人都是不会干的。正是基于这样的考虑,“盲签字”就成为了一种很可靠的安全协议,跟上两篇《阿里巴巴的零知识证明》和《象棋大师的身份欺诈》一样,这种安全协议最不怕的就是惟利是图的人,他们对自己获利的小算盘打得越精,就越能牵着他们的鼻子走。
2010年12月14日 21点12分 2
level 7
零知识证明
=================
战争中你被俘了,敌人拷问你情报。你是这么想的:如果我把情报都告诉他们,他们就会认为我没有价值了,就会杀了我省粮食,但如果我死活不说,他们也会认为我没有价值而杀了我。怎样才能做到既让他们确信我知道情报,但又一丁点情报也不泄露呢?
这的确是一个令人纠结的问题,但阿里巴巴想了一个好办法,当强盗向他拷问打开山洞石门的咒语时,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”
强盗们当然会同意,因为这个方案不仅对他们没有任何损失,而且还能帮助他们搞清楚阿里巴巴到底是否知道咒语这个问题。阿里巴巴也没损失,因为处于一箭之地的强盗听不到他念的咒语,不必担心泄露了秘密,而且他确信自己的咒语有效,也不会发生被射死的杯具。
强盗举起了右手,只见阿里巴巴的嘴动了几下,石门果真打开了,强盗举起了左手,阿里巴巴的嘴动了几下后石门又关上了。强盗还是有点不信,说不准这是巧合呢,他们不断地换着节奏举右手举左手,石门跟着他们的节奏开开关关,最后强盗们想,如果还认为这只是巧合,自己未免是个傻瓜,那还是相信了阿里巴巴吧。
“零知识证明”说的是示证者向验证者表明他知道某种秘密,不仅能使验证者完全确信他的确知道这个秘密,同时还保证一丁点秘密也不泄露给验证者。阿里巴巴的这个方案,就是认证理论“零知识证明”的一个重要协议。
除了被俘后如何靠情报保命这个问题,零知识证明在社会领域中还有着很多应用场合。例如你证明了一个世界级的数学难题,但在发表出来之前,总是要找个泰斗级的数学家审稿吧,于是你将证明过程发给了他,他看懂后却动了歪心思,他把你的稿子压住,把你的证明用自己的名义发表,他名利双收,你郁闷至死,你去告他也没用,因为学术界更相信的是这位泰斗,而不是你这个无名之辈。
这并不是天方夜谭,而是学术界常见的难题,前些年有个博士生告他的泰斗级导师剽窃他的成果,但除了令师生关系恶化外没有任何效果,最后他使出了撒手锏,称他在给导师审阅的论文的关键公式中,故意标错了一个下标,而这会导致整个推导失败。学术委员会一查果真如此,但还是有倾向于泰斗的声音,有人说那是泰斗的笔误,只不过让你发现了而矣,并不能证明那公式就是你推导出来的。
这个博士生故意标错下标,不能说他没有心眼,但他没有把“零知识证明”理论用好,以致于落到这种地步。“零知识证明”早在1986年就被 A.Fiat和A.Shamir用数学的方法给出了解决方案,并在同年申请了美国专利,但由于该理论可能被用于军事领域,专利局被军方密令搁置,6个月后,军方命令:“该申请发表后会有害于国家安全……所有美国人的研究未经许可而泄露将会被判刑罚款”。看来军方认为作者肯定是美国人了,但作者实际上是在美国申请专利的以色列人,研究也是在以色列的大学里做的,军方这个命令摆了个大乌龙,虽然两天后撤消了,但已经成为了学术界的笑柄。
这个笑柄也说明了一个问题,即“零知识证明”非常重要。基于数学的推理虽然非常复杂,但思路却很简单,上述的阿里巴巴方案就是其中之一。其它的一些方案,也都是像这样遵循着分割和选择(Cut and Chose)协议的。
例如图论中有个哈米尔顿回路(Hamiltonian Cyclic)问题,说的是多个顶点的全连通图,若有一条通路通过了所有顶点,且每个顶点只通过一次,那这就是哈米尔顿回路。如果顶点较多的话,即使用计算机穷举计算很难找出这条回路,因为通路的可能性真在是太多了。
如果松鼠会贴了一张全连通图(命名为A图)悬赏哈米尔顿回路,而且任命我(奥卡姆剃刀)作为评审官,你幸运的找到了一条,那该怎么办呢,将结果直接发给我吗?千万不要,因为保不齐我会将你的成果让给了我的亲信。那你该怎么办呢?应该这么办:

2010年12月14日 21点12分 3
level 7

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
2010年12月14日 21点12分 4
level 3
那么在零知识证明中我们利用电邮是否有效呢?大师们能随意篡改时间戳的吧
2010年12月15日 04点12分 5
level 7
[狂汗]电邮当然不算,别说大师,你都能随便改,怎么能做证据
话说关于法院的那一段……恐怕在国内不适用呢……对研究生和博士生而言,遇人不淑你只能自叹倒霉了,何况你从来不是论文第一作者……

2010年12月15日 04点12分 6
1