[原创•区块链关键概念必读系列-07]区块链基本技术之零知识证明

小白入门 李靖
  • 时间:
  • 浏览:

一、背景与概念

“零知识证明”其实并不是一个新鲜概念。早在1985年,它就由S.Goldwasser、S.Micali及C.Rackoff提出了。如果要论年龄的话,它可能比很多币圈人士都要老。只不过,那时候停留在数学理论阶段,除了科学界,并没有被很多人熟知。近年来,随着区块链的火爆以及零知识证明在其中的应用,这个概念才逐渐进入大众视野。

所谓零知识证明(Zero-Knowledge Proof),实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。简单理解,就是证明者能够在不向验证者提供任何有用信息的情况下,让验证者相信你。

二、案例

如果没有相关理论基础,很多人第一眼看到上面的概念解释,可能会觉得“这不就是忽悠嘛”。但其实,零知识证明是一种科学的密码学原理,有严密的数学基础。这里,一个有意思的小故事可以帮助大家理解这个概念。

有一天,山神被强盗抓住了,强盗向山神拷问进入山洞的咒语。面对强盗的逼迫,山神想:如果我把咒语告诉了他们,他们就会认为我没有价值了,就会杀了我;但如果我死活不说,他们也会认为我没有价值而杀了我。怎样才能做到既让他们确信我知道咒语,但又一丁点咒语内容也不泄露给他们呢?

这个问题很纠结,山神思考良久后,想了一个好办法。他对强盗说:“你们在离开我一箭远的地方,用弓箭指着我,当你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”

强盗们同意了,因为这个方案不仅对他们没有任何损失,而且还能帮助他们搞清楚山神到底是不是真的知道咒语这个问题。山神也没有损失,因为处于一箭之地的强盗们听不到他念的咒语,不必担心泄露了秘密,同时他又确信自己的咒语有效,也不会发生被射死的杯具。

强盗举起了右手,只见山神的嘴动了几下,石门果真打开了,强盗举起了左手,山神的嘴动了几下后石门又关上了。强盗还是有点不信,说不准这是巧合呢,他们不断地换着节奏举右手举左手,石门跟着他们的节奏开开关关,最后强盗们想,如果还认为这只是巧合,自己未免是个傻瓜,那还是相信了山神吧。

这样,山神既没有告诉强盗进入山洞石门的咒语,同时又向强盗们证明了,他是知识这个咒语的。

这就是零知识证明的一个重要实例。

[原创•区块链关键概念必读系列-07]区块链基本技术之零知识证明

三、零知识证明的属性与一般过程

通过山神被抓的故事,我们可以看出,零知识证明必须满足以下3个属性:

(1)正确性,即证明者无法欺骗验证者。换句话讲,如果山神不知道咒语,那么,他能瞒过强盗的概率会很低,因为强盗只要多试几次就知道他有没有咒语了。

(2)完备性,即验证者有足够大的理由相信证明者。在故事中,山神真的知道咒语,所以他可以像故事中讲的一样,做足够多的实验,让强盗相信他不是因为巧合蒙对了一次,而是确确实实知道咒语。如果他不知道咒语,多做几次实验就可能露馅儿,强盗就没有理由相信他知道咒语。

(3)零知识性。验证者无法获取任何额外的知识。强盗虽然知道山神有正确的咒语,但并不知道咒语是什么。

这三个属性是不可分离的,必须同时满足。因为山神给强盗证明他知道咒语,可能存在一种情况——他试了很多次都是巧合,存在证明者欺骗验证者的情况。但只要实验重复得足够多,或者一直重复下去,就会让这种巧合(小概率事件)的可能性降到很低,甚至忽略不计。

四、应用

在区块链中,零知识证明已应用其中,最常见是图灵机的计算模型(后续会专门细讲)。另一个应用是ZCash,用零知识证明来实现交易过程的匿名性。

相比于ZCash而言,比特币的转账有一个特点,那就是不匿名。只要我们知道了比特币地址,任何人都可以查到它的所有交易行为信息,比如从谁那里收了币,又转给了谁,一清二楚。这对于某些领域,比如反洗钱,当然是极好的,但对于另一些人,可能就不那么讨人喜欢了。比如一个普通人,花钱去买什么东西,给谁买了礼物,他可能并不想让别人知道。如果大家都能随意查到,他会觉得自己的隐私权受到了侵犯。ZCash的零知识证明,就解决了这部分用户的需求。

在比特币交易中,如果A有3个比特币,要给B转账1个比特币,那么在账本上就会记录着:A转出了两笔比特币,一笔为1比特币,转给了B;另一笔为2比特币,转给了自己。

那么,利用“零知识证明”的ZCash是怎么做到实现匿名交易的呢?

如果A有3个币,要给B转账1个币。A会先把1个币分成若干份随机放进一个“混合熔炉”里,并指定B的接收地址。在这个熔炉里,同时在里面的还有其他人(交易方)放入的若干份币。这些币又被熔炉随机拆分,再随机组合,然后从被“大杂烩”的币中若干份,合成为1个币,转移到B的地址中。

这样的话,经过一系列 “混合”,我们只能知道A给了B一个币,却无法知道A的交易地址等信息,因为B受到的币实际上是多个交易者“杂烩”而成,并不能准确识别它来自哪里。

[原创•区块链关键概念必读系列-07]区块链基本技术之零知识证明

五、零知识证明的优缺点和意义

通过以上解释,我们不难看出,零知识证明最大的优点就是保护了交易的匿名性,减少了双方交换的信息。对匿名隐私保护的更彻底,可以有效解决很多问题。

但这并不意味着零知识证明就没有缺陷,它也可能导致一些问题。

首先,通过零知识证明实现匿名性,所需要的证明信息和计算量比较多。从上面比特币和ZCash的交易过程中我们就可以看出这点,熔炉再造需要大量的拆分和重新组合。这就有可能带来大量的资源浪费,也导致了它的可扩展性面临挑战。

另外,匿名性可能会被某些不法分子利用,增加监管难度。比特币透明交易的技术,可以用做很好的反洗钱工具,而ZCash恰好相反,可能为洗钱提供大量的便利。另外,像黄、赌、毒这些产业,如果利用零知识证明,将会给追踪和监管带来非常多的困难,造成一些社会问题。

所以,零知识证明本身有优点也有缺点,关键看应用于什么领域。未来零知识证明会在区块链中有怎样的发展,一方面取决于从业者如何利用它,另一方面也取决于监管部门如何对待。当然,如果能够出现一种弥补零知识证明的缺陷的新技术,那将为零知识证明的应用打开广阔的空间。

参考文献:

(1)区块链解读-零知识证明- CSDN博客

(2)一文读懂区块链之-零知识证明- 区块网

(3)区块链行业词典-甲子光年