ZK- Snak's Mathematical Principles]

频道:百科知识 日期: 浏览:0

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

作为虚拟货币行业的人,我们经常谈论zk-snark,有很多细节需要注意。你知道zksnarks的数学原理吗?今天就让边肖告诉你吧!

ZK-Rollup基于零知识证明,发送到主链的事务包包含相应的零知识证明。主链上的rollup智能合约只需要验证这个零知识证明。

这种零知识证明不会泄露任何交易细节,但可以通过与智能合约的不断交互,证明链条上所有数据的有效性和真实性。

优点:

l?高度分散

l?私密性好:零知识证书不会泄露任何交易细节

l?缠绕效率高:一次提交多次运算结果,节省时间和油费

l?验证效率高:无需等待期即可快速取出资产

l?极高的安全性:zk技术保证提交给主链的数据真实有效,同时主链可以随时还原侧链的交易明细(即具有主链的数据可用性)。,所以它具有以太网级别的安全性

缺点:

l?技术开发难度大

l?难以兼容不同的智能合约

l?需要大量操作

代表项目:

l?路引:已经使用成熟的zk技术,获得4500万美元私募,目前市值超过8亿美元

l?ZKSync:旨在为以太坊带来Visa级别的每秒数千笔交易的吞吐量

链乔教育在线旗下学硕创新区块链技术工作站是唯一获批"区块链技术专业""智慧学习工场2020-学硕创新工作站"由中国教育部学校规划建设发展中心实施。专业站立足于为学生提供多元化的成长路径。推进产学研改革';构建应用型、复合型人才培养体系。

ZKrollup是一个Layer2扩展解决方案,主链上所有资金由智能合约持有,链下执行计算和存储,其侧链的有效性由零知识证明保证。

ZK卷最早由BarryWhitehat于2018年提出。其安全保障与底层1(即以太坊)相同。它可以在一分钟内生成块,并将吞吐量提高到2,000tps。。ZK公司实施的项目包括物质实验室和Starkware。

在ZKR中,操作员必须为第2层上的每个状态转换生成一个zk-SNARK有效性证书。并将这些有效性证书提交给第1层上的汇总合同。汇总合同将验证这些从旧的默克尔根到新的默克尔根的状态转移的证明是否有效。尽管使用了新的组件但是这些保证本质上是加密的。Matterlabs团队开发的

zkSync已经在以太坊主网上线。Loopring推出了使用ZKR的集中兑换和支付服务。。StarkWare团队的StarkEx是一种ZKR技术,使用的是zk-STARK(不是zk-SNARK),所以不依赖可信设置,扩展性更强,可以抵抗量子计算攻击。

链乔教育在线旗下学硕创新区块链技术工作站是唯一获批"区块链技术专业""智慧学习工场2020-学硕创新工作站"由中国教育部学校规划建设发展中心实施。专业站立足于为学生提供多元化的成长路径。推进产学研改革';构建应用型、复合型人才培养体系。

对于普通用户来说,能够为区块链去中心化运行节点是非常重要的

想象一下,你在2o';早上的钟。,从世界的另一端来帮你经营矿池(认捐池)。从14分钟左右开始,你池和其他几个人脱离了链条,网络仍然保持着79%的计算能力。根据您的节点,大多数链块是无效的。。这时出现了一个平衡错误:该块似乎错误地将450万个额外令牌分配给了一个未知地址。

一个小时后,你和另外两个小矿池参与者,一些block浏览器和同样遭遇意外的交流党在一个聊天室里。我看到有人发布了一个Twitter链接,开头是"宣布一项新的可持续协议发展基金链"。

上午,讨论在Twitter和一个不审查内容的社区论坛上广泛传播。。但在那个时候,450万代币中的很大一部分已经转化为链条中的其他资产,并且已经进行了数十亿美元的defi交易。79%的共识节点,以及所有主要的区块链浏览器和轻型钱包终端都遵循了这一新的链。。也许是新的开发商';美国的基金将资助一些发展,或者也许所有这些都将被领先的矿池,交易所和他们的裙带关系所吞噬。但无论结果如何,基金其实已经成为既成事实,普通用户可以';我无法抗拒。

也许有这样的主题电影。。也许它会得到MolochDAO或其他组织的资助。

这种情况会发生在你的区块链吗?你的区块链社区里的精英,包括矿池,区块链浏览器和托管节点,可能会协调得很好。大概都在同一个电报频道,同一个微信群。如果他们真的想为了利益突然修改协议的规则,那么他们可能有这个能力。以太坊区块链在十个小时内彻底解决了共识失败的问题。如果是只由一个客户端实现的区块链,只需要将代码变更部署到几十个节点,就可以更快地协调客户端代码变更。抵抗这种社会合作攻击的唯一可靠方法是"被动防御"而这种力量来自于一个集中的群体:用户。

想象一下,如果用户运行区块链的验证节点(无论是直接验证还是其他间接技术),自动拒绝违反协议规则的块。即使超过90%的矿工或认捐者支持这些区块,故事将如何发展?

如果每个用户都运行一个验证节点,攻击很快就会失败:有些矿池和交易所会分叉,整个过程看起来很蠢。。但即使只有部分用户运行验证节点,攻击者也可以';不要完全获胜。相反,攻击会导致混乱,不同的用户会看到不同的区块链版本。在最坏的情况下,随之而来的市场恐慌和可能出现的连续链分叉会大大降低攻击者的利润。。应对这种旷日持久的冲突的想法本身就可以阻止大多数攻击。哈苏';对这一点的看法:

