WHCSRL 技术网

零知识证明系列之一——初探零知识证明

前言

区块链的发展可谓是日新月异,分布式账本,哈希函数,merkle tree,公钥算法,p2p网络,共识机制,智能合约等等很高大上的名词相信大家一定都不会很陌生。区块链像一个有机体,融合了各种不同的理论技术。零知识证明是构建信任的重要技术,也是区块链这个有机体中不可缺少的一环。

抛砖引玉的小故事

大家一定对数独游戏不陌生。数独游戏就是有一个9×9的盘面。我们要根据盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(33)内的数字均含1-9,不能重复。假设现在有一个非常难的数独,我废了千辛万苦的力气终于得到了这个数独的解。但是现在我告诉你,我会用零知识证明的方法给你证明我会这题的解,也就是说我不会把解透露给你,却能让你信服我确实有这题的解,仔细想想这是不是一件非常神奇的事情。

首先我拿出81(9x9)张空白的卡片放在桌上,在每张纸上写上1-9中的一个数字。然后我把数独题目给出的已知数字朝上放置,把我自己已经得到的解朝下放置,像下面这样:

图片

然后我对你说,你挑一种检验方式吧,你可以按照每一行,每一列或者每一个小九宫格检验到底我的数字是不是重复的。

图片

那具体的验证方法是什么样子的呢?很简单。我准备了9个袋子,然后按照你指定的验证方法,把每一行,每一列或者每一个小九宫的卡片分别收集到9个袋子中去。

图片

这时候我们打开这些布袋,给你进行验证。如果我确实知道这个数独的解并且正确放置了每一张朝下的卡片的话,此时每个布袋里应该都有9张没有重复数字的,分别是数字1-9的卡片。

图片

这种做法真的能够让人信服吗?你可能会说如果我挑了去检验每一行是不是符合要求,那我就没办法检验每一列或者每一个九宫格是不是符合要求了,你完全可以给我一个只满足行,列或者九宫格要求的错误的数独答案。

但是你不要忘记了,我事先是不会知道你是按照哪种方式去验证的,如果我真的没有数独的解的话,你至少可以以三分之一的概率抓到我在骗人。而且如果进行多次这样的重复验证,我能够瞒天过海的概率也会越来越小,假设验证次数为n,则我欺骗你的概率是3分之2的n次方,这样就可以说明我有很大的几率知道这个问题的解。

从这个小故事可以看出零知识证明的本质就是在不揭晓我所知道或拥有的某样东西的前提下,向别人证明我有很大几率(这点很重要,零知识证明说到底是一个概率上的证明)确实知道或拥有这个东西。

零知识证明的定义

零知识证明(Zero-Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在1985提出的。证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务列步骤。迄今为止,零知识证明已经是密码学的重要构建,数据的隐私保护,计算压缩与区块链扩容,端到端的通讯加密,身份认证,去中心化存储,信用存贮…….都可以看到它的身影。

其实上述的小故事就是一个简易的交互式零知识证明系统。交互式零知识证明需要验证方(你)在证明方(我)放好答案后,不断的发送随机试验。

由此可见一套完善的零知识证明体系需要以下的条件:

(1)完备性。如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。(如果我知道这个数独的解并且我和你都按照小故事里约定好的流程并且没有人作弊的话,你一定可以验证每个袋子分别装有9个不同的数字)

(2)合理性。没有人能够假冒证明方,使这个证明成功。(不知道这个数独解的人一定没办法冒充我和你进行验证并且让你相信他能知道数独的解)

(3)零知识性。证明过程执行完之后,验证方只获得了“证明方拥有这个知识”这条信息,而没有获得关于这个知识本身的任何一点信息。(这里可能需要涉及模拟器的相关概念,简单的说就是你没有办法从从知道数独的解的我这里得到任何关于数独的解的知识)

零知识证明的发展

在1985年以后的很长一段时间内,零知识证明协议由于没有较好的运行效率和通用性,大部分只停留在理论。这些理论的零知识证明协议各自有不同的特点。有的协议是专职协议,只能证明某些特定的事情,例如著名的Schnorr 协议、三色图协议,有些零知识证明协议是全能的,只要你能用代码定义的问题,它都能证明(只是理论可行,不意味着有运行效率)。有些协议是交互式的,需要证明者和验证者来回发很多轮消息,有些是非交互式的,证明者只需要根据协议向验证者发一次消息。有的协议证明大小与问题规模相关,问题越复杂,证明越长。而有些协议下,无论问题多复杂,证明大小都一样。而一个全能的,非交互的,常数大小的零知识证明协议,是密码学研究者们多年奋斗的目标,在这个目标下,zk-SNARK横空出世。zk-SNARK(zero-knowledge succint non-interactive arguments of knowledge)里面的每个单词都有特定的含义:

Zero knowledge:零知识证明。

succinct:简明的,证据信息较短,方便验证。

Non-interactivity:非交互的,证明者只要提供一个字符串,可放在链上公开验证。

Arguments:证明过程是计算完好(computationally soundness)的,证明者无法在合理的时间内造出伪证(破解)。

of knowledge:对于一个证明者来说,在不知晓特定证明 (witness) 的前提下,构建一个有效的零知识证据是不可能的。

自此以后,Libra、Sonic、SuperSonic、PLONK、SLONK、Halo、Marlin、Fractal、Spartan、Succinct 、Aurora ,OpenZKP、Hodor GenSTARK、RedShift、AirAssembly……各式各样的零知识证明协议接连问世。他们都有着各自的优缺点,其中的很多协议被运用在了区块链以及加密货币中。

结语

总之,零知识证明学习曲线陡峭,它涉及密码学,抽象代数,线性代数,数论等学科的综合应用,它引入的概念、符号很多会让人眼花缭乱。下一篇文章我们会先简单介绍一下Schnorr协议以及从完备性,合理性和零知识性去进行分析。希望各位保持耐心,由浅入深,循序渐进,揭开零知识证明的神秘面纱。

参考

  • 公众号“星想法”:--https://mp.weixin.qq.com/s/eU8mp81VhpV-g1x89-uZYA

  • 公众号“安比实验室”:--https://github.com/sec-bit/learning-zkp/blob/master/zkp-intro/1/zkp-back.md

  • 小故事的来源:--https://medium.com/qed-it/the-incredible-machine-4d1270d7363a

Tips

更多长安链开源项目QA,可登陆开源社区、技术文档库查看。

下载源码

https://git.chainmaker.org.cn/chainmaker/chainmaker-go

查阅文档

https://docs.chainmaker.org.cn/

更多社区权益申请

https://wj.qq.com/s2/8620064/7abd

图片

图片

“长安链ChainMaker”是国内首个自主可控区块链软硬件技术体系,由微芯研究院联合头部企业和高校共同研发,具有全自主、高性能、强隐私、广协作的突出特点。长安链面向大规模节点组网、高交易处理性能、强数据安全隐私等下一代区块链技术需求,融合区块链专用加速芯片硬件和可装配底层软件平台,为构建高性能、高可信、高安全的数字基础设施提供新的解决方案,为长安链生态联盟提供强有力的区块链技术支撑。取名“长安链”,喻意“长治久安、再创辉煌、链接世界”。

推荐阅读