跳转到内容

Zerocoin

来自BitcoinWiki
Zerocoin
Zerocoin.

Zerocoin是一种密码学协议,旨在切断一枚币的铸造与之后兑回之间的公开关联。约翰斯·霍普金斯大学的 Ian Miers、Christina Garman、Matthew Green 和 Aviel D. Rubin 于2013提出将其作为比特币的一项扩展方案。其核心工具包括密码学承诺、累加器和零知识证明。[1]

这个名称既指该协议,也指其中创建的临时币。它不同于后来更名为 Firo 的加密货币 Zcoin,也不同于与 Zcash 相关的后续研究系统 Zerocash。多个独立的加密货币实现了源自 Zerocoin 的设计;它们的发布、参数和安全应对各不相同。[2][3][4][5]

背景与目的

比特币在公开账本中记录交易。地址起到化名的作用,并不保证匿名:交易之间的关系以及区块链外的信息,可能将相关活动关联到某个人。仅更换地址并不能消除交易图中包含的信息。[1]

托管式混币服务通过接收并返还资金,试图模糊这张交易图。其运营者可能获知资金之间的关联,也可能不归还存款。Zerocoin 提出的方案则是由共识规则和密码学证明控制兑回,无需指定银行或混币服务运营者来发行私密币。这消除了一种托管信任,但密码学和参数生成方面的假设仍然存在。[1][6]

铸造与花费的工作方式

铸造与币承诺

铸造时,用户生成秘密序列号 S 和随机值 r,然后创建承诺 C。论文采用类似 Pedersen 的承诺,写作 C = g^S h^r mod p。公开的 C 隐藏了 S;知道 r 的所有者之后可以将 C 与该序列号关联起来。承诺并非加密:花费时使用针对承诺值的证明,而不是向所有人解密 C。[1][6]

铸造交易承诺了相应的基础货币金额以及任何手续费。最初的原型采用固定面额。其比特币集成方案将金额置于常规花费机制之外,使其只能依据 Zerocoin 规则兑回;用户则在钱包中保留秘密币数据。[6]

累加器与成员见证

有效的公开承诺会被合并到密码学累加器中;累加器是代表一个集合的紧凑值。成员见证提供证明某个特定承诺属于该集合所需的信息。花费者证明自己持有这样的见证,而不透露该承诺。保持集合紧凑,可避免在每个证明中列出所有可能的铸造记录。[1][6]

花费与防止双重花费

花费时会公开 S 和一个零知识证明,该证明将其关联到一枚有效的累加器中币,而花费者知道打开这枚币承诺所需的秘密数据。节点验证证明,并将 S 与此前已接受的序列号进行核对。重复使用序列号会被作为双重花费拒绝。收款目标和兑回面额仍然可见;证明意图隐藏的是该金额来自哪次铸造。[6][3][5]

例如,多名用户可以铸造相同面额的币。之后花费时,用户可以证明自己有资格兑回其中一枚,而不指出其原始承诺。公开序列号后,网络便能拒绝重复兑回,而无需花费者披露原始铸造记录。这是对协议的概念性说明,并非向比特币提交 Zerocoin 交易的操作指引。[6][5]

作者构建了一个经过修改的 bitcoind 原型。他们的完整方案要求新增交易验证行为,因此要在现有链上部署,既涉及共识规则变更,也涉及密码学实现。独立的 libzerocoin 库提供核心密码学例程;应用仍需实现交易格式、铸造验证、已花费序列号跟踪和兑回机制。[1][7][6]

隐私保障与局限

固定面额使符合条件的币可以相互比较,但也限制支付方式。原始方案允许通过多个共享公开参数的独立协议实例支持多种面额。跨多个固定面额币完成一笔支付,需要多次花费,每次都要提供各自的证明。兑回时也可以再次铸造,从而允许价值在不同面额的实例之间转移。[1][8]

累加后的铸造集合,并不保证其中始终有那么多种合理的资金来源。论文举出一种边界情况:如果此前所有铸造的币都已兑回,那么一笔新的花费可能只有最近一次铸造这一种可能来源。铸造和花费的数量、面额选择及时间都会影响观察者能够推断的内容。因此,有效匿名性既取决于证明是否正确,也取决于其他用户的活动。[1][8]

账本层的隐私不会自动隐藏交易的网络来源。论文将网络匿名性作为另一问题讨论;钱包遭到入侵也可能暴露将币与其铸造记录关联起来的秘密数据。隐藏铸造与花费之间的关联,也不会隐藏所有公开的交易收款方和金额。这些边界使原始构造不同于完全在受保护账本内支持私密转账的系统。[1][6][3]

RSA 参数与可信设置

该累加器使用由秘密素因子构成的 RSA 模数 N。任何保留这些因子的人都可能破坏累加器防止伪造成员资格的保护,从而可能制造伪币。因此,安全生成参数并销毁秘密因子,与避免使用托管式混币服务是两个不同的问题。[1][8]

