Hi Guest

More contents, please log on!

Bitmere.com 区块链前沿 Content
当前,类似以太坊这样的区块链智能合约平台已经变得非常流行。虽然不同类型的去中心化应用,可以很容易地构建在这样的平台上,但目前似乎没有为它们增加一个有意义的隐私层的简单方法。
而来自斯坦福大学的博士生Benedikt Bunz(Bulletproofs防弹证明方案作者之一)、斯坦福大学教授Dan Boneh以及来自Visa研究部门的Shashank Agrawal以及Mahdi Zamani,联合提出了一种针对以太坊智能合约平台的隐私方案:Zether。它与以太坊以及其他智能合约平台兼容,在效率和可用性方面,该协议采用了类似于以太坊的基于账户的方法。论文的作者们描述了保护Zether免受重放攻击和非正常预先交易(front-running)的技术。此外,他们还开发了一种机制来实现与任意智能合约的互操作性。这有助于一些流行的去中心化应用,如拍卖、支付通道,投票等。

而该方案,也得到了智能合约之父尼克.萨博(Nick Szabo)的转发支持。

作为协议的一部分,作者们还提出了Σ-Bullets,这是现有零知识证明系统Bulletproofs(防弹证明)的改进版本,Σ-Bullets使得Bulletproofs(防弹协议)与Sigma协议变得更具互操作性。研究者们将Zether作为以太坊智能合约实施,并通过测量Zether合约使用的gas量,来展示该设计的实用性。在2019年2月初的实验中,一笔Zether保密交易的成本大约是0.014 ETH(大约1.51美元),目前研究者们正在讨论对以太坊虚拟机的一种小更改(独立于Zether),而这将极大地降低Zether保密交易的成本。
相关的加密货币隐私技术方案
在详细了解Zether隐私方案之前,我们先快速回顾一下市场上已经存在的隐私技术方案:
用于比特币的保密交易(CT)首先是由Maxwell提出的,他用佩德森承诺(Pedersen commitments )和OR-proofs来建立一个支付机制,其中交易金额是隐藏的,但可验证一笔交易的输出之和是否超过输入的总和。门罗币(Monero)则更进一步,其使用了一种特殊类型的签名方案,以隐藏由 发送方(匿名集)选择的UTXO集交易的起源地及目的地,然而,门罗的签名大小是随匿名集的大小而线性增加的。而Zether扩展的匿名属性,类似于门罗(但它们的模型是不同的)。
ZCash基于的是Zerocash协议,其使用了一种称为zkSNARKs的更为复杂的零知识证明系统,以次线性成本提供了匿名性。发送者和接受者隐藏在使用屏蔽地址的人群当中。使用SNARKs的其中一个缺点是,需要预先生成一个大的公共引用字符串(CRS),而这种方式没有人知道陷门,这是一项具有挑战性的任务。发送方需要下载这个公共引用字符串(CRS),并为一个大型回路生成证明,而这是非常耗时的。
还有其他几种方法可以使区块链交易实现匿名。CoinJoin为一组用户提供了一种共同创建比特币交易的方法。 (MimbleWimble/Grin)结合了保密交易(CT)和CoinJoin等技术,以非交互方式聚合交易。CoinShuffle和Mixcoin可为比特币混合协议。TumbleBit使用了一种不受信任的媒介(称为Tumbler),使得交易不可链接。M¨obius则通过一个以太坊智能合约取代了tumbler媒介。
Zether的匿名方式不同于以上的方案,其不依赖其他用户的积极参与,Zether用户可选择他们自己的匿名集(类似门罗)。另一方面,如果用户主动使用混合服务,它还可以提供更好的匿名性。
Hawk是一个以隐私保留方式建立任意智能合约的框架。特别地,它可完全隐藏拍卖中的出价,但这也需要付出巨大的代价。在Hawk框架当中,合约的隐私部分是被转换成一个回路(circuit)。一名管理者,其受参与者的私密输入委托,在回路上生成一个zkSNARK证明,以表明它已被正确地执行。SNARKs除了依赖可信设置之外,引用字符串(reference string)还依赖于回路,因此需要为每个合约生成不同的字符串。此外,回路模型对可参与的用户数量进行了限制,因此Hawk尽管很强大,其可提供更好的隐私性,但它并不是完全去中心化的,其对于简单的合约而言太昂贵了。
另一个通用框架Ekiden,通过智能合约平台兼顾了性能和保密性,但它依赖于可信执行环境(例如英特尔SGX),所以它也不是完全去中心化的。
RSCoin、 Solidus、 zkLedger等方案的运作模式,介于比特币/以太坊等完全去中心化的设置和现代金融系统的中心化设置之间。
在这类模型中,银行控制货币供应,但会使用区块链进行交易。这里所使用的技术和zkLedger有一些相似之处,其中每个银行都有一个账户。zkLedger中的发送方银行A创建多个任务,将一些钱x发送给接收银行B。对应于B的任务是−x,对应于B的任务则是x,所有其他任务则等于0。然后有证据表明,这些任务是形成良好的,并且A的金额超过了x。当我们在Zether协议中使用类似的想法时,Zether需处理非正常预先交易(front-running)、重放、兼容性等更多的问题,这与在开放平台上建立智能合约有关。
并行工作:Zexe是最近针对Zerocash类型货币的一种私有脚本语言提案,它提供与比特币脚本类似的功能,同时隐藏脚本和脚本本身的输入。但是,它并不支持像智能合约那样的有状态计算。
Quisquis是一种新的匿名系统,其旨在解决像门罗币和Zcash所存在的一些问题(例如,未使用交易输出(UTXO)集的不断增长问题)。其模型是一种有趣的UTXO和账户混合体。而基本单位是一个账户(由公钥和commitment承诺组成),它们只能一次性使用:在一笔交易中,旧帐户会被销毁,而新帐户会被创建。尽管Quisquis提供了一种新的匿名方法,但它也面临非正常预先交易(front-running)攻击的问题(匿名集中的公钥可能会在交易被处理之前进行更新),更重要的是,Quisquis是一个独立的加密货币,而Zether的目标则是建立一个部署到任何智能合约平台的系统,其可供其他智能合约使用,以实现更多的隐私性。
Zether隐私方案的特点
好了,谈了那么多隐私方案,以及它们和Zether的对比,想必大家已经对该方案有了初步的认识了。那这种方案具有哪些特点呢?
首先,我们要知道的是,Zether不需要对以太坊这类底层智能合约平台的设计进行任何更改。Zether作为一个智能合约,它可单独执行,其也可通过其他智能合约执行,以交换保密数量的ZTH token,Zether使用的技术,可应用于其他基于账户的加密货币,并完全独立于它们的共识机制。
其特性如下:
保密:Zether的交易是保密的,账户余额始终是加密的,用户需提供密码证明来使用ZTH。零知识证明:Zether使用零知识证明技术作为重要基础。为了让Zether变得更有效,研究者提出了一种新的零知识证明机制,称为Σ-Bullets,其使得Bulletproofs(防弹协议)与Sigma协议变得更具互操作性。这使我们能够有效地结合基于Bulletproofs(防弹协议)的范围证明以及ElGamal加密(Σ-Bullets也可以在其他设置中进行应用)。实施方式:我们将Zether作为一种以太坊智能合约进行实施,并测量执行所需的gas量。在实现对以太坊的增强改进后,这种实施将变得更为有效。作为实施的一部分,协议作者们在以太坊上提供了一个高效的Bulletproofs实现。互操作性:Zether提供了一种将资金锁定在智能合约账户中的方法,这可以更容易地为几个重要的去中心化应用添加保密性。在论文当中,作者们展示了Zether可构建的四种应用,它们分别是:保密竞拍应用、保密支付通道、保密权益投票、以及私密权益证明(private proof-of-stake)。匿名性:论文作者们描述了Zether的一个扩展,它还可隐藏一笔交易中的发送者和接收者,虽然与匿名性相关的开销与群体大小成线性关系,但其不需要可信设置,也不需要更改基础智能合约平台。因此,Zether的匿名保证与门罗币更相似,不同之处在于Zether是基于账户模型的。

