Zcash假冒漏洞成功修复

十一个月前,我们在密码学中发现了一些假冒漏洞,这些漏洞存在于某些零知识证据之下。这篇文章提供了有关漏洞的详细信息,我们如何修复它以及为保护Zcash用户所采取的步骤。

假冒漏洞由2018年10月28日激活的Sapling网络升级修复。该漏洞特定于伪造,不会以任何方式影响用户隐私。在修复之前,攻击者可能在未被检测到的情况下创建了假Zcash。Zcash已完全修复了假冒漏洞,Zcash用户无需采取任何措施。

假冒漏洞是由Zerocoin Electric Coin Company(又名Zcash公司)于2018年3月1日雇用的密码学家发现的。当时没有公开报告,以防止它在修复之前被利用,并且向其他易受攻击的项目提供信息和补救代码。我们采用严格的操作安全措施,即使是我们自己的工程师,也要保密。

我们认为没有其他人知道这个漏洞,Zcash没有造成假冒,原因如下:

  • 发现漏洞需要高水平的技术和加密复杂性,而很少有人拥有。
  • 该漏洞已存在多年,但许多专家密码学家,科学家,第三方审核员和第三方工程团队都没有发现这些漏洞,他们根据Zcash代码启动了新项目。
  • Zcash公司没有看到任何证据表明通过监控Sprout地址(即Sprout屏蔽池)中Zcash的总量可能发现了假冒行为。只要屏蔽池中的值大于零,就不会检测到伪造。Bitfly的Zcha.in在网络统计页面上显示这些值,Zcash节点在getblockchaininfo命令的输出中报告它们。
  • 在发现漏洞后,Zcash公司采取了特殊措施,以尽量减少剥削的可能性。我们采取的步骤的具体细节将在下面详细说明。
  • Zcash公司研究了区块链以获取利用证据:攻击可能会留下特定的足迹。我们没有找到这样的足迹。

虽然我们认为没有发生假冒行为,但我们正在监控集合总量,并将根据我们公布的防伪行为,以保护货币供应。

Zcash利用公共区块链上最复杂和最新颖的密码术。推动加密边界具有内在的风险,用户安全对Zcash公司来说至关重要。我们相信,在努力确保Zcash用户安全的同时,我们采取的缓解措施的步骤已取得成功。有关通过本公开最初发现假冒漏洞所发生的具体事件的更多信息将在以后的文章中介绍。

关键点:

  • Zcash公司的密码学家在Zcash中发现了一个伪造漏洞。
  • Zcash已完全修复了假冒漏洞,Zcash用户无需采取任何措施。
  • Zcash公司在2018年10月28日发生的Zcash Sapling升级中引入了Sprout地址的成功补救措施。
  • 该漏洞特定于假冒,其利用不会影响隐私。
  • 自从树苗激活以来,Zcash并未受到这种攻击的影响。
  • 我们没有发现任何人发现漏洞或发生假冒的证据。
  • Zcash公司使用运营安全方面的最佳实践来保护这些信息的私密性,并将负责的披露与两个受影响的项目共享。

背景

2018年3月1日,Zcash公司聘请的密码学家Ariel Gabizon在[ BCTV14 ]论文中发现了一个微妙的加密缺陷,描述了Zcash最初发布时使用的zk-SNARK结构。该漏洞允许攻击者在任何系统中创建伪造的屏蔽值,该系统依赖于本文所述生成的参数。

这个漏洞是如此微妙,以至于它回避了专家密码学家多年的分析,专注于零知识证明系统和zk-SNARK。在2015 年的分析[ Parno15 ]中,微软研究院的Bryan Parno在论文中发现了一个不同的错误。但是,我们发现的漏洞似乎已经回避了他的分析。该漏洞也出现在的[颠覆零知识SNARK方案Fuchsbauer17 ],其中的[适配BCTV14 ]继承了缺陷。该漏洞也出现在[ BBFR14 ]中描述的ADSNARK结构中。最后,该漏洞躲过了Zcash公司自己的加密团队,其中包括该领域的专家确定了系统其他部分的几个缺陷。

