零知识证明

定义

零知识证明(Zero—Knowledge Proof)起源于最小泄露证明。

  • 设 P(Prover)表示掌握某些信息,并希望证实这一事实的实体;
  • 设 V(Verifier)是验证这一事实的实体。

假如某个协议向 V 证明 P 的确掌握某些信息,但 V 无法推断出这些信息是什么,我们称 P 实现了最小泄露证明。

如果 V 除了知道 P 能够证明某一事实外,不能够得到其他任何知识,我们称 P 实现了零知识证明,相应的协议称作零知识协议。

零知识证明需要满足以下性质:

  1. 正确性:P 无法欺骗 V。换言之,若 P 不知道一个定理的证明方法,则 P 使 V 相信他会证明定理的概率很低。

  2. 完备性:V 无法欺骗 P。若 P 知道一个定理的证明方法,则 P 使 V 以绝对优势的概率相信他能证明。

  3. 零知识性:V 无法获取任何额外的知识。

本质

零知识证明并不是数学意义上的证明,因为它存在小概率的误差,欺骗者有可能通过虚假陈述骗过证明者。换句话来说,零知识证明是概率证明而不是确定性证明。但是也存在有技术能将误差降低到可以忽略的值。

举例

  1. 16 世纪的文艺复兴时期,意大利有两位数学家为竞争一元三次方程求根公式发现者的桂冠,就采用了零知识证明的方法。当时,数学家塔尔塔里雅和菲奥都宣称自己掌握了这个求根公式,为了证明自己没有说谎,又不把公式的具体内容公布出来,他们摆开了擂台:双方各出 30 个一元三次方程给对方解,谁能全部解出,就说明谁掌握了这个公式。比赛结果显示,塔尔塔里雅解出了菲奥出的全部 30 个方程,而菲奥一个也解不出。于是人们相信塔尔塔里雅是一元三次方程求根公式的真正发现者,虽然当时除了塔尔塔里雅外,谁也不知道这个公式到底是个什么样子。

  2. 稣吹牛说自己掌握椭圆曲线的除法,即可以通过公钥计算私钥。

1
2
3
公钥 = G * 私钥

私钥 = 公钥 / G

但是这个技术价值千亿美元,稣当然不可能开源,所以稣把中本聪的私钥算出来,然后:

1
2
3
4
5
6
7
稣 != 中本聪

=> 稣没有中本聪的私钥

=> 中本聪的私钥是计算出来的

=> 稣定义了椭圆曲线的除法

注意:这个除法目前并不存在,只是吹牛。

参考

大海捞针是不靠谱的:https://thippo.github.io/