零知识证明介绍

2020-06-30 12:05 栏目:经验之谈 来源:网络整理 查看()

你可能不知道什么是零知识证明,但当涉及到应用零知识证明技术的区块链产品时,你可能并不陌生。Zcash是一种使用零知识证明技术的私有货币,以太网上的混合货币契约也是零知识证明技术的应用,今年流行的离线扩展技术zkRollup也是零知识证明技术的应用。此时,你可能会好奇什么是零知识证明技术,以及为什么它可以用于隐私和扩展。在接下来的一系列文章中,我们将逐一介绍您,从零知识证明的概念到零知识证明背后的加密实现。

什么是零知识证明

零知识证明的定义是证明者可以说服验证者某个断言是正确的,而无需向验证者提供任何有用的信息。

为了理解上一段的意思,下面给出一个非常经典的零知识证明的例子:

交互式零知识证明——色盲游戏

爱丽丝是色盲,但鲍勃不是。鲍勃有两个大小和形状相同的球,但是这两个球的颜色不同,一个是蓝色的,另一个是红色的。因为爱丽丝是色盲,爱丽丝不能分辨这两个球是否相同。鲍勃需要向爱丽丝证明这两个球是不同的。这里,爱丽丝被称为验证者,他需要验证鲍勃的陈述是否正确,鲍勃被称为证明者,他需要证明他的陈述(有两个不同颜色的球),当爱丽丝不能得到这两个球的颜色时,鲍勃需要证明这两个球的颜色对爱丽丝是不同的,这与零知识证明的定义是一致的。

爱丽丝在鲍勃面前捡起两个球,左手拿着蓝色的球,右手拿着红色的球,然后把手放在背后,这样鲍勃就看不到爱丽丝手中的球了。爱丽丝在他背后随机交换左球和右球。交换结束后,爱丽丝伸出双手,问鲍勃这两个球是否交换了位置。如果鲍勃能看到球上的颜色,每当爱丽丝改变球的位置时,鲍勃就能正确回答爱丽丝的问题。

零知识证明介绍

爱丽丝第一次偷偷交换了手中的球的位置,然后爱丽丝问鲍勃是否交换了球的位置。如果鲍勃回答“是”,爱丽丝有50%的概率相信鲍勃能区分两个球的颜色,因为鲍勃有1/2的概率被匹配,所以爱丽丝可以再次进行测试。如果鲍勃回答不,爱丽丝可以肯定鲍勃不能区分两个球的颜色。

零知识证明介绍

第二次,爱丽丝没有改变她手中的球的位置,然后爱丽丝问鲍勃是否改变了球的位置。如果鲍勃回答不,爱丽丝有75%的概率相信鲍勃能辨别两个球的颜色。

零知识证明介绍

这是上述情况的概率树:

零知识证明介绍

在第一次迭代之后,爱丽丝可以说鲍勃的断言为真的概率是50%。如果鲍勃第二次回答正确,爱丽丝可以说鲍勃的陈述是正确的,概率为75%。在第三次迭代之后,它将是87.5%。如果鲍勃连续n次通过考试,爱丽丝有1-(1/2) n的概率,这可以被认为是鲍勃所说的真理,这两个球确实是红色和蓝色的。

零知识证明是一种基于概率的验证方法。验证者根据一定的随机性向证明者提问。如果证明者能够给出正确的答案,这意味着证明者很有可能拥有他声称的“知识”。零知识证明不是数学意义上的证明,因为它有一个小的概率误差,欺骗的证明者可能通过虚假陈述欺骗验证者。换句话说,零知识证明是概率证明,而不是确定性证明,但是也有一些技术可以将错误减少到可以忽略的程度。

根据零知识证明的定义,我们可以知道零知识证明具有以下三个重要性质:

1.完整性:只要证明者有相应的知识,就可以通过验证者的验证,即证明者有足够的概率说服验证者。

2.合理性:如果证明者没有相应的知识,他就不能通过验证者的验证,也就是说,证明者欺骗验证者的概率可以忽略。

3.零知识:在互动过程中,证明者只向验证者揭示他是否拥有相应的知识,而不揭示任何关于知识的附加信息。

在这个例子中,如果鲍勃知道不同的球的颜色,鲍勃每次都会答对。这叫做完整性。如果鲍勃不知道球的颜色,他就不能告诉爱丽丝是否换了球。这叫做可靠性。在这个协议中,爱丽丝看不到球的颜色。这被称为零知识。

非交互式零知识证明-数独游戏

交互式零知识证明协议依赖于验证者的随机尝试,并且需要证明者和验证者之间的多次交互。非交互式零知识(NIZK)将交互次数减少到一次,并且可以实现离线证明和公开验证。在零知识证明的应用场景中,如区块链,非交互性质是必要的,因为在区块链系统中,不能假设双方总是在线交互。在区块链网络上,证明者只需要向整个网络广播一个证明事务,网络上的挖掘者在将该事务打包成块时帮助验证者完成零知识证明的验证。

数独游戏标题

