如何在现有的区块链上增加隐私功能?
近日,Qtum量子链发起2019全球线上隐私主题黑客马拉松,我们收到了许多关于大赛的问题——如何将Qtum与现有的隐私技术结合?哪些技术适合移植到Qtum上?在哪些具体的结合点上可以开发?本文通过结合Qtum与Zether的思考,希望带给你更多隐私方向的启发。
众所周知,区块链上交易和合约都处于透明状态,不适合部分商业应用场景。Zether通过智能合约赋予区块链隐私交易的功能,帮助了链上资产、投票、拍卖等应用的隐私化。可是目前Zether面临Gas过高的问题,那我们怎么通过Qtum降低Gas和增加预编译合约呢?
1. 简介
区块链网络中,尽管用户的地址来自于随机生成的私钥,但地址和实体之间的对应关系还是有可能被交易所、商户泄漏,甚至被区块链数据的抓取和聚类算法所挖掘。这种程度的隐私性限制了商业场景的应用。
隐私币的热潮中,出现了包括Monero、ZCash、Grin和Beam在内具有隐私特性的公有链,而这些也已经被大多数用户所认可。但是它们使用的方法都需要对区块链系统进行较大的改动,想要在现有的区块链上去实现有一定的难度。
斯坦福大学的博士生Benedikt Bunz(Bulletproofs防弹协议发明者之一)、斯坦福大学教授Dan Boneh以及Visa研究部门,提出了一种基于以太坊智能合约的隐私协议:Zether。
Zether的基本想法是通过智能合约实现隐私交易——即隐藏交易的金额和账户的余额,并最终应用于拍卖、投票等场景中。为了满足智能合约基于Account的特性,它提出了ElGamal encryption、Pending transfer、Rolling over等机制。为了增加Zether和其他合约的交互性,它又增加了lock/unlock的功能。为了提升Bulletproofs的性能,它使用新的Σ-Bullets进行代替。
Zether提出之后,受到了广泛的关注。JP Morgan不但将其用于自己Quorum区块链系统中,而且还尝试对其进行进一步的改进。
Zether的最初设计文档位于[1],作者公布了部分源码[2]。JP Morgan对其的改进文档位于[3],源码位于[4]。
2. 原理
已有的隐私交易方法,例如Confidential Transactions[5]与其衍生方法MimbleWimble[6],都是基于UTXO实现的。Zether的主要想法是将这一类方法应用到智能合约中,实现基于Account的隐私交易。为此,它对已有的方法进行了如下修改。
UTXO到Account
如果在智能合约中实现UTXO,会占用大量的存储空间。所以Zether的一大主要工作是将Confidential Transactions的UTXO模型改造为Account模型。
ElGamal encryption
Confidential Transactions使用了Pedersen commitments隐藏每个UTXO的金额。如果对方发送给你一个Pedersen commitments取值错误的UTXO,不会影响你其他UTXO的使用。
当改成Account模型的时候,需要对每个用户接收的UTXO进行金额累加,得到最终余额,存储于合约中。但如果直接对Pedersen commitments进行累加,其中一个的错误会导致最终余额的错误,影响所有金额的使用。
因此,Zether采用了ElGamal encryption的方式,用接收方的公钥来加密交易金额。这样,接收方就能验证加密金额的正确性,然后合入到余额中。
解决Front-running问题
交易的过程中,需要对交易金额和交易后余额进行范围证明。但在Account模型中,如果你发起交易的同时,另一用户给你发送了一笔交易,并且在你的交易之前打包进行了区块,这样余额就发生了改变,你交易中的范围证明就不再有效。
因此,Zether提出了Pending transfers和Rolling over的机制。即用户收到的交易并不立即合入到余额中,而是周期地合入。每个周期中,当你第一次与自己账户交互的时候,进行接收交易合入余额的操作。即,只有账户的所有者可以改变账户的余额。这样,Front-running就不会发生。
重放攻击保护
假定用户在某个特定的余额下发起了一笔交易。当用户再次出现这个余额时,则这笔交易能够再次生效。这种情况就称作Relay Attack(重放攻击)。为了防止Relay Attack,Zether参照了Ethereum的方式,在每个账号上加上了一个nonce。用户每发起一笔交易,nonce的取值就会增加。用户的交易都需要对nonce进行签名,这样就保证了每笔交易都无法被relay。
范围证明
Zether使用了Σ-Bullets替代Bulletproofs。Σ-Bullets是Bulletproofs和Σ-protocols的结合。它的特点是可以证明更为复杂的陈述,且证明和验证的过程更加高效。
3. 思考
评价Zether
Zether的优点如下:
1.基于智能合约实现,对区块链底层逻辑不需要进行改动
2.基于Confidential Transactions方案修改,不需要zkSNARK那样需要信任的初始化过程
Zether的缺点如下:
1.Gas消耗太高。如图,每次Transfer需要7188k的Gas,其中6455k消耗在椭圆曲线相关计算上。
2.没有隐藏地址。相比MimbleWimble,Zether没有隐藏用户的地址。需要后续进一步的改进。
还有2点问题值得考虑:
1. Zether官方并未对论文中的实现进行完全开源,所以无法对其进行充分验证。只能尝试对[4]中JP Morgan的改进算法进行验证。
2. 需要考虑是否可以对Zether进行简化,减少椭圆曲线的计算次数,从而减轻对节点计算资源的消耗。
Zether & Qtum
中国观察