";我们需要明确表示,我们可以抵制恶意的协议更改。这是因为区块链的用户验证文化,而不是因为PoW或PoS。

假设您的社区有37个节点操作符和80,000个被动侦听器来检查签名和块头,那么攻击者就赢了。。如果每个人都运行节点,攻击者就会失败。我们不';t不知道对合作攻击启动群体免疫的确切阈值,但有一点绝对清楚:好节点越多,恶意节点越少,我们需要的数量绝对不止几十万。

那么整个节点的上限是多少呢?

为了让尽可能多的用户运行整个节点,我们将重点放在普通的消费级硬件上。即使专用硬件很容易购买,但这可以降低一些节点的门槛。但实际上,可扩展性的提升并没有我们想象的那么好。

整个节点处理大量事务的能力主要受限于三个方面:

计算能力:在保证安全的前提下,我们可以划分多少个CPU来运行节点?

带宽:基于当前的网络连接,一个块可以包含多少字节?

存储:我们可以要求用户使用多少空间来存储?另外,它的阅读速度应该有多快?(也就是HDD够用吗?还是我们需要SSD?)

关于使用"简单"大大扩展区块链的技术源于对这些数字的过于乐观的估计。我们可以依次讨论这三个因素:

计算能力

错误答案:应该100%的CPU用于块验证

正确答案:大概5-10%的CPU可以用于块验证

限制这么低的四个主要原因如下:

我们需要一个安全边界来覆盖DoS攻击的可能性(攻击者利用代码弱点进行的交易比常规交易需要更长的处理时间)

节点需要能够在离线后与区块链同步。如果我断线一分钟,然后我应该能在几秒钟内完成同步。

运行节点不应该很快耗尽电池,也不应该减慢其他应用程序的运行速度。

节点还有其他非数据块生产工作要做。,大多数是对p2p网络中输入的交易和请求的验证和响应

请注意,直到最近,大多数都是针对"为什么只需要5-10%?"对这一点的解释集中在另一个不同的问题上:因为PoW的时间是不确定的验证块需要很长时间,这将增加同时创建多个块的风险。有很多方法可以解决这个问题,比如比特币NG,或者使用PoS利息证明。但这些并没有解决其他四个问题。因此,他们并没有像很多人预期的那样在可扩展性上有很大的进步。

并行不是万能的。通常,即使看起来像单线程区块链的客户端也已经被并行化:签名可以由一个线程验证,执行由其他线程完成。并且有一个单独的线程在后台处理交易池逻辑。而且所有线程的利用率越接近100%,运行节点的能耗就越多,对于DoS的安全系数就越低。

带宽

错误答案:如果不是每2-3秒生成10MB块,那么大部分用户';网络大于10MB/秒,当然可以处理这些块

正确答案:也许我们可以每12秒处理1-5MB的块,但现在还是很难

。我们经常听到广泛传播的关于互联网连接可以提供多少带宽的统计数据:100Mbps甚至1Gbps的数据很常见。但是,由于以下原因,申报的带宽和预期的实际带宽相差很大:

";Mbps"意味着"百万比特”;每秒";一个比特是一个字节的1/8,所以我们需要用声称的比特数除以8来得到字节数。

网络运营商和其他公司一样,经常编造谎言。

总是有多个应用程序使用同一个网络连接,因此节点无法独占整个带宽。

P2P网络不可避免地引入了开销:节点通常会多次下载和重新上传同一个块(更不用说事务在打包成块之前必须通过mempool广播)。

starkware在2019年进行实验时,他们在交易数据gas成本降低后首次释放了一个500kB的块,有些节点实际上无法处理这个大小的块。。处理大数据块的能力已经并将继续提高。但是不管我们做什么,我们仍然可以';我们无法获得以MB/s为单位的平均带宽,并说服自己可以接受1秒的延迟,并且有能力处理这样大小的数据块。

商店

错误答案:10tb

正确答案:512GB