数独是18世纪起源于瑞士的一种数学游戏,它是一种用纸和笔的逻辑游戏。玩家需要根据99盘上的已知数字推断出所有剩余空格的数目,并且满足每行、每列和每条粗线(3*3)中的数字包含1-9,并且不重复。

零知识证明介绍

爱丽丝发明了一种防篡改的机器,向鲍勃证明他已经解决了数独问题。爱丽丝将生成的数独答案放入机器,机器可以向鲍勃发送证书。爱丽丝的机器遵循以下可公开验证的协议:

首先,爱丽丝把尚未解决的原始数独问题放进了机器。数独游戏中的三张拼图面朝上。例如,细胞C3有三个9号卡面朝上。

零知识证明介绍

接下来,爱丽丝的机器将他的答案面朝下放在相应的单元格上,每个单元格也有三个答案。

零知识证明介绍

最后,鲍勃从机器上获得了证书,机器退回了鲍勃27包:

该机器从数独的每一行中取出9张卡片,将它们混淆并放入一个袋子中。总共有9行,所以有9个包

该机器从数独的每一列中取出9张卡片,将它们混淆并放入一个袋子中。总共有9列,所以有9个包

机器取出数独中每一个粗线宫(3*3)里的卡片,混淆后放入一个袋子里,总共有9张卡片,所以有9个袋子

零知识证明介绍

鲍勃分别检查了27个包。如果每个包中的卡片包含数字1到9,并且没有数字丢失或重复,鲍勃可以确认爱丽丝确实解决了数独,并且鲍勃没有从机器返回的证书中获得任何关于数独解决方案的知识,因为机器返回到鲍勃包中的数据是随机加扰的。

零知识证明介绍

零知识证明的应用场景

零知识证明的定义是证明者可以说服验证者某个断言是正确的,而无需向验证者提供任何有用的信息。

从零知识证明的定义中可以提炼出两个关键词:“不披露信息”和“证明断言有效”。基于这两个特征,扩展了零知识证明在区块链的两个应用场景:

隐私:在隐私场景中,借助零知识证明的“不披露信息”特性,我们可以在不披露交易细节(接收方、发送方和交易余额)的情况下证明区块链的资产转让是有效的。

扩展:在扩展场景中,我们不需要太注意零知识证明技术的“不披露信息”特性,但是我们的重点是它的“证明判断是有效的”特性。因为链上的资源是有限的,我们需要将大量的计算迁移到链上,所以我们需要一种技术来证明链下的这些操作是可信的,零知识证明可以帮助我们认可链下的可信计算。

隐私

在目前主流的公共链中,如比特币和以太网,自创世以来,每个账户之间的交易信息都是在区块链公开记录的。这样做的好处是它可以有效地解决双重加密货币的问题,而且矿工可以追踪来源并检查每笔交易的余额是否足够。缺点是一旦帐户的身份被暴露,第三方可以追踪该帐户的所有过去的交易,甚至启动该帐户可能控制的其他帐户,从这个角度来看,这是非常缺乏隐私的。

零知识证明所解决的问题是,交易可以在不披露交易相关细节的情况下得到验证。

膨胀

17年后,一个非常流行的叫做加密猫的Dapp应用程序出现了。加密猫曾导致以太网主网络大规模拥塞。拥塞的原因是以太网当时只有15个TPS,这意味着以太网每秒只能处理15个事务。如此低的TPS严重限制了区块链的大规模应用,因此一些人开始研究区块链扩张的问题,目的是提高TPS的连锁性。然而,区块链的扩张受到维塔利克提出的不可能的三位一体的限制,这意味着区块链系统的设计不能同时考虑可扩展性、分散性和安全性,只能采取另外三种。这是一个非常令人失望的结论,但我们必须知道,任何事情都有自己的界限,公共链不应该做任何事情,而应该做它应该做的事情:“公共链是以最高效率达成共识的工具,能够以最低成本建立信任”。作为达成共识的工具和信任的引擎,公共链不应该为了可伸缩性而放弃权力下放和安全性。那么公共链的TPS是如此之低,如何使用呢?我们能不能在链中放入大量的工作,只把最重要的数据提交给区块链的主链,这样所有的节点都可以验证这些链下的工作是准确可靠的?社会的发展带来了更精细的分工,以及区块链的技术发展。在底层区块链(第1层)上建造一个延伸层(第2层),以确保安全和权力下放绝对可靠和可信;它可以达成全球共识,充当“加密法庭”,通过智能合同设计规则进行仲裁,并以经济激励的形式将信任转移到第2层。第2层追求极高的性能,它只能达成本地共识,但可以满足各种业务场景的需求。

连锁扩张

ZK汇总是一个基于零知识证明的双层扩展方案。ZK上卷起源于18年后半期,先后由巴里怀特哈特和维塔利克提出。

链式压缩

运行过所有以太网节点的人会有这样的感觉:“同步所有以太网节点的过程太痛苦了。”同步所有以太网节点通常需要几天时间。目前,所有以太网节点已达到399,45Gb。整个节点对存储资源的要求很高,以至于很多个人电脑的硬盘空间和带宽都不能满足整个节点的运行要求,所以整个节点只能由少数实体运行,区块链逐渐由分散运行向集中运行转变。以太网扫描以太网全节点统计网站

