Abstract
本文构造了一种无需FFT的SNARK,称为Testudo,具有接近线性时间的Prover,恒定时间的Verifier,恒定的证明大小和平方根阶的通用初始设置
Testudo基于Spartan协议,无需FFT,且采用了一种新的快速多元多项式承诺方案(来自于PST$[2]$和IPP$[3]$)
为了在Testudo中实现恒定大小的SNATK证明,本文递归组合了多项式承诺的揭示与Groth16协议
此外,本文还评估了Testudo及其构建模块,计算大小为$2^{25}$的多项式,本文的方案比PST快110倍,比Gemini快3倍,对于大小为$2^{30}$(大约1GB)的witness,本文只需要$2^{15}$(大约是几十KB)的初始设置
最后本文证明了用于证明数据并行计算的Testudo的变体,在验证$2^{10}$个基于Poseidon Hash的Merkle Tree时,比之前的常规版本快大约10倍
1 Introduction
之前的需要可信设置的SNARK方案都存在一个问题:这些可信设置都需要生成一个具有线性阶大小的CRS,这对于证明电路很大的场景来说问题很大,因为这些CRS必须下载到本地(甚至载入内存)
比如Filecoin使用的Groth16的CRS规模为$2^{30}$,很大
总而言之,具有可信设置的SNARK面临的问题为:是否可以设计一个具有较小通用可信设置、恒定证明大小和Verifier Time,可以快速验证的SNAKR
本文的主要贡献如下
- Testudo协议:本文基于Spartan协议和Groth16协议设计Testudo协议,主要思想是利用Groth16的Prover来证明Spartan
- Testudo-Comm:为了降低多项式承诺的揭示大小,本文基于PST和内积配对设计了新的多项式承诺方案,且该方案避免使用FFT
和Spartan类似,Testudo考虑规模为$N=2^n$的电路,其中电路的多项式表示包含$n$个变量,然后将Spartan的witness的多元多项式系数表示为大小为$\sqrt N$的仿真,然后利用PST对该方阵的每一行进行承诺,得到大小为$\sqrt N$的承诺向量$\vec A$
之后Prover在利用MIPP对$\vec A$进行承诺,得到最终承诺$T$($T$为单个群元素)
此时揭示证明只需要反向执行PST和MIPP协议的揭示即可
- 双椭圆曲线验证:这个主要是解决兼容性问题,使用了可以进行配对的曲线BLS12-377
- 聚合:Testudo的外层采用Groth16,可以使用聚合工具SnarkPack来将多个Groth16聚合在一起
另一种方式是在内部进行聚合,然后再用单个Groth16证明
2 Preliminaries
这里需要R1CS、多项式承诺方案、SNARK的相关背景知识及其定义,具体可以看原文附录
然后看一下本文需要用到的记法
- $(\mathbb G_1,\mathbb G_2,\mathbb G_T,q,e,g)$:双线性配对,生成元为$g$,群的阶为$q$
- $p(x_1,\dots,x_n)$:$n$个变量的多线性多项式
本文用到的假设基于GGM,主要依赖下列两个假设
- 对于PST,要求$(\mu+1)\delta$-DH假设和$(\delta,\mu)$-扩展PKE假设
- 对于MIPP,要求$(q,m)$-ASSGP假设(这个假设可以看$[3]$)
其他前置知识包括:PST多项式承诺,Spartan协议,和校验协议,PST多项式承诺如下图所示,其他两个协议可以看之前的系列博客
3 A Generalized MIPP Protocol
本节先看一下如何获得具有平方根阶可信设置的多线性PCS方案
本文的做法是先将MIPP推广到多变量多项式(原来是单变量多项式),然后证明了当多项式以拉氏基多项式表示时,此类方法也有效(具体可以看原文的附录C.4)
其次是构造推广的MIPP协议,具体如下:对于群$\mathbb G_1$元素的向量$\vec A=[A_1,\dots,A_M]$,IPP利用CRS串$\vec h=[h_1,\dots,h_M]$对该向量承诺($\vec h$中的元素来自于$\mathbb G_2$),承诺方式如下
$$ T=CM(\vec A,\vec h)=\prod_ie(A_i,h_i) $$
这里记$m=\log M$,本文中令$h_i=h^{\chi_i(\vec t)},i\in \{0,1\}^m$,其中$\vec t=[t_1,\dots,t_m]$,$h$为$\mathbb G_2$的生成元,$\chi_i$为第$i$个拉氏基多项式
$$ \chi_i(X_1,\dots,X_m)=\prod_{j:i_j=1}X_j\cdot \prod_{j:i_j=0}(1-X_j) $$
意思是将元素$h_i$表示为$h$的某个秘密次幂
本文的广义化MIPP协议允许Prover证明:对于一个域元素公共向量$\vec b=[b_1,\dots,b_m]$,记$U$如下
$$ U=\lang \vec A,\vec y\rang=\vec A^{\vec y}=\prod _iA_i^{y_i} $$
其中$\vec y=[y_1,\dots,y_m],y_i=\chi_i(\vec b),i\in\{0,1\}^m$
这样一来的Prover Time和Verifier Time都是$O(m)$,Verifier也只需要读取$\vec b$即可完成验证,无需完全读取$\vec y$,因为$\vec y',\vec h'$都是结构化的,递归结束时的最终的这两个向量可以通过如下方式计算
$$ \vec y'=[(1-b_1+x_1^{-1}b_1),\dots,(1-b_m+x_m^{-1}b_m)]\\ \vec h'=h^{\prod_i(1-t_i+x_i^{-1}t_i} $$
这样一来,Verfifier只需要利用$\vec b$就可以完成这两个向量的计算,复杂度为$O(m)$
具体协议如下图所示
这里可以看到,协议和Bulletproof有些类似,会递归执行$m$层,不过递归过程中涉及到的中间向量$\vec A',\vec y',\vec h'$都由Prover计算,因为太大了,Verifier无法肚子计算,Prover会在协议结束时向Verifier提供这些值
协议中的$T',U'$由Verifier计算
$$ T'=CM(\vec A',\vec h')\\U'=\lang \vec A',\vec y' \rang $$
4 Testudo-Comm: Our PCS with Square Root Trusted Setup
接下来看一下如何用广义化饿MIPP,将PST可信设置的大小减小到平方根阶
Testudo承诺方案如下图所示
5 Testudo: Our Construction
基于上述方案,构建本文的Testudo,记$A,B,C$为大小为$N$的R1CS实例矩阵
首先是可信设置,本文假设可信方为Testudo-Comm生成了初始可信设置,同时为R1CS生成了Groth16的可信设置(这里是通用可信设置,与R1CS实例大小无关)
然后是计算承诺,Spartan中需要将$A,B,C$转换为三个稀疏多项式$\tilde A,\tilde B,\tilde C$,然后计算这三个多项式的承诺,本文注意到,在均匀电路中(数据并行电路等包含重复子电路的电路),这个转换过程不是必要的,因为Verifier可以自己计算这三个稀疏多项式(或者只需要计算子电路的承诺即可),这样就可以降低方案的复杂性
第三步是计算witness的承诺,将$w$进行多线性扩展,得到$\tilde w$并用Testudo-Comm进行承诺
最后是证明和验证,Prover和Verifier的工作如下
Prover首先执行Spartan协议,证明$A,B,C$的可满足性,不过区别于Spartan协议,Testudo用Testudo-Comm来做承诺
然后Prover构造承诺的揭示,构造并生成上述Spartan协议的Groth16证明
Verifier的工作为验证这个最终的Groth16证明就可以了
6 Practical considerations
最后看一下一些实现时的问题
Spartan的原始版本采用的时curve25519-dalek这个曲线,提供了素数阶Ristretto群的有效实现,但是问题在于这个曲线不支持配对,因此不能结合Groth16来使用
本文的做法是用BLS12-377和BW6-761这两条曲线相结合,因为这两条曲线可以构造非常高效的配对,具体的细节可以看原文的附录D
对于数据并行计算而言,如果电路形如下列形式,Testudo就可以很好的均摊计算开销
$$ R(\vec x^{(1)},\vec w^{(1)})\wedge \dots\wedge R(\vec x^{(K)},\vec w^{(K)}) $$
Parallelization and aggregation of Testudo proofs
经过本文的研究,Testudo可以聚合不同级别的证明,每个级别都有各自的优缺点,但是都是可以相互兼容的,因此可以在实践中扩展到大规模的实例,从而实现并行生成证明
对于Spartan而言,假设Prover在不同的机器上,使用不同的witness并行运行多个和校验协议与揭示多项式承诺,此时聚合的和校验协议的验证可以通过下列两种方式进行
- 使用类似Snarkpack的构造,将不同的Groth16-和校验Verifier聚合在一起
- 通过单个Groth16来证明多个和校验协议的实例
References
$[1]$ Matteo Campanelli, Nicolas Gailly, Rosario Gennaro, Philipp Jovanovic, Mara Mihali, Justin Thaler:
Testudo: Linear Time Prover SNARKs with Constant Size Proofs and Square Root Size Universal Setup. IACR Cryptol. ePrint Arch. 2023: 961 (2023)
$[2]$ C. Papamanthou, E. Shi, and R. Tamassia. Signatures of correct computation. In TCC 2013, LNCS. Springer,Heidelberg, Mar. 2013
$[3]$ B. Bunz, M. Maller, P. Mishra, N. Tyagi, and P. Vesely. Proofs for inner pairing products and applications. InASIACRYPT 2021, Part III, LNCS. Springer, Heidelberg, Dec. 2021.
$[4]$ Spartan:满足透明性的通用高效zkSNARK方案 - 三两老友杂的小岛 (snowolf0620.xyz)
$[5]$ 多项式扩展与和校验协议 - 三两老友杂的小岛 (snowolf0620.xyz)