协议在装有Intel(R) Core(TM) i5- 7500 CPU 3.40GHz处理惩罚器(4核)和8GBRAM的计较机长举办了评估。我们利用Qtumv0.18.1来启动了一条嵌入了EVM的私有链然后把我们的智能合约陈设在了上面。每个MINT、TRANSFER和BURN操纵都运行了20次来丈量平均的证明生成时间,而且我们从区块链数据中取得了它们的gas耗损。
基于Zcash协议的设计,更多的协议僻静台被提出以改造以太坊上的隐私环境。Quorum[4是一个开源的区块链平台,它团结了以太坊社区的加强成果和创新成果,以满意企业需求。Quorum的ZSL (零常识安详层)是一种协议,该协议操作zk- -SNARKs来使数字资产通过智能合约举办转移,而无需透露有关发送者、吸收者和金额的任何信息。按照其文档[5]所述,在Intel Xeon E3 -1225v2 3.2GHz处理惩罚器(4核)上,一次JoinSplit操纵耗时42.6秒,而且需要近3GB的RAM。对付日常利用而言,时间和资源的耗损过大了。
协议
Shrubs果真输入压缩能正常事情是因为所有的Shrub节点是果真的,而且它们的默克尔树根是牢靠的。但对付其他的果真输入,这种要领大概不回复浸染。这些果真的输入必需受一个单独的电路约束。我们利用一种要领:果真输入压缩,来淘汰果真输入的巨细。Christian Reitwiessner在博客[8]中对此举办了先容。.
每当将叶节点插入到Shrubs默克尔树中时,城市更新节点默克尔树,因为Shrub节点已经更新。这将给插入数据的进程带来特另外gas耗损。为了淘汰这部门耗损,节点默克尔树利用了一种新的方案来计较默克尔树根,如图3所示。-棵节点默克尔树会被分为几个子树,而且这些子树的树根会被生存下来。当一个叶节点更新时,仅需从头计较相应子树,默克尔树根随之更新。另外,选择MiMC哈希作为节点默克尔树的哈希函数,以均衡电路尺寸巨细和gas耗损。
隐私对付和去中心化应用而言是一项至 关重要的问题。当前,有几个区块链以隐私作为主要特征。譬喻,Zcash利用zk- -SNARKs埋没生意业务数据,个中地点和金额对公家不行见。zk-SNARK技能是安详的,而且已经在Zcash中不变运行了多年。可是,它不能支持智能合约,这意味着人们无法在Zcash.上构建去中心化应用。
假设-颗Shrubs默克尔树的高度是h。总共用h+1个节点(每一深度有一个)用来暗示这颗树。我们称这些节点为Shrub节点。在每一深度上,Shrub节 点或是独一的节点,或是最靠右的完美左子树的根节点。通过这种方法,当插入新的叶节点时,只需切换到一个新的节点可能从头计较哈希值就可以更新一个Shrub节点,且只有这一个Shrub节点需要被更新。
· 单据:单据是对数字资产数值的加密暗示。它指定金额和吸收方地点。并且,它可以由对应于该地点的私钥来耗费。
3. 哈希函数的选择
5.果真输入压缩
从上可以看到,智能合约.上现有的隐私协议不足实用。用户必.须期待40秒以上才气生成生意业务,而且gas的耗损也无法被接管。在沟通的安详级别下,我们减小了zk- SNARK证明电路的尺寸和gas的耗损。与Nightfall相似,我们的协议提供了两种!资产:透明资产和隐私资产。前者是通用ERC- -20代币,尔后者的设计与Zcash相似,但会更简朴。通过对隐私资产回收新的实现要领,最终的机能十分优越:一笔生意业务的gas耗损仅有约莫1M,而且在一台普通呆板上证明的生成时间不高出6秒。
链上奥秘分发如图6所示。发送方首先生成一对姑且密钥tsk、tpk。然后通过tsk和来自吸收方的epk生成‘共享加密密钥”。最后,发送方利用共享加密密钥加密单据,并将加密的单据和tpk发送到区块链上。对付接管方,可以基于esk和区块链上的tpk规复共享加密密钥。最后,接管方可以利用共享加密密钥在链大将加密的单据举办解密。
本文展示了一种基于智能合约的利用zk- SNARKs的高效隐私协议。通过利用一种改造的默克尔树和仔细选择的哈希函数,它将gas耗损减小到1M,而且在通例电脑上的生意业务生成时间低于6秒。另外,它利用链上奥秘分发来在区块链上生存私有信息,实现了生意业务发送者和接管者之间的非交互式生意业务。
4.Shrubs果真输入压缩
· 理睬:对付每一张单据,都有一个相关的理睬,该理睬可由一个陷门]函数来生成。
预备常识
所提出的协议提供了两种资产:透明资产和隐私资产。前者是通用的ERC-20代币,后者的设计与Zcash雷同。隐私资产也可视作ERC-20代币的隐私暗示。利用这一协议,用户可以轻松地转移他们的透明和隐私资产。
先容
· 废弃符:陷门函数还会生一个关联的废弃符。对付每张单据,只大概存在一个有效的理睬和废弃符。
BURN操纵可以销毁-定命量的隐私资产并得到等量的透明资产,如图9所示。首先,必需提供单据和其默克尔路径来证明对单据的所有权。zkSNARK引擎利用BURN电路为单据生成证明。数值、单据废弃符、Shrubs默克尔树根、账户是发送到智能合约的果真输入。假如被乐成验证,单据的废弃符将记录在智能合约中,而且单据也不能被再利用。为了办理这个问题,Quorum ZSL和Nightfall这两个协议实验通过智能合约来实现zk- -SNARKs。通过这种方法,这些协议使区块链上具有隐私特征的去中心化应用得以实现。可是,在虚拟机长举办的尝试表白,这些协议的运行会耗费大量时间和gas,这意味着它们不适合日常利用。在本文中,我们提出了一种基于智能合约的利用zk- SNARKs的高效隐私协议。它有助于使一些 去中心化应用(譬喻数字资产,不变币和付出)变得隐私。该协议在智能合约的gas耗损与zk-SNARK生成证明的计较巨大度之间取得均衡。另外,它利用链上奥秘分发技能将隐私信息存储在区块链上。一笔隐私生意业务的gas耗损约莫是1M,在一台普 通的计较机上生成生意业务所需的时间不到6秒。
因此,数据块插入所耗损的gas比原生增量默克尔树小了许多。对付每个非叶节点,它的哈希值最多尽管帐算-次,当所有叶节点都插入之后,整棵树一共需要计较2f-1次。所以平均而言,插入一个叶节点只需要举办-次哈希计较。
默克尔树:默克尔树是一颗树,个中每个叶节点记录数据块的哈希值,每个非叶节点记录其子节点的哈希值。
图4说明白协议的总体架构。若干个智能合约陈设在了区块链上。Monitor辅佐监控这些合约的生意业务并将生意业务发送到区块链上。Server 是焦点组件,它挪用zk- -SNARK引擎生成证明并同步区块链的状态。为zk- SNARKs选择符合的哈希算法时,需要思量两个因素:gas的耗损和生成证明的时间。- -般来说,一个gas耗损更 少的哈希函数将导致一个更大的电路(更多约束),也就意味着更长的证明生成时间。思量到哈希函数只会在链外举办利用,我们只需体贴后一因素。但对付链上利用的哈希函数,则应该均衡好这两个因素。Zcash在2017年进行了这个典礼。在2019年8月,Semaphore团队基于Zcash Powers of Tau典礼举办了多方信任配置典礼[9]的第一阶段。实际上,典礼可以是永久的,任何zkSNARK项目都可以选择典礼的任何一个节点来开始其指定电路的第二阶段配置,而且介入人数没有限制。我们的协议可以重新典礼中受益,并为其生本钱身的证明密钥和验证密钥。
候选的哈希函数、它们的gas耗损(对付2个输入) v和zk- -SNARK约束列在了表1中。我们可以看到并没有同时具有低.gas耗损且小电路尺寸的哈希函数。可是,由于Shrubs默克尔树使得构建低gas耗损的默克尔树成为大概,因此我们可以在折衷方案中淘汰gas耗损的权重。最后,对付我们的系统来说,Poseidon可能MiMC哈希函数是更好的选择。留意Poseidon和MiMC哈希函数还没有被大大都暗码学专家审核过,因此它们大概会受到进攻。
MINT电路被Alice用来刊行隐私资产。
2018年10月,安永在布拉格的以太坊Devcon.上先容了Night-fall[6]。在2019年5月31日,安永宣布了Nightfall,可以在以太坊主网上利用zk-SNARK智能合约隐私地生意业务ERC-20和ERC-721代币。Nightfall利用深度为33的默克尔树的SHA256哈希函数。ERC-20代币的生意业务需要2,292,000个zk- -SNARK约束,而且耗损约2.7Mgas,这相对较高,因为以太坊中每个区块的gas限制是8M。
TRANSFER
zk- SNARK电路
总结
3.链上奥秘分发
2016年,Zcash协议[3]被提出,该协议利用加密技能为区块链提供加强的隐私性。Zcash中有两种范例的地点:透明地点(taddr)和隐私地点(zaddr) 。 透明地点发送和接管生意业务的进程中,生意业务的地点和相关的金额会被记录在Zcash区块链上,和比特币相雷同。然而,隐私地点利用zk- SNARKs来掩护生意业务数据,个中地点、相关的金额和加密的备忘数据对公家是不行见的。
Bob可以利用BURN操纵将他的隐私资产举办销毁。
协议中的隐私资产支持三种操纵: MINT、TRANSFER和BURN。
BURN
机能
1.MINT电路
1.术语
2.TRANSFER电路
3.BURN电路
假设一个电路可以由函数F(u, w)来暗示,个中u暗示果真输入,w暗示隐私输入。可以将此函数变动为F(H, f(u, w) ^ H(u))的形式,所有果真输入的巨细变为1 (所有输入的哈希)。MiMC哈希在我们的协议顶用于果真输入压缩。我们用一个例子来描写协议中的zk- -SNARK电路。Alice锻造了-定命量的隐私资产,将其转移到Bob,并由Bob举办销毁。下标为A的标记暗示其属于Alice,B为Bob。
个中n是果真输入的巨细,ScalarMulGas、 PairingBase-Gas、PairingPerPointGas是 三个椭圆曲线操纵的gas耗损。这些操纵是通过EVM.上的预编译合约实现的,它们所耗损的gas如表2所示。我们可以看到,果真输入的巨细每增加1,gas耗损会增加40,000。因此,Shrubs默克尔树比原生增量默克尔树多淹灭40,000 * h gas。
MINT
我们引入一种方案: Shrubs果真输入压缩,,用来淘汰果真输入的巨细。如图2所示,为所有Shrub节点建设别的一个默克尔树,称作节点默克尔树。我们可以利用节点默克尔树中的一条路径,而不是所有的Shrub节点,来证明Shrub节点的有效性。这样,果真输入的巨细将减小为1。
MINT操纵用于通过将等量的透明资产锁定在合约中,以刊行必然数量的隐私资产。如图7所示,它将为已刊行资产建设新的单据。zk-SNARK引擎利用MINT电路,以单据的金额和理睬作为果真输入,来辅佐生成单据证明。然后将它们发送到智能合约。假如证明被乐成验证,则将单据理睬添加到Shrubs默克尔树中。
· 链上奥秘分发:它用于以加密形式将单据的传输部门存储在区块链上。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。