​零知识证明 zero-knowledge proofs,简称ZKPs,我们都知道区块链本身的一个关键优势就是透明性,但是在很多情况下,智能合约应用却出于各种商业或法律原因需要保障数据隐私,比如传入真实有效的数据来触发智能合约执行,但这涉及到信息会有泄露的风险。如何避免这种情况的发生呢?零知识证明的出现很好地解决了这个问题。
零知识证明(Zero Knowledge Proof)的研究最早始于1985年,由MIT教授Shafi Goldwasser, Silvio Micali 和 密码学大师Charles在《The Knowledge Complexity of Interactive Proof-Systems》论文中提出。正是这篇文章提出了 零知识证明 这个伟大概念,并逐步成为了现代密码学理论的根基之一,而Shafi Goldwasser和Silvio Micali也于2012 年获得了有“计算机界诺贝尔奖”之称的图灵奖。零知识证明系统所要完成的任务是「证明某一个事实并且不泄露知识」。这个过程就是零知识证明。
听起来还是有些晦涩难懂?讲个简单的例子:
最强白话讲懂零知识证明!
(图源网络,侵删)
阿里巴巴的故事想必大家都听过,有一天,劫匪抓住了阿里巴巴,拷问他想要得到进入山洞的咒语,但是聪明的阿里巴巴知道,如果把咒语告诉了劫匪,那么他也就彻底没有了价值,肯定会将他杀掉,死活不说,那么也会杀掉他,于是他想到一个好办法,即能不泄露咒语,又能让劫匪相信他知道咒语。
阿里巴巴说:“你们离我一箭远,然后用弓箭指着我,当你们举右手我会念咒语打开石门,当你们举左手我会念咒语关上石门,如果我逃跑或没有做到,证明我不知道咒语,你们可以一箭杀掉我。”劫匪同意了这个提议,多次尝试后阿里巴巴都成功按照指示让石门打开或关上了,但是由于有一定距离,他们听不清楚咒语到底是什么,就这样,阿里巴巴没有透露任何消息就向劫匪证明了他的真实性。
这个例子非常简单,虽然只是零知识证明机制简单的概念演示,真正的零知识证明运用的是密码学,在不透露数据的情况下证明数据的存在。总而言之,要创建零知识证明,验证者(劫匪)需要让证明者(阿里巴巴)执行一系列操作,而证明者只有在得知底层信息的情况下才能正确执行。如果证明者乱蒙一个结果,那么验证者极有可能在验证中发现并证明他的错误。那么零知识证明应用在区块链中有哪些价值呢?
最强白话讲懂零知识证明!
自从这个概念被提出来后,人们就将其应用到了各个领域,比如身份认证系统、存证系统、数据共享、水印检测,密钥交换等等,在隐私数据越来越受到大家关注的今天,零知识证明在隐私数据保护的应用中大放异彩:
保护隐私数据:日常生活中,比如只想证明考生及格了,但不想透露具体考了多少分;买保险的时候,只想证明自己没有心脏病,却不想暴露病例的所有信息,不管是哪种信息,都可以把不想暴露的部分换成一个很像随机数字的零知识证明,能够证明数据真实可信。
身份认证:在使用网站时,用户可以向网站证明他拥有私钥,或者知道某个只有自己才知道的答案,网站不用知道密钥,但可以通过零知识证明确认用户身份,通过去中心化存储,服务器可以向用户证明数据被妥善保存下来且不被泄露。
计算压缩与区块链扩容:在传统的区块架构中,同样的计算被重复多次,比如签名校验,交易的合法性校验,智能合约执行等一些其他的地方,因为有了计算的证明,同一个计算就不需要多次重复了,计算过程可以被零知识技术证明压缩。
由此,零知识证明真正解决了「数据的信任」,实现了「隐私数据的保护」,也让区块链真正实现了「信任机器」这一构想。