原始论文讨论了通过可信设置生成参数并销毁因子的做法,也提出一种称为 RSA UFOs、无需陷门的替代方案。评估实现时,必须考察其实际采用的参数生成方法。Zerocoin 无需为每笔交易设置可信发行者,并不能证明每种部署都采用了无信任设置。[1][8]

性能开销与后续研究

Zerocoin 以更大的证明和额外计算为代价,换取铸造与花费之间更强的隔离。Rational Zero 将原始的80位设计描述为:花费证明大小约为25 KB,并且在这些参数下验证约需0.5秒。这些是历史研究测量结果,并非当前比特币或所有后续 Zerocoin 部署的规格或基准。[8]

2013年,作者还在修改后的比特币客户端中测试区块。实验包括包含200、400和800笔交易的区块,其中铸造和花费交易的比例各不相同;在他们的测试环境中,由 Zerocoin 交易组成、含800笔交易的区块,验证耗时不到五分钟。该结果取决于测试硬件、参数和工作负载,并不意味着任意当前区块的开销都相同。[1]

2014年的 Rational Zero 论文探讨了更强的长期匿名性、可分割性和更小的证明。一项拟议优化通过假设理性逐利的伪造者不会花费超过其可从伪造币中回收的价值来降低可靠性参数。这是一种特定威胁模型;对于动机并非经济利益的攻击者,它存在局限,并非在降低参数后仍能普遍保证安全。[8]

历史实现与方案

ZeroVert

一则于2014年十一月发布的开发者公告介绍了基于 Zerocoin 的加密货币 ZeroVert,并链接到一个钱包版本。后来调查 Zerocoin 漏洞的研究人员将 ZeroVert 描述为 Zcoin 已弃用的前身。这项更早的实验意味着,笼统地声称 Zcoin 是首个实现并不准确。该历史版本的发布并不能证明目前仍有活跃网络。项目公告列出了与 Vertcoin 进行 Scrypt-N 合并挖矿,并计划发行总量8.4百万枚 ZER。这些是开发者公布的规格,并非经独立核实的当前网络或供应量数据。[9][5]

Moneta、Zcoin 与 Firo

Moneta 是后来发展为 Zcoin 的项目曾使用的名称。2015年十二月发布的版本属于测试网阶段;该项目的回顾称,项目在正式网络上线前更改了名称。Firo 将 Zcoin 的上线时间定为2016-09-28。Poramin Insom 是创始人之一。测试网发布和主网上线是不同的里程碑。[10][11][12][13]

该项目的2019年回顾称,其从2016年九月起使用 Zerocoin,直至2019年四月。替代方案 Sigma 无需可信设置,于2019-07-30上线。2020年十月,Zcoin 宣布在同一条区块链上更名为 Firo。后续研究带来了新的隐私协议;Lelantus Spark 于2024-01-18在 Firo 主网上线。这些里程碑描述的是该项目自身的演变,并非所有 Zerocoin 实现的普遍迁移。[14][15][2][16]

PIVX 与 zPIV

PIVX 发布了钱包3.0.0,其中包含基于 Zerocoin 的 zPIV;其发布日期为2017-10-16。PIVX 将其称为该协议首个权益证明部署。其后来的常见问题页面称,zPIV 铸造已于2019-03-07停用。如何将现有 zPIV 转回普通 PIV,则是另一个问题;2020年十一月的一则更新介绍了用于转换的公开花费,并表示 zPIV 支持将在版本5.0终止。[17][18][19]

据其开发报告,PIVX 后续推出的 SHIELD 系统采用不同的隐私技术,并于2021-01-30启用。因此,这一过程依次包括上线、停用新铸造、转换期和最终替代,而不是 zPIV 所有功能在同一日期一并消失。[20][19]

SmartCash、Zoin、Hexxcoin 与 Veil

FAU 研究人员于2018年四月披露,Zcoin、PIVX、SmartCash、Zoin 和 Hexxcoin 等项目使用了 Zerocoin。披露称 SmartCash 已停用该功能。Veil 后来记录了其自身基于 libzerocoin 的实现,以及2019年的紧急应对。这些有日期的记录可以证明历史上的采用情况,但不能据此声称所有列出的项目如今都提供相同功能。[5][21]

Anoncoin 与相关零知识系统

Anoncoin 的代码库中有一份概览,明确标注为旧版且未经编辑,并称 Zerocoin 正在开发中。它记录的是一项计划,并不能证明已发布可运行的 Zerocoin 部署。因此,过去以现在时声称该项目当时正在实现 Zerocoin 的说法,需要加上这一历史限定。[22]

