微软研究中心Srinath Setty、a16z crypto research 和 Georgetown University Justin Thaler、Carnegie Mellon University Riad Wahby 20203年论文《Customizable constraint systems for succinct arguments》。
前序博客有:
4. SuperSpartan的Polynomial IOP for CCS
本节讨论的“SuperSpartan的Polynomial IOP for CCS”,为“Spartan [Set20] polynomial IOP for R1CS”的扩展。附录C中展示了如何扩展SuperSpartan的polynomial IOP来处理CCS+(即具有lookup操作的CCS)。
根据Definition 2.2,假定有某CCS structure-instance tuple with size bounds:
(
(
m
,
n
,
l
,
t
,
q
,
d
)
,
(
M
0
,
⋯
,
M
t
−
1
,
S
0
,
⋯
,
S
q
−
1
,
x
)
)
((m,n,l,t,q,d),(M_0,\cdots,M_{t-1},S_0,\cdots,S_{q-1},x))
((m,n,l,t,q,d),(M0,⋯,Mt−1,S0,⋯,Sq−1,x))
为简便表示,令协议中的 m , n m,n m,n均为powers of 2(若不是,则对每个矩阵 M i M_i Mi以及witness vector z z z进行补零,扩展 m , n m,n m,n均为powers of 2,在以下SNARK协议中,并不会增加SNARK中的Prover time或Verifier time)。
将矩阵 M 0 , ⋯ , M t − 1 M_0,\cdots, M_{t-1} M0,⋯,Mt−1解析为函数: { 0 , 1 } log m × { 0 , 1 } log n → F \{0,1\}^{\log m}\times \{0,1\}^{\log n}\rightarrow \mathbb{F} {0,1}logm×{0,1}logn→F。任何 { 0 , 1 } log m × { 0 , 1 } log n \{0,1\}^{\log m}\times \{0,1\}^{\log n} {0,1}logm×{0,1}logn格式的输入都可解析为是索引 ( i , j ) ∈ { 0 , 1 , ⋯ , m − 1 } × { 0 , 1 , ⋯ , n − 1 } (i, j)\in\{0,1,\cdots,m-1\}\times\{0,1,\cdots,n-1\} (i,j)∈{0,1,⋯,m−1}×{0,1,⋯,n−1}的二进制表示。该函数的输出为矩阵中第 ( i , j ) (i,j) (i,j)个元素。
Spartan背景知识参见:
- 博客Spartan: zkSNARKS without trusted setup学习笔记
- 博客Spartan: zkSNARKS without trusted setup 源代码解析
- 博客Spartan中 Vitalik R1CS例子 SNARK证明基本思路
将Spartan中R1CS扩展为CCS表示:
Remark 10:
- Theorem 1中Prover runtime中的
O
(
q
m
d
log
2
d
)
O(qmd\log^2d)
O(qmdlog2d)项中包含了使用FFT来将
d
d
d个不同的degree为1 的多项式相乘。FFT仅适于某些有限域。
此外,实际的CCS/AIR/Plonkish instance,其 d d d很少会超过100,通常低至5甚至是2 [GPR21, BGtRZt23]。因此,FFT的 O ( d log 2 d ) O(d\log^2d) O(dlog2d) time要远远慢于 直接将 d d d个degree为1的多项式相乘的 O ( d 2 ) O(d^2) O(d2) time。使用Karatsuba算法来代替FFT,也可获得sub-quadratic-in- d d d time算法,且适于任何有限域。
Theorem 1证明:
对于某CCS structure和instance,
I
=
(
M
0
,
⋯
,
M
t
−
1
,
S
0
,
⋯
,
S
q
−
1
,
x
)
\mathcal{I}=(M_0,\cdots,M_{t-1}, S_0,\cdots,S_{q-1},x)
I=(M0,⋯,Mt−1,S0,⋯,Sq−1,x)和声称的witness
W
W
W。令
Z
=
(
W
,
1
,
x
)
Z=(W,1,x)
Z=(W,1,x)。
如之前所述,可:
- 将矩阵 M 0 , ⋯ , M t − 1 M_0,\cdots, M_{t-1} M0,⋯,Mt−1解析为函数: { 0 , 1 } log m × { 0 , 1 } log n → F \{0,1\}^{\log m}\times \{0,1\}^{\log n}\rightarrow \mathbb{F} {0,1}logm×{0,1}logn→F。
- 将 Z Z Z解析为函数: { 0 , 1 } log n → F \{0,1\}^{\log n}\rightarrow \mathbb{F} {0,1}logn→F。
- 将 ( 1 , x ) (1,x) (1,x)解析为函数: { 0 , 1 } log n − 1 → F \{0,1\}^{\log n-1}\rightarrow \mathbb{F} {0,1}logn−1→F。【此时假设 Z Z Z中witness W W W和 ( 1 , x ) (1,x) (1,x)具有相同的长度 n / 2 n/2 n/2。】
函数
Z
Z
Z的MLE
Z
~
\tilde{Z}
Z~表示为:
Z
~
(
X
0
,
⋯
,
X
log
n
−
1
)
=
(
1
−
X
0
)
⋅
W
~
(
X
1
,
⋯
,
X
log
n
−
1
)
+
X
0
⋅
(
1
,
x
)
~
(
X
1
,
⋯
,
X
log
n
−
1
)
(
13
)
\tilde{Z}(X_0,\cdots,X_{\log n -1})=(1-X_0)\cdot \widetilde{W}(X_1,\cdots,X_{\log n-1})+ X_0\cdot \widetilde{(1,x)}(X_1,\cdots,X_{\log n-1})\ \ \ \ \ \ \ \ \ \ \ (13)
Z~(X0,⋯,Xlogn−1)=(1−X0)⋅W
(X1,⋯,Xlogn−1)+X0⋅(1,x)
(X1,⋯,Xlogn−1) (13)
可看出方程式(13)中的右侧为multilinear多项式。对于所有的
(
x
0
,
⋯
,
x
log
n
−
1
)
∈
{
0
,
1
}
log
n
(x_0,\cdots,x_{\log n -1})\in\{0,1\}^{\log n}
(x0,⋯,xlogn−1)∈{0,1}logn,很容易检查有
Z
~
(
x
0
,
⋯
,
x
log
n
−
1
)
=
Z
(
x
0
,
⋯
,
x
log
n
−
1
)
\tilde{Z}(x_0,\cdots,x_{\log n -1})=Z(x_0,\cdots,x_{\log n -1})
Z~(x0,⋯,xlogn−1)=Z(x0,⋯,xlogn−1)。(因为
Z
Z
Z evaluations的前半部分对应
W
W
W,后半部分对应vector
(
1
,
x
)
(1,x)
(1,x)。)
因此方程式(13)中的右侧为
Z
Z
Z的唯一multilinear extension。
若
(
1
,
x
)
(1,x)
(1,x)长度小于
W
W
W长度(如当根据Lemma 3将AIR转换为CCS)时,可对
x
x
x填充补零获得
x
p
a
d
x_{pad}
xpad,使其填充后
(
1
,
x
p
a
d
)
(1,x_{pad})
(1,xpad)的长度与
W
W
W一样。这样填充补零后,会让Verifier计算
(
1
,
x
)
~
(
X
1
,
⋯
,
X
log
n
−
1
)
\widetilde{(1,x)}(X_1,\cdots,X_{\log n-1})
(1,x)
(X1,⋯,Xlogn−1)的time增加
O
(
log
n
)
O(\log n)
O(logn)次field加法运算。如,若未填充
(
1
,
x
)
(1,x)
(1,x)长度为
2
l
2^l
2l,则很容易检查具有length为
n
/
2
n/2
n/2的填充
(
1
,
x
p
a
d
)
(1,x_{pad})
(1,xpad)的multilinear extension为:
(
X
1
,
⋯
,
X
log
n
−
1
)
→
(
1
−
X
l
+
1
)
⋅
(
1
−
X
l
+
2
)
⋯
⋅
(
1
−
X
log
n
−
1
)
⋅
(
1
,
x
)
~
(
X
1
,
⋯
,
X
l
)
(X_1,\cdots,X_{\log n -1})\rightarrow (1-X_{l+1})\cdot (1-X_{l+2})\cdots\cdot (1-X_{\log n -1})\cdot\widetilde{(1,x)}(X_1,\cdots,X_l)
(X1,⋯,Xlogn−1)→(1−Xl+1)⋅(1−Xl+2)⋯⋅(1−Xlogn−1)⋅(1,x)
(X1,⋯,Xl)
使得该multilinear多项式对于所有的inputs ( x 1 , ⋯ , x log n − 1 ) (x_1,\cdots,x_{\log n-1}) (x1,⋯,xlogn−1)对应填充后的 ( 1 , x p a d ) (1,x_{pad}) (1,xpad),可认为其是填充后 ( 1 , x p a d ) (1,x_{pad}) (1,xpad)的唯一multilinear多项式。
与Spartan论文Theorem 4.1类似,对由Spartan R1CS转换的CCS的“SuperSpartan的Polynomial IOP for CCS”协议为:
可对方程式(14)右侧的多项式应用sum-check协议:
从Verifier的角度来看,这可将方程式(14)右侧的计算 reduce为 "evaluate
g
g
g at a random input
r
a
∈
F
log
m
r_a\in\mathbb{F}^{\log m}
ra∈Flogm。且Verifier 可自己以
O
(
log
m
)
O(\log m)
O(logm)次field运算来计算
e
q
~
(
τ
,
r
a
)
\tilde{eq}(\tau,r_a)
eq~(τ,ra),因其易于检查:
当Verifier计算出
e
q
~
(
τ
,
r
a
)
\tilde{eq}(\tau,r_a)
eq~(τ,ra)值之后,Verifier计算
g
(
r
a
)
g(r_a)
g(ra)的time为
O
(
d
q
)
O(dq)
O(dq)。对于
i
∈
{
0
,
1
,
⋯
,
t
−
1
}
i\in\{0,1,\cdots,t-1\}
i∈{0,1,⋯,t−1}:
对该计算,可并行执行
t
t
t个sum-check协议:为此,引入随机数
γ
∈
F
\gamma\in\mathbb{F}
γ∈F,并对
M
~
i
(
r
a
,
y
)
⋅
Z
~
(
y
)
\tilde{M}_i(r_a,y)\cdot \tilde{Z}(y)
M~i(ra,y)⋅Z~(y)做random linear combination,权重分别为
[
γ
0
,
⋯
,
γ
t
−
1
]
[\gamma^0,\cdots,\gamma^{t-1}]
[γ0,⋯,γt−1]。
在该sum-check协议中,Verifier在做final check时:仅需对以上 t t t个多项式 M ~ i ( r a , y ) ⋅ Z ~ ( y ) \tilde{M}_i(r_a,y)\cdot \tilde{Z}(y) M~i(ra,y)⋅Z~(y) evaluate at r y r_y ry,即意味着Verifier evaluate M ~ i ( r a , r y ) \tilde{M}_i(r_a,r_y) M~i(ra,ry)就足矣。这样的前提假设是Verifier具有query access to M ~ 0 , ⋯ , M ~ t − 1 \tilde{M}_0,\cdots,\tilde{M}_{t-1} M~0,⋯,M~t−1,根据方程式(13),Verifier仅需对 W ~ \tilde{W} W~和 ( 1 , x ) ~ \widetilde{(1,x)} (1,x) 各query一次就可获得 Z ~ ( r y ) \tilde{Z}(r_y) Z~(ry)。
本文所实现的“SuperSpartan的Polynomial IOP for CCS”协议伪代码实现为:
总之,本文所实现的“SuperSpartan的Polynomial IOP for CCS”协议具有如下属性:
根据上面的“SuperSpartan的Polynomial IOP for CCS”协议伪代码可知,其包含了2次sum-check协议调用:
- 1)在3.a步骤中第一次触发sum-check协议时,Prover主要工作量为:
- 2)在3.c步骤中第二次调用sum-check协议,对应为
log
n
\log n
logn个变量的多项式:
其每个变量的degree最多为2。在sum-check协议中采用标准的linear-time-sum-check技术[CTY12, Tha13],Prover的用时为 O ( N + t ) O(N+t) O(N+t)。
5. 避免uniform IR中的预处理
当CCS instance中有“uniform” structure时(如某circuit具有多个相同的sub-circuit),为实现succinct verification cost,应避免对circuit structure的预处理。
对于uniform CCS instance,本文实现了:
- Verifier可evaluate the multilinear extension polynomials M ~ 0 , ⋯ , M ~ t − 1 \tilde{M}_0,\cdots,\tilde{M}_{t-1} M~0,⋯,M~t−1 at any desired point in time logarithmic in the number of rows and columns of these matrices。
5.1 “adding 1 in binary”函数的multilinear extension
可将整数 { 0 , 1 , ⋯ , D − 1 } \{0,1,\cdots, D-1\} {0,1,⋯,D−1}的索引以二进制表示。整数 D − 1 D-1 D−1的索引可以全1向量表示,整数0索引可以全零向量表示。在这种索引表示法中,可将最右侧的bit看成是low-order bit。
对于某bit-vector i ∈ { 0 , 1 } log D i\in\{0,1\}^{\log D} i∈{0,1}logD,令 to-int ( i ) = ∑ j = 0 log D − 1 i j ⋅ 2 j \text{to-int}(i)=\sum_{j=0}^{\log D-1}i_j\cdot 2^j to-int(i)=∑j=0logD−1ij⋅2j对应 i i i所表示的整数。对于整数 κ ∈ { 0 , 1 , ⋯ , t − 1 } \kappa \in\{0,1,\cdots,t-1\} κ∈{0,1,⋯,t−1}, bin ( κ ) \text{bin}(\kappa) bin(κ)表示 κ \kappa κ对应的二进制表示。
定义函数:
next
(
i
,
j
)
:
{
0
,
1
}
log
D
×
{
0
,
1
}
log
D
→
{
0
,
1
}
\text{next}(i,j):\{0,1\}^{\log D}\times \{0,1\}^{\log D}\rightarrow \{0,1\}
next(i,j):{0,1}logD×{0,1}logD→{0,1}
其中:
- i , j i,j i,j为bit-vector输入
- 当且仅当整数 I = to-int ( i ) I=\text{to-int}(i) I=to-int(i)和整数 J = to-int ( j ) J=\text{to-int}(j) J=to-int(j)满足 J = I + 1 J=I+1 J=I+1时,该函数输出为1,否则为0。
因此可将该函数称为“adding 1 in binary”函数:
- 输入为2个bit-vector,判断第2个输入的整数 是否 为第1个输入整数加1。
注意:
- 若 i i i为全1向量,则对于所有的 j ∈ { 0 , 1 } log D j\in\{0,1\}^{\log D} j∈{0,1}logD,都有 ( i , j ) = 0 (i,j)=0 (i,j)=0。
从而有Theorem 2:
实际分析时分为3种情况:
接下来是解释方程式(16)可evaluate at any point
(
r
x
,
r
y
)
∈
F
log
D
×
F
log
D
(r_x,r_y)\in\mathbb{F}^{\log D}\times \mathbb{F}^{\log D}
(rx,ry)∈FlogD×FlogD in
O
(
log
D
)
O(\log D)
O(logD) time:
- 很容易看出 h ( r x , r y ) h(r_x,r_y) h(rx,ry)可evaluate in O ( log D ) O(\log D) O(logD) time。
- g g g中每个求和项可evaluate at ( r x , r y ) (r_x,r_y) (rx,ry) in O ( log D ) O(\log D) O(logD) time。
- g g g中共有 O ( log D ) O(\log D) O(logD)个求和项,因此总的time bound 为 O ( log D 2 ) O(\log D^2) O(logD2)。
- 不过,求和的相邻项中有几乎相同的因子,该runtime可reduce为
O
(
log
m
)
O(\log m)
O(logm)。如,若
v
(
k
)
v(k)
v(k)为求和中的第
k
k
k项,则:
5.2 由AIR转换来的CCS
本小节中,
m
m
m表示AIR的参数,有
w
A
I
R
∈
F
(
m
−
1
)
⋅
t
/
2
,
z
A
I
R
∈
F
(
m
+
1
)
⋅
t
/
2
w_{AIR}\in\mathbb{F}^{(m-1)\cdot t/2},z_{AIR}\in\mathbb{F}^{(m+1)\cdot t/2}
wAIR∈F(m−1)⋅t/2,zAIR∈F(m+1)⋅t/2。同时
m
m
m表示CCS矩阵
M
0
,
⋯
,
M
t
−
1
M_0,\cdots,M_{t-1}
M0,⋯,Mt−1的行数。本节还假设
m
−
1
m-1
m−1为a power of 2,同时对
M
0
,
⋯
,
M
t
−
1
M_0,\cdots,M_{t-1}
M0,⋯,Mt−1填充补零,使得其行数为a power of 2(该填充不会增加SuperSpartan中的Verifier或Prover time)。即意味着填充后的
M
0
,
⋯
,
M
t
−
1
M_0,\cdots,M_{t-1}
M0,⋯,Mt−1的行数不再为
m
m
m,而是
2
(
m
−
1
)
2(m-1)
2(m−1)。
这样处理便于基于实际域做实现,并借助上一节的 “adding 1 in binary”函数的multilinear extension,对由AIR转换来的CCS实际表达做了进一步优化。
5.3 避免SIMD CCS中的预处理
6. 将Polynomial IOP for CCS编译为SNARK for CCS