1. 引言
主要参考Ingonyama团队2023年4月文章《A Brief History of Lookup Arguments》。
近年来zk-SNARKs的研究热点有:
- 让ZKP proof更succinct
- 降低Prover time和Verifier time
但,大多数SNARKs仍受限于,易于转换为多项式的算术运算。通常将“易于转换为多项式的算术运算” 称为 “SNARK-friendly”的,而其它“SNARK-unfriendly”运算则仍未解决。
直到2018年Jonathan Bootle等人在《BCG+18 Nearly linear-time zero-knowledge proofs for correct program execution》论文中,提出了lookup协议来处理某些SNARK-unfriendly运算。lookup协议用于证明如下statement:
- 已知table T = { t i } i = 0 , ⋯ , N − 1 T=\{t_i\}_{i=0,\cdots,N-1} T={ti}i=0,⋯,N−1具有不同值(“rows”)
- 一组lookups F = { f j } j = 0 , ⋯ , m − 1 F=\{f_j\}_{j=0,\cdots,m-1} F={fj}j=0,⋯,m−1(可能有重复值)
- 证明:所有lookups均包含在table内,即 F ⊆ T F\subseteq T F⊆T。
table
T
T
T通常是public的,而lookups通常为private witness。
可:
- 将table看成是某特定变量的所有合法值
- 而lookups为,某特定程序执行给出的该变量值。
- 则,以上statement即表示,该变量维护了整个执行过程中的合法状态。
- 除非明确指出,可假定 m < N m<N m<N,且大多数情况下 m ≪ N m\ll N m≪N。
本文关注各种不同的lookup argument及其变种演变思路,重点关注:
- plookup:Ariel Gabizon等人2020年论文 plookup: A simplified polynomial protocol for lookup tables
- cq:Liam Eagen等人2022年论文 cq: Cached quotients for fast lookups
2. lookup argument用途
2.1 范围检查
当检查数字
x
x
x在
{
0
,
1
,
⋯
,
N
−
1
}
\{0,1,\cdots,N-1\}
{0,1,⋯,N−1}范围内,其中
N
=
2
n
N=2^n
N=2n。
对应的算术约束方式为:
- 定义 n n n个数字 b 0 , ⋯ , b n − 1 b_0,\cdots,b_{n-1} b0,⋯,bn−1,检查对于每个 i i i,有 b i ∈ { 0 , 1 } b_i\in\{0,1\} bi∈{0,1},且 ∑ i b i 2 i = x \sum_{i}b_i2^i=x ∑ibi2i=x。一共需要 n + 1 n+1 n+1个约束。
- 若需要做 m m m个数字的范围检查,则需要 O ( m n ) = O ( m log N ) O(mn)=O(m\log N) O(mn)=O(mlogN)个约束。
而若借助lookup argument,则仅需要一个lookup约束,就可检查 m m m个数字在 { 0 , 1 , ⋯ , N − 1 } \{0,1,\cdots,N-1\} {0,1,⋯,N−1}范围内。后面将介绍这样一个lookup约束的开销。且当 N N N不是为power of 2时,上面的算术约束方式将是笨重的,而lookup argument无需关注 N N N是否为power of 2。
2.2 有限域函数
lookup argument可用于实现任意(有限域)函数,通过简单将该函数的完整输入输出值来定义table。可用于实现具有任意多个变量的函数。
如哈希计算中广泛使用的
k
k
k-bit XOR函数。遵循2.1节的逻辑,使用算术约束方式,将需要
6
k
6k
6k个约束。而借助lookup argument,可直接借助table
T
T
T来实现,其中table
T
T
T的rows为:
t
i
=
(
A
,
B
,
C
)
t_i=(A,B,C)
ti=(A,B,C)
其中:
- 对于每个 i i i, A , B ∈ { 0 , 1 , ⋯ , 2 k − 1 } A,B\in\{0,1,\cdots,2^k-1\} A,B∈{0,1,⋯,2k−1}为2个 k k k-bit数字的不同组合,且 C = A ⊕ B C=A\oplus B C=A⊕B。
- 整个table
T
T
T具有
2
2
k
2^{2k}
22k行,且每行需存储
3
k
3k
3k bits。
- 当 k = 32 k=32 k=32时(很多哈希函数的通用取值),则这样的table是完全不实用的。
- 当 k = 16 k=16 k=16时,这样的table需要24GB存储空间,对大多数应用场景来说,也是不实用的。
2.3 更好的XOR
Halo2中的16-bit table chip for SHA-256,通过利用zero-interleaving,借助lookup argument,实现了更好的bit-wise XOR函数。
zero-interleaving,是指以二进制来表示数字:
A
=
∑
l
=
0
k
−
1
a
l
2
l
A=\sum_{l=0}^{k-1}a_l2^l
A=∑l=0k−1al2l
然后在任意2个原始bits之间添加一个‘0’ bit,从而有:
A
′
=
∑
l
=
0
k
−
1
a
l
4
l
A'=\sum_{l=0}^{k-1}a_l4^l
A′=∑l=0k−1al4l
对XOR的2个输入
A
,
B
A,B
A,B均做zero-interleaving之后,有
A
′
,
B
′
A',B'
A′,B′。计算
C
′
′
=
A
′
+
B
′
C''=A'+B'
C′′=A′+B′,则
C
′
′
C''
C′′的偶数位置的bit即为
C
=
A
⊕
B
C=A\oplus B
C=A⊕B。为根据
C
′
′
C''
C′′获得
C
C
C,需将
C
′
′
C''
C′′分解为奇数bit和偶数bit:
C
′
′
=
∑
l
=
0
k
−
1
c
l
e
v
e
n
4
l
+
2
∑
l
=
0
k
−
1
c
l
o
d
d
4
l
C''=\sum_{l=0}^{k-1}c_l^{even}4^l+2\sum_{l=0}^{k-1}c_{l}^{odd}4^l
C′′=∑l=0k−1cleven4l+2∑l=0k−1clodd4l
从而:
- 有 c l e v e n c_l^{even} cleven为 C = A ⊕ B C=A\oplus B C=A⊕B的二进制表示,
- 同时有副产品: c l o d d c_l^{odd} clodd为 D = A ∧ B D=A\land B D=A∧B的二进制表示。 ∧ \land ∧表示bit-wise AND。
- 借助4次zero-interleaving table:
A
,
B
,
C
,
D
→
A
′
,
B
′
,
C
′
,
D
′
A,B,C,D\rightarrow A',B',C',D'
A,B,C,D→A′,B′,C′,D′,以及一个算术约束:
A ′ + B ′ = C ′ ′ = C ′ + 2 D ′ A'+B'=C''=C'+2D' A′+B′=C′′=C′+2D′
可同时证明 A , B A,B A,B的bit-wise XOR和bit-wise AND结果。
当
k
=
32
k=32
k=32时,以上实现仍是不切实际的大,单个table需要48GB存储空间。
但,对于
k
=
16
k=16
k=16的情况,以上实现对应的lookup table仅需要384kB。
可通过slicing以SNARK-friendly的方式来降低bits数,即,引入arithmetic gate——其以2个16-bit数字
x
0
,
x
1
x_0,x_1
x0,x1为输入,然后最终获得32-bit的数字
x
=
x
0
⋅
1
+
x
1
⋅
2
16
x=x_0\cdot 1+x_1\cdot 2^{16}
x=x0⋅1+x1⋅216。
2.4 有限状态机
lookup table可用于实现有限状态机。状态机内包含一组状态,以及依赖于输入的状态变化。实现状态机的lookup table内,包含 (current state, input, next state) 的所有合法组合。状态机的execution trace通常表示为:
(
s
t
a
t
e
(
j
)
,
i
n
p
u
t
(
j
)
,
n
e
x
t
_
s
t
a
t
e
(
j
)
)
(state(j),input(j),next\_state(j))
(state(j),input(j),next_state(j))
可使用lookup argument来证明该状态机的合法执行,同时证明wiring约束:
n
e
x
t
_
s
t
a
t
e
(
j
)
=
s
t
a
t
e
(
j
+
1
)
next\_state(j)=state(j+1)
next_state(j)=state(j+1)
该wiring 约束是SNARK-friendly的。
3. Plookup
Plookup为早期的lookup协议之一,其为首个lookup协议的简化版。
Plookup的基于的思想为:
- 已知向量
t
∈
F
N
,
f
∈
F
m
,
s
∈
F
N
+
m
t\in\mathbb{F}^N,f\in\mathbb{F}^m,s\in\mathbb{F}^{N+m}
t∈FN,f∈Fm,s∈FN+m,和双变量多项式:
F ( β , γ ) = ( 1 + β ) m ∏ j = 1 m ( γ + f j ) ∏ i = 1 N − 1 ( γ ( 1 + β ) + t i + β t i + 1 ) F(\beta,\gamma)=(1+\beta)^m\prod_{j=1}^{m}(\gamma+f_j)\prod_{i=1}^{N-1}(\gamma(1+\beta)+t_i+\beta t_{i+1}) F(β,γ)=(1+β)m∏j=1m(γ+fj)∏i=1N−1(γ(1+β)+ti+βti+1)
G ( β , γ ) = ∏ k = 1 m + N − 1 ( γ ( 1 + β ) + s k + β s k + 1 ) G(\beta,\gamma)=\prod_{k=1}^{m+N-1}(\gamma(1+\beta)+s_k+\beta s_{k+1}) G(β,γ)=∏k=1m+N−1(γ(1+β)+sk+βsk+1) - 则有:
F ≡ G ⇔ { { f j } ⊆ { t i } , 且 s = ( f , t ) sorted by t F\equiv G \Leftrightarrow \left\{\begin{matrix} \{f_j\}\subseteq \{t_i\}, & 且 \\ s=(f,t) \text{ sorted by } t & \\ \end{matrix}\right. F≡G⇔{{fj}⊆{ti},s=(f,t) sorted by t且
其中:- s = ( f , t ) sorted by t s=(f,t) \text{ sorted by } t s=(f,t) sorted by t,表示 s s s中值的出现顺序,与 t t t中的出现顺序一样,因为有 { f j } ⊆ { t i } \{f_j\}\subseteq \{t_i\} {fj}⊆{ti}。
若有
s
=
(
f
,
t
)
sorted by
t
s=(f,t) \text{ sorted by } t
s=(f,t) sorted by t,且,
{
f
j
}
⊆
{
t
i
}
\{f_j\}\subseteq \{t_i\}
{fj}⊆{ti},则对于每个
i
=
1
,
⋯
,
N
−
1
i=1,\cdots,N-1
i=1,⋯,N−1,都有不同的
k
∈
{
1
,
⋯
,
m
+
N
−
1
}
k\in\{1,\cdots,m+N-1\}
k∈{1,⋯,m+N−1},使得:
(
γ
(
1
+
β
)
+
t
i
+
β
t
i
+
1
)
=
(
γ
(
1
+
β
)
+
s
k
+
β
s
k
+
1
)
(3.4)
(\gamma (1+\beta)+t_i+\beta t_{i+1})=(\gamma(1+\beta)+s_k+\beta s_{k+1}) \tag{3.4}
(γ(1+β)+ti+βti+1)=(γ(1+β)+sk+βsk+1)(3.4)
而对于其它
s
k
=
s
k
+
1
s_k=s_{k+1}
sk=sk+1的索引值
k
k
k,存在
j
∈
{
1
,
⋯
,
m
}
j\in\{1,\cdots,m\}
j∈{1,⋯,m},使得
f
j
=
s
k
f_j=s_k
fj=sk,且:
(
1
+
β
)
(
γ
+
f
j
)
=
(
γ
(
1
+
β
)
+
s
k
+
β
s
k
+
1
)
(3.5)
(1+\beta)(\gamma+f_j)=(\gamma(1+\beta)+s_k+\beta s_{k+1}) \tag{3.5}
(1+β)(γ+fj)=(γ(1+β)+sk+βsk+1)(3.5)
将 β \beta β看成是系数,则可将 F , G F,G F,G看成是 F [ γ ] \mathbb{F}[\gamma] F[γ]多项式,从而具有唯一分解因子。通过识别以上3.4和3.5方程式中的因子,可发现其因子为关于变量 β \beta β的多项式。
3.1 Plookup定义
Plookup使用如下定义:
- 1)取 m = N − 1 m=N-1 m=N−1,若不满足 N = m + 1 N=m+1 N=m+1,则需重复最后一个元素来填充相应的table,直到其满足 N = m + 1 N=m+1 N=m+1。
- 2) H = { g , ⋯ , g N = 1 } H=\{g,\cdots,g^N=1\} H={g,⋯,gN=1}为 F \mathbb{F} F中order为 N N N的multiplicative subgroup。
- 3)对于向量 p = F N p=\mathbb{F}^N p=FN,定义多项式 p ( x ) ∈ F [ X ] < N p(x)\in\mathbb{F}[X]_{<N} p(x)∈F[X]<N,使得向量值为该多项式的evaluation值,即满足 p i = p ( g i ) p_i=p(g^i) pi=p(gi)。
- 4)令 L i ( x ) ∈ F [ X ] < N L_i(x)\in\mathbb{F}[X]_{<N} Li(x)∈F[X]<N为基于 H H H的第 i i i个Lagrange都像是,满足 L i ( g j ) = δ i j L_i(g^j)=\delta_{ij} Li(gj)=δij(为Kronecker delta)。
- 5) s ∈ F 2 N − 1 s\in \mathbb{F}^{2N-1} s∈F2N−1为 ( f , t ) (f,t) (f,t) sorted by t t t。
3.2 Plookup协议
最终的Plookup协议为:
- 1)Prover计算并对2个多项式
h
1
,
h
2
∈
F
[
x
]
<
N
h_1,h_2\in\mathbb{F}[x]_{<N}
h1,h2∈F[x]<N进行承诺,使得对于每个
i
=
1
,
⋯
,
N
i=1,\cdots,N
i=1,⋯,N,有:
h 1 ( g i ) = s i h_1(g^i)=s_i h1(gi)=si
h 2 ( g i ) = s N + i − 1 h_2(g^i)=s_{N+i-1} h2(gi)=sN+i−1 - 2)Verifier给Prover发送随机值 β , γ \beta,\gamma β,γ。
- 3)Prover计算并对多项式
Z
∈
F
[
x
]
<
N
Z\in \mathbb{F}[x]_{<N}
Z∈F[x]<N多项式进行承诺,
Z
Z
Z聚合了
F
(
β
,
γ
)
/
G
(
β
,
γ
)
F(\beta,\gamma)/G(\beta,\gamma)
F(β,γ)/G(β,γ),有:
Z ( g ) = 1 Z(g)=1 Z(g)=1
对于 i = 2 , ⋯ , N − 1 i=2,\cdots,N-1 i=2,⋯,N−1,有 Z ( g i ) = ( 1 + β ) i − 1 ∏ l = 1 i − 1 ( γ + f l ) ( γ ( 1 + β ) + t l + β t l + 1 ) ∏ l = 1 i − 1 ( γ ( 1 + β ) + s l + β s l + 1 ) ( γ ( 1 + β ) + s N + l + β s N + l + 1 ) (3.9) Z(g^i)=\frac{(1+\beta)^{i-1}\prod_{l=1}^{i-1}(\gamma+f_l)(\gamma(1+\beta)+t_l+\beta t_{l+1})}{\prod_{l=1}^{i-1}(\gamma (1+\beta)+s_l+\beta s_{l+1})(\gamma(1+\beta)+s_{N+l}+\beta s_{N+l+1})}\tag{3.9} Z(gi)=∏l=1i−1(γ(1+β)+sl+βsl+1)(γ(1+β)+sN+l+βsN+l+1)(1+β)i−1∏l=1i−1(γ+fl)(γ(1+β)+tl+βtl+1)(3.9)
Z ( g N ) = 1 Z(g^N)=1 Z(gN)=1 - 4)Verifier对所有
x
∈
H
x\in H
x∈H,检查如下identities:
L 1 ( x ) ( Z ( x ) − 1 ) = 0 (3.11) L_1(x)(Z(x)-1)=0\tag{3.11} L1(x)(Z(x)−1)=0(3.11)
L N ( x ) ( Z ( x ) − 1 ) = 0 (3.12) L_N(x)(Z(x)-1)=0\tag{3.12} LN(x)(Z(x)−1)=0(3.12)
L N ( x ) ( h 1 ( x ) − h 2 ( g x ) ) = 0 (3.13) L_N(x)(h_1(x)-h_2(gx))=0\tag{3.13} LN(x)(h1(x)−h2(gx))=0(3.13)
( x − g N ) Z ( x ) ( 1 + β ) ( γ + f ( x ) ) ( γ ( 1 + β ) + t ( x ) + β t ( g x ) ) = ( x − g N ) Z ( g x ) ( γ ( 1 + β ) + h 1 ( x ) + β h 1 ( g x ) ) ( γ ( 1 + β ) + h 2 ( x ) + β h 2 ( g x ) ) (3.14) (x-g^N)Z(x)(1+\beta)(\gamma+f(x))(\gamma(1+\beta)+t(x)+\beta t(gx))=(x-g^N)Z(gx)(\gamma(1+\beta)+h_1(x)+\beta h_1(gx))(\gamma(1+\beta)+h_2(x)+\beta h_2(gx))\tag{3.14} (x−gN)Z(x)(1+β)(γ+f(x))(γ(1+β)+t(x)+βt(gx))=(x−gN)Z(gx)(γ(1+β)+h1(x)+βh1(gx))(γ(1+β)+h2(x)+βh2(gx))(3.14)
注意,所构建的 Z ( x ) Z(x) Z(x)多项式,在3.9方程式的基础上,分子分母乘以了相同的乘数项。即意味着,添加了第 N N N项后, F , G F,G F,G的等价性,暗含了所有项可消减,最终获得1。3.11和3.12方程式检查了 Z ( g ) = Z ( g N ) = 1 Z(g)=Z(g^N)=1 Z(g)=Z(gN)=1,而3.14方程式,检查了每个evaluation值确实添加了正确的乘数项——其两边增加的 ( x − g N ) (x-g^N) (x−gN)乘数项,可确保不包含 Z ( g N ) Z(g^N) Z(gN)和 Z ( g N + 1 ) = Z ( g ) Z(g^{N+1})=Z(g) Z(gN+1)=Z(g)之间的关系。
3.3 Plookup开销
Plookup协议不依赖于任何特殊的承诺方案。通常:
- 其Prover runtime为 O ( N log N ) O(N\log N) O(NlogN)个域运算(以根据evaluations值构建多项式),和 O ( N ) O(N) O(N)个group运算(以构建多项式 Z Z Z)。
- 当使用KZG承诺方案时,其proof size为5个group元素和9个域元素,而Verifier runtime为2个pairing函数。
3.4 Plookup泛化与优化
Plookup协议可泛化为多个witness多项式
f
1
,
⋯
,
f
w
∈
F
[
x
]
<
m
f_1,\cdots,f_w\in\mathbb{F}[x]_{<m}
f1,⋯,fw∈F[x]<m和多个tables
t
1
,
⋯
,
t
w
∈
F
[
x
]
<
N
t_1,\cdots,t_w\in\mathbb{F}[x]_{<N}
t1,⋯,tw∈F[x]<N。Verifier选择随机值
α
\alpha
α,然后这些多项式可聚合为:
t
=
∑
l
=
1
w
α
l
t
l
t=\sum_{l=1}^{w}\alpha^lt_l
t=∑l=1wαltl
f
=
∑
l
=
1
w
α
l
f
l
f=\sum_{l=1}^{w}\alpha^lf_l
f=∑l=1wαlfl
然后像之前那样处理 f , t f,t f,t。
若table为一组连续的整数,即有
t
l
+
1
=
t
l
t_{l+1}=t_l
tl+1=tl,则可将Plookup协议中的3.9方式简化为:
Z
(
g
i
)
=
∏
l
=
1
i
−
1
(
γ
+
f
l
)
(
γ
+
t
l
)
∏
l
=
1
i
−
1
(
γ
+
s
l
)
(
γ
+
s
N
+
l
)
Z(g^i)=\frac{\prod_{l=1}^{i-1}(\gamma+f_l)(\gamma+t_l)}{\prod_{l=1}^{i-1}(\gamma+s_l)(\gamma+s_{N+l})}
Z(gi)=∏l=1i−1(γ+sl)(γ+sN+l)∏l=1i−1(γ+fl)(γ+tl)
对应的Verifier checks也需做相应调整。
Plookup协议另一个泛化是plonkup协议,见Luke Pearson等人2022年论文 Plonkup: Reconciling plonk with plookup,plonkup协议集成了plonk和plookup,支持引入通用plonk gates的高效lookup table。
4. cq协议
plookup协议的主要问题在于:
- 对于 m ≪ N m\ll N m≪N的常见场景,plookup协议开销大。
自plookup协议问世以来,迭代了多个lookup协议,每个新的lookup协议,相比于之前协议,对 N N N的依赖性都有所减弱,这些新lookup协议背后的核心思想为:
- 将大部分table计算,移到,预计算中。
截止2023年4月,最好的lookup协议为cq,见Liam Eagen等人2022年论文 cq: Cached quotients for fast lookups。
4.1 Logarithmic Derivative对数导数
cq协议基于如下 Logarithmic Derivative trick:
- 2个多项式
p
(
x
)
=
∏
a
∈
A
(
x
+
a
)
p(x)=\prod_{a\in A}(x+a)
p(x)=∏a∈A(x+a)和
q
(
x
)
=
∏
b
∈
B
(
x
+
b
)
q(x)=\prod_{b\in B}(x+b)
q(x)=∏b∈B(x+b)相等,当且仅当如下有理函数相等:
p ′ ( x ) p ( x ) = ∑ a ∈ A 1 x + a \frac{p'(x)}{p(x)}=\sum_{a\in A}\frac{1}{x+a} p(x)p′(x)=∑a∈Ax+a1
q ′ ( x ) q ( x ) = ∑ b ∈ B 1 x + b \frac{q'(x)}{q(x)}=\sum_{b\in B}\frac{1}{x+b} q(x)q′(x)=∑b∈Bx+b1
即由
p
(
x
)
=
q
(
x
)
p(x)=q(x)
p(x)=q(x),推导出有
p
′
(
x
)
/
p
(
x
)
=
q
′
(
x
)
/
q
(
x
)
p'(x)/p(x)=q'(x)/q(x)
p′(x)/p(x)=q′(x)/q(x)是trivial的,而反之,由
p
′
(
x
)
/
p
(
x
)
=
q
′
(
x
)
/
q
(
x
)
p'(x)/p(x)=q'(x)/q(x)
p′(x)/p(x)=q′(x)/q(x),有:
(
p
(
x
)
q
(
x
)
)
′
=
p
′
(
x
)
q
(
x
)
−
q
′
(
x
)
p
(
x
)
p
2
(
x
)
=
0
(\frac{p(x)}{q(x)})'=\frac{p'(x)q(x)-q'(x)p(x)}{p^2(x)}=0
(q(x)p(x))′=p2(x)p′(x)q(x)−q′(x)p(x)=0
即意味着,有
p
(
x
)
/
q
(
x
)
=
c
p(x)/q(x)=c
p(x)/q(x)=c,其中
c
c
c为常数值。但是,由于
p
(
x
)
,
q
(
x
)
p(x),q(x)
p(x),q(x)的leading系数均为1,则有
c
=
1
c=1
c=1且
p
(
x
)
=
q
(
x
)
p(x)=q(x)
p(x)=q(x)。从而,lookups
f
f
f包含在table
t
t
t中,当且仅当:
∑
i
=
1
N
m
i
x
+
t
i
=
∑
j
=
1
m
1
x
+
f
j
(4.4)
\sum_{i=1}^{N}\frac{m_i}{x+t_i}=\sum_{j=1}^{m}\frac{1}{x+f_j}\tag{4.4}
i=1∑Nx+timi=j=1∑mx+fj1(4.4)
其中:
- m i m_i mi为lookup f j f_j fj中 t i t_i ti值出现的次数。注意,每个 t i t_i ti是唯一的,而 f j f_j fj值支持重复,且对于许多 t i t_i ti可以有 m i m_i mi值为0。
cq协议的核心思想为,测试4.4方程式,在某随机点 x = β x=\beta x=β的有理函数identity。
4.2 将cq协议identity调整为Sumcheck
可定义多项式
A
(
x
)
,
B
(
x
)
A(x),B(x)
A(x),B(x),使得其evaluations值为:
A
i
=
m
i
β
+
t
i
,
i
=
1
,
⋯
,
N
(4.5)
A_i=\frac{m_i}{\beta+t_i},i=1,\cdots,N \tag{4.5}
Ai=β+timi,i=1,⋯,N(4.5)
B
j
=
1
β
+
f
j
,
j
=
1
,
⋯
,
m
B_j=\frac{1}{\beta+f_j},j=1,\cdots,m
Bj=β+fj1,j=1,⋯,m
来做4.4方程式的cq协议 identity检查。
此处有:
- A i = A ( g i ) A_i=A(g^i) Ai=A(gi),其中 g g g为order为 N N N的multiplicative subgroup V ⊂ F V\subset \mathbb{F} V⊂F的generator。
- B j = B ( w j ) B_j=B(w^j) Bj=B(wj),其中 w w w为order为 m m m的multiplicative subgroup H ⊂ F H\subset \mathbb{F} H⊂F的generator。
基于随机点
β
\beta
β,为满足方程式4.4中的关系,
A
i
,
B
j
A_i,B_j
Ai,Bj需满足
∑
i
A
i
=
∑
j
B
j
\sum_i A_i=\sum_j B_j
∑iAi=∑jBj,且基于multiplicative groups的这些多项式evaluations值,遵循:
∑
i
=
1
N
A
i
=
N
⋅
A
(
0
)
\sum_{i=1}^{N}A_i=N\cdot A(0)
∑i=1NAi=N⋅A(0)
∑
i
=
j
m
B
j
=
m
⋅
B
(
0
)
\sum_{i=j}^{m}B_j=m\cdot B(0)
∑i=jmBj=m⋅B(0)
然后,Prover必须证明:
N
⋅
A
(
0
)
=
m
⋅
B
(
0
)
(4.9)
N\cdot A(0)=m\cdot B(0)\tag{4.9}
N⋅A(0)=m⋅B(0)(4.9)
这对应的单变量sumcheck问题。
4.3 cq协议的quotient多项式
多项式:
p
(
x
)
=
A
(
x
)
(
T
(
x
)
+
β
)
−
m
(
x
)
p(x)=A(x)(T(x)+\beta)-m(x)
p(x)=A(x)(T(x)+β)−m(x)
q
(
x
)
=
B
(
x
)
(
F
(
x
)
+
β
)
−
1
q(x)=B(x)(F(x)+\beta)-1
q(x)=B(x)(F(x)+β)−1
其中:
- T ( x ) , m ( x ) , F ( x ) T(x), m(x), F(x) T(x),m(x),F(x)多项式的evaluation值分别为 t i , m i , f j t_i,m_i,f_j ti,mi,fj。
- 对于 V V V, p ( x ) p(x) p(x)的evaluation值必须为0。
- 对于 H H H, q ( x ) q(x) q(x)的evaluation值必须为0。
从而可定义quotient多项式
Q
A
(
x
)
,
Q
B
(
x
)
Q_A(x),Q_B(x)
QA(x),QB(x)为:
Q
A
(
x
)
=
A
(
x
)
(
T
(
x
)
+
β
)
−
m
(
x
)
Z
V
(
x
)
(4.12)
Q_A(x)=\frac{A(x)(T(x)+\beta)-m(x)}{Z_V(x)}\tag{4.12}
QA(x)=ZV(x)A(x)(T(x)+β)−m(x)(4.12)
Q
B
(
x
)
=
B
(
x
)
(
F
(
x
)
+
β
)
−
1
Z
H
(
x
)
(4.13)
Q_B(x)=\frac{B(x)(F(x)+\beta)-1}{Z_H(x)}\tag{4.13}
QB(x)=ZH(x)B(x)(F(x)+β)−1(4.13)
其中:
- Z V ( x ) , Z H ( x ) Z_V(x),Z_H(x) ZV(x),ZH(x)分别为 V , H V,H V,H的vanishing多项式。
Prover需证明2件事:
- 1)其知道多项式 A , B , Q A , Q B , F , m A,B,Q_A,Q_B,F,m A,B,QA,QB,F,m。
- 2)这些多项式满足上面4.9、4.12、4.13方程式关系。
若使用KZG承诺方案,则其只需要使用pairing来检查这些方程式关系。不过,接下来将进一步将这些statements切分。
4.4 cq协议中,证明其知道多项式 A A A及其sum
当使用KZG承诺值
[
ϕ
(
x
)
]
1
[\phi(x)]_1
[ϕ(x)]1来证明其知道多项式
ϕ
(
x
)
\phi(x)
ϕ(x)时,Prover会对其在
z
z
z点进行evaluate以定义新的多项式:
P
ϕ
=
ϕ
(
x
)
−
ϕ
(
z
)
x
−
z
P_{\phi}=\frac{\phi(x)-\phi(z)}{x-z}
Pϕ=x−zϕ(x)−ϕ(z)
并发送承诺值
[
P
ϕ
]
1
[P_{\phi}]_1
[Pϕ]1。Verifier会检查pairing方程式:
e
(
[
ϕ
(
x
)
]
1
−
[
ϕ
(
z
)
]
1
,
[
1
]
2
)
=
e
(
[
P
ϕ
]
1
,
[
x
−
z
]
2
)
e([\phi(x)]_1-[\phi(z)]_1,[1]_2)=e([P_{\phi}]_1,[x-z]_2)
e([ϕ(x)]1−[ϕ(z)]1,[1]2)=e([Pϕ]1,[x−z]2)
将其重写为:
e
(
[
ϕ
(
x
)
]
1
−
[
ϕ
(
z
)
]
1
+
z
⋅
[
P
ϕ
]
1
,
[
1
]
2
)
=
e
(
[
P
ϕ
]
1
,
[
x
]
2
)
e([\phi(x)]_1-[\phi(z)]_1+z\cdot [P_{\phi}]_1,[1]_2)=e([P_{\phi}]_1,[x]_2)
e([ϕ(x)]1−[ϕ(z)]1+z⋅[Pϕ]1,[1]2)=e([Pϕ]1,[x]2)
使得该pairing函数的第二个参数总为 [ 1 ] 2 [1]_2 [1]2或 [ x ] 2 [x]_2 [x]2。
为证明其知道多项式
A
A
A,对
A
A
A在
x
=
0
x=0
x=0点进行evaluate,有:
P
A
(
x
)
=
A
(
x
)
−
A
(
0
)
x
P_A(x)=\frac{A(x)-A(0)}{x}
PA(x)=xA(x)−A(0)
并承诺
[
P
A
]
1
[P_A]_1
[PA]1,然后使用:
e
(
[
A
(
x
)
]
1
−
[
A
(
0
)
]
1
,
[
1
]
2
)
=
e
(
[
P
A
(
x
)
]
1
,
[
x
]
2
)
e([A(x)]_1-[A(0)]_1,[1]_2)=e([P_A(x)]_1,[x]_2)
e([A(x)]1−[A(0)]1,[1]2)=e([PA(x)]1,[x]2)
来证明。
4.5 cq协议中, B B B多项式的low degree testing
为证明知道多项式 B B B:
- 首先证明多项式 B B B的degree确实 < m <m <m。
注意,无需证明 A ( x ) A(x) A(x)的degree,因其degree为SRS所支持的最大degree。
在KZG承诺方案中,为证明多项式
B
B
B的degree确实
<
m
<m
<m,可定义:
P
B
(
x
)
=
B
(
x
)
−
B
(
0
)
x
P_B(x)=\frac{B(x)-B(0)}{x}
PB(x)=xB(x)−B(0)
然后承诺
[
P
B
(
x
)
⋅
x
N
−
m
+
1
]
1
[P_B(x)\cdot x^{N-m+1}]_1
[PB(x)⋅xN−m+1]1,最后测试:
e
(
[
P
B
(
x
)
]
1
,
[
x
N
−
m
+
1
]
2
)
=
e
(
[
P
B
(
x
)
⋅
x
N
−
m
+
1
]
1
,
[
1
]
2
)
e([P_B(x)]_1,[x^{N-m+1}]_2)=e([P_B(x)\cdot x^{N-m+1}]_1,[1]_2)
e([PB(x)]1,[xN−m+1]2)=e([PB(x)⋅xN−m+1]1,[1]2)
注意,若 B ( x ) B(x) B(x)中有degree ≥ m \geq m ≥m的项,则将包括在承诺值 [ P B ( x ) ⋅ x N − m + 1 ] 1 [P_B(x)\cdot x^{N-m+1}]_1 [PB(x)⋅xN−m+1]1中,而SRS不支持对degree ≥ N \geq N ≥N的项进行承诺。
4.6 cq协议中,使用Cached Quotients来证明4.12)方程式关系
可通过如下testing:
e
(
[
A
(
x
)
]
1
,
[
T
(
x
)
]
2
)
=
e
(
[
Q
A
(
x
)
]
1
,
[
Z
V
(
x
)
]
2
)
⋅
e
(
[
m
(
x
)
]
1
−
β
[
A
(
x
)
]
1
,
[
1
]
2
)
e([A(x)]_1,[T(x)]_2)=e([Q_A(x)]_1,[Z_V(x)]_2)\cdot e([m(x)]_1-\beta [A(x)]_1,[1]_2)
e([A(x)]1,[T(x)]2)=e([QA(x)]1,[ZV(x)]2)⋅e([m(x)]1−β[A(x)]1,[1]2)
来检查4.12)方程式关系。
其中:
- [ T ] 2 , [ Z V ] 2 , [ 1 ] 2 , [ x ] 2 [T]_2,[Z_V]_2,[1]_2,[x]_2 [T]2,[ZV]2,[1]2,[x]2均独立于lookups,可预计算。
- Prover需计算:
[
A
(
x
)
]
1
,
[
Q
A
(
x
)
]
1
,
[
m
(
x
)
]
1
,
A
(
0
)
,
[
A
(
x
)
−
A
(
0
)
x
]
1
[A(x)]_1,[Q_A(x)]_1,[m(x)]_1,A(0),[\frac{A(x)-A(0)}{x}]_1
[A(x)]1,[QA(x)]1,[m(x)]1,A(0),[xA(x)−A(0)]1。
- 这些计算复杂度为 O ( m ) O(m) O(m),因其仅需要计算lookups。若 t i t_i ti不存在于lookups中,则有 m i = 0 , A i = 0 m_i=0,A_i=0 mi=0,Ai=0。
- 只有
[
Q
A
(
x
)
]
1
[Q_A(x)]_1
[QA(x)]1的计算为
O
(
N
)
O(N)
O(N)。对应的解决方案为:
- 预计算cached quotients:
Q i ( x ) = L i ( x ) ( T ( x ) − t i ) Z V ( x ) = T ( x ) − t i k i ( x − g i ) (4.22) Q_i(x)=\frac{L_i(x)(T(x)-t_i)}{Z_V(x)}=\frac{T(x)-t_i}{k^i(x-g^i)}\tag{4.22} Qi(x)=ZV(x)Li(x)(T(x)−ti)=ki(x−gi)T(x)−ti(4.22)
其中:- L i ( x ) L_i(x) Li(x)为Lagrange多项式
- L i ( x ) = Z V ( x ) k i ( x − g i ) L_i(x)=\frac{Z_V(x)}{k^i(x-g^i)} Li(x)=ki(x−gi)ZV(x)
- k i = Z V ′ ( g i ) = ( x N − 1 ) ′ ∣ x = g i = N ⋅ g i N − 1 = N g i k^i=Z_V'(g^i)=(x^N-1)'|_{x=g^i}=N\cdot g_i^{N-1}=\frac{N}{g^i} ki=ZV′(gi)=(xN−1)′∣x=gi=N⋅giN−1=giN
- 使用NTT, Q i ( x ) Q_i(x) Qi(x)的计算量为 O ( N log N ) O(N\log N) O(NlogN)。
- 使用
Q
i
(
x
)
Q_i(x)
Qi(x),
[
Q
A
]
1
[Q_A]_1
[QA]1的计算量为
O
(
m
)
O(m)
O(m),有:
[ Q A ( x ) ] 1 = ∑ A i ≠ 0 A i ⋅ [ Q i ( x ) ] 1 [Q_A(x)]_1=\sum_{A_i\neq 0}A_i\cdot [Q_i(x)]_1 [QA(x)]1=∑Ai=0Ai⋅[Qi(x)]1
其中 A i A_i Ai为4.5)方程式中多项式 A ( x ) A(x) A(x)的evaluation值。
- 预计算cached quotients:
4.7 cq协议中,证明4.9)4.13)方程式关系
引入另一随机值 x = γ x=\gamma x=γ:
- 首先对多项式:
P F ( x ) = F ( x ) − F ( γ ) x − γ P_F(x)=\frac{F(x)-F(\gamma)}{x-\gamma} PF(x)=x−γF(x)−F(γ)
P B , γ ( x ) = P B ( x ) − P B ( γ ) x − γ P_{B,\gamma}(x)=\frac{P_B(x)-P_B(\gamma)}{x-\gamma} PB,γ(x)=x−γPB(x)−PB(γ)
承诺来证明知道 F ( γ ) , P B ( γ ) F(\gamma),P_B(\gamma) F(γ),PB(γ)。
可通过验证:
e ( [ F ( x ) ] 1 − [ F ( γ ) ] 1 + γ [ P F ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P F ( x ) ] 1 , [ x ] 2 ) (4.28) e([F(x)]_1-[F(\gamma)]_1+\gamma [P_F(x)]_1,[1]_2)=e([P_F(x)]_1,[x]_2)\tag{4.28} e([F(x)]1−[F(γ)]1+γ[PF(x)]1,[1]2)=e([PF(x)]1,[x]2)(4.28)
e ( [ P B ( x ) ] 1 − [ P B ( γ ) ] 1 + γ [ P B , γ ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P B , γ ( x ) ] 1 , [ x ] 2 ) (4.29) e([P_B(x)]_1-[P_B(\gamma)]_1+\gamma [P_{B,\gamma}(x)]_1,[1]_2)=e([P_{B,\gamma}(x)]_1,[x]_2)\tag{4.29} e([PB(x)]1−[PB(γ)]1+γ[PB,γ(x)]1,[1]2)=e([PB,γ(x)]1,[x]2)(4.29)
来证明 B ( x ) , F ( x ) B(x),F(x) B(x),F(x)确实evaluate到 B ( γ ) , F ( γ ) B(\gamma),F(\gamma) B(γ),F(γ),从而可使用这些evaluations值来证明所需的关系。 - 定义:
Q b , γ = ( B ( γ ) − B ( 0 ) + A ( 0 ) ⋅ N / m ) ( F ( γ ) + β ) − 1 Z H ( γ ) (4.30) Q_{b,\gamma}=\frac{(B(\gamma)-B(0)+A(0)\cdot N/m)(F(\gamma)+\beta)-1}{Z_H(\gamma)}\tag{4.30} Qb,γ=ZH(γ)(B(γ)−B(0)+A(0)⋅N/m)(F(γ)+β)−1(4.30)
P Q B ( x ) = Q B ( x ) − Q b , γ x − γ P_{Q_B}(x)=\frac{Q_B(x)-Q_{b,\gamma}}{x-\gamma} PQB(x)=x−γQB(x)−Qb,γ
然后发送承诺值 [ Q b , γ ] 1 , [ P Q B ( x ) ] 1 [Q_{b,\gamma}]_1,[P_{Q_B}(x)]_1 [Qb,γ]1,[PQB(x)]1,可通过如下pairing等式来验证:
e ( [ Q B ( x ) ] 1 − [ Q b , γ ] 1 + γ [ P Q B ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P Q B ( x ) ] 1 , [ x ] 2 ) (4.32) e([Q_B(x)]_1-[Q_{b,\gamma}]_1+\gamma [P_{Q_B}(x)]_1,[1]_2)=e([P_{Q_B}(x)]_1,[x]_2)\tag{4.32} e([QB(x)]1−[Qb,γ]1+γ[PQB(x)]1,[1]2)=e([PQB(x)]1,[x]2)(4.32)
注意,该构建可同时证明如下statements:
Q B ( γ ) = ( B ( γ ) ) ( F ( γ ) + β ) − 1 Z H ( x ) Q_B(\gamma)=\frac{(B(\gamma))(F(\gamma)+\beta)-1}{Z_H(x)} QB(γ)=ZH(x)(B(γ))(F(γ)+β)−1
B ( 0 ) ⋅ m = A ( 0 ) ⋅ N B(0)\cdot m=A(0)\cdot N B(0)⋅m=A(0)⋅N
这样整个证明结束。
4.8 cq协议的proof batching
最后的3个proofs结构相似,cq协议可将其batch为单个协议——通过引入新的随机变量
η
\eta
η,并定义:
c
(
x
)
=
P
B
(
x
)
+
η
F
(
x
)
+
η
2
Q
B
(
x
)
c(x)=P_B(x)+\eta F(x)+\eta^2 Q_B(x)
c(x)=PB(x)+ηF(x)+η2QB(x)
v
=
P
B
(
γ
)
+
η
F
(
γ
)
+
η
2
Q
b
,
γ
v=P_B(\gamma)+\eta F(\gamma)+\eta^2 Q_{b,\gamma}
v=PB(γ)+ηF(γ)+η2Qb,γ
P
γ
(
x
)
=
P
B
,
γ
(
x
)
+
η
P
F
(
x
)
+
η
2
P
Q
B
(
x
)
P_{\gamma}(x)=P_{B,\gamma}(x)+\eta P_F(x)+\eta^2 P_{Q_B}(x)
Pγ(x)=PB,γ(x)+ηPF(x)+η2PQB(x)
然后,将4.28)、4.29)、4.32)聚合为单个check:
e
(
[
c
(
x
)
]
1
−
[
v
]
1
+
γ
[
P
γ
(
x
)
]
1
,
[
1
]
2
)
=
e
(
[
P
γ
(
x
)
]
1
,
[
x
]
2
)
e([c(x)]_1-[v]_1+\gamma[P_{\gamma}(x)]_1,[1]_2)=e([P_{\gamma}(x)]_1,[x]_2)
e([c(x)]1−[v]1+γ[Pγ(x)]1,[1]2)=e([Pγ(x)]1,[x]2)
4.9 cq完整协议
4.9.1 Setup阶段
Prover和Verifier均有公开输入 t i t_i ti, i = 1 , ⋯ , N i=1,\cdots,N i=1,⋯,N。如下流程由某可信方执行:
- 1)选择随机值 x ∈ F x\in \mathbb{F} x∈F,输出 { [ x i ] 1 } i = 0 N − 1 \{[x^i]_1\}_{i=0}^{N-1} {[xi]1}i=0N−1和 { [ x i ] 2 } i = 0 N \{[x^i]_2\}_{i=0}^{N} {[xi]2}i=0N。数字 x x x必须删除。
- 2)计算并输出 [ Z V ( x ) ] 2 [Z_V(x)]_2 [ZV(x)]2。
- 3)计算 T ( x ) = ∑ i t i L i ( x ) T(x)=\sum_i t_iL_i(x) T(x)=∑itiLi(x)。计算并输出 [ T ( x ) ] 2 [T(x)]_2 [T(x)]2。
- 4)对于每个
i
=
1
,
⋯
,
N
i=1,\cdots,N
i=1,⋯,N,计算并输出:
- 根据4.22)方程式,计算并输出 [ Q i ( x ) ] 1 [Q_i(x)]_1 [Qi(x)]1
- [ L i ( x ) ] 1 [L_i(x)]_1 [Li(x)]1
- [ L i ( x ) − L i ( 0 ) x ] 1 [\frac{L_i(x)-L_i(0)}{x}]_1 [xLi(x)−Li(0)]1
setup阶段的输出,组成SRS,会同时发送给Prover和Verifier。
4.9.2 Proving阶段
Prover获得private witness值 f j f_j fj, j = 1 , ⋯ , m j=1,\cdots,m j=1,⋯,m,而Verifier获得的为这些输入的承诺值 [ F ( x ) ] 1 [F(x)]_1 [F(x)]1。这些输入需源自同一可信方,以对待证明的问题达成共识。
cq协议证明阶段流程为:
注意,Verifier根据4.30)方程式计算
Q
b
,
γ
Q_{b,\gamma}
Qb,γ,其需要的
B
(
γ
)
,
B
(
0
)
B(\gamma),B(0)
B(γ),B(0)并不是由Prover发送。但Prover发送了
P
B
(
γ
)
=
(
B
(
γ
)
−
B
(
0
)
)
/
γ
P_{B}(\gamma)=(B(\gamma)-B(0))/\gamma
PB(γ)=(B(γ)−B(0))/γ,因此,Verifier可计算:
Q
b
,
γ
=
(
P
B
(
γ
)
⋅
γ
+
A
(
0
)
⋅
N
/
m
)
(
F
(
γ
)
+
β
)
−
1
Z
H
(
γ
)
Q_{b,\gamma}=\frac{(P_B(\gamma)\cdot \gamma+A(0)\cdot N/m)(F(\gamma)+\beta)-1}{Z_H(\gamma)}
Qb,γ=ZH(γ)(PB(γ)⋅γ+A(0)⋅N/m)(F(γ)+β)−1
4.10 cq协议,进一步batching和聚合
可使用Fiat-Shamir transformation来将以上协议转换为非交互式的。此时,proof内容为:
π
c
q
=
{
[
m
]
1
,
[
A
]
1
,
[
Q
A
]
1
,
[
Q
B
]
1
,
[
P
A
]
1
,
[
P
B
]
1
,
[
P
B
x
N
−
m
+
1
]
1
,
[
P
γ
]
1
,
P
B
(
γ
)
,
F
(
γ
)
,
A
(
0
)
}
\pi_{cq}=\{[m]_1,[A]_1,[Q_A]_1,[Q_B]_1,[P_A]_1,[P_B]_1,[P_Bx^{N-m+1}]_1,[P_{\gamma}]_1,P_B(\gamma),F(\gamma),A(0)\}
πcq={[m]1,[A]1,[QA]1,[QB]1,[PA]1,[PB]1,[PBxN−m+1]1,[Pγ]1,PB(γ),F(γ),A(0)}
其中:
- 前8个为group元素
- 最后3个为field元素
相应的pairing等式有:
e
(
[
P
B
(
x
)
]
1
,
[
x
N
−
m
+
1
]
2
)
=
e
(
[
P
B
(
x
)
⋅
x
N
−
m
+
1
]
1
,
[
1
]
2
)
e([P_B(x)]_1,[x^{N-m+1}]_2)=e([P_B(x)\cdot x^{N-m+1}]_1,[1]_2)
e([PB(x)]1,[xN−m+1]2)=e([PB(x)⋅xN−m+1]1,[1]2)
e
(
[
A
(
x
)
]
1
,
[
T
(
x
)
]
2
)
=
e
(
[
Q
A
(
x
)
]
1
,
[
Z
V
(
x
)
]
2
)
⋅
e
(
[
m
(
x
)
]
1
−
β
[
A
(
x
)
]
1
,
[
1
]
2
)
e([A(x)]_1, [T(x)]_2)=e([Q_A(x)]_1,[Z_V(x)]_2)\cdot e([m(x)]_1-\beta[A(x)]_1,[1]_2)
e([A(x)]1,[T(x)]2)=e([QA(x)]1,[ZV(x)]2)⋅e([m(x)]1−β[A(x)]1,[1]2)
e
(
[
A
(
x
)
]
1
−
[
A
(
0
)
]
1
,
[
1
]
2
)
=
e
(
[
P
A
(
x
)
]
1
,
[
x
]
2
)
e([A(x)]_1-[A(0)]_1,[1]_2)=e([P_A(x)]_1,[x]_2)
e([A(x)]1−[A(0)]1,[1]2)=e([PA(x)]1,[x]2)
e
(
[
c
(
x
)
]
1
−
[
v
]
1
+
γ
[
P
γ
(
x
)
]
1
,
[
1
]
2
)
=
e
(
[
P
γ
(
x
)
]
1
,
[
x
]
2
)
e([c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1,[1]_2)=e([P_{\gamma}(x)]_1,[x]_2)
e([c(x)]1−[v]1+γ[Pγ(x)]1,[1]2)=e([Pγ(x)]1,[x]2)
引入新的随机值
μ
∈
F
\mu\in \mathbb{F}
μ∈F,很容易将以上最后2个pairing等式batch为:
e
(
[
c
(
x
)
]
1
−
[
v
]
1
+
γ
[
P
γ
(
x
)
]
1
+
μ
(
[
A
(
x
)
]
1
−
[
A
(
0
)
]
1
)
,
[
1
]
2
)
=
e
(
[
P
γ
(
x
)
]
1
+
μ
[
P
A
(
x
)
]
1
,
[
x
]
2
)
e([c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1+\mu ([A(x)]_1-[A(0)]_1), [1]_2)=e([P_{\gamma}(x)]_1+\mu [P_A(x)]_1,[x]_2)
e([c(x)]1−[v]1+γ[Pγ(x)]1+μ([A(x)]1−[A(0)]1),[1]2)=e([Pγ(x)]1+μ[PA(x)]1,[x]2)
再引入
ρ
∈
F
\rho\in \mathbb{F}
ρ∈F,将其与第一个pairing等式batch,有:
e
(
[
P
γ
(
x
)
]
1
+
μ
[
P
A
(
x
)
]
1
,
[
x
]
2
)
⋅
e
(
ρ
[
P
B
(
x
)
]
1
,
[
x
N
−
m
+
1
]
2
)
=
e
(
[
c
(
x
)
]
1
−
[
v
]
1
+
γ
[
P
γ
(
x
)
]
1
+
μ
(
[
A
(
x
)
]
1
−
[
A
(
0
)
]
1
)
+
ρ
[
P
B
(
x
)
⋅
x
N
−
m
+
1
]
1
,
[
1
]
2
)
e([P_{\gamma}(x)]_1+\mu [P_A(x)]_1,[x]_2)\cdot e(\rho[P_B(x)]_1,[x^{N-m+1}]_2)=e([c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1+\mu ([A(x)]_1-[A(0)]_1)+\rho [P_B(x)\cdot x^{N-m+1}]_1,[1]_2)
e([Pγ(x)]1+μ[PA(x)]1,[x]2)⋅e(ρ[PB(x)]1,[xN−m+1]2)=e([c(x)]1−[v]1+γ[Pγ(x)]1+μ([A(x)]1−[A(0)]1)+ρ[PB(x)⋅xN−m+1]1,[1]2)
再引入
σ
∈
F
\sigma\in\mathbb{F}
σ∈F,将其与第二个pairing等式batch为单个pairing等式。定义:
L
a
=
[
P
γ
(
x
)
]
1
+
μ
[
P
A
(
x
)
]
1
L_a=[P_{\gamma}(x)]_1+\mu [P_A(x)]_1
La=[Pγ(x)]1+μ[PA(x)]1
L
b
=
ρ
[
P
B
(
x
)
]
1
L_b=\rho [P_B(x)]_1
Lb=ρ[PB(x)]1
L
c
=
σ
[
A
(
x
)
]
1
L_c=\sigma [A(x)]_1
Lc=σ[A(x)]1
L
d
=
−
σ
[
Q
A
(
x
)
]
1
L_d=-\sigma [Q_A(x)]_1
Ld=−σ[QA(x)]1
R
=
[
c
(
x
)
]
1
−
[
v
]
1
+
γ
[
P
γ
(
x
)
]
1
+
μ
(
[
A
(
x
)
]
1
−
[
A
(
0
)
]
1
)
+
ρ
[
P
B
(
x
)
⋅
x
N
−
m
+
1
]
1
+
σ
(
[
m
(
x
)
]
1
−
β
[
A
(
x
)
]
1
)
R=[c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1+\mu ([A(x)]_1-[A(0)]_1)+\rho [P_B(x)\cdot x^{N-m+1}]_1+\sigma ([m(x)]_1-\beta [A(x)]_1)
R=[c(x)]1−[v]1+γ[Pγ(x)]1+μ([A(x)]1−[A(0)]1)+ρ[PB(x)⋅xN−m+1]1+σ([m(x)]1−β[A(x)]1)
最终batch的单个pairing等式为:
e
(
L
a
,
[
x
]
2
)
⋅
e
(
L
b
,
[
x
N
−
m
+
1
]
2
)
⋅
e
(
L
c
,
[
T
(
x
)
]
2
)
⋅
e
(
L
d
,
[
Z
V
(
x
)
]
2
)
=
e
(
R
,
[
1
]
2
)
e(L_a,[x]_2)\cdot e(L_b, [x^{N-m+1}]_2)\cdot e(L_c,[T(x)]_2)\cdot e(L_d,[Z_V(x)]_2)=e(R,[1]_2)
e(La,[x]2)⋅e(Lb,[xN−m+1]2)⋅e(Lc,[T(x)]2)⋅e(Ld,[ZV(x)]2)=e(R,[1]2)
由于以上每个pairing函数中的第二个参数均只依赖于setup,具有相同setup的不同proofs,通过引入新的随机参数
χ
∈
F
\chi \in\mathbb{F}
χ∈F,来聚合为单个proof:
e
(
∑
k
χ
k
L
a
,
k
,
[
x
]
2
)
⋅
e
(
∑
k
χ
k
L
b
,
k
,
[
x
N
−
m
+
1
]
2
)
⋅
e
(
∑
k
χ
k
L
c
,
k
,
[
T
(
x
)
]
2
)
⋅
e
(
∑
k
χ
k
L
d
,
k
,
[
Z
V
(
x
)
]
2
)
=
e
(
∑
k
χ
k
R
k
,
[
1
]
2
)
e(\sum_k\chi ^kL_{a,k},[x]_2)\cdot e(\sum_k\chi^kL_{b,k},[x^{N-m+1}]_2)\cdot e(\sum_k\chi^kL_{c,k},[T(x)]_2)\cdot e(\sum_k\chi^kL_{d,k},[Z_V(x)]_2)=e(\sum_k\chi^kR_k,[1]_2)
e(∑kχkLa,k,[x]2)⋅e(∑kχkLb,k,[xN−m+1]2)⋅e(∑kχkLc,k,[T(x)]2)⋅e(∑kχkLd,k,[ZV(x)]2)=e(∑kχkRk,[1]2)
4.11 cq协议开销
不同于plookup协议,cq协议高度依赖KZG承诺方案。
cq协议的开销为:
- cq协议将plookup协议 O ( N log N ) O(N\log N) O(NlogN)复杂度移到了setup阶段,使得这些计算对同一table只需做一次。
- cq协议证明阶段计算完全依赖于 m m m,而可假设 m ≪ N m\ll N m≪N。【也就是说,若 m ≪ N m\ll N m≪N条件不成立,则没理由使用cq协议,plookup协议的性能会更佳。】
- cq协议Prover工作量为 O ( m log m ) O(m\log m) O(mlogm)。
- cq协议proof size和Verifier工作量均为常量。
5. lookup协议演进
本节将简要介绍由plookup到cq的改进点,并回顾二者之间的其它lookup协议。注意这些lookup协议都明确依赖KZG承诺方案。
5.1 Caulk
Arantxa Zapico等人2022年论文《 Caulk: Lookup arguments in sublinear time》提出了Caulk协议。
Caulk协议背后的核心思想为:
- (以 O ( N log N ) O(N\log N) O(NlogN))预计算table encoding,使得该table searchable in O ( log N ) O(\log N) O(logN)
- lookups也做类似的encoding,使得对其的查找复杂度为 O ( m log N ) O(m\log N) O(mlogN),证明该encoding的额外复杂度为 O ( m 2 ) O(m^2) O(m2)。
Caulk协议:
- 将table预计算为vanishing多项式:
Z T ( x ) = ∏ i = 1 N ( x − t i ) Z_T(x)=\prod_{i=1}^{N}(x-t_i) ZT(x)=∏i=1N(x−ti) - 将lookups类似计算为:
f ( x ) = ∏ j = 1 m ( x − f j ) f(x)=\prod_{j=1}^{m}(x-f_j) f(x)=∏j=1m(x−fj) - Prover发送 Z T , f Z_T,f ZT,f的承诺值。
- 将证明:对于
S
⊆
T
S\subseteq T
S⊆T,有
f
=
Z
S
f=Z_S
f=ZS
转换为证明: Z T ∖ S ( x ) = Z T ( x ) / Z S ( x ) Z_{T\setminus S}(x)=Z_T(x)/Z_S(x) ZT∖S(x)=ZT(x)/ZS(x)为一个多项式。 - 对于每个
i
=
1
,
⋯
N
i=1,\cdots N
i=1,⋯N,caulk会预计算多项式:
g i ( x ) = Z T ∖ t i ( x ) g_i(x)=Z_{T\setminus t_i}(x) gi(x)=ZT∖ti(x)
事实上,这些就是cq协议中的cached quotients。 - 若
S
⊆
T
S\subseteq T
S⊆T,则有某些数字
c
j
∈
F
c_j\in\mathbb{F}
cj∈F,使得
Z
T
∖
S
(
x
)
Z_{T\setminus S}(x)
ZT∖S(x)可分解表示为:
Z T ∖ S ( x ) = ∑ j = 1 m c j g i ( j ) ( x ) Z_{T\setminus S}(x)=\sum_{j=1}^{m}c_jg_i(j)(x) ZT∖S(x)=∑j=1mcjgi(j)(x)
Prover仅需要计算 Z T ∖ S ( x ) Z_{T\setminus S}(x) ZT∖S(x)多项式的承诺值,而Verifier仅需使用pairing检查:
e ( [ f ] , [ Z T ∖ S ] ) = e ( [ Z T ] , [ 1 ] ) e([f], [Z_{T\setminus S}])=e([Z_T],[1]) e([f],[ZT∖S])=e([ZT],[1])
5.2 Caulk+ 协议
Jim Posen等人2022年论文《Caulk+: Table-independent lookup arguments》中提出了Caulk+协议:
- Caulk协议中的主要缺点为:其将table看成是通用集合,而不是将其编码为某group。
- Caulk+ 协议:通过预计算table,改进了Caulk协议中的缺点。
- Caulk+ 将table看成是某multiplicative group,其初始值为group generator powers。
- 从而消除了计算中对 N N N的依赖,prover time仅为 O ( m 2 ) O(m^2) O(m2)。
5.3 Flookup 协议
Ariel Gabizon等人2022年论文《flookup: Fractional decompositionbased lookups in quasi-linear time independent of table size》提出了flookup协议:
- 将预处理开销增加到了 O ( N log 2 N ) O(N\log ^2 N) O(Nlog2N)
- 将Prover runtime降低到了 O ( m log 2 m ) O(m\log^2 m) O(mlog2m)
- 同时牺牲了承诺方案的同态属性,从而不支持将多个lookups和tables进行合并。
5.4 Baloo 协议
Arantxa Zapico等人2022年论文《Baloo: Nearly optimal lookup arguments》中提出了Baloo协议,其为Caulk+ 协议的优化版:
- 将lookups替换为a linear variant。
- 然后使用单变量sumcheck来证明其所承诺的多项式。
- 其预处理开销与Caulk+相同,为 O ( N log N ) O(N\log N) O(NlogN)。
- 其Prover开销与flookup相同,为 O ( m log 2 m ) O(m\log^2 m) O(mlog2m)。
- 由于Baloo协议中的constants更大,Baloo协议的实际开销要略高于flookup。但其保留了承诺方案的同态属性,从而支持将多个lookups和tables进行合并。
lookup系列博客
- PLOOKUP
- PLOOKUP代码解析
- Efficient polynomial commitment schemes for multiple points and polynomials学习笔记
- PLONK + PLOOKUP
- PlonKup: Reconciling PlonK with plookup
- PLONK: permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge 学习笔记
- Plonk代码解析
- RapidUp: Multi-Domain Permutation Protocol for Lookup Tables学习笔记
- Lookup argument总览
- Halo2 学习笔记——设计之Proving system之Lookup argument(1)
- logUp-Multivariate lookups based on logarithmic derivatives
- cq:fast lookup argument
- Lookup Argument性能优化——Caulk
- 2023年 ZK Hack以及ZK Summit 亮点记
- Research Day 2023:Succinct ZKP最新进展
- Lasso、Jolt 以及 Lookup Singularity——Part 1
- Lasso、Jolt 以及 Lookup Singularity——Part 2
- 深入了解Lasso+Jolt
- Lookup Singularity
- Halo2、Caulk+、Baloo、Cq Lookup argument细览