今天这篇文章会讲解其中的zk-SNARK(零知识证明)的技术,先声明一下,V神曾说过看不懂zk-SNARK 也不要怀疑自己的智商,因为它非常难,在这边提醒各位水深请注意安全!

零知识证明

虽然区块链包含匿名性这个特点,但它并不算真正的隐匿,好在世界上的聪明人真的很多,零知识证明可以用来解决这项问题。

其实零知识证明的出现在1985年,更早于区块链,只是区块链让零知识证明发扬光大了。

首先我们来看看零知识证明想做到的事:

不透露一件事情的任何讯息为前提,证明这件事是正确的。

这整件事听起来很吊诡,你怎么可能不告诉我任何资讯,就向我证明某件事是对的我完全不问就傻傻相信了,到时候被诓怎么办

最常被举出的例子— 阿里巴巴的零知识山洞

此图为Chainlink 的零知识证明示意图

在上图中,Alice是prover、Bob是verifier,Alice要在不告诉Bob门锁密码的前提下,向Bob证明自己知道门锁密码。

证明过程是这样的:

Alice不可以直接跟Bob说密码是多少 Alice先从A或是B进去洞穴中 Bob不可以看Alice从哪进洞穴,因此不知道Alice从A还是B进去,但他可以要求Alice从A或B出来,出来的时候可以看。

如何确定Alice知道密码

如果Alice不知道门锁密码,那她通过一次测试的机率只有50% 连续通过十次的机率将不足千分之一 如果次数拉到一百次呢 其实还是有可能在不知道门锁密码的情况下通过,但机率非常非常小

零知识证明如何应用在区块链上的

在虚拟货币传输中,prover在不告诉verifier付款人、收款人、金额的前提下,向verifier证明这笔交易是没问题的。

也就是说,你不必知道我的钱从哪来、要转给谁、要转多少,反正我可以证明我真的拥有消费这笔钱的能力。

现在我们来聊聊zk-SNARK吧!

zk-SNARK 跟零知识证明的关联是什么

zk-SNARK 全名是Zero Knowledge Succinct Non-interactive Argument of Knowledge,让我们拆解一下

Zero Knowledger: 零知识。

证明过程中不透露相关情报 Succinct: 简洁的。

验证过程不会将繁琐的数据传输且验证算法是简单的 Non-interactive: 无交互的。

上举中的prover与verifier需经过多次互动才能得出结果,zk-SNARK 将改善此缺点。 Argument of Knowledge: 知识证明。

这是整个证明的主体,是我们最后想得出的内容,做了种种计算就是为了得出这个结果。

简单来说zk-SNARK 这技术就是简洁的、无交互的、你知道我是对的就好了的技术。