你可能已经猜到了,这里的主要论点和别处一样:理论和实践的区别。理论上,我们可以在亚马逊上买到8TB固态硬盘(SSD或NVME是真的需要;硬盘对于区块链州立存储来说太慢了)。事实上,我用来写这篇博文的笔记本电脑有512GB。如果你让人们购买硬件,许多人会变得懒惰(或者他们可以';800美元买不起8TBSSD)并使用集中式服务。即使区块链可以安装在存储设备上,大量的活动也会很快耗尽磁盘,迫使您购买新磁盘。

一组区块链协议研究人员调查了每个人';的磁盘空间。我知道样本量小,但还是…

请点击进入图片说明

另外,存储大小决定了新节点上线并开始参与网络所需的时间。。现有节点必须存储的任何数据都是新节点必须下载的数据。这种初始同步时间(和带宽)也是用户运行节点的主要障碍。在写这篇博文的时候,我花了大约15个小时来同步一个新的geth节点。。如果以太坊的使用量增加10倍,同步一个新的geth节点至少需要一周时间,更有可能限制节点的互联网连接。这一点在攻击中更为重要。如果用户以前没有运行过该节点,要成功应对攻击,需要用户启用新节点。

交互效应

另外,这三类成本之间存在交互效应。因为数据库内部使用树形结构来存储和检索数据因此,从数据库获取数据的成本随着数据库大小的对数而增加。事实上,因为顶层(或前几层)可以缓存在RAM中,所以磁盘访问的成本与数据库的大小成正比,而数据库的大小是RAM中缓存数据大小的倍数。

唐';不要从字面上理解这张图表。不同的数据库以不同的方式工作。通常,内存中的部分只是一个单独的(但很大的)层(参见leveldb中使用的LSM树)。但基本原理是一样的。例如

如果缓存为4GB,并且我们假设数据库的每一层都比前一层大4倍,那么以太坊当前的~64GB状态将需要~2次访问。但是如果状态大小增加4倍,达到256GB,,那么这将增加到~3次访问。因此,gas上限增加4倍实际上可以转化为块验证时间增加6倍。这种影响可能更大:硬盘满了比空闲时读写的时间更长。

这对以太坊意味着什么?

现在在以太坊区块链中,运行一个节点已经成为许多用户的一个挑战,尽管仍然可以使用至少常规的硬件(当我写这篇文章时,我刚刚在我的笔记本电脑上同步了一个节点!)。因此,我们即将遇到一个瓶颈。核心开发者最关心的是存储大小。所以,目前下大力气解决计算和数据瓶颈,甚至共识算法的改变,都不太可能带来气限的大幅提升。。就算解决了以太坊最大的DoS弱点,气限也只能提高20%。

存储大小问题的唯一解决方案是无状态和状态过期。。无状态使节点组能够在不维护永久存储的情况下进行验证。过期状态会停用最近没有访问过的状态,用户需要手动提供证明才能更新。这两条路径已经研究了很长时间,无国籍的概念验证实现已经开始。。这两项改进的结合可以极大地缓解这些担忧,并为显著提高气体极限打开空间。然而,即使在实施无国籍和状态到期后,气体限制也可能只能安全地增加3倍左右,直到其他限制发挥作用。

另一个可能的中期解决方案是使用ZK-斯纳克法来验证交易。ZK-斯纳克可以确保普通用户不会';不需要亲自存储状态或验证块,即使他们仍然需要下载块中的所有数据来抵御数据不可用性攻击。。此外,即使攻击者不能强制提交无效块,如果运行共识节点太困难,仍然会有协同审查攻击的风险。因此,ZK-斯纳克可以';不要无限提高节点容量。但还是可以大幅提升的(或许1-2个数量级)。一些区块链在第1层探索这种形式,而以太坊受益于第2层协议(也称为ZK汇总)。,比如zksync,Loopring,Starknet。

切片后会发生什么?

碎片从根本上解决了上述限制,因为它将区块链中包含的数据与单个节点需要处理和存储的数据分离开来。。节点验证块不是亲自下载执行,而是利用高等数学和密码学技术间接验证。

因此,分段区块链可以安全地拥有非常高的吞吐量,这是非分段区块链无法实现的。。这确实需要大量的密码学技术来有效替代幼稚的完全验证来拒绝无效块,但这是可以做到的:理论已经有了基础,基于规范草案的概念验证也已经在进行中。

Ethereum计划采用二次分片,其中总的可扩展性受到以下事实的限制:节点必须能够同时处理单个分片和信标链,信标链必须为每个分片执行一些固定的管理工作。。如果片段太大,节点就不能再处理单个片段,如果片段太多,节点就不能再处理信标链。这两个约束的乘积构成了上限。

可以想象,我们可以通过立方切片甚至指数切片走得更远。在这样的设计中数据可用性抽样肯定会变得更加复杂,但这是可以实现的。但以太坊并没有超越二次函数,因为在其他风险水平可以接受的前提下,无法实现从事务碎片到事务碎片的额外可伸缩性增益。

那么这些风险是什么呢?

最小用户数

可以想象,只要有一个用户愿意参与,非分段的区块链就可以运行。然而,支离破碎的区块链并非如此:单个节点无法处理整个链条。因此,需要足够的节点来共同处理区块链。如果每个节点可以处理50个TPS,链可以处理10000个TPS,那么链至少需要200个节点才能生存。如果链在任何时候都少于200个节点,可能会发生节点无法再保持同步,或者节点停止检测无效块,或者可能会发生许多其他不好的事情,这取决于节点软件的设置。

实际上,由于需要冗余(包括数据可用性采样)安全的最低数量比简单的"链TPS除以节点TPS"。对于上面的例子,我们将其设置为1000个节点。

如果分段区块链的容量增加10倍,则最小用户数也增加10倍。。现在你可能会问:为什么不?t我们从较低的容量开始,在用户多的时候增加容量,因为这是我们的实际需求,然后在用户数回落的时候再减少容量?这里有几个问题区块链本身无法可靠地检测有多少独立用户,因此需要一些治理来检测和设置碎片的数量。能力限制的治理很容易成为分裂和冲突的根源。

很多用户突然意外同时断线怎么办?

增加启动fork所需的最小用户数量会使防御恶意控制变得更加困难。

最小用户数1000,几乎没问题。另一方面,最低用户数设置为100万,肯定是不行的。。即使最低用户数是1万,也可以说一开始就变得有风险了。因此,似乎很难证明拥有数百个以上碎片的支离破碎的区块链是合理的。

历史可检索性

用户真正珍视的区块链的重要属性是永久性。。当公司破产或生态系统的维护不再产生效益时,存储在服务器上的数字资产将在10年内不复存在。以太坊上的NFT是永久的。

是的,到2372年,人们仍然可以下载和查阅你的加密猫。

但是一旦区块链的容量过高,存储所有这些数据会变得更加困难,直到某个时候出现极大的风险,一些历史数据最终会.没有人会储存。这种风险很容易量化。。将区块链的数据容量(MB/秒)乘以30,得到每年存储的数据量(TB)。目前分片方案的数据容量约为1.3MB/s,因此约为40TB/年。如果增加十倍,,是400TB/年。如果我们不仅希望能够访问数据,而且是以一种方便的方式,我们需要元数据(比如解压汇总事务),那么每年会达到4PB,或者十年后达到40PB。。互联网存档使用50PB。所以这可以说是分段区块链安全尺寸的上限。

因此,似乎在这两个维度中。其实以太坊的碎片化设计已经非常接近合理的最大安全值了。常数可以增加一点,但不要太多。

结论

尝试扩展区块链有两种方法:基本的技术改进和简单地升级参数。第一升级参数听起来很吸引人:如果你在纸上做数学运算,它';你很容易说服自己,消费类笔记本电脑可以每秒处理数千笔交易,而不会出现ZK-斯纳克、汇总或碎片。不幸地这种方法从根本上存在缺陷,有许多微妙的原因。

运行区块链节点的计算机无法使用100%的CPU来验证区块链;他们需要很大的安全裕度来抵御意外的DoS攻击。他们需要空闲容量来执行任务,例如在内存池中处理事务,而用户不需要';我不想在计算机上运行节点而同时不被任何其他应用程序使用。带宽也是有限的:10MB/s的连接并不意味着每秒可以处理10MB的数据块。!也许每12秒只能处理1-5MB的数据块。存储也是如此。提高运行节点的硬件要求,限制专业化的节点运营商,不是解决办法。对于去中心化的区块链,普通用户可以经营节点,形成文化。也就是运行节点是一种常见的行为,这一点很重要。

零知识简明非交互知识演示(zkSNARK)是一种真正别出心裁的方法,可以在不透露任何其他信息的情况下证明某事为真。然而,为什么它首先有用?

零知识证明在无数应用中是有益的,包括:

关于私有数据的认证声明:

匿名授权:

匿名支付:

虽然表面上听起来很棒,但是底层方法是一个"奇迹"数学和密码学。因为它是在主书"交互式证明系统的知识复杂性"在1985年,它已经被研究了第四个十年,然后引入了非交互式证明。这在区块链尤其重要。

在任何一个零知识证明系统中,都有一个验证者想要说服他某些陈述是真实的,而不披露任何其他信息。例如,验证者知道他的银行账户中有X个以上的账户。,但没有其他信息(即不透露实际金额)。协议应该满足三个属性:

Let';让我们从简单开始,尝试证明一些东西,而不用担心零知识、非交互性、其形式和适用性。

想象一下。我们有一个长度为10的数组,我们想向验证者(比如一个程序)证明所有这些位都设置为1,也就是我们知道一个数组使得每个元素都等于1。

Verifier一次只能检查(即读取)一个元素。为了证实这一说法你可以以任意的顺序读取元素,并检查它是否真的等于1。如果是,则第一次检查后该语句的置信度为10%,如果该位不等于1,则该语句完全无效。验证者必须进入下一轮,直到他获得足够的信心。有时候你可以信任证明者,只需要50%的信心。在需要95%置信度的其他情况下,必须检查所有单元。显然,这个证明协议的缺点是,如果我们考虑一个数百万个元素的数组,则必须与元素的数量成比例地检查数量。这是不现实的。

Let';让我们考虑一个多项式。有一条曲线对应于多项式。多项式有一个有利的性质,即如果我们有两个次数最多为d的不等多项式,它们的交点不会超过d。例如让';稍微修改一下原来的多项式。如果我们想找到两个多项式的交集,我们需要使它们相等。例如,为了找到多项式与X轴相交的位置(即,我们将相等,并且这样的方程的解将是那些共享点:还有。

同样,我们可以将多项式的原版本和修改版本相等,求它们的交集。得到的多项式为1,有明显的解。所以只有一个路口。

对于任意次d的多项式,任何这样的方程的结果总是另一个最大次数为d的多项式,因为没有乘法能产生更高的次数。示例:简化为。代数基本定理告诉我们,一个d次多项式最多可以有d个解。因此,我们可以得出这样的结论任何多项式在任一点的求值类似于其唯一单位的表示。让';在x=10时评估我们的示例多项式。

其实在所有要计算的X个选项中,在这些多项式中,最多只有三个选项有相同的计算。,所有其他选项都将不同。这就是为什么如果证明者声称知道一些多项式(不管他们知道多少次),他们可以遵循一个简单的协议来验证该陈述:

例如,如果我们考虑X从1到0的整数范围。不同的点被评估为。从那以后,X偶然"点击"任何共享点都等于,被认为是可以忽略的。

注:与无效位检查协议相比,新协议只需要一轮。并且对陈述给出了压倒性的信心(假设D充分小于范围的上限,几乎是100%)。

这就是为什么多项式是zk-SNARK的核心,虽然可能还有其他证明介质。

我们从多项式知识的证明问题入手,然后采用一种通用的方法。在这个过程中,我们会发现多项式的许多其他性质。到目前为止的讨论都集中在一个弱证明概念上,即各方必须相互信任。因为没有执行协议规则的措施。例如,证明者不需要知道多项式,他可以使用任何其他可用的方法来获得正确的结果。此外,如果验证者的范围';s多项式求值不大,比如10,验证者能猜出一个数。并且它被接受的概率不能被忽略。我们必须解决协议的这个弱点,但首先我们要知道多项式是什么意思。多项式可以用以下形式表示(其中n是多项式的次数):

如果有人说他知道一个1次多项式,说明他真正知道的是系数。此外,系数可以是任何值,包括0。让';假设证明者声称知道三次多项式。使得x=1和x=2是所有可能的解中的两个。这种有效的多项式之一是。

代数基本定理指出,任何多项式只要可解,都可以分解为线性多项式(即表示直线的1次多项式)。因此我们可以将任意有效多项式表示为它的因子的乘积:

同样,如果这些因子中的任意一个为零,则整个方程为零,所以它们都是唯一解。我们的例子可以分解成以下多项式:

x的值是:0,1,2,你可以很容易地用任何形式的多项式查出来。

回到证明者';s声称他知道根为1和2的三次多项式,这意味着他的多项式具有如下形式:

换句话说,(x?1)和(x?2)是所讨论的多项式的余因子。因此,如果证明者想证明他的多项式确实有这些根,而不公开多项式本身。然后他需要证明他的多项式p(x)是那些余因子的乘积,叫做目标多项式,和一些任意多项式h(x),也就是

换句话说,p(x)有t(x)的所有根。。求h(x)的自然方法是除法。如果证明者能够';t找不到这样的h(x),就说明p(x)不';没有必要的余因子t(x)。在这种情况下,多项式除法将有余数。在我们的例子中,如果我们除以。我们得到的结果是没有残留物。

使用我们的多项式身份检查协议,我们可以比较多项式与:

要把它付诸实践,让';我们在一个例子中实现这个协议:

相反。如果证明者使用不同的,它没有正确的余因子,例如,那么:

我们将得到余数,即:这意味着证明者必须除以余数来计算。因此因为验证者随机选择X,所以余数被t(x)整除的概率很低。因此,如果验证者将检查P和H补码是整数,这样的证明将被拒绝。然而,这种检查要求多项式系数也必须是整数。

现在我们可以检查多项式的具体性质,而无需学习多项式本身,因此这为我们提供了某种形式的零知识和简明性。尽管如此,这种构造仍然存在许多问题:

我们将在以下几节中解决所有问题。

在上面,如果sum以黑盒而不是纯文本的形式给出,将是一个理想的选择,所以人们可以';t篡改协议,但他们仍然可以计算这些模糊值。类似哈希函数,计算时很难回到原来的输入。

这就是同态加密的目的。也就是说,它允许对值进行加密,并且算术运算可以应用于这种加密。实现加密同态的方法有很多种,我们简单介绍一种简单的方法。总的想法是我们选择一个基数自然数G(比如5),然后加密一个值。我们用G乘以这个值的幂。比如我们要加密数字3:

其中125是3的加密。如果你想把这个加密数字乘以2,然后它被提升到2的指数:

我们可以将未知值乘以2并加密。我们也可以通过乘法将两个加密值相加,比如3^2:

。同样,我们可以用除法减去加密的数字。,比如5?3:

但是,由于基数5是公开的,所以很容易回到秘密数,将加密数除以5,直到结果为1。除法的个数是明文。

这就是模块化算法发挥作用的地方。。模运算的思想是这样的:我们声明只选择前n个自然数,即0,1,…,n-1,而不是有一个无限的数集合。如果任何给定的整数不在这个范围内,我们"环绕"它。例如,让';让我们先选择六个数字。为了说明这一点请考虑一个有六个相等单位尺度的圆;这是我们的产品系列。

现在让';让我们看看数字8会落在哪里。比如我们可以把它想象成一根绳子,它的长度是八个单位。。如果我们把绳子连接到圆圈的开始,并开始绕绳子,一圈后我们会剩下一些绳子。因此,如果我们继续这个过程,绳子将在两个地方结束。

是模运算的结果。不管绳子有多长它总是停在圆圈的一个刻度上。所以模块化操作会让它保持在一定的范围内。15个单位的绳子会停在3个地方,也就是6^6^3(两个完整的圆,剩下3个单位)。负数也是如此。唯一不同的是我们反方向包装。对于-8,结果将是4。

而且,我们可以进行算术运算,结果总是在n个数的范围内。我们现在将使用符号"mod"表示数字的范围。。比如:35=3(mod6);5^2=1(mod6)。

另外,最重要的特点是操作顺序无关。例如,我们可以先执行所有操作,然后应用模块或在每次操作后应用模块。。例如:相当于:24=2(mod6);2?1=1(mod6);13=3(mod6)。

那为什么有帮助呢?事实证明,如果我们使用模运算,,它有一个运算结果,而且回到原来的数是非凡的,因为很多不同的组合会有相同的结果:54=2(mod6);42=2(mod6);21=2(mod6)。

如果没有模运算,结果的大小为其求解提供了线索。否则,这些信息将被隐藏,常见的算术属性将被保留。

如果我们回到同态加密,使用模运算,比如模7,我们会得到:

而且不同的索引会有相同的结果:

这就是很难找到索引的地方。事实上,如果模数足够大,它就变得不可行,并且现代密码学的很大一部分是基于"难度"这个问题。。此方案的所有同态性质都保留在模域内:

加密:

乘法:

加法:

让';s指定加密函数:其中v是我们要加密的值。

这种同态加密方案有局限性。虽然我们可以将加密的值乘以未加密的值,但是我们不能将两个加密的值相乘(相加和相除)。也不能对加密值求幂。虽然从第一印象来说很不幸,但这些属性会成为zk-SNARK的基石。

有了这样的工具,我们现在可以计算一个加密随机值为X的多项式,并相应地修改零知识协议。

让';让我们看看如何计算多项式。正如我们之前所建立的,多项式是要知道它的系数的。在这种情况下,它们是:1,-3,2。因为同态加密不允许对加密值求幂。所以我们要得到从1到3的X次方的加密值:这样我们就可以对加密的多项式求值如下:

作为这些运算的结果,我们在未知的X处加密了我们的多项式。。这是一个非常强大的机制,并且由于同态性,同一多项式的加密计算在加密空间中总是相同的。我们现在可以更新协议的先前版本。对于d次多项式:

Veri?呃:

证明人:

Veri?Er:

因为证明者对S一无所知,所以很难做出非法但仍然匹配的评价。

虽然在这样的协议中,证明者的敏捷性是有限的。然而,他仍然可以使用任何其他方法来伪造证明,而不实际使用所提供的S-power加密。例如,如果证明者声称仅使用二次幂的和就存在令人满意的多项式,这在当前协议中是无法验证的。

多项式的知识就是它的系数。我们的方式"分发"协议中的这些系数是对秘密值S(即)的相应加密功率取幂。当选择S的加密能力时,我们已经对证明者进行了限制,但是这种限制并不是强制性的,例如您可以使用任何可能的方法找到满足等式的任何值和,并将它们提供给验证者,而不是sum。例如,对于某些随机性,以及这就是为什么验证者需要证明只有S的幂的加密被用于计算总和,而不是其他。

Let';让我们考虑一个一次多项式的基本例子。多项式有一个变量和一个系数,相应地,S的加密。我们正在寻找的是确保只有S是加密的,即同态"倍增"乘以任意系数C,而不是其他。所以对任何C来说,结果一定是形式上的。

一种方法是要求另一个移位的加密值对原始值执行相同的操作,作为“加密”的算术模拟校验和"保证结果是原值的幂。。这是通过引入指数知识的指数知识假设(或KEA)来实现的。更准确地说,

Alice的值为A,她想要Bob's的指数是任意次方。唯一的要求就是只有这个A可以是指数型的,没有别的可以保证她:

因为Bob可以';t从元组中提取,推断Bob可以产生有效响应的唯一方法是通过以下过程:

最后,这个协议向Alice提供了一个证据,证明Bob确实将a乘以一个他知道的值,并且他可以';不要做任何其他运算,比如乘法和加法,因为这样会消除移位关系。同态加密上下文中的

取幂是加密值的乘法。我们可以在简单的单系数多项式的情况下应用相同的结构:

这种结构限制证明者只能使用提供的加密S,因此证明者只能将系数C赋给验证者提供的多项式。。我们现在可以将这种单多项式方法扩展到多项式,因为每一项的系数分布都是单独计算的,然后进行同态"添加了"一起。因此,如果证明者被提供了S的加密能力和它们的移位值。他可以评估原始多项式和移位多项式,其中必须进行相同的检查。特别是对于d次多项式:

对于我们之前的例子多项式,这将是:

现在我们可以确定。除了验证者提供的多项式,验证者不使用任何其他方法,因为没有其他方法来保持移位。此外,如果验证者希望确保s的某些幂,如j,被排除在验证者之外';的多项式,他不会提供加密和它的移位。

与我们开始时相比,我们现在有了一个健壮的协议。然而,不管加密与否,零知识属性仍然有一个明显的缺点:虽然理论上多项式系数可以有很宽的取值范围。实际上可能非常有限(上面例子中的6),这意味着验证者可以暴力破解有限范围的系数组合,直到结果等于证明者';回答。例如,如果我们考虑每个系数有100个值。,二次多项式将总共有100万种不同的组合,考虑到蛮力,它将需要不到100万次迭代。此外,即使只有一个系数并且其值为1,安全协议也应该是安全的。

由于验证者只能从验证者发送的数据中提取关于未知多项式p(x)的知识,让';让我们考虑那些提供的值(证据):他们参与以下检查:

gp=gh(多项式p(x)有t(x)的根)。

(gp)=gp';t(s)(使用多项式的正确形式)

问题是如何改变证据,使支票仍然有效,但我们可以';不要提取任何知识。?我们可以从最后一节得到答案:我们可以"shift"这些值带有一些随机数(),如(gp)。现在,为了提取知识,我们首先需要找到被认为不可行的。此外,这种随机化在统计学上与随机性是无法区分的。

为了保持关系,让';检查验证者';让我们检查一下。其中一个谚语';s值位于等式的两边。因此,如果我们"移动"它们中的每一个都有相同的,方程一定是平衡的。具体来说,证明者对随机进行采样,并用gp(s)gh(s)对其进行指数化,并将其提供给验证者进行验证:

(gp)=GHt(s)(gp)=gp

合并后我们可以观察到支票仍然有效:

注:把零知识编织成建筑是多么容易的事情,这就是常说的"免费"零知识。

到目前为止,我们有一个交互式的零知识方案。。为什么会这样?由于证明只对原验证者有效,所以其他任何人(其他验证者)都不能信任同一个证明,因为:

因此,为了证明语句(这里是多项式的知识),需要分别与每个验证者进行交互。

虽然交互式证明系统有其使用案例,例如,当证明者只想说服一个特殊的验证者(称为指定验证者),使得证明不能再用于向他人证明同一陈述时,当一个人需要同时(例如,在区块链这样的分布式系统中)或者永久地说服多方,这是非常有效的。验证者需要一直在线,并为每个验证者执行相同的计算。

因此,我们需要的秘密参数是可重用的、公开的、可信的、不可滥用的。

Let';首先考虑在秘密产生后如何保护秘密(t(s),)。我们可以对它们进行加密,就像验证者在发送给证明者之前对S的指数进行加密一样。但是,我们使用的同态加密不支持两个加密值相乘。这对于将t(s)和h以及p和的加密相乘的验证检查是必要的。这是匹配密码的地方。

密码配对(双线性映射)是一种数学构造,其中来自一组数字的两个加密输入由一个函数给出(例如允许它们被确定性地映射到不同数字输出集中的乘法表示,即

由于源数和输出数设置不同,配对结果不能作为另一次配对操作的输入。。我们可以认为输出集(也称为"目标设置")作为来自"不同的宇宙"。因此,我们可以';t将结果乘以另一个加密值,并建议我们一次只能通过名称本身乘以两个加密值。在某种意义上,它类似于哈希函数。它将所有可能的输入值映射到一组可能的输出值中的一个元素,并且它不是平凡的和可逆的。

注:乍一看,这种限制只能阻碍依赖函数。具有讽刺意味的是,在zk-SNARK的案例中,,这是该方案安全性的最重要的属性。

配对函数的一个基本的(技术上不正确的)数学类比是,有一种方法可以"交换"每个输入的基数和指数,以便在转换过程中将基数修改为指数。比如说。然后将两者相乘交换"输入,因此原始的A和B值以相同的指数相乘,例如:

因此,由于在"交换"。因此,不会生成所需的加密乘法。配对的核心属性可以用一个等式来表示:

e(ga,gb)=e(gb,ga)=e(gab,g1)=e(g1,gab)=e(g1,ga)b=e(g1,G1)ab=e(G1,G1)

从技术上讲配对的结果是目标集合中不同生成元G下原值的加密积,即。因此,它具有同态加密的特点。比如我们可以把多对加密的乘积加在一起:

注:加密配对是用椭圆曲线来实现这些性质的,所以从现在开始,符号将代表曲线上的生成器点,它将被添加到它自己的次数,而不是我们在上一节中使用的乘法群生成器。

通过加密配对,我们现在可以设置安全的公共和可重用参数。。让';假设我们信任诚实的一方来生成秘密S和。一旦加密了和S的所有必要幂以及相应的移位(0,1,…,d中ii的g,GSI,gsi)。,必须删除原始值。

这些参数通常称为公共参考字符串或CRS。生成CRS后,任何证明者和验证者?Er可以用它来实现非交互式零知识证明协议。尽管不重要,CRS的优化版本将包括目标多项式的加密评估。

另外,,CRS分为两组(for):

因为可以乘以加密值,veri?Er可以在协议的最后一步检查多项式。,让veri?阳离子密钥验证?er进程接收加密的多项式求值gp、gh、gp'来自证明者:

虽然可信设置是有效的,但它不是。因为CRS的多个用户将不得不相信一个删除的总和,因为目前没有办法证明。所以要尽量减少或者消除这种信任。否则,不诚实的一方将能够在不被发现的情况下制造虚假证据。

实现这一点的一种方法是由多方使用前一节中介绍的数学工具生成复合CRS,使得这些方不知道秘密。这是一个办法,让';让我们考虑三个参与者:爱丽丝、鲍勃和卡罗尔。,对应的索引是A,B,C,I在1,2,…作为这个协议的结果,我们有一个复合和,没有参与者知道其他参与者的秘密参数,除非他们串通。。事实上,为了学习和平,我们必须与所有其他参与者勾结。因此,即使一个人很诚实,他也可以';不要提供虚假证明。

注意:可以根据需要对任意多的参与者重复此过程。

可能的问题是如何验证参与者是否与CRS的每个值一致,因为对手可以采样多个不同的s1,s2,和1,2,并针对s的不同次方随机使用它们(或者提供随机数作为增强的公共参考字符串),从而使CRS无效且不可用。

幸运的是,因为我们可以使用配对来乘以加密值,所以我们可以执行一致性检查。,从第一个参数开始,并确保每个下一个参数都是从它派生的。参与者发布的每个CRS都可以检查如下:

请注意,虽然我们验证每个参与者都与其秘密参数一致。,但是并没有对每个下一个参与者(在我们的例子中是Bob和Carol)强制要求使用先前发布的CRS。因此,如果对手是链中的最后一个,他可以忽略前面的CRS,从头开始构造有效的参数。好像他是链条上的第一个,所以他是唯一知道秘密S和的人。

我们可以通过要求除第一个参与者之外的每个参与者加密并公布他的秘密参数来解决这个问题。例如,Bob还发布了:

这允许验证Bob'sCRS是Alice's参数,因为ii在1,2,d:

相同。Carol必须证明她的CRS是Alice-Bob';sCRS。

这是一个强大的CRS设置方案,不完全依赖于任何一方。事实上,即使只有一方是诚实的,并删除和从不分享其秘密参数。即使其他各方合谋,也是非常明智的。因此,CRS设置中的无关参与者越多,伪造证据的可能性就越小,如果竞争对手参与,这种可能性可以忽略不计。。该方案允许对设置的可读性有疑问的其他不可信方参与进来,因为验证步骤确保了他们不会破坏最终的公共引用字符串(包括使用弱和S)。

我们现在准备整合演进的zk-SNARKOP协议。。形式上,为了简洁起见,我们将使用大括号来表示一组元素,元素旁边填充有下标。例如,sii[d]表示集合s1,s2,…,sd。

目标多项式t(x)和校准多项式的d次已达成一致:

设定:

曾,ZEC之孙。ZEN是ZEC的小孙子,从Zclassic派生而来,Zcash的分叉硬币。个人觉得ZEN太笼统,没有什么独特的技术。。

1,ZEC家族的少年。ZEC在匿名币中有最好的技术零知识证明,然后还有很多项目应用和改进零知识证明,比如科莫多币KMD,结合了ZEC零知识证明和BTC安全。创新程度好;XZC改进了零知识证明,形成的零硬币协议更加匿名。SERO,唯一使用智能合约的匿名硬币,在应用零知识证明的同时引入了图灵完全智能合约。当ARPA应用零知识证明时,,引入隐私计算;ZEL更牛,类似BTCZECETH";比特币的安全性是有的,ETH的智能合约也是有的。币圈牛人赵昌鹏也高度评价。禅宗一味的分叉再分叉,没有特色。

2、没有优秀的技术创新。作为ZEC的孙子(分叉路线:ZCash-ZClassic-ZENCash),ZEN没有什么响亮的技术创新,主要是改善矿工利益、融资模式等琐事。它可以';不能和匿名币三大天王XMR,DASH,ZEC相提并论。

延伸材料

项目团队约35人,分散在工程部、法务财务部、市场运营部、用户体验部、运营部、业务拓展部。、行政事务部等部门。

此令牌禅采,据说无预掘,无ICO,无天使轮,无基石轮,无创始人奖励,分配公平公开。"像比特币,总量2100万枚,其中70%用于挖矿。,10%用于备用,20%用于安全节点。

采矿方法也是基于POW的工作量证明,使用ASIC矿机Z9、A9、A9、Z11等。出街区大概需要2、5分钟。目前,每个区块包含12或5个代币。。发布时间是2017年5月底,减半时间也是四年。目前还处于第一阶段。采用的一致性算法是POWEquihash算法。目前已挖出750万件,单价约39元人民币,最高约470元,最低约21元。。已在币安、火币、bittrex、okex等主流交易所上线。

中使用的核心技术如下:融入尖端的零知识证明技术,使用可持续的采矿融资方法,更加分散化,以及公平治理。

这个系统还有以下特点:

私密性。Zen是一个保护隐私的平台,基于zk-SNARKs技术,具有去中心化的安全节点架构。

安全性。Zen是第一个在节点和中继节点级别实现完全端到端加密的数字货币。

回溯。受保护的交易是完全加密的,但在全网共识下可以验证为真。发送者、接收者和交易金额都隐藏在区块链中。,让禅完全无迹可寻。

伤害抗性。Zen有一个极度分散的节点网络。

这个项目还设计了安全节点和超级节点。其中安全节点年化收益高达25%,超级节点年化收益达到16%。。

最后还有一点好处。如果你有一个gmail邮箱,可以免费得到一个zen,大概是30元左右。

总体来说,这是一个POW挖矿公链项目,用户可以通过这个公链来构建自己的侧链。在代币分配中,项目方持股30%,总市值排名70左右。但是,普通人仍然无法参与采矿方法。这个公链的用户还是很少的,只有三个项目在用。我不是很乐观。

以太坊应用开发可用工具、组件、模式和平台指南。

该列表的创建是由ConsenSys的产品经理推动的。他们认为工具、开发模型和组件需要在新的和有经验的区块链开发者之间更好地共享。

开发智能合同

智能合同语言

体系结构

IDE

其他工具

测试区块链网络

测试以太网龙头

前端以太坊API

后端以太坊API

引导加载程序/开箱即用工具

以太坊ABI(应用程序二进制接口)工具

以太坊客户端

存储

mahuta-IPFS存储服务,具有附加搜索功能,以前称为IPFS商店

OrbitDB-IPFS上的分散式数据库

JSIPFSAPIIPFSHTTPAPI的客户端库,用Java脚本语言实现

面向IPFS和其他分布式/分散式存储协议的临时易用API

pinata—使用IPFS的最简单方法

消息传递

测试工具

安全工具

监控

其他杂项工具

CheshireCryptoKitiesAPI和smartcontract的本地沙盒实现可用作TruffleBox

ERCs-ethereum注释请求存储库

ERC-20-可替代资产的原始代币合同

ERC-721-不可替代资产的代币标准

ERC-777-可替代资产的改进代币标准

[

ERC-918-MineableToken标准

流行智能合约库

扩展性

支付/状态通道

等离子

[

poabridge

poabridgeuserinterface

poabridgecontractZK-SnakZK-Stark

Pre-builtuserinterfacemodule

Theabovecontentcomesfromgithub.com/consensys/ethereum-developer-tools-list

.

我是宇哥,全栈程序员,在深圳创业,专注于区块链、元宇宙和智能合约、附加小程序和app开发。

[祈祷]

感谢您阅读本文';详细介绍zk-snark。如果你不';如果你对zksnarks的数学原理不够了解,并且想了解更多关于zk-snark的知识,你可以在这个网站的主页上搜索你想知道的内容!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。

本文地址: http://www.lyw520.com/baikezhishi/21077.html
文章来源: 小美
ZK- Snak's Mathematical Principles]文档下载: PDF DOC TXT