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
论文摘要
文章提出一种基于帐户模型的完全去中心化的保密支付方案,利用ElGamal加密有效隐藏了交易金额。为了在使用ElGamal加密的情况下进行零知识证明,作者将Bulletproofs与Σ协议结合起来,提出了无需可信设置的零知识证明机制Σ-Bullets。文中还提出了一个扩展方案,不仅可以做到保密交易还可以做到匿名交易,即利用匿名集隐藏交易发送者和接受者的地址。两种隐私方案均可与以太坊及其他智能合约平台兼容,不会有像基于UTXO模型的方案那样有状态无限增长的情况,且可以防止非正常预先交易和重放攻击等。
论文内容
方法概述:Zether智能合约(ZSC),Zether token (ZTH)。
Zether账户由公钥进行标识,通过公钥和b ZTH可以创建一个账户。用户在转账和将ZTH换回ETH时的金额都是加密形式,并用零知识为余额生成相关证明。
首先考虑一些问题:
非正常预先交易(Front-running):Alice想要转账,为账户余额生成了相关证明,以加密形式存储在合约中。Bob此时给Alice转账,若Bob的交易先被处理,那么Alice的余额改变,刚才生成的证明就失效了。为解决这个问题提出了等待传输(Pending transfer):将时间分为epoch,每个epoch由k个连续区块组成,每个epoch期间收到的转账不立即放入账户,而是先放入待滚入列表。用户想要操作她的账户时,她将发布一笔交易,待滚入列表中的交易将立即进行滚入账户,并可被使用。为了防止重放攻击(Replay protection),用一个nonce与每个zether帐户关联起来。交易需包含一个签名,此签名将交易信息与nonce值绑定,交易被处理时nonce将递增。
Zether机制:
全局setup(部署Zether合约)
zether合约
ZSC中定义了7中方法。
以上是两个内部方法,其他外部方法都要先调用这两个。
RollOver用来处理上一个epoch收到的待滚入的交易pTransfers,更新账户余额。
Checklock用来检查当前以太坊地址能否操作这个Zether账户
Lock/Unlock:
每一个操作zether账户的交易都要由以太坊地址完成。未锁定的账户可由任意地址操作,锁定到特定以太坊合约的账户只能由这个合约地址操作,也就是把操作权交给了合约。
以上两个方法用来完成绑定和解绑。
Fund方法:用户通过链下生成的公钥来进行ETH->ZTH的转换,若Zether账户还不存在则创建并初始化,若已存在则加入待滚入交易。
Burn方法:用于将ZTH换回ETH,其需要用到零知识来证明我确实知道公钥对应的私钥,以及账户中的加密余额与我想要换回的钱数b相等,同时又不会泄露b。
Transfer方法:发送者用自己的和接受者的公钥y用ElGamal加密转账金额得(C,D)(C平,D平),还要用到零知识证明知道公钥y对应私钥,账户余额充足以及发送金额与接收金额一致。接收者收到转账交易后先加到待滚入集合pTransfers中,而不是直接存入账户acc。
user算法
以下是用户的链下方法,需要说明的是最后一个函数ReadBalance,用于向链上获取账户余额,链上返回的是加密余额,用户用私钥解密后得到g^b。若想求出b只能暴力求解,但用户应该知道b的大概数值,所以并不需要尝试所有值。
扩展方案:
上述方法只是隐藏了交易金额,还可扩展到匿名传输(隐藏sender/receiver)。Alcie给Bob转账时选取一个包含k个账户的匿名集,Alcie用匿名集中所有人的公钥y分别加密转账金额,然后构造一个更复杂的零知识证明构造的加密金额正确。
Zether目前存在的不足:
(1)Gas消耗大
(2)支付Gas可能会暴露以太坊地址
(3)交易需在epoch中得到处理,在繁忙的网络中可能很难实现
认识和体会
现存大多数隐私方案都是基于UTXO模型,并且对比特币做出了较大改动,此文基于账户模型构造了与以太坊等智能合约平台兼容的隐私方案,相当于在合约层之上增加了一个隐私层,提供了一个比较新颖的通用的隐私方案设计思路。在隐藏交易金额上值得借鉴的是利用ElGamal加密来代替承诺方案,可省去额外传递承诺随机数r的开销。