Zether隐私方案的部分重要术语
Fund transaction(资助交易):通过存入以太币和指定一个Zether账户(Elgamal公钥),来资助一个Zether账户。任何人都可资助一个Zether账户,并不断地进行资助。转让交易(Transfer transaction):用于将ZTH从Zether帐户转移到另一个帐户。燃烧交易(Burn transaction):用于将与Zether帐户相关联的所有ZTH,换回以太坊地址中的以太币。Elgamal加密(Elgamal encryption):一种非对称加密方案。密钥sk,公钥pk =gˢᵏ。要加密消息m,选择一个nonce r,密文为(gʳ, m.pkʳ)。而要解密,计算 (gʳ)ˢᵏ,并除以m.pkʳ得到消息m。然而,在Zether当中,为了使这种加密具有额外的同态性,消息被制成指数,制造密文为(gʳ, gᵐ.pkʳ);Epoch周期:具有时间概念的设置参数,指k个连续区块的时间。

Zether隐私方案概述
在这一节,我们首先会讨论具有核心功能的简单版Zether,然后描述一些它的缺点,以及如何克服它们。
一个简单的Zether合约:Zether智能合约(ZSC)需要一种Zether token(ZTH),Zether账户使用ElGamal公钥进行标识,这些公钥存储在ZSC的内部状态当中。通过公钥y,使用b ZTH创立一个账户,用户可将b ETH发送到这个智能合约。ZSC合约生成随机性为0的b的ElGamal加密(因为b无论如何都是交易的一部分),并将其添加到与y相关的加密余额中。某人可通过显示当前的余额b*,将ZTH转换回ETH,并提供y的密文的零知识证明(即该密文与智能合约中的y相关)。
为了将一些b数量的ZTH转移到公共密钥y’,而不会暴露b本身,某人可在y和y’的条件下加密b。在实现当中,作者们使用了一个新的零知识证明机制,也就是上面提到的Σ-Bullets,有效地证明加密传输余额和新发送方余额的声明。
Front-running(非正常预先交易):
Zether简化版本的第一个问题,就是零知识证明是在合约的某种状态下生成的,例如,转账交易中的零知识证明,需显示剩余余额为正。用户Alice将生成与其当前账户余额相关的证明,以加密形式存储在合约当中。然而,如果另一个用户将一些ZTH传输给Alice,并且Bob的交易首先得到处理,则Alice的交易将被拒绝,因为证明将不再有效。请注意,Bob可能是一个非常好的用户,但在这种情况下,Alice因为处理这笔交易而失去其支付的费用。我们将这种情况称为非正常预先交易(Front-running)。燃烧交易(Burn transactions)也有类似的问题:如果密文发生变化,加密某个值的密文证明将会失效。
为了解决这一问题,我们可引入一种新的交易类型,它只锁定账户,以防传入的转账。Alice可等到该交易进入区块链后,再启动传出传输(或进行燃烧交易)。虽然这似乎解决了问题(需两步流程为代价),但它为像Bob这样希望将ZTH发送给Alice的用户,带来了新的问题。当Bob发布传输交易Tx时,Alice的帐户可能不会被锁定,但它可能在Tx进入之前被锁定,从而导致Tx被拒绝。
当我们是匿名的时候,任何一种锁定方法都变得更加不可靠。如果Alice想隐藏自己,为了确保她的交易通过,她必须锁定匿名集中的所有帐户。显然,这是不允许的:Alice一定不能锁定其他用户的帐户。另外,Alice只能将锁定的帐户放在她自己的匿名集中。但是,如果有人在Alice的交易进入之前,解锁了他们的帐户,那么Alice的匿名程度就会降低了。
等待传输(Pending transfer):
为了解决非正常预先交易(Front-running)问题,作者们把所有的传入传输保留在一个等待状态中。这些转账会不时地转入账户,以便流入的资金可被使用。这种滚动法不能在任意时间发生,否则证明将会再次失效。为了解决这个问题,协议作者将时间分为几个epoch时期,其中一个epoch由k个连续区块组成。
k的选择取决于两个因素:a)区块链最新状态与任何用户view之间的间隔,;b)将交易纳入区块链所需的时间。
在每一个epoch周期结束时,待处理的转账将转入相应的账户。
用户会希望在epoch周期开始时发布他们的传输交易(或燃烧交易)。因此,即使他们没有看到区块链的最新状态,并且这需要一些时间来纳入他们的交易,他们也不会进入下一个epoch周期。
只要明智地选择k,交易将在帐户更改状态之前处理。
智能合约滚动(Rolling over on a smart contract):
不幸的是,滚动账户并不像看起来那么简单,因为只有在交易发送给智能合约之后,合约才会做任何事情。
不能指望每个用户都为每个epoch周期发送一则滚动消息。此外,他们不可能在正确的时间收到这样的信息。第一个想法,是在一个epoch周期中收到第一则消息时,为所有账户滚动等待传输交易。
然而,这为消息发送者带来了不合理的巨大负担:其将不得不支付很大的滚动成本。此外,用户也无法得知,他们的交易在一个epoch周期当中是否会是第一笔,因此,他们无法估计正确的gas供应量。
在收到该账户的第一则消息时,我们在一个epoch周期滚动一个账户。
因此,一则消息只会覆盖一个账户。为了实现这一点,协议作者们定义了一个单独的(内部的)滚动方法,其他方法所做的第一件事就是调用这一方法。
可能会出现一些账户连续几个epoch周期都没有被滚动的情况,原因在于它们没有发起交易。这不是问题,因为账户持有人(比如Alice)也没有想要使用她的钱。而当Alice想要操作她的账户时,她将发布一笔交易。自上次滚动后转入她账户的所有资金,将立即进行滚动,并可被使用。
重放攻击保护(Replay protection):
像其他支付机制一样,Zether需要处理重放攻击问题,以太坊通过将nonce与每个账户关联,提供了自己的重放攻击保护措施。不幸的是,这一程度的保护对于Zether而言是不够的,这是因为两个原因: (1) Zether账户拥有自己的公钥,它们与以太坊地址并不关联,(2) Zether交易包含非交互式零知识证明。
一个恶意的行动者可窃取这些证明,并将它们放进新的交易。如果账户的状态没有更改,则新的交易也将处理成功,这会导致资金损失。一个敌对的实体可通过重放请求再次锁定账户。
为防止此类问题,我们将nonce与每个zether帐户关联起来。当交易被处理时,nonce将递增。来自帐户的新交易 必须在与帐户关联的nonce的最新值和交易记录上签名数据,包括任何零知识证明。此方法将交易的所有组件绑定在一起,并确保新鲜性。零知识证明不能被导入恶意交易,而有效交易也无法被重放。
可探讨的是,是否存在一种方法,可使用以太坊地址本身作为Zether账户的身份。然后,这些账户将使用与地址对应的密钥进行操作,那么,我们就可免费获得重放攻击保护和签名验证。然而,这将迫使用户从固定的以太坊地址操作Zether帐户。他们将无法将帐户委托给其他地址,例如将帐户锁定到一个智能合约。
此外,以太坊地址只是公钥的哈希结果,在零知识条件下证明哈希声明是非常昂贵的。最后,为Zether帐户提供单独的公钥,也有助于使设计更模块化和独立化。
匿名性:
Zether可扩展到匿名传输,Zether的匿名版本,需要一个更为复杂的零知识证明,其也需要一个新的重放攻击和双花保护机制,以及一个将账户锁定到智能合约的不同机制,关于这部分内容,方案作者们在论文的附录D.1部分有进行详细的探讨。
关于Σ-Bullets
在文章的开头部分,我们谈到Zether使用了一种称为Σ-Bullets的零知识证明系统,实际上它是将Bulletproofs(防弹协议)与Σ-protocols集成到了一起,以便对代数编码值(例如∃x:g^x =y ∧ h^x = u ∈ G. (格式编辑问题,建议看论文原文))进行有效证明。另一方面,Bulletproofs(防弹协议)是一种回路证明系统,它非常适合范围证明和其他更复杂的算术语句。如果所有值都使用相同的承诺密钥,则bulletproof(防弹协议)确实可对Pedersen承诺值进行证明。而使用Σ-Bullets,我们可关于代数编码数据,证明更复杂的语句。
例如,我们可有效地证明一组Elgamal加密值在一定范围内。此外,我们可将one-out-of-many证明(又称环签名)与范围证明结合起来,以允许匿名传输。one-out-of-many证明是一种Σ-protocol ,它隐藏了正在被使用的账户。然后使用Bulletproof(防弹证明)表明该账户有足够的资金用于转账。关于Σ-Bullets的详细介绍,读者可在原论文的附录G中找到。
实施与评估
为了正确评估Zether协议并证明其可行性,研究者们将基础版Zether作为以太坊智能合约进行实施。实践表明Zether是可行的,它目前可在以太坊虚拟机上进行运行。此外,研究者们还讨论了为改进合约性能而进行的一些优化工作。一些改进已经被单独讨论,并且已被提交到以太坊改进提议(EIP)队列。
在测试中,研究者们测量了总的gas成本,包括发送交易的基本成本、存储成本以及证明/签名验证成本。截止发稿时,一笔基础Zether交易的成本约为0.014 ETH(1.51美元)。测试表明,大部分的成本是由椭圆曲线操作产生的,对于一笔转移交易,椭圆曲线操作占总成本的90%。而对于一笔fund交易,大部分的费用来自于初始化一个新帐户,而将资金添加到现有账户的成本,则要低得多。最后,研究者给出了交易数据的大小,注意,这并不包括基本的以太坊交易数据(大约110字节)。

目前,论文的其中一位作者Benedikt Bunz,已开源了Zether协议的部分代码及测试代码,有兴趣的读者可以了解一下。
BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
You have to log in before you can reply Login | 立即注册

Points Rules

Write the first review

viltty 小学生
  • Follow

    0

  • Following

    0

  • Articles

    2

币圈江左盟
Promoted