零知识证明是由S.戈德瓦塞、S. Micali和C. 拉科夫在20世纪80年代初提出的,指的是证明者在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。从本质上说,这是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。将零知识证明用于验证,能够有效解决许多问题。当然,零知识证明并不是数学意义上的证明,因为它存在小概率的误差,欺骗者可能通过虚假陈述骗过证明者。换句话说,零知识证明是概率证明而不是确定性证明。
零知识的形式定义必须使用一些计算模型,最常见的是图灵机的计算模型。零知识证明需要满足三个属性:其一,如果语句为真,诚实的验证者(即正确遵循协议的验证者)将由诚实的证明者确信这一事实;其二,如果语句为假,有概率欺骗者就可以说服诚实的验证者它是真的;其三,如果语句为真,证明者的目的就是向验证者证明并使验证者相信自己知道或拥有某一消息,在证明过程中不能向验证者泄露任何有关被证明消息的内容。
比如,A向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,其他任何方法都打不开。这时,就可以采取两个方法:一是A把钥匙出示给B,B用这把钥匙打开该房间的锁,证明A拥有该房间的正确钥匙;二是B确定该房间内有某一物体,A用自己的钥匙打开该房间的门,然后把物体拿出来出示给B,证明自己确实拥有该房间的钥匙。方法二就属于零知识证明,在整个证明的过程中,B始终无法看到钥匙的样子,能够有效避免钥匙的泄露。
再如,A拥有B的公钥,A没有见过B,但B见过A的照片,二人见面,B认出了A,但A不能确定面前的人是否是B。这时,B要向A证明自己是B,有两个方法:一是B把自己的私钥给A,A用这个私钥对某个数据加密,然后用B的公钥解密,如果正确,则证明对方确实是B;二是A给出一个随机值,使用B的公钥对其加密,然后将加密后的数据交给B,B用自己的私钥解密并展示给A,如果与A给出的随机值相同,则证明对方是B。后面的这个方法就属于零知识证明。
又如,有个缺口环形的长廊,出入口的距离非常近,但走廊中间某处有一道只能用钥匙打开的门,A要向B证明自己拥有该门的钥匙。采用零知识证明就是,B看着A从入口进入走廊,又从出口走出走廊,B没有得到任何关于这个钥匙的信息,但完全可以证明A拥有钥匙。