零知识证明

admin
admin 2019年09月16日
  • 在其它设备中阅读本文章

零知识证明 (Zero—Knowledge Proof) 指的是 证明者(P)能够在不向 验证者(V)提供 任何有用的信息 的情况下,使验证者相信某个 论断 正确 的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。

分类

交互式零知识证明:
零知识证明协议的基础是交互式的。它要求验证者不断对证明者所拥有的“知识”进行一系列提问,证明者通过回答一系列问题,让验证者相信证明者的确知道这些“知识”。
例如,如果有人声称自己知道数独游戏的答案,零知识证明的过程就是验证者需要随机指定要通过列、行进行验证。每轮测试不需要知道具体的答案,只需要检测数字 1~9 是否包含在内。只要验证的次数足够多,就有理由相信证明者是知道数独问题答案的。
然而,这种简单的方法并不能使人相信证明者和验证者都是真实的。在数独这种情况下,两者可以提前串通,以便证明者可以在不知道答案的情况下依然通过验证。如果他们想要说服第三方,验证者还必须要证明验证过程是随机的,并且他不会向证明者泄漏答案。因此,第三方难以验证交互式零知识证明的结果,要向多人证明某些东西的话则需要额外的努力和成本才行。
非交互式零知识证明:
顾名思义,非交互式零知识证明不需要交互过程,避免了串通的可能性,但是可能需要额外的机器和程序来确定实验的顺序。
例如,在数独这个例子中,由程序决定要验证的列或行。验证序列必须保密,否则验证者可能会在不知道真正“知识”的情况下通过验证。

性质

  • 正确性:P 无法欺骗 V,P 在没有知识的情况下极小概率通过 V 的验证
  • 完备性:V 无法欺骗 P,P 在有知识的情况下极大概率可以通过 V 的验证
  • 零知识性:V 即使行为不诚实,也无法获取任何额外的“知识”

属性

零知识证明需要满足三个属性。
1、如果语句为真,诚实的验证者(即:正确遵循协议的验证者)将由诚实的证明者确信这一事实。
2、如果语句为假,不排除有概率欺骗者可以说服诚实的验证者它是真的。
3、如果语句为真,证明者的目的就是向验证者证明并使验证者相信自己知道或拥有某一消息,而在证明过程中不可向验证者泄漏任何有关被证明消息的内容。
零知识证明并不是数学意义上的证明,因为它存在小概率的误差,欺骗者有可能通过虚假陈述骗过证明者。换句话来说,零知识证明是概率证明而不是确定性证明。但是也存在有技术能将误差降低到可以忽略的值。

组成

零知识证明大体由四部分组成:

  • 多项式问题的转化 - 需要证明的问题转化为多项式问题 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) 计算出来。乘法同态类似。
  • 零知识 - 证明者和验证者之间除了 “问题证明与否” 知识外,不知道其他任何知识(不知道随机挑选值,不知道挑选值的多项式计算结果等等)。

优点

  • 在使用零知识证明的时候,不降低安全性。
  • 零知识证明工作高效,计算过程量小,双方交换信息少。
  • 既安全、又有良好的隐私、又减少计算量。

例子

  • A 要向 B 证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。
  • B 确定该房间内有某一物体,A 用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给 B,从而证明自己确实拥有该房间的钥匙。