重要的是,[ BCTV14 ]建设没有一个专门的安全证明,如[注意Parno15 ],并主要依靠[ PGHR13 ]安全性证明和两个方案之间的相似性。Zcash公司团队确实试图在[ BGG17 ]中编写安全证明,但它没有发现此漏洞。Zcash已经升级到新的证明系统[ Groth16 ],它具有多个独立的证据和明显更好的分析。

在发现漏洞后,Ariel立即联系了Zcash公司的另一位密码学家Sean Bowe。在Sean确认存在漏洞后,Zooko Wilcox(Zcash公司首席执行官)和Nathan Wilcox(Zcash公司首席技术官)获得了简报。通过仔细协调,Zcash网络中的假冒漏洞得到了缓解,而在这一组四人之外没有任何已知的进一步披露。

随着Sapling的激活,Sprout交易被转移到新的[ Groth16 ]证明系统,将问题解决在Zcash网络上,如下所述。

为了利用假冒漏洞,攻击者需要拥有在Zcash发布后不久提供的大型MPC协议记录中找到的信息。此成绩单尚未被广泛下载,并在发现漏洞后立即从公共可用性中删除,以使其更难以利用。Zcash公司采用并保持了一个封面故事,即由于意外删除而导致记录失踪。该成绩单后来从原始仪式的参与者收集的DVD中重建,并在树苗激活后发布。  

我们一直在监控Sprout池中的资金总额,并且没有发现有任何伪造活动发生的迹象。

假冒漏洞详情

如本文所述,[ BCTV14 ]参数设置算法错误地产生了违反证明系统健全性的额外元素。[ BCTV14 ]附录B 描述的结构是[ PGHR13 ] zk-SNARK方案的变体,其改进以改进性能并使该方案适应不对称配对设置。该方案用于Zcash的原始发布,并由其他几个项目独立实施。

Zcash公司在发现时聘请的密码学家Ariel Gabizon发现了健全性漏洞。在步骤3中,[ BCTV14 ] 的密钥生成过程产生各种元素,这些元素是评估与被证明的语句相关的多项式的结果。其中一些元素未被证明者使用,并被误包括在内; 但是他们的出现允许作弊证明者绕过一致性检查,从而将一个陈述的证明转化为另一个陈述的有效证明。这打破了证明系统的健全性。

为[ BCTV14 ]构造生成Sprout参数的[ BGG17 ]多方计算(MPC)协议遵循纸张的设置过程,包括额外元素的计算。这些不包括在分发给Zcash节点的实际参数中,因为它们是从libsnark库中的[ BCTV14 ] 的证明例程实现(由Sprout使用)中使用的参数文件格式中省略的。然而,这些元素确实出现在MPC仪式成绩单中。因此,任何能够访问仪式成绩单的人都能够创建错误的证据。

有什么影响?

虽然Zcash不再受到影响,但任何依赖于原始Sprout系统使用的MPC仪式的项目都是易受攻击的。这个用于屏蔽资金的原始Sprout系统由原始Sprout电路,使用libsnark 的[ BCTV14 ]验证系统和MPC仪式[ BGG17 ] 生成的参数组成。它被1.x系列的Zcash软件使用(它也带有“Sprout”名称)。

在对应于本公开的更新之前,[ BCTV14 ]中描述的算法是易受攻击的(尽管其libsnark实现与其内置参数生成一起使用时不是)。该漏洞包含在[ BCTV14 ]的某些独立实现中,例如[ snarkjs ],即使它们不需要MPC。类似的缺陷可以在[找到BBFR14 ]和[ Fuchsbauer17 ] ZK-SNARK方案。

我们没有列出受此漏洞影响的所有系统的详尽列表,我们鼓励使用[ BCTV14 ] 的系统的所有用户,开发人员和维护人员花时间对此问题进行分类并检查他们是否受到影响。

