自从在 Zerocoin 和 Zerocash 中首次实现以来,零知识证明(ZKP)在加密货币领域中就有着特别重要的历史。早期的实现是以广义的隐私为目标,ZKP 现在才刚开始被用于许多除了仅仅做混淆以外更强大的功能。例如,zkRollups 在以太坊上实现了更大的交易吞吐量,并且诸如 Halo 之类的递归证明构造正用于创建压缩的区块链;诸如「必要工作量证明」(https://eprint.iacr.org/2020/190.pdf) 之类的提案利用 zkSNARK 的功能在网络的共识层提供安全性;借助诸如 Zexe 之类的结构,ZKP 使进行链外计算甚至是全新的编程模型变成了可能。
「零知识证明」通常被作为一个整体引用,但请务必记住,有许多不同类型的 ZKP。严格来说,ZKP 方案是一种提供「零知识」性质的方案,在该方案中,证明的验证者没有得到任何关于要证明的陈述是如何被证明的知识。ZKP 可以是交互式的,其中验证者可以直接与证明者进行交互;也可以是非交互式的,证明者可以独立生成证明。有几类满足该条件的非交互式 ZKP,包括:
1、非交互式零知识论证(NIZK)
2、简洁非交互零知识论证(SNARG)
3、简洁非交互零知识知识论证(SNARK 或 zkSNARK)
由于 zkSNARK 的简洁性和效率,它与加密货币最相关。第一个用于生产环境的 SNARK 是基于最初在 Zcash 中使用的 Pinocchio。后来,Zcash 和其他几个项目采用了 Jens Groth 在其 2016 年论文「Groth16」中描述的 zkSNARK。
尽管 zkSNARK 颇受欢迎,但它有两个主要缺点。
首先,非通用的 zkSNARK(例如 Groth16)特定于给定的 NP 关系。换句话说,证明是特定于固定程序的,从而限制了该方案的灵活性。其次,生成和验证任何 zkSNARK 证明都需要事先生成一个公共参考字符串(CRS)。可以认为此过程是创建只有系统「知道」的秘密,任何了解如何生成 CRS 的人都可以伪造证明,因此破坏了可靠性。
关于通用 SNARK(例如 Marlin,PLONK 等)的学术研究已在很大程度上解决了第一个问题,但是即使这些方案仍然需要 CRS。确实是具有不需要 CRS 的零知识证明构造,如 STARKs(可扩展透明知识论证)和 Bulletproofs。但是,尽管它们都有很好的应用,但从证明大小和验证速度的角度看,zkSNARK(尤其是非通用的 SNARK,例如 Groth16)是无法被超越的。zkSNARK 的验证是常数时间的,这对加密货币特别有用。这意味着,无论要证明的语句大小如何,验证者检查证明所必须完成的工作量都保持不变。
因此,zkSNARK 仍然是许多面向隐私的区块链应用的首选工具。但是,这些系统的安全性很大程度上归结为 CRS 生成的安全性。因此,在所谓的「设置仪式(setup ceremonies)」中安全地生成 CRS 的方法将继续具有重要意义。当然,以受信任的集中式方式生成这些参数是可能的,但与去中心化的目标不兼容。到目前为止,zkSNARK 设置仪式中使用的首选技术是多方计算(MPC)。
MPC 方案试图确保没有任何一方能够生成或能够获取关于 CRS 的底层数学结构的知识。其通过要求生成过程在尽可能多的独立参与者之间共享来实现这一点,只有少数人(甚至是一个人)需要诚实行事,以确保设置安全。2015 年,Eli Ben-Sasson,Alessandro Chiesa,Matthew Green,Eran Tromer 和 Madars Virza 提出了一种改进的 MPC 结构,即使除了一个参与者之外的所有参与者都已腐化,它也都可以生成安全参数。Zcash 使用此方案为 ZCash 的第一个版本「Sprout」生成 CRS。尽管有新颖性,但参加仪式却很繁琐,并且仅限于可以信任地正确执行仪式的专家。此外,由于参与程度有限,人们普遍认为所需的信任度仍然过高,并且与 zkSNARK 旨在确保安全的去中心化系统的理想相矛盾。
从那时起,设置仪式的目标一直是最大化可以参加该方案的诚实且独立的参与者的数量。因为如果有很多独立的参与者,那么从直觉上讲,所有人都不诚实的可能性将降低到可以忽略的程度。因此,技术创新的目标是扩大这些仪式的能力,以支持尽可能多的参与者。
上述较早方案的一个问题是必须预先知道参与者的数量。Sean Bowe,Ariel Gabizon 和 Ian Miers 在 2017 年的 MMORPG 论文中描述了 Groth16 设置的 MPC 仪式的一个变体,包括两个阶段。现在我们将第一个阶段称为「Powers of Tau」,它是所有给定大小以下的电路的通用设置。第二阶段将 Powers of Tau 阶段的输出转换为特定于关系的 CRS。在该方案中,协调器用于管理参与者之间的消息。这扩展了处理流程,从理论上使其能够支持数百乃至数千名参与者。尽管存在协调器,但 MPC 的输出仍可以被独立验证,从而保持了安全性。自从论文最初发表以来,Powers of Tau 仪式已成为行业标准。诸如 Filecoin,Ethereum(Semaphore)和 Zcash(「Sapling」)都使用它来为其系统生成 CRS。
下图直观地描绘了 Powers of Tau 仪式。
尽管它相对流行,但是 MMORPG 的缺点是设置仍然是一个串行过程。更具体地说,MPC 仪式的单个参与者一次只能参加一个。因为 CRS 与电路的大小成线性关系,所以单个的贡献(contribution)可能会花费很长时间,因此,设置仪式不太可能吸引参与者。最近,以太坊基金会的 Justin Drake 提出了一种称为「乐观流水线」(optimistic pipelining)的方案。关键的洞察是,贡献可以被同时应用于 CRS 的不同部分,从而使参与者能够并行为 MMORPG 仪式贡献。因此,参与者可以同时为给定的一轮做出贡献,而不必等待轮到自己。我们将使用此方法的设置描述为「乐观设置」(optimistic setups)。Celo 最近的设置仪式Plumo使用了该方案,Aleo 即将使用的设置仪式也使用了该方案。
除了纯粹的去中心化和安全担忧外,团队越来越多地将这些仪式本身视为自己的产品。例如,Tornado.cash运行了一个设置仪式,使用户能够直接从 Web 浏览器中进行贡献,从而达到了创纪录的 1114 名参与者。Tornado 设置的成功表明,与之前的仪式被认为是必要的罪恶相比,现代设置仪式将用户体验放在首位和居中地位,不仅鼓励了更多的贡献,而且本身可以视作产品。
这些仪式的操作变得更加简化。原始的 MMORPG 方案使用中央「协调器」来管理参与者之间的消息,并对通信脚本进行装配聚合。从历史上看,此角色是手动执行的。但最近,各团队纷纷对自动化这个过程进行投入(见 Celo 的 Plumo 仪式和 ESPERO: https://www.youtube.com/watch"https://image.theblockbeats.com/upload/2021-05-29/98754d3c38218be13d096ba189c87eabf76646f4.png">
尽管许多人争辩说生成 CRS 的要求是 zkSNARK 的关键缺陷,目前却还不能忽视其比其他 ZKP 方案更好的效率优势。这就是为什么它们仍然是行业标准,也是为什么如此众多的团队和研究人员将这些仪式发展和改进到今天的原因。由于提高了协议效率,改善了用户体验,并实现了任务(例如协调器)的自动化,现在比以往任何时候都更容易参加设置仪式,最近的仪式中的参与者人数也反映了这一点。最初的 Zcash 仪式只有六名参与者,而现代的仪式却能提供多很多倍的支持。而且,由于确保 CRS 的安全只要求一个诚实的参与者,因此更多的参与者通常等于更高的安全性,因为每一个加入的独立参与者都使得完全的共谋变得更不可想象。
的确,即使通过仪式生成了 CRS,安全性的声明也不能数学化。但是,许多密码系统都基于有些抽象的假设。例如,我们有信心认为 SHA-256 是抗碰撞哈希函数,因为还没有人找到碰撞,而不是因为任何数学证明(事实上数学可以让我们证明相反的结论:碰撞一定存在)。但是 SHA256 之所以被广泛使用,是因为发生碰撞的几率是如此之低,以至于没必要考虑。
同样,很难(读作:不可能)试图确定参加设置仪式的每个参与者诚实运行的平均概率,从而以数学方式证明生成的系统是安全的。但是,随着参与者数量的增加,即使与广泛使用的密码方案以及与关于参与者的极为悲观的假设相比,这些几率也趋于逐渐减小。实际上,参与者的数量类似于安全参数λ
使设置仪式更加高效的创新反映出 ZKP 研究的惊人步伐。方案变得越来越有效,使应用变得实用,并鼓励进一步的创新和发展。这导致了类似摩尔定律的 ZKP 改进曲线。现在甚至有所谓的「透明」zkSNARK(例如Fractal和SuperSonic),消除了对可信设置的要求。尽管有这些创新,但是诸如 Groth16 之类的现有 zkSNARK 的高效率意味着它们可能会在未来几年继续应用。设置仪式可以为协作社区以及正在实现这些的项目提供机会。因此它们代表了一个值得拥抱的机会,而不是一个需要克服的必要罪恶。