Qtum量子链幻影隐私协议白皮书

扫码链接5000+新基建产业链上下游从业者,入群请备注“机智地+姓名+公司+岗位

隐私对于区块链和去中心化应用而言是一项至 关重要的问题。当前,有几个区块链以隐私作为主要特征。例如,Zcash使用zk- -SNARKs隐藏交易数据,其中地址和金额对公众不可见。zk-SNARK技术是安全的,并且已经在Zcash中稳定运行了多年。但是,它不能支持智能合约,这意味着人们无法在Zcash.上构建去中心化应用。

为了解决这个问题,Quorum ZSL和Nightfall这两个协议尝试通过智能合约来实现zk- -SNARKs。通过这种方式,这些协议使区块链上具有隐私特征的去中心化应用得以实现。但是,在以太坊虚拟机上进行的实验表明,这些协议的运行会花费大量时间和gas,这意味着它们不适合日常使用。在本文中,我们提出了一种基于智能合约的使用zk- SNARKs的高效隐私协议。它有助于使一些 去中心化应用(例如数字资产,稳定币和支付)变得隐私。该协议在智能合约的gas消耗与zk-SNARK生成证明的计算复杂度之间取得平衡。此外,它使用链上秘密分发技术将隐私信息存储在区块链上。一笔隐私交易的gas消耗大约是1M,在一台普 通的计算机上生成交易所需的时间不到6秒。

介绍

