Binance Research | 零币协议中的缺陷

作者 | Binance Research

  • 零币协议(Zerocoin protocol)是为BTC提供强匿名性的第一个尝试。尽管未在BTC协议中实现,但在2015年被实现为独立的数字货币:ZCoin。
  • 为了解决交易可追溯性等现有问题,零币协议变得非常流行,并在多个隐私币中实现,如PIVX、SmartCash、Zoin、Veil等。
  • 然而,协议中的一些缺陷导致了运用零币协议的各种数字货币蒙受了巨大损失和事故。
  • 从那以后,遭受损失的大部分数字货币都脱离了零币协议,转而采用替代的加密协议和其他隐私解决方案。其中,最常用的替代方案是RingCT、隐地址的使用、Super Sonic和Sigma。这些协议补充了现有的隐私协议,如zk- SNARKS和MimbleWimble。
  • 无论如何,零币协议对整个加密行业起到了突破性的贡献。它是为基于UTXO的区块链提供匿名功能的首批解决方案之一,并为区块链解决方案中所有隐私功能的发展铺平了道路。

在成立的7年中,零币呈现了一段伴随着安全缺陷和曲折的动荡历史。

这份报告涵盖了一些最重要的事件,并从不同项目的角度关注2019年的事件及其后续。

零币的概述

1.1零币协议说明

零币协议允许匿名交易,而不需要经过任何受信任的第三方(如BTC混合器)。相反,混合过程发生在协议层面。

2013年,密码学家Matthew D. Green和他在约翰·霍普金斯大学信息安全研究所的学生开发了这项技术。这项技术的核心,即零币的工作方式与混合池类似,但也存在一个显著的区别,即用户不必信任任何第三方;tumbler可以直接在协议层面实现。

该系统依赖于两个代币:basecoin(如BTC)和零币。通过销毁用过的币来铸造新币,并且赎回没有交易历史的新币。由于这种赎回/铸造过程,basecoins的历史无法追溯到其原始用户。

例如,Alice想向Bob发送 1个BTC。她可以通过零币协议来铸造一个零币,并将零币发送给Bob。同时,将1个BTC转移到一个无法支出的代币中储备起来。无论何时Bob想要花费其1个BTC中的一部分,他都可以使用自己的零币作为一个零知识证明。

图1 从交易角度看零币机制

零币协议依赖于初始的信任设置;比如需要信任某人来生成初始参数,然后销毁这些参数。例如,ZCoin依赖于RSA累加器,这需要生成两个较大的素数。具体来说,它依赖于从RSA因数分解质询生成的RSA-2048参数。

零币协议被认为是对BTC协议的一种延伸,但由于几个原因没有得到BTC开发商的批准,即计算时间过长,对最终结果的有效性存在一些争议,以及提议的修改是否与最初的BTC白皮书偏离太大。

相反,ZCoin创建于2015年底(以“Moneta”的名义),是第一个实现零币协议的独立数字货币(见下一小节)。

Zerocoin和Zerocash之间的区别

2013年底,零币协议的范围在一次名为Zerocash的升级中得到了延伸。为了提供完全的隐私,Zerocash引入了效率改进(即证明容量更小和验证更快)和增强隐私功能(对金额和发收件方地址进行加密)。Zerocash最广为人知的实现是ZCash。

尽管有一些关键的优势,但有几个原因可以解释为什么Zerocash没有取代Zerocoin。其中最突出的有:

  • Zerocash总供给缺乏可审核性:Zerocash协议隐藏了余额。另一方面,零币协议并不隐藏它们。然而,正如下一节所讨论的,一些攻击者设法从RSA累加器中创建不被检测到的错误证明,即花别人的代币。
  • 对其底层密码学(zksnark的主要实现是ZCash),以及对协议底层的加密一般复杂性测试较少,使得审计系统变得复杂。
  • 由于Zerocash计算量大,因此在本地生成私人交易的时间很长。

结果,零币协议仍然独立于Zerocash。因此,本文的其余部分只关注于在library libzerocoin中定义的零币算法及其核心实现。

1.2零币协议不同实现的概述

表1 基于Zerocoin的主要独立实现的比较

尽管所有这些实现都依赖于零币协议,但这些数字货币有许多不同之处,并且它们的一些底层设计将在本文中进行讨论。

