什么是零知识证明

零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。

零知识证明的定义为:证明者(prover)能够在不向验证者(verifier)提供任何有用的信息的情况下,使验证者(verifier)相信某个论断是正确的。

为了理解上面这段话的含义,接下来给出一个有关零知识证明的非常经典的例子:

阿里巴巴被强盗抓住,为了保命,他需要向强盗证明自己拥有打开石门的口令,同时又不能把密码告诉强盗。他想出一个解决办法,先让强盗离开自己一箭之地, 距离足够远让强盗无法听到口令,足够近让阿里巴巴无法在强盗的弓箭下逃生。如果强盗举起左手,阿里巴巴就使用口令将石门打开,如果举起右手,就将石门关闭。阿里巴巴就在这个距离下向强盗展示了石门的打开和关闭。如果每次都能正确打开和关闭大门,则证实阿里巴巴确实知道石门的密码。

这个整个过程就是零知识证明,即证明者能够在不向验证者提供任何有用信息(石门的口令)的情况下,使验证者相信某个论断(阿里巴巴知道打开石门的方法)是正确的。

由此我们可以总结出零知识证明的三个属性:

如果语句为真,诚实的验证者(即:正确遵循协议的验证者)将由诚实的证明者确信这一事实。

如果语句为假,不排除有概率欺骗者可以说服诚实的验证者它是真的。

如果语句为真,证明者的目的就是向验证者证明并使验证者相信自己知道或拥有某一消息,而在证明过程中不可向验证者泄漏任何有关被证明消息的内容。

零知识证明是一种基于概率的验证方式,验证者(verifier)基于一定的随机性向证明者(prover)提出问题,如果证明者都能给出正确回答,则说明证明者大概率拥有他所声称的“知识”。 零知识证明并不是数学意义上的证明,因为它存在小概率的误差,欺骗的证明者有可能通过虚假的陈诉骗过验证者。换句话说,零知识证明是概率证明而不是确定性证明,但是也存在技术能将误差降低到可以忽略的值。

根据零知识证明的定义可以得知零知识证明具有以下三个重要的性质:

完备性(Completeness):只要证明者拥有相应的知识,那么就能通过验证者的验证,即证明者有足够大的概率使验证者确信。

可靠性(Soundness):如果证明者没有相应的知识,则无法通过验证者的验证,即证明者欺骗验证者的概率可以忽略。

零知识性(Zero-Knowledge):证明者在交互过程中仅向验证者透露是否拥有相应知识的陈述,不会泄露任何关于知识的额外信息。

零知识证明应用场景

从零知识证明定义中可以提取到两个关键词:“不泄露信息”,“证明论断有效”,基于这两个特点扩展出零知识证明在区块链上的两大应用场景:

隐私:在隐私场景中,我们可以借助零知识证明的“不泄露信息”特性,在不泄漏交易的细节(接收方,发送方,交易余额)的情况下证明区块链上的资产转移是有效的。

扩容:在扩容场景中,我们不太需要关注零知识证明技术的“不泄露信息”这个特性,我们的关注重点是它的“证明论断有效”这个特性,由于链上资源是有限的,所以我们需要把大量的计算迁移到链下进行,因此需要有一种技术能够证明这些在链下发生的动作是可信的, 零知识证明正好可以帮助我们做链下可信计算的背书。