2008年9月,中本聪发布了比特币的白皮书[1。2009年1月,比特币主网正式启动,这开辟了加密数字货币的新纪元,也将一种新的技术引入公众视野。2015年7月,以太坊[2]启动。 嵌入式EVM(以太坊虚拟机)可以运行图灵完备的智能合约,这带来了第二代区块链技术。随后,大量带有智能合约的区块链(例如Qtum、Tron、 EOS)和通过智能合约实现的去中心化应用(例如CryptoKitties、 MakerDAO、 Uniswap) 相继涌现。

2016年,Zcash协议[3]被提出,该协议使用加密技术为区块链提供增强的隐私性。Zcash中有两种类型的地址:透明地址(taddr)和隐私地址(zaddr) 。 透明地址发送和接受交易的过程中,交易的地址和相关的金额会被记录在Zcash区块链上,和比特币相类似。然而,隐私地址使用zk- SNARKs来保护交易数据,其中地址、相关的金额和加密的备忘数据对公众是不可见的。

基于Zcash协议的设计,更多的协议和平台被提出以改进以太坊上的隐私情况。Quorum[4是一个开源的区块链平台,它结合了以太坊社区的增强功能和创新功能,以满足企业需求。Quorum的ZSL (零知识安全层)是一种协议,该协议利用zk- -SNARKs来使数字资产通过智能合约进行转移,而无需透露有关发送者、接收者和金额的任何信息。根据其文档[5]所述,在Intel Xeon E3 -1225v2 3.2GHz处理器(4核)上,一次JoinSplit操作耗时42.6秒,并且需要近3GB的RAM。对于日常使用而言,时间和资源的消耗过大了。

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。

从上可以看到,智能合约.上现有的隐私协议不够实用。用户必.须等待40秒以上才能生成交易,并且gas的消耗也无法被接受。在相同的安全级别下,我们减小了zk- SNARK证明电路的尺寸和gas的消耗。与Nightfall相似,我们的协议提供了两种!资产:透明资产和隐私资产。前者是通用ERC- -20代币,而后者的设计与Zcash相似,但会更简单。通过对隐私资产采用新的实现方法,最终的性能十分优越:一笔交易的gas消耗仅有大约1M,并且在一台普通机器上证明的生成时间不超过6秒。

预备知识

1.术语

· 票据:票据是对数字资产数值的加密表示。它指定金额和接收方地址。而且,它可以由对应于该地址的私钥来花费。

· 承诺:对于每一张票据,都有一个相关的承诺,该承诺可由一个陷门]函数来生成。

· 废弃符:陷门函数还会生一个关联的废弃符。对于每张票据,只可能存在一个有效的承诺和废弃符。

 默克尔树:默克尔树是一颗树,其中每个叶节点记录数据块的哈希值,每个非叶节点记录其子节点的哈希值。

· 增量默克尔树:增量默克尔树是仅可以进行添加的默克尔树,仅支持数据块的插入。固定深度的增量默克尔树被用来存储票据承诺。

· 链上秘密分发:它用于以加密形式将票据的传输部分存储在区块链上。

2. Shrubs默克尔树

Shrubs默克尔树[7是增量默克尔树的一种变体。相比之下,它不是由树根来表示,而是由一系列子树的根节点表示。这种设计可以允许以O(1)的复杂度插入一个承诺,但需付出更复杂的zk- -SNARK证明为代价,以证明该承诺在树中。

假设-颗Shrubs默克尔树的高度是h。总共用h+1个节点(每一深度有一个)用来表示这颗树。我们称这些节点为Shrub节点。在每一深度上,Shrub节 点或是唯一的节点,或是最靠右的完美左子树的根节点。通过这种方式,当插入新的叶节点时,只需切换到一个新的节点或者重新计算哈希值就可以更新一个Shrub节点,且只有这一个Shrub节点需要被更新。

这里我们以一个高度为3的Shrubs默克尔树为例,如图1所示。当插入节点4时,Shrub节点为14,12,8,4。当插入节点5时,Shrub节 点变为14,12,10, 4,因为节点10成为了完美子树的根。

Qtum量子链幻影隐私协议白皮书

因此,数据块插入所消耗的gas比原生增量默克尔树小了很多。对于每个非叶节点,它的哈希值最多只会计算-次,当所有叶节点都插入之后,整棵树一共需要计算2f-1次。所以平均而言,插入一个叶节点只需要进行-次哈希计算。

3. 哈希函数的选择

为zk- SNARKs选择合适的哈希算法时,需要考虑两个因素:gas的消耗和生成证明的时间。- -般来说,一个gas消耗更 少的哈希函数将导致一个更大的电路(更多约束),也就意味着更长的证明生成时间。考虑到哈希函数只会在链外进行使用,我们只需关心后一因素。但对于链上使用的哈希函数,则应该平衡好这两个因素。


Qtum量子链幻影隐私协议白皮书

候选的哈希函数、它们的gas消耗(对于2个输入) v和zk- -SNARK约束列在了表1中。我们可以看到并没有同时具有低.gas消耗且小电路尺寸的哈希函数。但是,由于Shrubs默克尔树使得构建低gas消耗的默克尔树成为可能,因此我们可以在折衷方案中减少gas消耗的权重。最后,对于我们的系统来说,Poseidon或者MiMC哈希函数是更好的选择。注意Poseidon和MiMC哈希函数还没有被大多数密码学专家审核过,因此它们可能会受到攻击。

4.Shrubs公开输入压缩

如上所述,尽管Shrubs默克尔树大大降低了将承诺插入树中所消耗的gas,但它增加了证明承诺在一棵树中所消耗的gas。基本上,为了证明一个叶节点在Shrubs默克尔树上,不仅应该提,供从叶节点到其最近的Shrub节点的路径,还应该提供所有的Shrub节点,后者用于证明到最近节点的有效性。结果是,由于有h+1个Shrub节点,公开输入的大小由1增加到h+1。相关gas消耗计算公式如下:


Qtum量子链幻影隐私协议白皮书

其中n是公开输入的大小,ScalarMulGas、 PairingBase-Gas、PairingPerPointGas是 三个椭圆曲线操作的gas消耗。这些操作是通过EVM.上的预编译合约实现的,它们所消耗的gas如表2所示。我们可以看到,公开输入的大小每增加1,gas消耗会增加40,000。因此,Shrubs默克尔树比原生增量默克尔树多耗费40,000 * h gas。

Qtum量子链幻影隐私协议白皮书

我们引入一种方案: Shrubs公开输入压缩,用来减少公开输入的大小。如图2所示,为所有Shrub节点创建另外一个默克尔树,称作节点默克尔树。我们可以使用节点默克尔树中的一条路径,而不是所有的Shrub节点,来证明Shrub节点的有效性。这样,公开输入的大小将减小为1。

每当将叶节点插入到Shrubs默克尔树中时,都会更新节点默克尔树,因为Shrub节点已经更新。这将给插入数据的过程带来额外的gas消耗。为了减少这部分消耗,节点默克尔树使用了一种新的方案来计算默克尔树根,如图3所示。-棵节点默克尔树会被分为几个子树,并且这些子树的树根会被保存下来。当一个叶节点更新时,仅需重新计算相应子树,默克尔树根随之更新。此外,选择MiMC哈希作为节点默克尔树的哈希函数,以平衡电路尺寸大小和gas消耗。

5.公开输入压缩

Shrubs公开输入压缩能正常工作是因为所有的Shrub节点是公开的,并且它们的默克尔树根是固定的。但对于其他的公开输入,这种方法可能不再起作用。这些公开的输入必须受一个单独的电路约束。我们使用一种方法:公开输入压缩,来减少公开输入的大小。Christian Reitwiessner在博客[8]中对此进行了介绍。.

假设一个电路可以由函数F(u, w)来表示,其中u表示公开输入,w表示隐私输入。可以将此函数更改为F(H, f(u, w) ^ H(u))的形式,所有公开输入的大小变为1 (所有输入的哈希)。MiMC哈希在我们的协议中用于公开输入压缩。


Qtum量子链幻影隐私协议白皮书

协议

所提出的协议提供了两种资产:透明资产和隐私资产。前者是通用的ERC-20代币,后者的设计与Zcash类似。隐私资产也可视作ERC-20代币的隐私表示。使用这一协议,用户可以轻松地转移他们的透明和隐私资产。

图4说明了协议的总体架构。若干个智能合约部署在了区块链上。Monitor帮助监控这些合约的交易并将交易发送到区块链上。Server 是核心组件,它调用zk- -SNARK引擎生成证明并同步区块链的状态。


Qtum量子链幻影隐私协议白皮书

1.密钥管理

两对定义在Fr上的公私钥对被用在了协议中。sk、pk对用于身份识别。esk、epk对用于链上秘密分发的加密。它们的关系如图5所示。

2.票据,承诺,废弃符

协议使用与Zcash相同的UTXO模型。所有的票据承诺都保存在Shrubs默克尔树上。Shrubs默克尔树的高度 被设置为31,以总共支持2票据。一张票据包含了下列字段
Qtum量子链幻影隐私协议白皮书

Qtum量子链幻影隐私协议白皮书

3.链上秘密分发

在zk- SNARKs中,为了传输-张票据,发送方需要通过区块链将承诺发送给接收方,并通过点对点方式将票据值发送给接收方。我们的协议使用链上秘密分发技术,这允许发送方也可以通过区块链秘密地共享票据。这样,整个过程都可以在区块链上完成。

链上秘密分发如图6所示。发送方首先生成一对临时密钥tsk、tpk。然后通过tsk和来自接收方的epk生成‘共享加密密钥”。最后,发送方使用共享加密密钥加密票据,并将加密的票据和tpk发送到区块链上。对于接受方,可以基于esk和区块链上的tpk恢复共享加密密钥。最后,接受方可以使用共享加密密钥在链上将加密的票据进行解密。

协议中的隐私资产支持三种操作: MINT、TRANSFER和BURN。

MINT

MINT操作用于通过将等量的透明资产锁定在合约中,以发行一定数量的隐私资产。如图7所示,它将为已发行资产创建新的票据。zk-SNARK引擎使用MINT电路,以票据的金额和承诺作为公开输入,来帮助生成票据证明。然后将它们发送到智能合约。如果证明被成功验证,则将票据承诺添加到Shrubs默克尔树中。

TRANSFER

如图8所示,TRANSFER操作被用来将隐私资产从发送方转移,到接受方。它将生成一个包含四张票据的交易:两张作为输入,两张作为输出。发送方必须为输入提供两个废弃符,为输出提供两个承诺。zk-SNARK引擎使用TRANSFER电路为输出生成证明。然后交易会被发送到智能合约。如果被成功验证,智能合约将记录两个废弃符,并将两个承诺追加到Shrubs默克尔树上。

Qtum量子链幻影隐私协议白皮书

Qtum量子链幻影隐私协议白皮书

BURN

BURN操作可以销毁-定数量的隐私资产并获得等量的透明资产,如图9所示。首先,必须提供票据和其默克尔路径来证明对票据的所有权。zkSNARK引擎使用BURN电路为票据生成证明。数值、票据废弃符、Shrubs默克尔树根、账户是发送到智能合约的公开输入。如果被成功验证,票据的废弃符将记录在智能合约中,并且票据也不能被再使用。

Qtum量子链幻影隐私协议白皮书

zk- SNARK电路

我们用一个例子来描述协议中的zk- -SNARK电路。Alice铸造了-定数量的隐私资产,将其转移到Bob,并由Bob进行销毁。下标为A的符号表示其属于Alice,B为Bob。

1.MINT电路

MINT电路被Alice用来发行隐私资产。
Qtum量子链幻影隐私协议白皮书

2.TRANSFER电路

Qtum量子链幻影隐私协议白皮书

Qtum量子链幻影隐私协议白皮书

3.BURN电路

Bob可以使用BURN操作将他的隐私资产进行销毁。

Qtum量子链幻影隐私协议白皮书

性能

协议在装有Intel(R) Core(TM) i5- 7500 CPU 3.40GHz处理器(4核)和8GBRAM的计算机上进行了评估。我们使用Qtumv0.18.1来启动了一条嵌入了EVM的私有链然后把我们的智能合约部署在了上面。每个MINT、TRANSFER和BURN操作都运行了20次来测量平均的证明生成时间,并且我们从区块链数据中取得了它们的gas消耗。


Qtum量子链幻影隐私协议白皮书

参数和结果展现在了表3中。我们可以看到TRANSFER操作的gas消耗大约为1M,证明生成时间为5.68s,明显低于其他协议。MINT和BURN操作比TRANSFER消耗了更少的资源。整体而言,协议在EVM.上表现得比其他协议更加高效。

总结

本文展示了一种基于智能合约的使用zk- SNARKs的高效隐私协议。通过使用一种改进的默克尔树和仔细选择的哈希函数,它将gas消耗减小到1M,并且在常规电脑上的交易生成时间低于6秒。此外,它使用链上秘密分发来在区块链上保存私有信息,实现了交易发送者和接受者之间的非交互式交易。

要部署zkSNARK电路,需要进行可信设置来生成证明密钥和验证密钥。不幸的是,此过程还会产生一条称为“有毒废物”的数据,必须将其丢弃,因为它可能被用于产生虚假证据,从而破,坏系统的安全性。为了解决该问题,可以使用特殊的加密仪式来执行可信设置,在该仪式中,多个参与者轮流执行计算任务,以得到最终的结果。

Zcash在2017年举行了这个仪式。在2019年8月,Semaphore团队基于Zcash Powers of Tau仪式进行了多方信任设置仪式[9]的第一阶段。实际上,仪式可以是永久的,任何zkSNARK项目都可以选择仪式的任何一个节点来开始其指定电路的第二阶段设置,并且参加人数没有限制。我们的协议可以从新仪式中受益,并为其生成自己的证明密钥和验证密钥。

声明: 本文由入驻基智地平台的作者撰写,观点仅代表作者本人,不代表基智地立场;基智地发布此信息的目的在于传播更多信息,与本站立场无关。

发表评论

邮箱地址不会被公开。 必填项已用*标注