零知识证明入门
今天下午,组里组织了零知识证明的分享。对零知识证明这个小众市场有了初步的了解。
零知识证明实例,阿里巴巴门洞,红球黄球等等。
零知识证明(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/