Hi 游客

更多精彩,请登录!

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

3 r, |/ {" {& ^. m: O( J# j而该方案,也得到了智能合约之父尼克.萨博(Nick Szabo)的转发支持。2 r: ^, V5 f1 v
8 j* V, s3 }1 R/ t# \
作为协议的一部分,作者们还提出了Σ-Bullets,这是现有零知识证明系统Bulletproofs(防弹证明)的改进版本,Σ-Bullets使得Bulletproofs(防弹协议)与Sigma协议变得更具互操作性。研究者们将Zether作为以太坊智能合约实施,并通过测量Zether合约使用的gas量,来展示该设计的实用性。在2019年2月初的实验中,一笔Zether保密交易的成本大约是0.014 ETH(大约1.51美元),目前研究者们正在讨论对以太坊虚拟机的一种小更改(独立于Zether),而这将极大地降低Zether保密交易的成本。0 ^& b8 W  c0 e7 }: @! G# i7 p
相关的加密货币隐私技术方案
- h' M4 ?0 _1 O: M& U7 w在详细了解Zether隐私方案之前,我们先快速回顾一下市场上已经存在的隐私技术方案:( i! q4 `5 H) S$ P7 O
用于比特币的保密交易(CT)首先是由Maxwell提出的,他用佩德森承诺(Pedersen commitments )和OR-proofs来建立一个支付机制,其中交易金额是隐藏的,但可验证一笔交易的输出之和是否超过输入的总和。门罗币(Monero)则更进一步,其使用了一种特殊类型的签名方案,以隐藏由 发送方(匿名集)选择的UTXO集交易的起源地及目的地,然而,门罗的签名大小是随匿名集的大小而线性增加的。而Zether扩展的匿名属性,类似于门罗(但它们的模型是不同的)。
+ _0 i; j- {. n* a6 z4 }% }ZCash基于的是Zerocash协议,其使用了一种称为zkSNARKs的更为复杂的零知识证明系统,以次线性成本提供了匿名性。发送者和接受者隐藏在使用屏蔽地址的人群当中。使用SNARKs的其中一个缺点是,需要预先生成一个大的公共引用字符串(CRS),而这种方式没有人知道陷门,这是一项具有挑战性的任务。发送方需要下载这个公共引用字符串(CRS),并为一个大型回路生成证明,而这是非常耗时的。
6 _9 a0 F- e" u& p" m还有其他几种方法可以使区块链交易实现匿名。CoinJoin为一组用户提供了一种共同创建比特币交易的方法。 (MimbleWimble/Grin)结合了保密交易(CT)和CoinJoin等技术,以非交互方式聚合交易。CoinShuffle和Mixcoin可为比特币混合协议。TumbleBit使用了一种不受信任的媒介(称为Tumbler),使得交易不可链接。M¨obius则通过一个以太坊智能合约取代了tumbler媒介。
$ ]3 _+ N& x7 O3 h5 P2 n9 _Zether的匿名方式不同于以上的方案,其不依赖其他用户的积极参与,Zether用户可选择他们自己的匿名集(类似门罗)。另一方面,如果用户主动使用混合服务,它还可以提供更好的匿名性。
/ r9 t/ s8 ]1 [6 @Hawk是一个以隐私保留方式建立任意智能合约的框架。特别地,它可完全隐藏拍卖中的出价,但这也需要付出巨大的代价。在Hawk框架当中,合约的隐私部分是被转换成一个回路(circuit)。一名管理者,其受参与者的私密输入委托,在回路上生成一个zkSNARK证明,以表明它已被正确地执行。SNARKs除了依赖可信设置之外,引用字符串(reference string)还依赖于回路,因此需要为每个合约生成不同的字符串。此外,回路模型对可参与的用户数量进行了限制,因此Hawk尽管很强大,其可提供更好的隐私性,但它并不是完全去中心化的,其对于简单的合约而言太昂贵了。
$ P0 C5 ?6 Z: ~3 N" z另一个通用框架Ekiden,通过智能合约平台兼顾了性能和保密性,但它依赖于可信执行环境(例如英特尔SGX),所以它也不是完全去中心化的。
9 l8 u5 x4 a& s* v  R6 o, bRSCoin、 Solidus、 zkLedger等方案的运作模式,介于比特币/以太坊等完全去中心化的设置和现代金融系统的中心化设置之间。
* [( {  @, G4 [$ \: f" K; B9 C* s! Y在这类模型中,银行控制货币供应,但会使用区块链进行交易。这里所使用的技术和zkLedger有一些相似之处,其中每个银行都有一个账户。zkLedger中的发送方银行A创建多个任务,将一些钱x发送给接收银行B。对应于B的任务是−x,对应于B的任务则是x,所有其他任务则等于0。然后有证据表明,这些任务是形成良好的,并且A的金额超过了x。当我们在Zether协议中使用类似的想法时,Zether需处理非正常预先交易(front-running)、重放、兼容性等更多的问题,这与在开放平台上建立智能合约有关。1 y$ z1 E8 N$ U$ u* S
并行工作:Zexe是最近针对Zerocash类型货币的一种私有脚本语言提案,它提供与比特币脚本类似的功能,同时隐藏脚本和脚本本身的输入。但是,它并不支持像智能合约那样的有状态计算。
" i( L8 b% r0 qQuisquis是一种新的匿名系统,其旨在解决像门罗币和Zcash所存在的一些问题(例如,未使用交易输出(UTXO)集的不断增长问题)。其模型是一种有趣的UTXO和账户混合体。而基本单位是一个账户(由公钥和commitment承诺组成),它们只能一次性使用:在一笔交易中,旧帐户会被销毁,而新帐户会被创建。尽管Quisquis提供了一种新的匿名方法,但它也面临非正常预先交易(front-running)攻击的问题(匿名集中的公钥可能会在交易被处理之前进行更新),更重要的是,Quisquis是一个独立的加密货币,而Zether的目标则是建立一个部署到任何智能合约平台的系统,其可供其他智能合约使用,以实现更多的隐私性。; Y/ a* C2 k5 C, H" N9 J
Zether隐私方案的特点
# J& Q: A0 P: D# d' i好了,谈了那么多隐私方案,以及它们和Zether的对比,想必大家已经对该方案有了初步的认识了。那这种方案具有哪些特点呢?
' |' T, z+ Q6 v. O8 k首先,我们要知道的是,Zether不需要对以太坊这类底层智能合约平台的设计进行任何更改。Zether作为一个智能合约,它可单独执行,其也可通过其他智能合约执行,以交换保密数量的ZTH token,Zether使用的技术,可应用于其他基于账户的加密货币,并完全独立于它们的共识机制。
& p( }& k3 v. j' x. o0 O其特性如下:
; U& H0 }% ]& P1 N- ?( e保密:Zether的交易是保密的,账户余额始终是加密的,用户需提供密码证明来使用ZTH。零知识证明:Zether使用零知识证明技术作为重要基础。为了让Zether变得更有效,研究者提出了一种新的零知识证明机制,称为Σ-Bullets,其使得Bulletproofs(防弹协议)与Sigma协议变得更具互操作性。这使我们能够有效地结合基于Bulletproofs(防弹协议)的范围证明以及ElGamal加密(Σ-Bullets也可以在其他设置中进行应用)。实施方式:我们将Zether作为一种以太坊智能合约进行实施,并测量执行所需的gas量。在实现对以太坊的增强改进后,这种实施将变得更为有效。作为实施的一部分,协议作者们在以太坊上提供了一个高效的Bulletproofs实现。互操作性:Zether提供了一种将资金锁定在智能合约账户中的方法,这可以更容易地为几个重要的去中心化应用添加保密性。在论文当中,作者们展示了Zether可构建的四种应用,它们分别是:保密竞拍应用、保密支付通道、保密权益投票、以及私密权益证明(private proof-of-stake)。匿名性:论文作者们描述了Zether的一个扩展,它还可隐藏一笔交易中的发送者和接收者,虽然与匿名性相关的开销与群体大小成线性关系,但其不需要可信设置,也不需要更改基础智能合约平台。因此,Zether的匿名保证与门罗币更相似,不同之处在于Zether是基于账户模型的。
, C: L4 x. K, y2 |+ X
5 T' P" B) s  V* O& v+ N4 YZether隐私方案的部分重要术语
) \, }$ v9 F1 R% bFund 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个连续区块的时间。1 c8 t: ], \) Q3 ~* O$ I3 w/ _

