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

用三个朋友之间的数独游戏来引入零知识证明

https://zhuanlan.zhihu.com/p/34072069 

上面两个链接是英文原版和中文翻译,中文翻译的这篇更容易懂,下面是我第一次看英文版之后做的简单翻译,我就不做改动了,如果有对零知识证明感兴趣的伙伴可以去看看上面链接里的博文。Thanks

有三个小孩,分别叫Alice, Bob, Charlie ,他们都很喜欢玩数独游戏。其中Alice最聪明,因此总是设计数独题目给另外两个朋友做。有一次,Alice设计了一道数独难题,Bob很久都解不出来,就认为这道题没有解,去找Alice争论。Alice说:我可以给你证明我知道这道难题的解,但是要用零知识证明的方法(也就是说,让Bob在不看到正确答案的情况下相信Alice是知道正确答案的,即这个数独题是可解的)。下面是Alice的做法:

首先我们需要知道的是,如果数独解出,那么这 9 行 9列的矩阵的每一行,每一列,划分的每一块(3x3矩阵)中的数字都包含1-9这九个数字。

Alice首先将自己的答案填写在卡纸背面,不让Bob看到。然后跟Bob说,你可以选择任意行、任意列、任意块来查看其中是否包含的1-9个数字。

Bob选择查看行,

Alice就把不同行的卡纸放在不同的袋子里,摇晃一下,保证卡纸的顺序被打乱。Bob检查每一个袋子里的卡纸是不是都包含了1-9这9个数字。

Bob:我还是不相信你知道正确答案,我也可以让每一行的都包含1-9的数字

Alice:但是在你选之前我并不知道你要选择查看行。如果我的答案是错的,你就有三分之一的把握测试出来。

Bob认为三分之一的几率还是太小了,所以依然怀疑Alice是否有正确答案。他要求Alice重复刚才的步骤,并且让Bob随机选择查看的角度。经过一系列测试之后,Bob最终认为如果不是Alice运气足够好,就是Alice真的知道这个数独难题的答案。他也非常沮丧,因为他对答案一无所知。他知道的只是很有可能,所有的行、列、块都包含1-9数字,这只有在Alice知道答案的情况下才发生。

这三个朋友把这个作为向对方展示自己知道数独答案的一种方式。毕竟,没有人愿意花时间去解决没有答案的问题。每一次测试都很耗时,但是数独毕竟是一个很严肃的问题。

区块链和全球数独革命

一天,Alice突然向到一个好的办法。为了让她喜欢的数独被数百万人在线分享,她决定开通一个自己的Youtube频道,在这里她会上传自己设计的数独难题。她把这叫做“数独区块链”(她不知道区块链具体是什么,但是他应该是一个最近很酷的词)。她梦想着订阅她栏目的人会给她发比特币并决定加入其它数独频道竞争对手没有的内容:她让Bob用零知识证明证明每一个问题都有解决方案。她会录下所有内容并把它放在数独区块链上,这样每个人都可以知道每一个难题都是确实可解决的。

模拟

 一天,Alice到Bob的家里录证明数独可解的视频,但是因为走的太急把数独的答案落在了家里。因为她着急把这个新难题发布出去,所有她恳求Bob无论如何配合她的录制。她说服Bob假装跟她证明。他们一起商量好Bob"随机"测试的顺序(行、列、块)。因为Alice也知道这个顺序,所以她可以在不知道正确答案的情况下很轻松地通过检测。

在国外旅行的 Charlie 看到了这条视频,并惊讶于Bob和Alice告知他的录制内幕。

Charlie说:我再也不相信你们了,没有人应该相信你们的视频证明。

非置信机器和非交互式证明

想了好几个晚上,Charlie决定自己设计一个测试工具,他把这个机器叫做“The Zero-Knowledge Sudoku Non-Interactive Proof Machine” 简称“zk-SINPM”

这个机器就是一个Alice测试的一个基础自动版本。Alice只需要把她的卡片放在传送带上,把答案告诉机器。这个机器就会自动收集行、列或是块放进袋子里(充分乱序),从机器的另一端出来。然后,Alice可以在不关视频的时候打开每一个袋子揭示里面的卡片。

该机器的控制面板上有一系列拨盘,可为Alice要送入的每组81张卡设置测试。查理设置了自己的秘密测试系列,然后将控制面板的盖板焊接好。现在,Charlie可以相信色是结果了,因为Alice不知道测试顺序。所以他可以看youtube上的证明视频并比较确定Alice没有跟Bob一起作弊。

The ceremony

Alice 和 Bob 都嫉妒这个测试机器,并且都想用它来验证所有难题,包括Charlie发明的问题。唯一的问题就是,Charlie知道这些测试的顺序,他们不能让他用这个来证明(因为他知道顺序所以可以很轻松地作弊)。 Alice建议他们执行一个多方共同设置的机器。她要求Charlie打开面板。控制面板上有三个拨盘,需要旋转以选择测试。她提议把机器放在一个黑暗的房间里,去掉拨盘上的所有标签。每一个人都进房间拨动拨盘到任意随机的位置。用这样的方式,保证每一个拨盘都不会被其中任何人知道。这个设置仪式完成之后,他们就焊接好机器控制面板。

破解机器

一天下午,Bob和Charlie都去旅游了,Alice就独自跟机器在一块。她开始想这个机器是不是真的有说的那么安全。想了一会儿之后,她就决定用一些变化不多的数独难题来发现这个机器用的是什么测试。她用一个她可以解决的难题,把答案传输进机器,确保机器确实被机器接收了。她重复这样的操作,但是只输入行满足要求的“答案”。测试通过了,然后她意识到她可以用这个办法去得到机器里预设置的测试序列。

Alice感到非常沮丧。你能帮助她设计一个更好地 zk-SNIPM吗?你能想一个不这么容易被破解的测试顺序吗?还是说这个方法注定会失败?

关于现实世界的注意事项

实际上,zk-SNIPM是一种非交互的零知识证明程序的细语构造,介于zk-SNARK和防篡改硬件之间。zk-SNIPM依靠“物理”类型的零知识证明。这种物理证明实际上本应该更强大,例如,可以用拍照复印机器复制卡片,同时验证一个答案的行、列、块。

Alice的初始证明方法类似于交互式零知识证明协议,在该协议中,验证者在提交解决方案后将问题发送给证明者。 预先合谋并共享此随机问题的证明者和验证者可以模拟证明,而无需真正知道解决方案。 通过事先将问题本身隐藏在某些密码“机器”中,可以构造出无需交互步骤即可工作的非交互式版本。 这将阻止证明者获得问题。 的确,产生这种可信赖挑战的一种好方法是通过多方计算制定的“ceremony”,该过程将来自多个参与者的随机性组合成单个随机挑战,并在证明系统中进行编码。

The Sudoku example in this post is taken in slightly modified form from Cryptographic and Physical Zero-Knowledge Proof Systems for Solutions of Sudoku Puzzles (Gradwohl et. al.).

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值