1. 引言
前序博客有:
- 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代码解析
要点:
- 1)采用 2020年论文Efficient polynomial commitment schemes for multiple points and polynomials中类似(详细可参看博客Efficient polynomial commitment schemes for multiple points and polynomials学习笔记)的多项式承诺方案,支持query多个多项式at多个points。
- 2)在多项式协议中引入了一个可信第三方 I \mathcal{I} I,Prover与Verifier无法用Schwartz-Zippel Lemma实现非交互式,Prover必须与Verifier交互,且其交互的某个值依赖于 Prover与可信第三方 I \mathcal{I} I的至少某一个消息。
Polygon zero团队 Daniel Lubarov 和 Polygon zkEVM团队 Jordi Baylina 2022年9月联合发表的论文 《RapidUp: Multi-Domain Permutation Protocol for Lookup Tables》。
某些标准的密码学原语中包含了大量SNARK-unfriendly运算——如XOR运算。Gabizon等人2020年论文《plookup: A simplified polynomial protocol for lookup tables》,为解决这种SNARK-unfriendly运算,设计的协议中引入了lookup arguments——但是该协议仅适合用于相同的电路。本文的RapidUp协议,通过将grand-product多项式展开为2个具有相同size的(等价)多项式,不受限于相同电路。通过引入selectors,也可以让plookup协议更通用化。
2019年 Plonk 论文中包含了一种协议,用于证明,2个多项式基于某evaluation domain形成的evaluation vector,二者互为permutation。该协议后来进一步扩展为多个多项式,在Plonk主协议中用于证明各circuit gates是正确连接的。
通过构建“grand-product”多项式来实现permutation check。从上层来看,grand-product为所涉及的多项式evaluations的quotient的递增乘积。若该多项式的最后一个evaluation可正确cycle back为1,则可证明原始的evaluations之间互为permutation。
上述协议存在的一个主要问题在于,无法对 对不同的(可能相互关联的) domain的evaluate进行实例化。多项式 f f f和 g g g之间的permutation check仅适合 对相同的domain H H H进行evaluate 的场景。
本文对基于grand-product的协议 以2种不同方式进行了通用化改进:
- 1)各多项式可基于不同的domain进行evaluate,各domain甚至可具有不同的size。
- 2)适合原始evaluations之间相互不是permutation,但包含了该permutation的场景——即适合original values不是permute "in its whole"的情况。
如,具有集合 f = { 5 , 4 , 2 , 5 } f=\{5,4,2,5\} f={5,4,2,5}(某多项式基于domain size为 m m m的evaluation集合)以及 g = { 9 , 7 , 5 , 8 , 5 , 1 , 6 , 9 , 4 } g=\{9,7,5,8,5,1,6,9,4\} g={9,7,5,8,5,1,6,9,4}(某多项式基于domain size为 n n n的evaluation集合),二者当前不存在直接的permutation关系。
本文协议,可证明 f f f的某特定子集 f ′ f' f′,与, g g g的某特定子集 g ′ g' g′,二者存在permutation关系。本例中, f ′ = { 5 , 4 , 5 } , g ′ = { 5 , 5 , 4 } f'=\{5,4,5\},g'=\{5,5,4\} f′={5,4,5},g′={5,5,4},二者permutation关系为 ( 1 , 3 , 2 ) (1,3,2) (1,3,2)。【注意, f , g f,g f,g的长度可不同,但 f ′ , g ′ f',g' f′,g′的长度是相同的。】
本协议的核心思想是,将grand-product多项式 Z Z Z“切分”为2个多项式 Z f , Z g Z_f,Z_g Zf,Zg——代表 Z Z Z中的2个quotient member。若在某evaluation point,多项式 Z Z Z的值为 A / B A/B A/B,则在某(可能不同的)evaluation point,多项式 Z f , Z g Z_f,Z_g Zf,Zg的值分别为 A , B A,B A,B。根据 Z Z Z的结构,这2个多项式的最后一个evaluation值要求是相等的。
为定义该多项式,需额外引入2个selectors集合 f s e l , g s e l f^{sel},g^{sel} fsel,gsel:
- 这些selectors可选择每个 f , g f,g f,g中的indexes,以包含在待permutation check的子集 f ′ , g ′ f',g' f′,g′中。
- 若某index被选中,相应selector值为1,否则为0。仍以上例为例,有 f s e l = { 1 , 1 , 0 , 1 } , g s e l = { 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 } f^{sel}=\{1,1,0,1\},g^{sel}=\{0,0,1,0,1,0,0,0,1\} fsel={1,1,0,1},gsel={0,0,1,0,1,0,0,0,1}。
至此,基于不同的evaluation domain, Z f , Z g Z_f,Z_g Zf,Zg的evaluation值定义为:
- Z f → { 1 , ( 5 + γ ) , ( 5 + γ ) ( 4 + γ ) , ( 5 + γ ) ( 4 + γ ) , ( 5 + γ ) ( 4 + γ ) ( 5 + γ ) } Z_f\rightarrow \{1,(5+\gamma),(5+\gamma)(4+\gamma), (5+\gamma)(4+\gamma),(5+\gamma)(4+\gamma)(5+\gamma)\} Zf→{1,(5+γ),(5+γ)(4+γ),(5+γ)(4+γ),(5+γ)(4+γ)(5+γ)}
- Z g → { 1 , 1 , 1 , ( 5 + γ ) , ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) ( 4 + γ ) } Z_g\rightarrow \{1,1,1,(5+\gamma),(5+\gamma),(5+\gamma)(5+\gamma), (5+\gamma)(5+\gamma), (5+\gamma)(5+\gamma), (5+\gamma)(5+\gamma),(5+\gamma)(5+\gamma)(4+\gamma)\} Zg→{1,1,1,(5+γ),(5+γ),(5+γ)(5+γ),(5+γ)(5+γ),(5+γ)(5+γ),(5+γ)(5+γ),(5+γ)(5+γ)(4+γ)}
其中 γ \gamma γ为基于底层域的随机值。
以上2个多项式的最后一个值为相同的product value。相应的思想为:当且仅当 Z f , Z g Z_f,Z_g Zf,Zg 最后一个evaluate值相同时,subset { 5 , 4 , 5 } ⊂ { f i } \{5,4,5\}\subset \{f_i\} {5,4,5}⊂{fi} 也为subset in { g i } \{g_i\} {gi}。
1.1 用例:Lookup Tables
本协议可用于lookup tables场景。
lookup技术可用于reduce某些标准密码学原语的原生SNARK表示(如Keccak-256)。从上层来看,该技术是通过将某特定“SNARK-unfriendly”运算的所有可能输入/输出组合 预计算出 一个lookup table。不同于以某SNARK语言来表示这些运算,Prover只需声称相应的witness在相应的查找表中。
plookup 协议提供了一种简单高效的实现方案。存在的主要的问题在于在lookup中包含了vectors——witness-related的 f f f 与 table-related t t t 之间需具有相近的length——如,可用于满足 ∣ t ∣ = ∣ f ∣ + 1 |t|=|f|+1 ∣t∣=∣f∣+1的2个向量 f , t f,t f,t之间。在2022年论文《PlonKup: Reconciling PlonK with plookup》中,以不同的方法(即填充)来调整该限制。同时,当 f , t f,t f,t具有相同的length时,在PlonKup论文中可构建具有更少约束的更简单的lookup协议。
但是,仍然存在某些场景, f , t f,t f,t并不具有相近的长度。某传统场景中, ∣ f ∣ |f| ∣f∣可为small power of two,而 t t t可为big power of two。之前的协议就存在瓶颈了——需对 f f f的长度进行调整,如对 f f f填充其最后一个元素,使其填充后的长度适于PlonKup协议。但是 ,该调整将影响Prover和Verifier双方的效率,主要是影响Prover端的效率。
在本文中,提供了一种length问题的解决方案。
2. 相关约定
已知
n
∈
N
n\in\mathbb{N}
n∈N,以
[
n
]
[n]
[n]来表示集合
{
1
,
2
,
⋯
,
n
}
\{1,2,\cdots,n\}
{1,2,⋯,n}。
已知合适的
n
,
m
∈
Z
0
+
n,m\in \mathbb{Z}_0^{+}
n,m∈Z0+,以
[
n
,
m
]
[n,m]
[n,m]来表示集合
{
n
,
n
+
1
,
n
+
2
,
⋯
m
}
\{n,n+1,n+2,\cdots m\}
{n,n+1,n+2,⋯m}。
令field
F
\mathbb{F}
F具有prime order,以
F
∗
\mathbb{F}^{*}
F∗来表示相应的multiplicative group。
F
<
n
[
X
]
\mathbb{F}_{<n}[X]
F<n[X]为基于
F
\mathbb{F}
F的单变量多项式集合,其degree均小于
n
n
n。
对于某多项式
f
∈
F
<
n
[
X
]
f\in \mathbb{F}_{<n}[X]
f∈F<n[X],对某
i
∈
[
n
]
i\in [n]
i∈[n],定义:
f
i
=
f
(
w
i
)
f_i=f(w^i)
fi=f(wi)。
F \mathbb{F} F的某multiplicative subgroup H H H,其order为 N N N,generator为 w w w。 H 2 H^2 H2表示该集合内的每个元素为 H H H中每个元素的平方。 H 2 h H^{2^h} H2h表示该集合内的每个元素为 H H H中每个元素的 2 h 2^h 2h次方。
对于某子集
H
⊂
F
∗
H\subset \mathbb{F}^*
H⊂F∗,vanishing多项式定义为:
Z
H
(
X
)
=
∏
x
∈
H
(
X
−
x
)
Z_H(X)=\prod_{x\in H}(X-x)
ZH(X)=∏x∈H(X−x)。
2.1 Lagrange多项式
对于degree小于
n
n
n的多项式
f
(
X
)
=
a
0
+
a
1
X
+
a
2
X
2
+
⋯
+
a
n
−
1
X
n
−
1
f(X)=a_0+a_1X+a_2X^2+\cdots +a_{n-1}X^{n-1}
f(X)=a0+a1X+a2X2+⋯+an−1Xn−1,选
n
n
n个不同的插值点——
(
x
0
,
f
(
x
0
)
)
,
(
x
1
,
f
(
x
1
)
,
⋯
,
(
x
n
−
1
,
f
(
x
n
−
1
)
)
)
(x_0,f(x_0)),(x_1,f(x_1),\cdots,(x_{n-1},f(x_{n-1})))
(x0,f(x0)),(x1,f(x1),⋯,(xn−1,f(xn−1))),可唯一确定该多项式:
f
(
X
)
=
∑
i
=
0
n
(
∏
j
=
0
,
j
≠
i
n
X
−
x
j
x
i
−
x
j
)
⋅
f
(
x
i
)
=
∑
i
=
0
n
L
i
(
X
)
⋅
f
(
x
i
)
f(X)=\sum_{i=0}^n (\prod_{j=0,j\neq i}^{n}\frac{X-x_j}{x_i-x_j})\cdot f(x_i)=\sum_{i=0}^{n}L_i(X)\cdot f(x_i)
f(X)=∑i=0n(∏j=0,j=inxi−xjX−xj)⋅f(xi)=∑i=0nLi(X)⋅f(xi)
当采样点为
(
w
0
,
w
1
,
w
2
,
⋯
,
w
n
−
1
)
(w^0,w^1,w^2,\cdots,w^{n-1})
(w0,w1,w2,⋯,wn−1)(构成domain
H
H
H),其中
w
w
w为generator,满足
w
n
=
1
w^n=1
wn=1时,Lagrange插值多项式
L
i
(
X
)
L_i(X)
Li(X)表示为:
L
i
(
X
)
=
∏
j
=
0
,
j
≠
i
n
X
−
x
j
x
i
−
x
j
=
(
X
−
w
0
)
⋅
(
X
−
w
1
)
⋯
(
X
−
w
i
−
1
)
⋅
(
X
−
w
i
+
1
)
⋯
(
X
−
w
n
−
1
)
(
x
i
−
w
0
)
⋅
(
x
i
−
w
1
)
⋯
(
x
i
−
w
i
−
1
)
⋅
(
x
i
−
w
i
+
1
)
⋯
(
x
i
−
w
n
−
1
)
=
w
i
(
X
n
−
1
)
n
(
X
−
w
i
)
L_i(X)=\prod_{j=0,j\neq i}^{n}\frac{X-x_j}{x_i-x_j}=\frac{(X-w^0)\cdot (X-w^1)\cdots (X-w^{i-1})\cdot (X-w^{i+1})\cdots (X-w^{n-1})}{(x_i-w^0)\cdot (x_i-w^1)\cdots (x_i-w^{i-1})\cdot (x_i-w^{i+1})\cdots (x_i-w^{n-1})}=\frac{w^i(X^n-1)}{n(X-w^i)}
Li(X)=∏j=0,j=inxi−xjX−xj=(xi−w0)⋅(xi−w1)⋯(xi−wi−1)⋅(xi−wi+1)⋯(xi−wn−1)(X−w0)⋅(X−w1)⋯(X−wi−1)⋅(X−wi+1)⋯(X−wn−1)=n(X−wi)wi(Xn−1)
满足:
- L i ( w i ) = 1 L_i(w^i)=1 Li(wi)=1
- L i ( w j ) = 0 L_i(w^j)=0 Li(wj)=0 for j ≠ i j\neq i j=i
从而有Claim 1:
- 已知 i ∈ [ n ] i\in [n] i∈[n]且 f , g ∈ F [ X ] f,g\in \mathbb{F}[X] f,g∈F[X],当且仅当 f ( w i ) = g ( w i ) f(w^i)=g(w^i) f(wi)=g(wi)时,对所有的 x ∈ H x\in H x∈H,有 L i ( x ) ( f ( x ) − g ( x ) ) = 0 L_i(x)(f(x)-g(x))=0 Li(x)(f(x)−g(x))=0成立。
generator w w w还很适合用于表示“相邻值”的约束,即:
- 约束 f ( X ⋅ w 2 ) = f ( X ⋅ w ) + f ( X ) f(X\cdot w^2)=f(X\cdot w)+f(X) f(X⋅w2)=f(X⋅w)+f(X),表示 f f f的相邻三个值遵循Fibonacci序列要求。
2.2 多项式承诺方案
本文的多项式承诺方案定义与 2020年论文Efficient polynomial commitment schemes for multiple points and polynomials中类似(详细可参看博客Efficient polynomial commitment schemes for multiple points and polynomials学习笔记),定义的为支持batched设置的多项式承诺方案,支持query多个多项式at多个points。
Definition 1:
其中的open协议满足如下属性:
- 完备性
- knowledge soundness in the algebraic group model