1.3 ZCoin、PIVX和Veil的概述

1.3.1 ZCoin(截至2019年初的Sigma之前)

ZCoin是一种数字货币,于2016年9月推出,是Zerocoin协议的第一个独立实现(如上一节所述)。

ZCoin核心特征包括:

  • 基于BTC的源代码。
  • 工作量证明:它依赖于MTP挖掘算法,该算法是一种对CPU友好的抗ASIC挖矿算法。
  • 哈希函数:自2018年以来,默克尔树函数(MTP)已经取代了Lyra2z。
  • 锁仓时间:从10分钟减少到5分钟。
  • 最大区块:2MB。
  • 总供应量:2100万(在利用了几个缺陷后增加到2140万)。挖矿奖励每四年减半一次(目前为25 ZCoin/块)。

零币协议:ZCoin是第一个本地实现该协议的数字货币。然而,自2019年7月以来,ZCoin的零币协议已被停用,取而代之的是Sigma,同时也不再需要一个可信任的设置。

图2 ZCoin在2019年的价格(单位:美元)

1.3.2 PIVX

PIVX是一种数字货币,旨在于2016年开始实现“可替换性、交易隐私、社区治理、网络可拓展性和实际利用率”。

在零币铸造被禁用之前,即2019年年初时,PIVX依靠的是:

  • PIVX最初是Dash的一个代码分支(它本身来自Litecoin的代码)。
  • 它始于2016年1月,当时名为DNET,并于2017年1月更名为PIVX。
  • 零币协议:PIVX在基于libzerocoin的基础上开发了一个零币协议的自定义实现,该协议于2017年底引入主网。
  • 股权证明(PoS):在最初的PoW阶段(2016年1月至8月间使用Quark算法)之后,PIVX转换为股权证明。在PIVX网络上,PIV和zPIV都可以连接。通过这个独特的权益奖励计划,提供了私人权益与“常规权益”。用户也有使用zPoS的动机,因为这将增加50%的预期权益奖励。它的目的是提供额外的隐私,防止来自其他参与者的恶意行为,因为匿名设置行为仍然是一个需要考虑的关键因素。从2020年1月5日开始,包含Cold Staking的PoS Time Protocol v2已经得到使用。
  • 最大区块:2MB。
  • 锁仓时间:60秒(每个区块都会重新定位)。
  • 代币发行率:PIVX的上限为每个区块6个 PIV。所有的交易费用和zPIV的铸币费用将从货币供应中扣除,而不是分配给额外的主节点/权益奖励。
  • 总供应量: 供应没有上限。到2060年6月,预计最大总供应量为189,001,497个 PIV。然而,随着时间的推移,根据交易的数量,PIVX甚至可以减少代币供应量。

图3 2019年PIVX的价格(单位:美元)

1.3.3 Veil

Veil是一种数字货币,由James Burden于2018年初创建。James Burden是数字货币隐私专家,也是PIVX的负责人(请参阅第1.2小节)。

Veil旨在提供“不影响匿名性的全面隐私”。

Veil的核心:

  • BTC协议软件:使用0.1.7版本的BTC软件。
  • 零币协议:使用上一小节所描述的libzerocoin。
  • RingCT基于Particl的实现。
  • 隐身地址:每次交易都使用一次性地址。

其他特征包括:

  • 区块时间:60秒(每个区块都会重新定位)
  • 总供应链:3亿
  • 区块大小:2MB
  • 混合工作量证明和权益证明共识系统:
  1. 它的工作证明(PoW)共识依赖于抗集成电路的X16RT哈希算法。目的是公平分配新币。
  2. 它的股权证明(PoS)系统依赖于直接以零币面额进行的质押和奖励。目的是奖励Veil持有人。
  3. 在这种双重混合机制中,PoS参与者必须找到一个区块(六个区块中的一个)的目标。
  • 自动铸币:Veil依赖于自动铸币机制:除非明确制定,否则“basecoin veils”将自动转换成“zerocoin veils”。

图4 2019年Veil价格(单位:美元)

基于零币的数字货币的历史漏洞和事件

2.1 历史漏洞和媒介攻击的描述

2.1.1 2017年的Zcoin事件

2017年,在ZCoin披露其源代码后的几个月,有人利用源代码中有一个错字铸造了37万枚额外的ZCoins。

