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

转载
1677 天前
5068
万向区块链

来源:万向区块链


小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很生气,后果很严重。预知后续情节,且听下回小课堂分解。