CredaCash 属于更广泛的零知识隐私系统发展史,不应想当然地认为它实现了 Zerocoin 的累加器方案。其代码库将自身描述为一个独立的交易系统,旨在隐藏输入、输出和金额。采用相同的零知识技术,本身并不能使两个系统成为同一协议的实现。较早的上线预测和性能声明需要各自有注明日期的证据。[23][3]

安全发现与事件

2017年二月,Zcoin 因实现错误发生了一起增发事件。一项学术披露研究描述了错误使用 C++ 运算符并由此创建额外币的情况。这是软件验证失败,与后来 Zerocoin 密码学构造中发现的缺陷不同。历史损失总额的报告存在差异,因此相较于未经限定的单一财务数字,事件机制本身是更明确的证据。[24]

2018年四月,FAU 研究人员披露了一种拒绝花费攻击:在所述条件下,攻击者可以使诚实用户的币无法花费。他们还另外报告了可能导致未经授权创建币或盗币的代码问题。拒绝花费、增发和盗窃是不同结果,受影响的实现和补救措施也各不相同。[5]

Veil 的同期说明将2019年三月的一起封装序列号实现漏洞利用,与 Zcoin 在四月发现攻击后确认的另一项漏洞区分开来。四月的缺陷允许伪造花费并造成增发。Veil 暂时牺牲铸造匿名性以关闭该漏洞;其报告称,这一应对并未追溯暴露此前的铸造记录。其他项目采取了不同的停用、转换或替代措施。[21][14]

原始 libzerocoin 代码库目前将其代码描述为已弃用、不再维护且存在已知漏洞。它可作为历史实现的证据,但不能作为当前生产环境的参考实现。不能仅凭原始论文、项目名称,或其他项目修补了相关问题这一事实,推断某个下游分支的安全性。[7][24]

Zerocoin、Zerocash 与 Zcash

2014年的 Zerocash 论文构建了一种不同的私密支付系统,采用简洁的零知识证明。它将隐私保护范围从支付来源扩展到收款方和金额,并支持在该私密系统内部转账。其性能数据属于这一构造,而非原始 Zerocoin。Zcash 源自这一研究路线;它不是 Zcoin 或原始 Zerocoin 协议的别名。[3][4]

研究与软件资源

原始 Zerocoin 和 Rational Zero 论文解释了该构造及其权衡;Zerocash 论文记录了独立的后续设计。存档的 libzerocoin 代码库和集成说明展示了原型库提供了哪些功能,以及应用仍需自行实现哪些部分。历史项目公告有助于确定部署时间,而后来的安全披露则会对早先有关这些项目的说法作出限定。[1][8][3][7][6]

参考资料

  1. ↑ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 Miers, Garman, Green and Rubin, Zerocoin: Anonymous Distributed E-Cash from Bitcoin (2013)
  2. ↑ 2.0 2.1 Firo, Zcoin is becoming Firo, 2020-10-27
  3. ↑ 3.0 3.1 3.2 3.3 3.4 3.5 Ben-Sasson et al., Zerocash: Decentralized Anonymous Payments from Bitcoin (2014)
  4. ↑ 4.0 4.1 Zcash documentation, Project History
  5. ↑ 5.0 5.1 5.2 5.3 5.4 5.5 FAU researchers, A Cryptographic Flaw in Zerocoin (and Two Critical Coding Issues), 2018-04-12
  6. ↑ 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 Zerocoin authors, Integrating with Bitcoin clients
  7. ↑ 7.0 7.1 7.2 Zerocoin authors, archived libzerocoin repository and README
  8. ↑ 8.0 8.1 8.2 8.3 8.4 8.5 8.6 Garman et al., Rational Zero: Economic Security for Zerocoin with Everlasting Anonymity (2014)
  9. ↑ ZeroVert developer announcement, 2014
  10. ↑ Firo project, historical account of ZeroVert, Moneta and Zcoin
  11. ↑ Firo, sixth-anniversary retrospective, 2022-09-28
  12. ↑ Contemporaneous interview with Moneta founders, December 2015
  13. ↑ Firo project, founders and team
  14. ↑ 14.0 14.1 Firo, Zcoin: 2019 in Review, 2020-01-21
  15. ↑ Firo, Sigma is Live on Zcoin, 2019-07-30
  16. ↑ Firo, Lelantus Spark is live on Firo, 2024-01-18
  17. ↑ PIVX, zPIV launch announcement, 2017-10-16
  18. ↑ PIVX, FAQ on Zerocoin and PIVX, 2019
  19. ↑ 19.0 19.1 PIVX, development update, November 2020
  20. ↑ PIVX, development update Q1 2021
  21. ↑ 21.0 21.1 Veil, The libzerocoin exploit, security measure, and the future, 2019-05-15
  22. ↑ Anoncoin project repository, historical unedited overview
  23. ↑ CredaCash project source repository and protocol overview
  24. ↑ 24.0 24.1 Böhme et al., Responsible Vulnerability Disclosure in Cryptocurrencies