在2017年的事件之后,ZCoin团队宣布,通过这一漏洞产生了18,171枚硬币。具体来说,有人能够产生虚假支出,从而夸大了ZCoin的供应。

该团队立即更新系统来修复这一漏洞,以防止额外的零币支出。最终,导致ZCoin硬分叉的libzerocoin v2发布了,并重新引入了零币的支出。

相反,如SmartCash等其他项目则停止使用零币,随后决定不再重新使用,并于2018年初正式放弃零币。

2.1.2 潜在的拒绝支出攻击(2017)

2017年,德国Friedrich-Alexander-University的研究人员公开披露了另一个可能被利用的漏洞。人们通常将它的攻击称为拒绝支出攻击,它可能允许恶意用户破坏诚实用户的资金。攻击的工作原理如下:

  • 一个诚实的用户想要花费他的零币,并将消费交易(包括序列号)发送到网络。
  • 与此同时,攻击者需要控制目标受害者的网络,可以拦截开销信息来确保它永远不会到达网络节点。然后,攻击者制造一个新的带有相同序列号的恶意零币。如此一来,攻击者就可以通过显示正确的序列号来花掉这个零币。
  • 在恶意用户花费零币之后,如果诚实的用户试图花费他的零币,那么网络会拒绝该笔交易,并视为双花。

结果,恶意用户会在诚实的用户花费之前销毁零币,从而篡改诚实用户的新“的无历史记录”零币。

图5 拒绝支出攻击的说明

然而,这种攻击的回报并不局限于链上效应。从这种攻击中获得的更大的潜在收益将会造成短暂的恐慌,用户在听到协议受到攻击时便会卖出,而攻击者将持有资产本身的空头头寸(例如Zcoin)。但在2017年,在ZCoin中建立空头头寸相对困难,使得此类攻击难以进行。

此外,正如ZCoin团队自己所提到的那样,攻击失败的风险仍然很高,恶意个人也可能成为其自身攻击的受害者。

2.1.3.libzercoin中的实施问题会影响PIVX(2019)

2019年3月6日,PIVX团队披露了在PIVX网络零币协议(即zPIV)上检测到的攻击。

这个协议的漏洞在于允许恶意个人伪造序列号,并花费最初并不是铸造出来的零币。与第1.4节中描述的攻击不同,它不会导致用户资金被盗或丢失。但是,这将对通货膨胀产生影响,因为循环供应可以独立于PIVX指定的通货膨胀时间表而增加。

在发现无效区块之后,PIVX团队发现有恶意个人正利用漏洞,而零币协议也被谨慎地停用了(基于sporks)。PIVX团队认为,有两个主要因素导致了这个漏洞被利用:

1. 在整个对象中,序列号存储为数字类型,允许存储大于256位的数据。

2. 知识验证的签名是在代币花费签名验证之后进行的。它无法验证序列号的大小是否严格小于256位。

这个漏洞没有影响到ZCoin,但影响了各种PIVX分叉币,它们大多是低市值的数字货币。

2.2.4 最新加密漏洞的描述(2019)

2019年4月,ZCoin遭受了一次基于零币核心协议设计的加密漏洞攻击。

ZCoin于2019年4月30日在一篇博客中披露了攻击的全部细节。根据ZCoin提供的信息,攻击者只要拥有一枚合法铸造的代币,就可以用任何一种零面值的数字货币随心所欲地制造出任何数量的支出。这些虚假的消费与真实的消费并没有区别。

图6 攻击说明(正常零币铸造/支出过程相比)

从密码学角度来看,一个零币的铸造可能产生一个错误的证明。下一节将讨论这次攻击对ZCoin、PIVX和Veil的影响。

2.2 2019年近期攻击的影响

2.2.1 ZCoin

作为一个紧急解决方案,该团队决定禁止零币铸币,并阻止任何零币消费行为的发生。因此,直到发布Sigma前他们有效地冻结了累加器中的资金。

在1月20日转换零币的窗口结束后,评估了此次攻击造成的总伤害:通过该漏洞共伪造了66,996个XZC。

由于攻击的特定签名,该团队还能够将一些铸币厂列入黑名单,从而防止攻击者将一些零币转换入Sigma铸币厂。因此,根据ZCoin更新显示,总损失估计为54,321个 XZC。