资源:

原始Sprout电路实现

原始Sprout zk-SNARK参数:证明密钥和验证密钥。

Sprout证明和验证例程

[ BCTV14 ]

libsnark证明系统及其Zcash分支

什么不受影响?

自从Sapling激活(2018年10月28日的419200块)以来,Zcash主网用于Sprout地址的较新的Sprout-on-Groth16系统不受伪造漏洞的影响。它使用新的Sprout电路,该电路在Groth16证明系统上运行,具有新参数,并在Bellman库中实现的BLS12-381曲线上运行。用于屏蔽资金的较新的Sapling系统,同时激活并使用新的地址格式,也不容易受到攻击。

[ PGHR13 ](它是[ BCTV14 ]的基础)的算法中没有这种漏洞,也没有使用类似技术的[ BCGTV13 ]。它也不存在于其他zk-SNARKs结构中,例如[ GM17 ]或[ BG18 ],或者不依赖于结构化参考字符串的零知识证明系统。当libsnark与其内置参数生成器一起使用时,它不存在。

资源:

新的Sprout-on-Groth16电路实现

新的Sprout-on-Groth16 zk-SNARK参数

新的Sprout-on-Groth16证明和验证程序

Groth16证明系统

第三方披露

对受影响项目市值的分析显示,我们只能通过两次披露达到受影响资本的三分之二以上:Horizen,我们已经与他们签订了互惠漏洞披露协议,以及与我们合作的Komodo组建了一个披露协议,以私下向他们披露这个问题。

我们与双方建立了最长90天的公开披露时间表,并提供了可行解决方案所需的条件。

进一步披露会大大增加利用大部分资本的风险,从而在用户和资本的覆盖范围方面获得小得多的收益。为了保护这些项目和其他项目的屏蔽池,从私人披露中删除了漏洞原因的确切细节。似乎Horizen和Komodo都根据我们的建议采取了适当的行动。我们建议第三方(包括受影响的项目,钱包和交易所)仔细考虑如何最好地完成解决此问题所需的升级。

活动时间表

2018年3月1日

Zcash公司工作的密码学家Ariel Gabizon在参加2018年金融密码学会议时发现了这个漏洞,并邀请他参加比特币'18研讨会[ BGG17 ]。Zcash公司的密码学家Sean Bowe和Zcash公司的首席执行官Zooko Wilcox也参加了会议。

Ariel在演讲前一天晚上发现了这个问题,他联系了Sean确认。肖恩亲自见到了阿里尔,两人立即联系了Zooko。然后,Zooko亲自会见了Sean和Ariel,以确定应对策略。很快就确定应该从公司公开提供的地方删除成绩单(这将允许对手创建虚假证据),因为在此之前很多人似乎不太可能下载它。Zooko联系了Zcash公司的首席技术官Nathan Wilcox,要求他删除成绩单。

2018年3月2日至2018年10月27日

内森在一个重合的操作安全封面故事中删除了成绩单。 

肖恩有一个额外的成绩单备份,后来被转移到Sean和Zooko的双重财产(Sean保留加密密钥,而Zooko将USB存放在保险箱中),直到后来决定完全销毁备份。

提出了两种缓解策略。Ariel提出了一项缓解措施,其中涉及一项紧急情况,需要用户通过在随后的仪式中重新随机化或替换现有参数来切换到未受此漏洞影响的新zk-SNARK参数。Sean提议通过切换到即将到来的树苗仪式中构建的Groth16证明系统和参数,将缓解隐蔽地包含在Sapling网络升级中。该团队同意采纳肖恩的建议。

除了这四个人之外,没有进一步的已知披露,开发和部署了隐蔽缓解措施。 

2018年10月28日

在Zcash主网上成功激活了Sapling网络升级,消除了伪造漏洞。

2018年11月1日

