所谓“SHPLONK”,是指: “Kate” KZG10 scheme 的扩展版,实现了batch polynomial commitment scheme。
具体对应为: Boneh等人2020年论文 《Efficient polynomial commitment schemes for multiple points and polynomials》。
详细也可参见博客: Efficient polynomial commitment schemes for multiple points and polynomials学习笔记
SHPLONK的主要作用是: 仅使用1个单独的group element,可证明多个多项式 { f i ( X ) ∈ F q : i ∈ [ k ] } \{f_i(X)\in\mathbb{F}_q: i\in [k]\} {fi(X)∈Fq:i∈[k]} evaluated over a set of points S i ⊂ F q S_i\subset \mathbb{F}_q Si⊂Fq。
即允许每个多项式有自己的‘evaluation set’。
开源代码实现见:
- https://github.com/0xPolygonHermez/shplonkjs(Javascript)【Polygon zkEVM团队将SHPLONK多项式承诺方案与Fflonk协议集合使用,也可将SHPLONK多项式承诺方案独立使用。详情可参看博客 fflonK: a Fast-Fourier inspired verifier efficient version of PlonK。】
在Kate commitment 中使用的是symmetric pairing operation: e : G × G → G T e:\mathbb{G}\times\mathbb{G}\rightarrow \mathbb{G}_T e:G×G→GT
而asymmetric pairing 格式为: e : G 1 × G 2 → G T e:\mathbb{G}_1\times\mathbb{G}_2\rightarrow\mathbb{G}_T e:G1×G2→GT 其中 G 1 ≠ G 2 \mathbb{G}_1\neq\mathbb{G}_2 G1=G2,两者都为elliptic curve groups,且二者通常有相互关系。
1.2 将exponential表示为additiveg 1 ∈ G 1 g_1\in\mathbb{G}_1 g1∈G1为generator point,其5次方表示为 g 1 5 g_1^5 g15,将其转换为additive表示为: [ 5 ] 1 [5]_1 [5]1,这种表示方法由Jens Groth在其Groth16论文中提出。 同理,对于generator g 2 ∈ G 2 g_2\in\mathbb{G}_2 g2∈G2,其3次方表示为 [ 3 ] 2 [3]_2 [3]2,而不是 g 2 3 g_2^3 g23。
2. 构建SHPLONK主要内容有:
- k k k个多项式: { f i ( X ) ∈ F q : i ∈ [ k ] } \{f_i(X)\in\mathbb{F}_q: i\in [k]\} {fi(X)∈Fq:i∈[k]}
- k k k个evaluation point sets: { S i ⊂ F q : i ∈ [ k ] } \{S_i\subset \mathbb{F}_q: i\in[k]\} {Si⊂Fq:i∈[k]}。对于每个 i i i, f i f_i fi将evaluate over the points in S i S_i Si。( S i S_i Si中通常有1个或多个points)
- 将所有感兴趣的points收集表示为: T = ∪ i k S i T=\cup_i^k S_i T=∪ikSi, T T T为 F q \mathbb{F}_q Fq的一个tiny subset,同时可表示为 T = { t 1 , ⋯ , t m } T=\{t_1,\cdots,t_m\} T={t1,⋯,tm}。
- 构建 k k k个多项式: { r i ( X ) ∈ F < ∣ S i ∣ : i ∈ [ k ] } \{r_i(X)\in\mathbb{F}_{ t >>t >>t, t t t为the maximum number of evaluation points, S R S SRS SRS的格式为: < [ 1 ] 1 , [ α ] 1 , [ α 2 ] 1 , ⋯ , [ α d ] 1 , [ 1 ] 2 , [ α ] 2 , [ α 2 ] 2 , ⋯ , [ α t ] 2 >
对 k k k个多项式分别进行commit: C i = [ f i ( α ) ] 1 = ∑ j ≥ 0 a i [ α i ] 1 C_i=[f_i(\alpha)]_1=\sum_{j\geq 0}a_i[\alpha^i]_1 Ci=[fi(α)]1=∑j≥0ai[αi]1 也可表示为: C i = g 1 f i ( α ) = ∏ j ≥ 0 ( g α i ) a i C_i=g_1^{f_i(\alpha)}=\prod_{j\geq 0}(g^{\alpha^i})^{a_i} Ci=g1fi(α)=∏j≥0(gαi)ai 该commitment具有 加法同态属性。
k k k个多项式的commitment表示为: C o m = < C 1 , ⋯ , C k > Com= Com=
以一个多项式 f 1 ( X ) f_1(X) f1(X)为例: 与Kate commitment将evaluate at s 1 s_1 s1并证明可整除 X − s 1 X-s_1 X−s1的表示方法异曲同工,SHPLONK将 f 1 ( X ) f_1(X) f1(X)的evaluation set表示为 S 1 = { s 1 } S_1=\{s_1\} S1={s1},引入多项式 r 1 ( X ) = f 1 ( s 1 ) r_1(X)=f_1(s_1) r1(X)=f1(s1),因为仅固定了一个点,该多项式为常量多项式。若固定两个点,则该多项式为线性多项式。 若evaluation set为 S 1 = { s 1 , s 2 } S_1=\{s_1,s_2\} S1={s1,s2},则 r 1 ( X ) r_1(X) r1(X)的degree为1,且有 f 1 ( X ) − r 1 ( X ) f_1(X)-r_1(X) f1(X)−r1(X)可整除 ( X − s 1 ) ( X − s 2 ) (X-s_1)(X-s_2) (X−s1)(X−s2)。
扩展为: 1)为每个 f i ( X ) f_i(X) fi(X)多项式引入相应的 r i ( X ) r_i(X) ri(X)多项式。 同时, r i ( X ) r_i(X) ri(X)基于Lagrange多项式构建,(Lagrange多项式为ugly-to-make, lovely-to-use),使得: L s , S i ( X ) = { 1 : X = s 0 : X ∈ S i ∖ { s } L_{s,S_i}(X)=\begin{cases} 1 & :X=s \\ 0 & :X\in S_i\setminus \{s\} \end{cases} Ls,Si(X)={10:X=s:X∈Si∖{s} 从而将 r i ( X ) r_i(X) ri(X)表示为: r i ( X ) = ∑ s ∈ S i f i ( s ) ⋅ L s , S i ( X ) r_i(X)=\sum_{s\in S_i}f_i(s)\cdot L_{s,S_i}(X) ri(X)=∑s∈Sifi(s)⋅Ls,Si(X)
2)将所有的多项式 f i ( X ) f_i(X) fi(X)合并为一个多项式 F ( X ) F(X) F(X): F ( X ) = ∑ i = 1 k γ i − 1 ⋅ f i ( X ) F(X)=\sum_{i=1}^k\gamma^{i-1}\cdot f_i(X) F(X)=∑i=1kγi−1⋅fi(X) 其中 γ \gamma γ值对Prover和Verifier双方均可知,同时,Prover无法控制 γ \gamma γ值。
2.2 proveProver和Verifier均很容易计算: Z S i ( X ) = ∏ s ∈ S i ( X − s ) Z_{S_i}(X)=\prod_{s\in S_i}(X-s) ZSi(X)=∏s∈Si(X−s)
Prover需计算quotient多项式: h ( X ) = ∑ i = 1 k γ i − 1 ⋅ f i ( X ) − r i ( X ) Z S i ( X ) h(X)=\sum_{i=1}^{k}\gamma^{i-1}\cdot \frac{f_i(X)-r_i(X)}{Z_{S_i}(X)} h(X)=∑i=1kγi−1⋅ZSi(X)fi(X)−ri(X) 对应每个 f i ( X ) f_i(X) fi(X)的quotient多项式 h i ( X ) h_i(X) hi(X)为: h i ( X ) = f i ( X ) − r i ( X ) Z S i ( X ) h_i(X)=\frac{f_i(X)-r_i(X)}{Z_{S_i}(X)} hi(X)=ZSi(X)fi(X)−ri(X)
从而有an evaluation proof for all f i ( X ) f_i(X) fi(X) over their respective evaluation sets S i S_i Si表示为: W = [ h ( α ) ] 1 = ∑ i = 1 k γ i − 1 ⋅ W i W=[h(\alpha)]_1=\sum_{i=1}^{k}\gamma^{i-1}\cdot W_i W=[h(α)]1=∑i=1kγi−1⋅Wi
2.3 verifyVerifier为每个set S i ⊂ T S_i\subset T Si⊂T( T T T为所有 S i S_i Si set的集合)计算: Z T ∖ S i ( X ) Z_{T\setminus S_i}(X) ZT∖Si(X) T T T集合的个数表示为 t = ∣ T ∣ t=|T| t=∣T∣,可根据Reference String中的 G 2 \mathbb{G}_2 G2points,计算: [ Z T ∖ S i ( X ) ] 2 [Z_{T\setminus S_i}(X)]_2 [ZT∖Si(X)]2
最终,Verifier仅需验证如下等式成立即可: ∏ i = 1 k e ( γ i − 1 ⋅ ( C i − [ r i ( α ) ] 1 ) , [ Z T ∖ S i ( α ) ] 2 ) = e ( W , [ Z T ( α ) ] 2 ) \prod_{i=1}^{k}e(\gamma^{i-1}\cdot (C_i-[r_i(\alpha)]_1), [Z_{T\setminus S_i(\alpha)}]_2)=e(W,[Z_T(\alpha)]_2) ∏i=1ke(γi−1⋅(Ci−[ri(α)]1),[ZT∖Si(α)]2)=e(W,[ZT(α)]2) 其中, W = ∑ i = 1 k γ i − 1 ⋅ W i W=\sum_{i=1}^{k}\gamma^{i-1}\cdot W_i W=∑i=1kγi−1⋅Wi。
相比于单独对每个 f i ( X ) f_i(X) fi(X)进行验证需要 2 k 2k 2k次pairing计算,此时仅需 k + 1 k+1 k+1次pairing计算。
3. SHPLONK应用在 ZCash 的 Halo2算法之multipoint opening 中借鉴了SHPLONK算法。
参考资料[1] tompocock的hackmd shplonk笔记 [2] tompocock的hackmd Kate Commitments: A Primer [3] Boneh等人2020年论文 Efficient polynomial commitment schemes for multiple points and polynomials [4] Aztec以及Geometry创始人 Walpo 2021年 hackmdSHPLONK