在2019年7月,该团队正式删除了零币协议并由Sigma代替它,也绕过了任何信任设置的需求。事实上,自2018年初以来,ZCoin就开始致力于废除零币协议。

在迁移到Sigma之后,ZCoin引入了“重铸”零币的功能,即将零币转移到Sigma铸造厂。

2.2.2 PIVX

作为对2.1.3小节中描述的事件的响应,PIVX团队通过spork停用了零币的隐私功能。从那时起,零币就用于公共模式中,和正常的UTXO交易处理方式类似。

具体来说,零币铸造已被禁用,而零币支出仍保持启用(与原始basecoin完整链接)。此外,该团队依赖于Schnorr签名来确保零币可以回到basecoin上,而不暴露于事先存在的漏洞。

在2020年1月5日,PoS Time Protocol v2随4.0版本一起推出。继这一硬分叉之后,PIVX有望很快宣布其下一个隐私协议。

2.2.3 Veil

在ZCoin于2019年4月17日发现漏洞后,Veil团队决定停用零币协议中的匿名功能。它最初阻止了攻击在Veik链上进行。

对于Veil,只能用零币进行质押奖励(而不能用basecoin支付)。因此,最初的解决方案并不依靠通过直接的硬分叉停止对零币协议的依赖。

这个最初的解决方案包括一个附加补丁,要求所有零币花费都必须带有签名,以便将消费与铸币厂联系起来。换句话说,防止重复花费所需的零知识证明被一个签名所取代,进而导致匿名功能的丧失,但仍然解决了漏洞。

不幸的是,攻击不断“进化”,最初的解决方案并不能阻止攻击者从累加器中窃取资金。作为一个紧急的解决方案,Veil的团队决定:

  • 与交易所合作:暂停存取款,以防止网络上发生任何交易,这可能导致大量资金损失。
  • 通过将余额加到零币池中,并禁止还没用RingCT改组的其余零币,回到一个“真正”的状态。

此外,该团队还禁用了零知识证明,使零币与其他(正常的)UTXO交易类似。然而,与PIVX不同的是,铸造和发行零币并没有被禁用(因为只有在零币中才可以质押),但是从那时起就没有隐私功能了。在中长期规划中,团队决定采用以下几种解决方案:

  • 调整发行时间表:这次攻击有效增加了124,41,690个供应量。作为回应,创始人的报酬已经减少约1000万个Veil,以抵消大部分供应的增加并将销毁它们,另外还有210万(超出了用于项目开发的一般预算支出)。
  • 加速Veil从零币协议中退出:以ZCoin为例,该团队已经确认其希望脱离零币协议。

到目前为止,最值得考虑的解决方案是用RingCT staking来再次进行匿名质押。此外,该团队还在研究一种使用Supersonic证明的新协议。

总结和思考

与之前的事件不同,最新的零币漏洞对现有的隐私币领域产生了广泛的影响。

ZCoin是其第一个实施的数字货币(也是市值最大的),但自2019年8月起已经脱离了该协议,并成功激活了Sigma。由于该团队从2018年初开始研究零币协议的替代方案,所以它的过渡可能在很短的时间内完成。

PIVX取消了零币协议中的隐私保护功能,但除了披露其完全取代Zerocoin的使用意愿外,它还没有透露计划的全部范围。自2019年事件以来,零币一直用于公共模式中,即和正常的UTXO交易处理方式类似。

Veil遭受了巨大的通货膨胀冲击,但它的团队通过与交易所的合作,放弃了创始人分配的很大一部分资金来挽救这个项目。因此,它的团队决定应该完全取代零币协议,并从那时起就一直在研究替代方案(例如,RingCT staking)。

最近的事件可能标志着最具象征意义的区块链隐私解决方案之一的结束,因此,加速了隐私币格局的转变。然而,作为一种协议,零币很可能会继续改进各种设计方案(例如来自Equihash的共同创始人Dmitry Khovratovich的提议),这可能会解决它最近发现的加密缺陷。

Binance Research 作者

Zoe Zhou 翻译

Roy Wang 编辑

内容仅供参考 不作为投资建议 风险自担

版权所有 未经允许 严禁转载

相关文章
appleinc android