0x01 一个小故事

《阿里巴巴与四十大盗》中有这样一段小故事:

阿里巴巴会芝麻开门的咒语,强盗向他拷问打开山洞石门的咒语,他不想让人听到咒语,又要向强盗证明他知道这个咒语。
那应该怎么办呢?

便对强盗说:「你们离我一箭之地,用弓箭指着我,你们举起右手,我念咒语打开石门,举起左手,我念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。」
这个方案对阿里巴巴没损失,也能让强盗们相信阿里巴巴到底是否知道咒语,于是强盗们同意。强盗举起了右手,只见阿里巴巴的嘴动了几下,石门打开了;强盗举起了左手,阿里巴巴的嘴动了几下,石门又关上了。强盗有点不信,没准这是巧合,但是多试几次过后,他们相信了阿里巴巴。

这样既向强盗们证明了阿里巴巴知道这个咒语的秘密,又没有泄漏这个咒语。

0x02 什么叫做零知识证明

上面的小故事其实就是零知识证明的一个例子。

零知识证明(Zero—Knowledge Proof),简称ZKP。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。