全文约6000字 阅读约15分钟
如果只是为了回答标题问题,两个字就可以:不是。但还是想顺便说说,零知识证明(ZKP)究竟是什么。
虽然零知识证明和零信任这两个词,都带有“零”,都与“信任”有关,但并不是一回事。两者本质上都要增强「信任」,但在增强「信任」的过程中,零知识证明强调不泄露知识;零信任强调不要过度授权。简单说,零知识是为了隐藏知识;零信任是为了控制信任。关于零信任架构可参考《零信任架构》NIST标准草案。
零知识证明解决了信任与隐私的矛盾:既通过「证明」提升「信任」,又通过「零知识」保护「隐私」。是两全其美的方案。
本文更想表达的观点其实是:探索零知识证明的过程,可以探索到安全的本质。以笔者目前认知,安全之终极定义,不是启发式的CIA三性,而是采用形式化验证的可证明安全——上帝(“模拟者”)与科学(数学、计算复杂度)完美结合的推演过程。
本文目录
一、了解零知识证明
1)零知识证明的定义
2)零知识证明的源头
3)零知识证明的核心价值:消灭可信第三方
4)零知识证明的经典示例:色盲游戏
二、领悟信任与安全
1)信任的产生机理
2)证明 vs. 验证
3)信任 vs. 隐私
4)匿名 vs. 假名
三、零知识证明的应用
一、了解零知识证明
01
零知识证明的定义
零知识证明(ZKP,Zero-Knowledge Proof)的定义为:证明者(prover)能够在不向验证者(verifier)提供任何有用信息的情况下,使验证者(verifier)相信某个论断是正确的。
根据定义,零知识证明具有以下三个重要性质:
从定义中,还可以提取到两个关键词:“不泄露信息”+“证明论断有效”。再浓缩一下就是:隐藏+证明。
所以,零知识证明的核心目的是:隐藏并证明需要它隐藏的各类秘密。(感觉很矛盾是吧)
02
零知识证明的源头
零知识证明是1984年由Goldwasser、Micali、Rackoff三个人提出,论文题目是《The Knowledge Complextiy of Interactive Proof Systems》(《交互式证明系统中的知识复杂性》)。
从上图的左上角可以看到,这篇论文其实发表在1989年。原因在于这篇论文的思想太过超前,以至于从1984年写出初稿到1989年正式被采纳发表,经历了整整五年时间。正是由于零知识证明这项开创性工作,Goldwasser和Micali两人在2012年分享了图灵奖——计算机领域最高奖项,也有“计算机界的诺贝尔奖”之称。
03
零知识证明的核心价值:消灭可信第三方
当互联⽹电⼦商务和在线交易蓬勃发展到今天,可信第三方(TTP,Trusted Third Party)几乎不可或缺。但大家体会不到的事实是,可信第三方引入了巨大的「信任成本」。对第三方的过度信任,会带来严重的「隐私泄露」、「单点失效」、「个⼈信息滥⽤」等问题。虽然学术界也提出“半可信第三方”(Semi-trusted Third Party)以放宽条件,但是"半可信" 仍不解决根本问题。根本问题是能否取消第三方。
那么,如果取消了可信第三方,还能保证交易的公平性吗?想象⼀下这个交易场景:⼀个买家拎着现⾦箱⼦,另⼀个卖家也拎着⼀个箱⼦,装着某种贵重货物。在电影中的情节⾥,买卖双⽅会坐在⼀个桌⼦两侧,双⽅倒数3-2-1,然后同时把箱⼦推给对⽅。当然双⽅最好都带武器,防⽌对⽅耍赖。除了买家、卖家,并没有任何第三⽅在场,两⽅也互不信任。容易理解,任何⼀⽅都不愿先出⼿,把⾃⼰的箱⼦交给对⽅,因为担心对⽅拿到箱⼦后⽴即跑路,导致自己钱货两空的结局。
时间走到2008年,⽐特币横空出世,中本聪给出了⼀种天才设计:在⼀个可以⽆任何准⼊许可的P2P⽹络中,采取区块链技术,以⼀种⾮常公平的⽅式进⾏去中心化记账。
我们可以从另⼀个⻆度来理解中本聪的创新:比特币实现了⼀种分布式协议,它以去中心化的方式,「模拟」出了一个「虚拟」的「可信第三⽅」。
而对于零知识证明也可以这样理解:零知识证明实现了一类密码学理论技术,它基于一些安全假设,「模拟」出了⼀个虚拟的可信第三方。
可见,「零知识证明」的一个重要作用是消灭可信第三方。换句话说,零知识证明提供的「信任」,能够代替一个「可信第三方」。
需要注意的是:「零知识证明」取代的并非是「第三方」,而是「可信第三方」。
04
零知识证明的经典示例:色盲游戏
零知识证明背后的逻辑并不复杂。下面给出交互式零知识证明的经典示例——色盲游戏,以帮助理解零知识证明的概念。详见参考资料[1]。
色盲游戏:
在这个游戏中:
零知识证明方法如下:
分析推理过程如下:
第一次:假设Alice确实交换了两个手中的球。
第二次:假设这一次Alice并没有交换两个手中球的位置,然后Alice问Bob是否交换了球的位置。
下图给出了上述情况的概率树:
概率计算结果如下:
这个示例中的零知识证明,是一种基于概率的验证方式(即概率证明,而非确定性证明),验证者(verifier)基于一定的随机性向证明者(prover)提出问题,如果证明者都能给出正确回答,则说明证明者大概率拥有他所声称的“知识”。
看看这个示例是如何满足零知识证明的定义中的三性:
二、领悟信任与安全
01
信任的产生机理
零知识证明是怎么「凭空产生了信任」?
零知识证明的信任,基于比较客观的理论:
如果我们信任这些基础理论(数学、逻辑),也信任安全假设没有被攻破,那么我们确实可以得出下面的结论:零知识证明实现了一类密码学理论技术,它基于一些安全假设,「模拟」出了⼀个虚拟的可信第三方。
2016年《经济学人》提出「区块链是信任机器」。仔细思考信任的推导机制,可以发现:
上述三点:逻辑 <-> 计算 <-> 数据,共同构成一个闭环,也许才能真正实现「信任机器」这一构想。
总之,任何「信任」都需要基于某些信任基础(如可信计算基(Trusted Computing Base)),任何「安全」都有安全性假设。
信任的最后一环是「形式化验证」。形式化验证实际上是为逻辑、流程或业务进行形式化建模,你可以理解为用一种数学语言进行描述,模型就是一些数学概念(或数学对象),比如集合、代数、范畴等等。然后所有的形式化验证都在用「显式」的或「隐式」的方式「严格证明」某个结论(或者叫做定理)。
而理解零知识证明理论的核心,是理解「模拟」这个概念。上面我们提到了两个「模拟」:一个是区块链,另一个是零知识证明。再来回顾一下:
他们之所以可信,是因为他们能够「模拟出可信第三方」。这个模拟过程都是可以形式化的,并且是可证明的。如今,模拟(Simulation)和安全性证明已是密码学界的共识,也是基本的形式化工具,没有经过证明/验证的模拟是无法让大家接受的。
理论上,所有客观标准都能进行验证,大到一个安全协议,小到一行代码,都能采用形式化验证的方法。恰好笔者曾经研究过可证明安全,从那些密码学安全性证明中体会到了「模拟」与「可证明安全」中所表达出的神奇理念。从某种程度上,可以领会到「安全」之真谛。
如果对模拟、安全、不可区分性等形式化验证的方法感兴趣,请参考资料[6],它将带你到另一个存在「上帝」的「平行世界」,横跨科学与哲学问题。
02
证明 vs. 验证
零知识证明的实现可以通过三段旅程来描述:(详见参考资料[3])
「零知识证明」中的「证明」与其定义中的「验证」是何关系?这涉及到证明存在的意义。所有的证明,都体现了「证明」与「验证」的「不对称性」。
某种意义上,「证明」与「验证」的这种不对称性,真正体现了证明的意义,展示了零知识证明的价值。关于这一部分,详见参考资料[2]。
03
信任 vs. 隐私
从根本上讲,信任是个好东西。我们创建了信用体系,可以向我们信任的人和组织提供信贷;依靠名声、信誉记录等,也能够与我们不信任的人开展业务。
04
匿名 vs. 假名
对于隐私的理解,其实分两种:
目前,大多数当前的区块链技术只是假名。如比特币中每个用户都会随机生成自己的公钥(假名)地址来收款。这种公钥地址其实是一种假名,一旦在哪里实名制认证过,就可以把网名和实名关联起来,毫无隐私可言。
如果黑客或政府可以将真实姓名与网络地址相关联,那么可以通过链接区块链交易追溯到用户交易时的身份。尽管区块链被赞誉为完美安全方案,但知情人士都知道这种弱点。事实上,世界各地的执法机构一直在利用这一漏洞来抓住犯罪分子。
这就好比有人用网名在贴吧上发帖子喷人,然后被人用密保找到了手机号,再用手机号找到了注册的实名,从而被人肉是一个道理。
零知识证明可以弥补这种匿名缺陷。利用零知识证明创建信任的社会,是一个更加注重个人隐私的社会。它会把隐私控制权真正转移到消费者手上,而不是将其交给政府或组织等。
三、零知识证明的应用
零知识证明定义中有两个关键词:“不泄露信息”、“证明论断有效”。基于这两个特点,直接扩展出零知识证明在区块链上的两大应用场景:(详见参考资料[1])
2019年7月,美国国防部高级研究计划局(DARPA)发布了一份加密验证和评估信息安全保障(SIEVE)项目的广泛机构公告(HR001119S0076)。该项目寻求在零知识证明方面最先进的技术,目标是在不泄露秘密信息的前提下验证军事能力。该项目关注的是网络安全和网络空间作战方面用于验证军事能力的零知识证明,包括概率和不确定分支条件在内的大型复杂的证明。项目研究分为三个技术领域:构建有用的零知识语句;构建高效的零知识证明生成编译器;后量子零知识研究。