零知识证明 zero-knowledge proofs,简写为 ZKPs,最初由 S.Goldwasser、S.Micali 及 C.Rackoff 在 1985 年的论文《互动证明系统的知识复杂性》提出,指的是证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。允许证明者 prover、验证者 verifier 证明某项提议的真实,却不必泄露除了「提议是真实的」之外的任何信息。
其实质是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用,尤其在 NP 问题、身份验证、数字签名、水印检测、密钥交换等,可以有效解决许多问题。加密数字货币与区块链为零知识证明的应用提供了新的方向。
综上,零知识证明是一种特殊的交互式证明,其中证明者知道问题的答案,他需要向验证者证明「他知道答案」这一事实,但是要求验证者不能获得答案的任何信息。
举例说明:
张三想要向李四证明他具有房间号为2210的密码锁密钥,但张三不能直接向李四说出密钥去开门。这个怎么解决呢?张三和李四都知道2210房间里有一张 周杰伦 亲笔签名的七里香海报。只要张三能够拿出这张海报展示给李四看,李四就相信张三拥有这个房间的密钥。这就是零知识证明。