NBJL 2020论文导读16: Zether: Towards Privacy in a Smart Contract World


潘玥宸


论文下载地址:https://eprint.iacr.org/2019/191

作者演讲视频地址:https://www.youtube.com/watch?v=Nm0tn0vH194


论文信息:

发表时间2019

论文目前收录在IACR Cryptology ePrint Archive

作者信息Benedikt Bunz斯坦福博士生,Bulletproofs作者之一, Shashank Agrawal, Mahdi Zamani, and Dan Boneh



  1. 论文摘要


文章提出一种基于帐户模型完全去中心化的保密支付方案,利用ElGamal加密有效隐藏了交易金额。为了在使用ElGamal加密的情况下进行零知识证明作者将BulletproofsΣ协议结合起来,提出了无需可信设置的零知识证明机制Σ-Bullets。文中还提出了一个扩展方案,不仅可以做到保密交易还可以做到匿名交易,即利用匿名集隐藏交易发送者和接受者的地址。两种隐私方案均可与以太坊及其他智能合约平台兼容,不会有像基于UTXO模型的方案那样有状态无限增长的情况,且可以防止非正常预先交易和重放攻击


  1. 论文内容


方法概述:Zether智能合约(ZSC),Zether token ZTH

Zether账户由公钥进行标识,通过公钥和b ZTH可以创建一个账户。用户在转账和将ZTH换回ETH时的金额都是加密形式,并用零知识为余额生成相关证明。


首先考虑一些问题

非正常预先交易(Front-running)Alice想要转账,为账户余额生成了相关证明,以加密形式存储在合约中。Bob此时给Alice转账,若Bob的交易先被处理,那么Alice的余额改变,刚才生成的证明就失效了。解决这个问题提出等待传输(Pending transfer)将时间分为epoch,每个epochk个连续区块组成,每个epoch期间收到的转账不立即放入账户,而是先放入待滚入列表用户想要操作她的账户时,她将发布一笔交易,待滚入列表中的交易将立即进行滚入账户,并可被使用。为了防止重放攻击(Replay protection)用一个nonce与每个zether帐户关联起来。交易需包含一个签名,此签名将交易信息与nonce值绑定,交易被处理时nonce将递增。


Zether机制:

  1. 全局setup(部署Zether合约


  1. zether合约


ZSC中定义了7方法


以上是两个内部方法,其他外部方法都要先调用这两个

RollOver用来处理上一个epoch收到的待滚入的交易pTransfers,更新账户余额。

Checklock来检查当前以太坊地址能否操作这个Zether账户


Lock/Unlock

每一个操作zether账户的交易都要由以太坊地址完成。未锁定的账户可由任意地址操作,锁定到特定以太坊合约的账户只能由这个合约地址操作,也就是把操作权交给了合约。

以上两个方法用来完成绑定和解绑

Fund方法:用户通过链下生成的公钥来进行ETH->ZTH的转换,若Zether账户还不存在则创建并初始化,若已存在则加入待滚入交易

Burn方法:用于将ZTH换回ETH,其需要用到零知识来证明我确实知道公钥对应的私钥,以及账户中的加密余额与我想要换回的钱数b相等,同时又不会泄露b

Transfer方法:发送者用自己的和接受者的公钥yElGamal加密转账金额得(C,D)(C,D)还要用到零知识证明知道公钥y对应私钥,账户余额充足以及发送金额与接收金额一致。接收者收到转账交易先加到待滚入集合pTransfers中,而不是直接存入账户acc


  1. user算法

以下是用户的链下方法需要说明的是最后一个函数ReadBalance用于向链上获取账户余额,链上返回的是加密余额,用户用私钥解密后得到g^b若想求出b只能暴力求解,但用户应该知道b的大概数值,所以并不需要尝试所有值

扩展方案:

上述方法只是隐藏了交易金额还可扩展到匿名传输(隐藏sender/receiverAlcieBob转账时选取一个包含k个账户的匿名集,Alcie用匿名集中所有人的公钥y分别加密转账金额然后构造一个更复杂的零知识证明构造的加密金额正确


表中列出的是各种交易花费的gas值和交易数据大小


Zether目前存在的不足:

1Gas消耗大

2)支付Gas可能会暴露以太坊地址

3交易需在epoch中得到处理,在繁忙的网络中可能很难实现



  1. 认识和体会


现存大多数隐私方案都是基于UTXO模型,并且对比特币做出了较大改动,此文基于账户模型构造了与以太坊等智能合约平台兼容的隐私方案,相当于在合约层之上增加了一个隐私层,提供了一个比较新颖的通用的隐私方案设计思路。在隐藏交易金额上值得借鉴的是利用ElGamal加密来代替承诺方案,可省去额外传递承诺随机数r的开销。