NIP:最接地气的零知识证明解释_SNIPE

编者按:本文来自万向区块链,Odaily星球日报经授权转载。小A、小B、小C三个小朋友是学霸,非常喜欢玩数独游戏,而且经常凑一起解决难题,以此证明自己更聪明。

他们还经常喜欢挑战高难度的,比如这样的:

小A是三个小朋友中最聪明的,他会自己出题,并且设置一些规则,给另外两个小伙伴去解。证明

有一天,小A出了一道非常难的题,小B花了很长时间,就是解不开,于是:小B生气了:“小A,这个数独题根本无解,你这是耍我,想看我出丑!”小A一脸王者之气:“我能证明给你看这题是有解的,而且我知道这个解。”小B:“行,我等着”。同时,内心OS:等你解出来之后,我就把答案记下来,再去测试小C。小A:“我会用‘零知识证明’的方法给你证明我会解这题。也就是说我不会把解给你看,但你却明白我确实有这题的解。”小B:“emmm试试吧。”内心OS:别BB了,快点,我还要去看小C吃瘪呢。承诺

小A拿出81张空白卡片,在每张卡片上写上1-9中的一个数字,并按9x9的矩阵形式,将卡片排列在桌上。代表谜底的卡片,数字面朝下放在桌上;代表谜面的卡片,数字面朝上放在桌上。

随机挑战

小B内心很激动,这就像学霸花很长时间没有解出的附加题,但即将在另一个学霸那看到解题步骤和答案,能不激动吗。小A这时说:“小B,你不能偷看这些面朝下的卡片”。小B很失望,还以为很快就能知道答案了呢。小A接着说:“但我能让你检验这些解,你可以随意挑一行,或一列,或者一个3x3的九宫格区域来检验我的解。”小B决定挑一行来检验。接下来,小A把每一行的9张卡片收起来,每行单独放到一个袋子里。总共9行,所有卡片都被收完放在了9个袋子里。小A摇了摇每个袋子,把里面的卡片顺序打乱,然后把9个袋子递给小B。

小B很困惑,心想这是什么鬼?验证

小A:“好了,你可以打开袋子了。每个袋子里应该都正好有9张卡片,这9张卡片上的数字分别是1-9。”小B打开袋子一看,还真是这样。

小B:“你耍赖,这根本没有证明任何事!我也可以做到,我只要把数字从1到9按任意顺序排成一行不就行了!。”小A解释说:“我又不会读心术,我可不知道你事先会按照行来选,还是按照列或者九宫格来选。你之前如果按照列来选,照样能够得到这样的结果。”事实上,只有正确的解,才会得到这样的结果,即有了正确的解,任意行、列、九宫格内的数字才会是1-9不重复的数字。如果小A的解不正确,至少有30%的概率得不到这样的结果。重复测试

小B还是不服气,他根本没有被小A说服,仍然认为这道题无解。他要求小A按照原来的方法重来一次,他重新测试。后来,他们又重新做了好多次这个测试,无论小B选择行,还是选择列,或者选择一块九宫格,都能得到相同的结果。这下小明不得不承认,小A确实知道这道题的解,因为小A不可能运气好到每次都压中小B会选择哪一行、哪一列或哪一块,毕竟小A不是他肚子里的蛔虫。小A很失望,这么多次测试做完,他还是不知道答案,他只知道每次的排列里,很可能每一行、每一列、每个九宫格确实包含了数字1-9,并且没有重复的数。这很有可能是小A在知道答案的情况下才能实现的。后来小C也知道了这个方法,此后三个小伙伴养成了通过零知识证明去证明给对方看自己知道某道题的解的习惯。虽然每次证明所需的时间都很长而且还挺累人的,但每个数独谜题都是自己花费很长时间才解出来的,才不想把答案告诉其他人呢。越来越多的人加入游戏

后来,小A发现世界上有成千上万的数独爱好者,很多人都通过线上玩。所以他决定开个抖音直播间,这样他可以在线上发布他独创的数独挑战,让更多人来解谜题。做这样直播的人很多,怎样才能吸引更多粉丝呢?小A想了一个办法:他和小B联合直播,每次直播时让小B用零知识证明的方法向观看直播的粉丝们证明这题有解,并且自己知道这道题的解,但不会轻易告诉粉丝。就这样,越来越多的粉丝进入直播间,想要解出小A出的谜题。不仅如此,小A还会把数独挑战的谜题以及证明过程拍下来,发到个人频道上。作假被发现了

