零知识证明入门


今天下午,组里组织了零知识证明的分享。对零知识证明这个小众市场有了初步的了解。

零知识证明实例,阿里巴巴门洞,红球黄球等等。

零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它早于区块链诞生,但由于区块链,它被大家所熟知。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

零知识证明可以分为交互式和非交互式两种。

交互式

零知识证明协议的基础是交互式的。它要求验证者不断对证明者所拥有的“知识”进行一系列提问。证明者通过回答一系列问题,让验证者相信证明者的确知道这些“知识”。然而,这种简单的方法并不能使人相信证明者和验证者都是真实的,两者可以提前串通,以便证明者可以在不知道答案的情况下依然通过验证。

非交互式
非交互式零知识证明不需要交互过程,避免了串通的可能性,但是可能需要额外的机器和程序来确定实验的顺序。

使用场景:

ZCASH可以将交易纪录上的交易双方和金额都加密隐藏起来,因此矿工无从得知这些交易上的细节,但仍然可以验证交易。

  1、 zero knowledge:零知识,即在证明的过程中不透露任何内情,如上文的例子所示。

  2、 succinct:简洁的,主要是指验证过程不涉及大量数据传输以及验证算法简单。

  3、 non-interactive:无交互。

零知识证明的基本概念

零知识证明,zkSNARK,zero-knowledge Succint Non-interactive ARguments of Knowledge 的简称:

  • Succinct:证明的数据量比较小
  • Non-interactive:没有或者只有很少交互。
  • ARguments:验证者只对计算能力有限的证明者有效。拥有足够计算能力的证明者可以伪造证明。这也叫“计算可靠性"(相对的还有”完美可靠性")。
  • of Knowledge:对于证明者来说在不知道证据(Witness,比如一个哈希函数的输入或者一个确定 Merkle-tree 节点的路径)的情况下,构造出一组参数和证明是不可能的。

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

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

参考文章:

https://www.cnblogs.com/Lands-ljk/p/11718235.html

https://learnblockchain.cn/2019/04/18/learn-zkSNARK/

原文地址:https://www.cnblogs.com/zccst/p/13927352.html