零知识证明zkSNARK

最近接触学习零知识证明,很是头疼,没有一些背景知识,只能硬看了,而且也没有别的好方法。

为什么要学习零知识证明

因为区块链的去中心化,导致信息都是公开透明的,比特币、以太坊、EOS等目前绝大部分项目区块链上的交易都是公开的:发送者的地址、金额、接收者的地址等,虽然这个还是匿名的,但是除了匿名之外,其他的信息都是可以被跟踪的,无法达到隐私的目的,如果有人知道了你的地址,那么你的交易记录和资产就完全透明了。

毕竟人都是需要隐私的,在这种情况下,零知识证明就应运而生(其实零知识证明很早就出现了,只是因为区块链的发展而火了起来)。

ZCash项目就用到了零知识证明,可以隐藏交易的发送者、金额和接收者,实现完全隐私的目的。
 

什么是零知识证明

所谓零知识证明,就是比如你知道一个问题的答案,不暴露任何线索的前提下,向别人证明你知道这个答案。

阿里巴巴的例子就是个很好的案例:

阿里巴巴被强盗抓住,为了保命,他需要向强盗证明自己拥有打开石门的密码,同时又不能把密码告诉强盗。他想出一个解决办法,先让强盗离开自己一箭之地,距离足够远让强盗无法听到口令,足够近让阿里巴巴无法在强盗的弓箭下逃生。阿里巴巴就在这个距离下向强盗展示了石门的打开和关闭。

提到零知识证明,就不得不提到zkSNARK,它是零知识证明的一个典型实现。

 

什么是zkSNARK

zk-SNARKs 是 zero knowledge Succinct Non-interactive Argument of Knowledge 的缩写。其中的词语分别解释如下:

zero knowledge: 零知识证明。即验证者(Verifier)不需知道“内情”即可相信证明者(Prover)。在zk-SNARKs中具体指:证明者(Prover)声称自己手中有一个超级复杂多项式方程的解s,验证者不需要知道s具体是什么就可以相信证明者(Prover)。
Succinct: 简洁。主要指在验证过程中传输的数据量不那么大且验证方法简单。
Non-interactive:无交互或者很少交互。证明者只需要提供一些信息,公开后任何人都可以直接进行验证而不需要跟证明者进行交互。这对区块链来说极为重要,因为其意味着可以放在链上给矿工(Miners)验证。
 

zkSNARK实现原理

(这里借用https://www.jianshu.com/p/7b772e5cdaef的一张图,这篇文章讲的很好,虽然我还没完全看懂)

从上图可以看出zkSNARK的实现过程:

1 把要解决的问题转换成QAP问题

2 验证时需要传输的数据量比较大,为了达到简洁的目的,选取抽样点让证明者提供证明

3 又因为不能泄露抽样点原始信息,用到了同态隐藏抽样点信息

4 KCA用来保证证明者使用的是规定的系数向量而不是自己伪造的

5 双线性映射是为了解决乘法同态隐藏的

从这些步骤可以看出,所有没听过的知识的引进只是为了解决一个又一个问题,理解了这样一个逻辑,就一个个难点来攻破,

达到学成的目的?

 

参考资料:

https://www.jianshu.com/p/7b772e5cdaef

等等

你可能感兴趣的:(区块链,零知识证明)