一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
零知识证明学习笔记整理之几个常见的例子。
几个经典例子
交互式零知识证明
房子、保险箱
- 这个故事有很多版本,但是大同小异,P想要向V证明他拥有房子or保险箱的钥匙(或密码),而V恰好知道在房子or保险箱里有某些特定的东西:
- V让P拿出某样东西;
- P在V看不到的情况下打开门,拿出东西,展示给V看。
- 因为是特定东西,所以也许一次就可以证明而无需重复。
阿里巴巴山洞(这个故事有很多版本,大同小异)
- 有一个山洞类似下图中的山洞,洞里有个岔路,岔路尽头是不通的,被一扇门阻隔。

- P说他知道一句能打开那扇门的口令,V不相信,P想向V证明但又不想把口令告诉他:
- P随便选择一条岔路走到门前,V此时站在洞外不知道P的选择;
- V随机选择一条出路,进入洞穴向P喊话让他从相应出路出来;
- P根据V的要求穿过门or回头从相应道路出去。
- 重复这个过程多次,V将不得不相信P确实可以穿越那道门
- 还有一个版本是类似阿里巴巴与四十大盗的故事,阿里巴巴知道一个山洞入口门的口令,大盗站在远处(听不到阿里巴巴说话的距离)向阿里巴巴发出指令,阿里巴巴根据指令开门或关门。
色盲游戏
- V是一个色盲,他手里拿着两个在他看来一摸一样的球,但是正常的P表示这两个球颜色不同,V不信:
- V向P展示这两个球;
- V把手背到身后,对球进行操作(交换或不动);
- V重新展示两个球,P判断他是否交换了这两个球。
- 重复这个过程,次数足够多那么V就会逐渐相信,因为P每次都猜对的概率是越来越低的,具体满足如下决策树。

| 知识 | 论断 | 挑战 |
|---|
| 球的颜色 | 两个球颜色不同 | V随机进行的交换 |
- 这个过程必须是实时交互的,V操作完P立刻给出答案,且证明过程无法留存供别人检查。
非交互式零知识证明
数独游戏
- 给出一道数独题,P声称他知道题目答案但又不想告诉V:
- 准备1∼9的数字卡片,每个数字准备3×9=27张,每一个格子要放三张卡片;
- 题面用下述方式展示,即每个格子上放三张相同的数字卡片;

- P解答题目时,若要在某个格子填入数字,那就在这个格子上放三张对应数字的卡片;

- 然后把每一行的9张卡片收集起来打乱分别装进袋子里(一个格子拿一张),每一列的9张卡片收起来打乱分别装进袋子,每一宫的9张卡片收起来打乱分别装进袋子,得到27个袋子,每个袋子里都有九张卡片,理论上九张卡片应为不重复的1∼9;
- V随机打开一个袋子进行验证是否为不重复的九张卡片,验证得足够多他就不得不相信P真的解出了这道题。
- 这个过程不需要交互,袋子可以一直放着,等着随便一个人随时来检验,而P也无需在场。
参考
[1] Zero-knowledge proof - Wikipedia
[2] 零知识证明介绍 - 知乎 (zhihu.com)