Sonic一种优化的零知识证明zk-SNARKs方案

零知识证明已成为解决加密货币和其他应用隐私和可扩展性问题的主要工具。在很多系统中,每个客户端下载并验证每一个新的证明,所以证明的验证必须是小而便宜的。而来自伦敦大学学院的Mary Maller、Sarah Meiklejohn,爱丁堡大学的Markulf Kohlweiss,以及来自Zcash公司的Sean Bowe,共同提出了一种称为Sonic的零知识证明协议,其对此前存在的zk-SNARK方案进行了改善,此外,论文中也提到了该方案与其他隐私方案(如防弹证明协议)的对比。

Sonic一种优化的零知识证明zk-SNARKs方案

译者简单介绍了该论文的背景和大致内容:
最实用的零知识证明方案需要一个可信设置,如(预处理)zk-SNARKs,此外还有不需要可信设置的方案,但其验证复杂性与关系的复杂性成线性关系(如防弹证明Bulletproofs)。大多数zk-SNARK方案所需的结构化查询字符串,可以用多方计算协议构造,但是结果参数是特定于单个关系的。Groth等人发现了一个具有通用和可更新结构化查询字符串的zk-SNARK协议,但字符串按支持关系的大小进行二次方式的扩展。
而论文作者们所描述的一种零知识SNARK,它的名字称为Sonic,其特点在于支持一个通用的、不断更新的结构化查询字符串,其大小是线性的。Sonic证明的大小是恒定的,而在批量验证环境中,验证的边际成本可与类似方案中最有效的SNARKs相提并论。此外,论文作者还描述了一种通用技术,在这种技术中,非置信的“助手”可计算建议,从而更有效地验证成批的证明。
零知识证明自被提出以来的几十年里,它已被用于支持各种潜在的应用,范围从可验证的外包计算到匿名认证,还有很多其他的设置,需要在隐私和完整性之间取得平衡。近年来,加密货币成为了一种日益流行的现实世界应用,而像Zcash和以太坊皆部署了常规零知识协议。在加密货币设置中,客户端通常下载并验证发布到网络的每笔交易。这意味着,对于零知识协议的实际部署而言,较小的证明大小以及快速验证时间都是非常重要的。
有几种实用的方案可供选择,它们在性能和密码假设上有很大的权衡空间。目前,最具吸引力的证明系统是一个(预处理)简洁的非交互知识论证(简称zk-SNARK),其证明大小为常数且较小,此外它还有固定时间的验证成本。文献中描述的最有效的方案,是由Groth等人提出的zk-SNARK方案,其只包含三组元素。这些方案需要一个可信设置,一个配对友好的椭圆曲线,并依靠强有力的假设。
相反,像防弹证明(Bulletproofs)这样的证明系统,并不需要可信设置,并依赖较弱的假设。不幸的是,尽管它的证明大小与关系大小成对数比例,但防弹证明验证时间却是线性的(即使是应用批处理技术)。因此,防弹证明非常适合较简单的关系。
尽管zk-SNARKs已部署在能够容忍更强大假设的应用中,包括Zcash中的隐私支付协议,但可信设置已成为部署这些证明系统的一大障碍。例如,如果设置在Zcash中受到破坏,攻击者可能会创建伪造的而没有被发现的Zcash币。当然,我们可通过执行多方计算(MPC)协议的设置减少这种风险,但是,结果参数是特定于单个关系的,因此每个不同的应用都必须执行自己的设置。应用程序还必须执行每次结构改变时都会有新的设置,即使是小的优化或修正错误。
Groth等人最近又提出了一个带有通用结构化查询字符串(SRS) 的zk-SNARK 方案,它允许单个设置,以支持某些有界大小的所有回路(circuit)。此外,SRS是可更新的,这意味着一组开放的参与者可不定期地为其提供秘密随机性。虽然这仍然是一个可信设置,但其增加了用户对参数安全性的信心。但就效率而言,由于Groth等人的设置,它具有常量大小证明和常量时间验证,它需要一个与所支持的算术回路中的乘法门数成二次方关系的SRS。此外,更新SRS需要二次群指数,验证更新则需要线性配对数。最后,虽然验证者(verifier)和证明者(prover)只需要线性大小的回路特定字符串(而不是整个SRS),从SRS推导出来需要昂贵的高斯消元运算过程。而在例如Zcash的实际设置当中,其具有2^17数量的乘法门(multiplication gate),SRS的数量约为兆字节,因此非常昂贵。
而该论文作者提出的新的用于一般算术回路满足性的zk-SNARK协议Sonic,它依然需要一个可信设置,但不同于传统SNARKs的地方,在于结构化查询字符串支持所有回路(达到给定的大小界限),并且它也是可更新的,这样它就可以持续强化,这解决了这类设置的很多挑战和风险问题。