零知识证明(Zero-Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
零知识证明起源于最小泄露证明。假设P表示掌握某些信息,并希望证实这一事实的实体,假设V是证明这一事实的实体。假如某个协议向V证明P的确掌握某些信息,但V无法推断出这些信息是什么,则称P实现了最小泄露证明。不仅如此,如果V除了知道P能够证明某一事实外,不能够得到其他任何知识,则称P实现了零知识证明,相应的协议称作零知识协议。
零知识证明系统包括两部分:宣称某一命题为真的示证者(prover)和确认该命题确实为真的验证者(verifier)。证明是通过这两部分之间的交互来执行的。在零知识协议的结尾,验证者只有当命题为真时才会确认。但是,如果示证者宣称一个错误的命题,那么验证者完全可能发现这个错误。这种思想源自交互式证明系统。交互式系统在计算复杂度理论方面已经获得异常独立的地位。
零知识证明大体由四部分组成:
多项式问题的转化 - 需要证明的问题转化为多项式问题 t (x) h (x) = w (x) v (x),证明者提交证明让验证者确认多项式成立。
随机挑选验证 - 随机选择验证的数值 s,验证 t (s) h (s) = w (s) v (s)。相对于验证多项式相等 t (x) h (x) = w (x) v (x),随机挑选验证,简单,验证数据少。随机挑选验证,安全性肯定不及多项式等式验证,但如果确实足够随机,安全性还是相当高的。
同态隐藏 - 同态隐藏指的是函数的一种特性。输入的计算和输出的计算保持 “同态”。以加法同态为例,满足如下的三个条件的函数 E (x),称为加法同态:1. 给定 E (x),很难推导出 x. 2. 不同的输入,对应不同输出 3. E (x+y) 可以由 E (x),E (y) 计算出来。乘法同态类似。
零知识 - 证明者和验证者之间除了 “问题证明与否” 知识外,不知道其他任何知识(不知道随机挑选值,不知道挑选值的多项式计算结果等等)。
网友评论