零知识证明介绍

整个节点同步时间长的原因如下:

整个节点中的数据量太大,下载数百GB的数据需要很长时间。

验证与本地区域同步的块是否正确需要时间,因为恶意节点将发送无效的块。

在同步所有节点的过程中,为了验证链的正确性,需要从创建块开始依次重放每个事务,然后验证计算出的帐户状态是否与同步状态相同。这不仅耗时,而且浪费资源,因为无数节点在您面前重复了相同的计算。我们想要重放每个块的原因是:“目前,判断一个计算是否被正确执行的唯一方法是再次执行这个计算,然后比较两者的结果。”。使用零知识证明,我们不需要重复计算块中的每个事务,因为零知识证明可以帮助我们验证每个块中的事务是否被正确执行。

目前有一个项目Coda,使用零知识证明将块大小控制在22kB,Coda的块大小是固定的,不会随着时间而变大(递归零知识证明)。从安全的角度来看,科达并不比传统的区块链安全。

零知识证明介绍

零知识证明了压缩链上数据的好处;

不需要重复计算来验证块状态,减少了计算资源的浪费

区块链大小仅为22k,便于存储、同步和验证

因为运行Coda的整个节点所需的资源很少,所以区块链网络将会有更多活跃的节点,并提高分散的程度

递归零知识证明

递归零知识证明的生成:使用前一状态和当前事务的证明作为输入,然后验证前一状态和当前事务的证明是否有效。如果所有验证通过,程序将输出一个新状态和一个证明,如下图所示:

零知识证明介绍

递归零知识证明验证:整个链的状态只能通过验证前一状态的证明来验证。例如,当验证证明#5的状态是正确的时,它相当于递归地验证证明#4和证明#3。

零知识证明协议

零知识证明介绍

零知识证明协议的特征比较

可信设置:您需要可信设置吗

速度(验证者证明者):证明者生成证书和验证者验证证书所用时间的总和。

证明大小:生成零知识证明的大小

抗量子攻击:无论是抗量子攻击,量子计算在未来都可能对现有的加密算法构成威胁。

零知识证明介绍

发展历史

1985年,零知识证明首次由戈德瓦瑟、米卡里和克拉科夫提出

2010年,Groth实现了第一个基于椭圆曲线双线性映射的通用常数非交互式零知识证明协议。后来,经过不断优化,该协议最终成为区块链著名的零知识证明协议。

2013年,匹诺曹协议实现了分钟级证明和毫秒级验证,证明大小小于300字节,将零知识证明从理论带到了应用。后来,Zcash使用的SNARKs是基于匹诺曹的改进版本。

2014年,名为“零现金”的加密货币使用一种特殊的零知识证明工具ZK-斯纳克(零知识琥珀非交互式知识论证)完全隐藏交易金额和交易双方,更加关注交易透明度的隐私性和可控性。

2017年,零现金团队提出了一项计划,将zk-SNARKs与智能合同相结合,这样交易就可以在公共场合隐形,并可以创建保护隐私的智能合同。

零知识证明开发工具

目前,为了满足零知识证明技术的广泛应用需求,已经产生了一些开源算法库来实现zk-SNARK零知识证明协议的工程化,包括libsnark、bellman、ZoKrates等。

libsnark

Libsnark是一个基于C语言的工程开发算法库,由SCIPR实验室开发和维护。开发者包括参与许多zk-SNARK学术论文的合著者。近年来,Libsnark已经实现了几种主流的zk-SNARK论文方案,其中BCTV14a和Groth16是最常用的方案。

Libsnark实现了zk-SNARK算法的黑盒,并提供了高度抽象的编程接口,使得开发人员可以直接进行工程开发,而无需掌握算法细节。此外,libsnark还提供了实际应用程序中常见的基本函数库,可以帮助开发人员组合实现复杂的证明。libsnark从其在匿名数字现金Zcash中的应用开始,奠定了零知识证明技术从理论研究到大规模工程应用的基础。

更夫

在Zcash项目中,使用libsnark算法库实现zk-SNARK零知识证明。2018年升级到Spill版本时,由于以前使用的libsnark版本比较旧,椭圆曲线和zk-SNARK方案的选择不再是当时的最佳选择,Zcash改为使用自行开发的bellman算法库。Bellman是Zcash团队基于Rust语言实现的zk-SNARK算法库,支持Groth16论文方案,目前主要用于Zcash项目。

ZoKrates

ZoKrates是一个zk-SNARK实现工具,部分基于libsnark,部分由Rust语言重写。默认情况下,它支持Groth16方案,开发人员需要使用自建的脚本语言来编写代码。目前,它仅用于在实际工程中的以太网智能合同上部署支持零知识证明的应用。

零知识证明的利弊

优势

当使用零知识证明时,不会降低安全性;

有完全的隐私;

安全性取决于未解决的数学问题(如离散对数、大整数分解、平方根等)。);

不足之处

生成零知识证明需要大量的计算能力

有些协议需要可信设置

有些协议无法抵抗量子计算

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发