有一天,小A又来找小B一起直播,但他发现自己把记录谜题答案的笔记本落家里了。开播时间马上到了,回去拿又赶不上。于是,他和小B商量说:“我们假装做一个零知识证明。”两人一起商定了等会儿小B该如何“随机地”选择行、列、块,因为小A事先就知道小B会选择什么,他只需要按照顺序摆好数字就行了。小C也看了这场直播,事后小A和小B告诉小C,这次直播作假了。小C很气愤,觉得自己的感情受到了,并且扬言再也不会相信他们俩了,他们根本对不起那么多粉丝对他们的喜欢。神奇的机器和非交互证明

小C越想越气,他很喜欢解出数独谜题的那种爽感,也喜欢之前和小A、小B一起玩零知识证明的挑战,但小A、小B却打破了他的信任,他想找出一个检验零知识证明的方法。小C拼命想啊想,甚至失眠了数晚,终于让他想出了一个方法。然后他去找小A和小B,给他们展示自己的新发明“zk-SNIPM”。这台机器本质上是小A和小B的测试的自动化版本。小A只需要把卡片放在传送带上,然后把数独的解放到机器上。机器会自动选择按行、或列、或九宫格来收集卡片,然后放到袋子里打乱顺序,袋子会通过传送带从另一边再送出来。然后小A就可以当着镜头的面拆开袋子展示里面的卡片。这台机器有一个控制面板,上面有一长串的旋转钮,用来指示每次测试选择行还是列或者九宫格。小C设置好了测试顺序选择,并且把机器的控制面板焊死了,以保证小A和小B不知道他选择了怎样的测试顺序。这下小C很放心了,他完全信任自己的这台机器,并把它交给小A和小B,让他俩在下次直播中用这台机器来证明。他很确定有了这台机器,小A和小B再也无法作弊了。仪式

小A和小B很嫉妒小C的这台机器,并且也想用这台机器来验证数独的解。问题是只有小C知道这台机器设置的测试顺序,他们没办法用它来验证小C的解,因为小C知道自己设置了怎样的测试顺序,有可能小C没有解出的题也能通过测试。小A建议小C把控制面板打开,把之前的设置清除,大家一起重新设置控制面板上的测试顺序,他把这个过程叫做“可信任的设置仪式”。小A建议把这台机器放在一个黑屋子里,并把旋钮上的标签撕掉。他们三人分别进入这个屋子,并将机器上的旋钮旋转到一个随机的位置,顺时针旋转三分之一圈,或者顺指针旋转三分之二圈,或者保持原样,随便怎样都行。这样,没有人知道每个旋钮的最终设置,即使其中两个参与者串通一气,没有另外一个人的帮助,他们也不会知道旋钮的最终状态。这个仪式结束后,他们一起把控制面板焊死了。破解机器

一天下午,小B和小C因为有事要出远门,只有小A守着机器,他就想试试这台机器是不是真的像小C吹的那样安全。想了一会儿后,他决定给机器输入一些错误的题解,以此来测试机器的验证顺序。首先,他选择了一个他能解开的谜题,输入机器,观察机器是否接受这个解。然后,他不断重复这个过程,但他改变了输入的解,只在每行里包含1-9的数字,但每列和每个九宫格区域没有严格遵循包含数字1-9,且每个数字不重复的规则。机器没有报错,检验通过了,这意味着可以用这个方式来测试出机器里预先设定的检验顺序。小A挺沮丧的,这个验证方式看来并不完美啊。数独与零知识证明

上面数独游戏的证明就是零知识证明,证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明就是既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄露出去——即给外界的“知识”为“零”。游戏中用来自动化验证数独题解的机器zk-SNIPM就像是“实体化的”zk-SNARKs算法。zk-SNIPM存在一定漏洞,但可以通过设计进行改进,比如,用复印机把卡片的组合复印下来,然后同时验证这些卡片的行、列、九宫格区域。这样就很难通过试错的方式来破解机器。小A和小B在直播中使用的验证方式,就像是“交互式零知识证明”。小B在小A提交答案后,不断地进行随机试验。在这种情况下,如果两个人事先串通,那么在小A没有真正解出题的情况下,小B能够造假证明小A知道答案了。非交互式证明则不需要小A和小B有任何交互,解决了验证者和证明者之间的造假问题,它通过预先将“密码”和“程序”隐藏在“机器”中,自动算出一个证明。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:0ms0-3:604ms