1 k$ G2 M! z) n9 k6 @0 YZether隐私方案概述8 k  s) B# w1 q7 l
在这一节,我们首先会讨论具有核心功能的简单版Zether,然后描述一些它的缺点,以及如何克服它们。7 J5 e& X3 D4 g
一个简单的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相关)。( T2 B+ r; @( z$ v& l+ K4 v, I
为了将一些b数量的ZTH转移到公共密钥y’,而不会暴露b本身,某人可在y和y’的条件下加密b。在实现当中,作者们使用了一个新的零知识证明机制,也就是上面提到的Σ-Bullets,有效地证明加密传输余额和新发送方余额的声明。' {7 Y( x) \# l2 D
Front-running(非正常预先交易):7 i0 u' L, }5 W, |, Y! A9 E. C1 S
Zether简化版本的第一个问题,就是零知识证明是在合约的某种状态下生成的,例如,转账交易中的零知识证明,需显示剩余余额为正。用户Alice将生成与其当前账户余额相关的证明,以加密形式存储在合约当中。然而,如果另一个用户将一些ZTH传输给Alice,并且Bob的交易首先得到处理,则Alice的交易将被拒绝,因为证明将不再有效。请注意,Bob可能是一个非常好的用户,但在这种情况下,Alice因为处理这笔交易而失去其支付的费用。我们将这种情况称为非正常预先交易(Front-running)。燃烧交易(Burn transactions)也有类似的问题:如果密文发生变化,加密某个值的密文证明将会失效。
1 l+ W" X% W1 H' q1 B6 D为了解决这一问题,我们可引入一种新的交易类型,它只锁定账户,以防传入的转账。Alice可等到该交易进入区块链后,再启动传出传输(或进行燃烧交易)。虽然这似乎解决了问题(需两步流程为代价),但它为像Bob这样希望将ZTH发送给Alice的用户,带来了新的问题。当Bob发布传输交易Tx时,Alice的帐户可能不会被锁定,但它可能在Tx进入之前被锁定,从而导致Tx被拒绝。9 V; P! [& S8 {# K& }' ^
当我们是匿名的时候,任何一种锁定方法都变得更加不可靠。如果Alice想隐藏自己,为了确保她的交易通过,她必须锁定匿名集中的所有帐户。显然,这是不允许的:Alice一定不能锁定其他用户的帐户。另外,Alice只能将锁定的帐户放在她自己的匿名集中。但是,如果有人在Alice的交易进入之前,解锁了他们的帐户,那么Alice的匿名程度就会降低了。
  }+ S! P5 u( P0 c等待传输(Pending transfer):
8 r/ c% c2 ~" ]% h! J+ S9 _$ |" ]为了解决非正常预先交易(Front-running)问题,作者们把所有的传入传输保留在一个等待状态中。这些转账会不时地转入账户,以便流入的资金可被使用。这种滚动法不能在任意时间发生,否则证明将会再次失效。为了解决这个问题,协议作者将时间分为几个epoch时期,其中一个epoch由k个连续区块组成。) N2 V: {7 Z7 g9 t5 G  V
k的选择取决于两个因素:a)区块链最新状态与任何用户view之间的间隔,;b)将交易纳入区块链所需的时间。
- f: q& F# _1 L# G; M6 X* }在每一个epoch周期结束时,待处理的转账将转入相应的账户。
0 x! R3 y7 @8 h& u$ ~% u# @( f+ k用户会希望在epoch周期开始时发布他们的传输交易(或燃烧交易)。因此,即使他们没有看到区块链的最新状态,并且这需要一些时间来纳入他们的交易,他们也不会进入下一个epoch周期。- d& k8 i" x, R! j# [7 d& B
只要明智地选择k,交易将在帐户更改状态之前处理。5 u0 g) K, f+ q0 [1 U, ?. \
智能合约滚动(Rolling over on a smart contract):
1 V, u& a9 q( [9 X不幸的是,滚动账户并不像看起来那么简单,因为只有在交易发送给智能合约之后,合约才会做任何事情。% \* ?, y7 R; T' l% I" o" U  H
不能指望每个用户都为每个epoch周期发送一则滚动消息。此外,他们不可能在正确的时间收到这样的信息。第一个想法,是在一个epoch周期中收到第一则消息时,为所有账户滚动等待传输交易。
6 Z* t0 _+ \3 o- T' S然而,这为消息发送者带来了不合理的巨大负担:其将不得不支付很大的滚动成本。此外,用户也无法得知,他们的交易在一个epoch周期当中是否会是第一笔,因此,他们无法估计正确的gas供应量。1 |3 I  g) j; ]# w
在收到该账户的第一则消息时,我们在一个epoch周期滚动一个账户。3 Y4 M4 l* i0 W  x
因此,一则消息只会覆盖一个账户。为了实现这一点,协议作者们定义了一个单独的(内部的)滚动方法,其他方法所做的第一件事就是调用这一方法。
! C* W( d% X; m* j% |2 L可能会出现一些账户连续几个epoch周期都没有被滚动的情况,原因在于它们没有发起交易。这不是问题,因为账户持有人(比如Alice)也没有想要使用她的钱。而当Alice想要操作她的账户时,她将发布一笔交易。自上次滚动后转入她账户的所有资金,将立即进行滚动,并可被使用。
& o; y8 [( Q8 F3 H重放攻击保护(Replay protection):& M- F& G% S1 I/ r+ y  K1 [$ w
像其他支付机制一样,Zether需要处理重放攻击问题,以太坊通过将nonce与每个账户关联,提供了自己的重放攻击保护措施。不幸的是,这一程度的保护对于Zether而言是不够的,这是因为两个原因: (1) Zether账户拥有自己的公钥,它们与以太坊地址并不关联,(2) Zether交易包含非交互式零知识证明。$ h# G3 `8 U9 C/ l5 [* U! S
一个恶意的行动者可窃取这些证明,并将它们放进新的交易。如果账户的状态没有更改,则新的交易也将处理成功,这会导致资金损失。一个敌对的实体可通过重放请求再次锁定账户。! q1 ?. T6 M4 \4 M. V3 c( _
为防止此类问题,我们将nonce与每个zether帐户关联起来。当交易被处理时,nonce将递增。来自帐户的新交易 必须在与帐户关联的nonce的最新值和交易记录上签名数据,包括任何零知识证明。此方法将交易的所有组件绑定在一起,并确保新鲜性。零知识证明不能被导入恶意交易,而有效交易也无法被重放。7 j) U- R* ]: l7 B6 l! Q* N3 y' _; I
可探讨的是,是否存在一种方法,可使用以太坊地址本身作为Zether账户的身份。然后,这些账户将使用与地址对应的密钥进行操作,那么,我们就可免费获得重放攻击保护和签名验证。然而,这将迫使用户从固定的以太坊地址操作Zether帐户。他们将无法将帐户委托给其他地址,例如将帐户锁定到一个智能合约。' c+ V) j! j" o# H
此外,以太坊地址只是公钥的哈希结果,在零知识条件下证明哈希声明是非常昂贵的。最后,为Zether帐户提供单独的公钥,也有助于使设计更模块化和独立化。8 y' d6 R, }4 z1 w7 q' n
匿名性:5 P/ o. s$ o+ B& T
Zether可扩展到匿名传输,Zether的匿名版本,需要一个更为复杂的零知识证明,其也需要一个新的重放攻击和双花保护机制,以及一个将账户锁定到智能合约的不同机制,关于这部分内容,方案作者们在论文的附录D.1部分有进行详细的探讨。, Z0 N/ ?. ?3 X- w0 l. T/ q
关于Σ-Bullets
7 }8 Q& U6 X$ M0 {; H% L" A在文章的开头部分,我们谈到Zether使用了一种称为Σ-Bullets的零知识证明系统,实际上它是将Bulletproofs(防弹协议)与Σ-protocols集成到了一起,以便对代数编码值(例如∃x:g^x =y ∧ h^x = u ∈ G. (格式编辑问题,建议看论文原文))进行有效证明。另一方面,Bulletproofs(防弹协议)是一种回路证明系统,它非常适合范围证明和其他更复杂的算术语句。如果所有值都使用相同的承诺密钥,则bulletproof(防弹协议)确实可对Pedersen承诺值进行证明。而使用Σ-Bullets,我们可关于代数编码数据,证明更复杂的语句。- |; b0 j& b, J: H5 K3 t; y
例如,我们可有效地证明一组Elgamal加密值在一定范围内。此外,我们可将one-out-of-many证明(又称环签名)与范围证明结合起来,以允许匿名传输。one-out-of-many证明是一种Σ-protocol ,它隐藏了正在被使用的账户。然后使用Bulletproof(防弹证明)表明该账户有足够的资金用于转账。关于Σ-Bullets的详细介绍,读者可在原论文的附录G中找到。0 N# X& J7 m9 B$ Z5 t
实施与评估
) [7 ~4 ]+ p- K) r为了正确评估Zether协议并证明其可行性,研究者们将基础版Zether作为以太坊智能合约进行实施。实践表明Zether是可行的,它目前可在以太坊虚拟机上进行运行。此外,研究者们还讨论了为改进合约性能而进行的一些优化工作。一些改进已经被单独讨论,并且已被提交到以太坊改进提议(EIP)队列。
+ A3 `% _- [% E在测试中,研究者们测量了总的gas成本,包括发送交易的基本成本、存储成本以及证明/签名验证成本。截止发稿时,一笔基础Zether交易的成本约为0.014 ETH(1.51美元)。测试表明,大部分的成本是由椭圆曲线操作产生的,对于一笔转移交易,椭圆曲线操作占总成本的90%。而对于一笔fund交易,大部分的费用来自于初始化一个新帐户,而将资金添加到现有账户的成本,则要低得多。最后,研究者给出了交易数据的大小,注意,这并不包括基本的以太坊交易数据(大约110字节)。. o* O( s1 N! K- R  }8 G' j
( a, h6 b# p/ A+ v3 r. J7 [
目前,论文的其中一位作者Benedikt Bunz,已开源了Zether协议的部分代码及测试代码,有兴趣的读者可以了解一下。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

viltty 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5