Zcash公司的产品安全总监Benjamin Winston获悉了该漏洞,并与现有团队合作,为其他受影响的项目准备了披露包。 

2018年11月9日

Zcash公司营销和业务开发副总裁Josh Swihart听取了有关漏洞的简要介绍,以便为两种可能的情况协调和准备通信:完全披露(此通信和相关通信),或信息所在的各方泄露最初在完全披露日期之前发布。 

2018年11月13日

Zcash公司使用PGP加密电子邮件向Horizen(以前称为ZenCash)安全团队(security@zencash.com)和Komodo(ca333@komodoplatform.com)披露了此问题的影响和修复路径。

Zcash公司没有透露漏洞的具体细节,只是它的存在以及我们建议将其证明系统升级到Groth16。我们也没有告诉他们还有谁收到通知。发送给Horizen和Komodo的完整信息和披露信息将在下面复制。

三个小时后,Zencash回应说他们已经解密了我们的消息并且他们正在调查这个问题。

2018年11月16日

Komodo回答说他们收到了通知。后来的沟通表明他们正在努力解决问题。

2018年11月18日

肖恩重建了原始仪式参与者收集的DVD的成绩单。肖恩发布了重组的成绩单。

2018年12月10日

Zcash公司团队成员(Benjamin,Josh,Zooko)通过视频会议与Horizen团队会面。出席的Horizen团队成员包括Alberto Garofollo,Dean Steinbeck,Maurizio Binello,Rob Viglione,Rosario Pabst。在会议中,我们讨论了完全披露的时间表。Horizen团队要求在发布之前获得完整披露的详细信息。我们不同意向他们提供这些细节。

2018年12月20日

Zooko通知并向Zcash公司首席运营官David Campbell介绍情况。

2019年1月5日

Zooko通知并向Zcash创始科学家Eli-Ben Sasson,Eran Tromer,Madars Virza和Matthew Green作了简报。这些创始科学家与亚历山德罗·基耶萨一起是[ BCTV14 ]和[ BGG17 ] 的原创作者。

2019年1月8日

Zooko通知并向Zcash创始科学家Alessandro Chiesa作了简报。

2019年1月25日

Benjamin和Josh向作为Zcash公关公司的Strange Brew Strategies的合伙人John O'Brien介绍了准备支持媒体查询的事宜。

2019年1月29日

Sean和Ariel向Zcash公司的密码学家Daira Hopwood和Jack Grigg介绍了情况。

Benjamin为此问题申请了CVE编号,并从mitre.org收到了CVE-2019-7167。

2019年1月31日

Benjamin和Josh会见了来自Komodo的Steve Lee,以协调公开发布的信息。

2019年2月1日

Benjamin和Josh向Zcash团队成员Brad Miller,Elise Hamdon和Paige Peterson介绍了准备和协助准备公开披露的信息。Zcash公司首席财务官Andy Murray接受了David Campbell的简报。

2019年2月4日   

产品和监管关系负责人杰克加维根听取了简报。

Zcash基金会及其董事会成员获得了简报。 

所有在Zcash公司全职工作的员工和承包商都听取了联合电话会议的简要介绍。

社区成员和论坛主持人mineZcash(化名)听取了简报。

NCC集团的发芽仪式参与者Derek Hinch和John Dobbertin(化名)接受了简报。

CVE-2019-7167详细信息已更新。

2019年2月5日

Zcash公司通过博客文章,社交媒体渠道和与其他第三方的直接联系进行公开披露。

CVE-2019-7167发布的文字如本文所示。

参考文献列表

[BCTV14] https://eprint.iacr.org/2013/879

[PGHR13] https://eprint.iacr.org/2013/279

[BGG17] https://eprint.iacr.org/2017/602

[Parno15] https://eprint.iacr.org/2015/437

[snarkjs] https://github.com/iden3/snarkjs

[ Groth16 ] https://eprint.iacr.org/2016/260

本文链接地址:https://www.wwsww.cn/zcash/826.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读