sum-check protocol in zkproof
1. 引言
sum-check protocol首次由Lund等人在1992年论文《Algebraic Methods for Interactive Proof Systems》中提出。
sum-check protocol的价值在当前的ZKProofs community是被低估了的,被低估的原因主要有:
- sum-check protocol 的proof size至少为logarithmic length,对于区块链等对存储敏感的应用,关注的是能提供super short proofs的算法(如 Gennaro等人2012年论文《Quadratic Span Programs and Succinct NIZKs without PCPs》基于pairing的zkSNARKs算法可提供constant proof length)。
- sum-check protocol本身并既不具有zero-knowledge属性,也不具有“succinct for NP statements”。即对于NP statements,通过sum-check protocol实现的proof length is not sublinear in the size of the NP witness。
当前有强证据表明,对于NP statements,不存在succinct interactive proof。这不同于argument system,对于argument system,仅具有computationally sound。
要点:
- 借助sum-check protocol可实现super-efficient IP for matrix-powering。如已知任意的n×nn\times nn×n矩阵AAA over field F\mathbb{F}F,该IP可计算any desired entry of the powered matrix AkA^kAk。整个IP的round和communication cost为O(log(k)⋅logn)O(\log(k)\cdot \log n)O(log(k)⋅logn),而verifier的runtime为O(n2+log(k)⋅logn)O(n^2+\log(k)\cdot \log n)O(n2+log(k)⋅logn)。
- Goldwasser, Kalai和Rothblum (GKR) 2008年论文《Delegating Computation: Interactive Proofs for Muggles》中正是利用了matrix-powering protocol 实现了arithmetic circuit证明。
近几年的研究中指出,将sum-check protocol与cryptographic commitments结合,可实现arguments——同时具有zero-knowledge属性和succinct for NP statements。实现的相关zk-SNARKs具有state of the art performance,如Hyrax, zk-VSQL, Libra, Virgo, Spartan。
若对zk-SNARKs感兴趣且对具有logarithmic length的proof size满意,可对sum-check protocol进行深入学习。
本文主要关注的是interactive proofs (IPs),关注的场景为:
Verifier VVV 将 expensive computation 外包给 an untrusted prover PPP,从而节约verifier的工作量。
要求:
- verifier VVV的验证工作量为run in time linear in the input size。
- proof size 为short的(logarithmic size)。
- prover PPP 为efficient的。
1.1 多项式及其low-degree extension
- polynomial G\mathcal{G}G over F\mathbb{F}F 表示的是:
monomials(单项式)之和
其中每个单项式是 the product of a constant (from F\mathbb{F}F) and powers of one or more variables (which take values from F\mathbb{F}F)。所有的计算都performed over F\mathbb{F}F。 - 单项式的degree为:the sum of the exponents of variables in the monomial。
- 多项式的degree为:the maximum degree of any monomial in G\mathcal{G}G。
- 多项式的degree in a particular variable xix_ixi为:the maximum exponent that xix_ixi takes in any of the monomials in G\mathcal{G}G。
- 多变量多项式是指:具有不只一个变量的多项式。只有一个变量的多项式称为univariate polynomial单变量多项式。
- multilinear polynomial是指:多变量多项式的任一变量的degree均不大于1.
- low-degree polynomial是指:多变量多项式G\mathcal{G}G over a finite field F\mathbb{F}F 的degree in each variable is exponentially smaller than ∣F∣|\mathbb{F}|∣F∣。
- Low-degree extensions (LDEs)是指:假设g:{0,1}m→Fg:\{0,1\}^m\rightarrow \mathbb{F}g:{0,1}m→F为a function that maps mmm-bit elements into an element of F\mathbb{F}F。 A polynomial extension of ggg is a low-degree mmm-variate polynomial g~(⋅)\tilde{g}(\cdot)g~(⋅) 使得 g~(x)=g(x)\tilde{g}(x)=g(x)g~(x)=g(x) for all x∈{0,1}mx\in\{0,1\}^mx∈{0,1}m。
【若g~(x)\tilde{g}(x)g~(x)为multilinear polynomial (degree at most 1 in each variable),则low-degree extension也可成为multilinear polynomial extension。】 - multilinear polynomial extension (简称为MLE) 是指:Given a function Z:{0,1}m→FZ:\{0,1\}^m\rightarrow \mathbb{F}Z:{0,1}m→F,the multilinear extension of Z(⋅)Z(\cdot)Z(⋅) is the unique multilinear polynomial Z~:Fm→F\tilde{Z}: \mathbb{F}^m\rightarrow \mathbb{F}Z~:Fm→F。计算方式为:
Z~(x1,⋯,xm)=∑e∈{0,1}mZ(e)⋅∏i=1m(xi⋅ei+(1−xi)⋅(1−ei))=∑e∈{0,1}mZ(e)⋅eq~(x,e)=<(Z(0),⋯,Z(2m−1)),(eq~(x,0),⋯,eq~(x,2m−1))>\tilde{Z}(x_1,\cdots,x_m)=\sum_{e\in\{0,1\}^m}Z(e)\cdot \prod_{i=1}^{m}(x_i\cdot e_i+(1-x_i)\cdot (1-e_i))=\sum_{e\in\{0,1\}^m}Z(e)\cdot \tilde{eq}(x,e)=<(Z(0),\cdots,Z(2^m-1)), (\tilde{eq}(x,0),\cdots, \tilde{eq}(x,2^m-1))>Z~(x1,⋯,xm)=∑e∈{0,1}mZ(e)⋅∏i=1m(xi⋅ei+(1−xi)⋅(1−ei))=∑e∈{0,1}mZ(e)⋅eq~(x,e)=<(Z(0),⋯,Z(2m−1)),(eq~(x,0),⋯,eq~(x,2m−1))>
其中eq~(x,e)=∏i=1m(ei⋅xi+(1−ei)⋅(1−xi))\tilde{eq}(x,e)=\prod_{i=1}^{m}(e_i\cdot x_i+(1-e_i)\cdot (1-x_i))eq~(x,e)=∏i=1m(ei⋅xi+(1−ei)⋅(1−xi)),eq~(x,e)\tilde{eq}(x,e)eq~(x,e) is the MLE of the following function:
eq(x,e)={1if x=e0otherwiseeq(x,e)= \left\{\begin{matrix} 1 & \text{if x=e} \\ 0 &\text{otherwise} \end{matrix}\right.eq(x,e)={10if x=eotherwise
对于任一的r∈Fmr\in\mathbb{F}^mr∈Fm,可在O(2m)O(2^m)O(2m)次operations in F\mathbb{F}F 之内计算出Z~(r)\tilde{Z}(r)Z~(r)的值。
由于a function的MLE是唯一的,因此MLE可用于represent 任意的multilinear polynomial。对于a multilinear polynomial G(⋅):Fm→F\mathcal{G}(\cdot):\mathbb{F}^m\rightarrow \mathbb{F}G(⋅):Fm→F,可唯一表示为 the list of evaluations of G(⋅)\mathcal{G}(\cdot)G(⋅) over the Boolean hypercube {0,1}m\{0,1\}^m{0,1}m (如a function that maps {0,1}m→F\{0,1\}^m\rightarrow \mathbb{F}{0,1}m→F)。
其中关键的技术点——multilinear extension lemma(follow from Lagrange interpolation):【引入multilinear extension可ensure fast computation for the prover。】
设f:{0,1}n→Ff:\{0,1\}^n\rightarrow \mathbb{F}f:{0,1}n→F,则存在唯一的multilinear polynomial f~\tilde{f}f~ over F\mathbb{F}F 使得 f~(x)=f(x)\tilde{f}(x)=f(x)f~(x)=f(x) for all x∈{0,1}nx\in\{0,1\}^nx∈{0,1}n。
f~\tilde{f}f~称为the multilinear extension (MLE) of fff。
若已知a list of all 2n2^n2n evaluations of fff 和 an arbitrary point r⃗∈Fn\vec{r}\in\mathbb{F}^nr∈Fn,则存在an algorithm that can evaluate f~(r⃗)\tilde{f}(\vec{r})f~(r) in O(2n)O(2^n)O(2n) time。
2. the sum-check protocol
有:
vvv-variate polynomial ggg defined over a finite field F\mathbb{F}F。
此处约定ggg具有degree at most 2 in each variable。【而对于multilinear polynomial,则要求degree at most 111 in each variable。】
sum-check protocol的主要目标是求和:
H:=∑b1∈{0,1}∑b2∈{0,1}⋯∑bv∈{0,1}g(b1,⋯,bv)H:=\sum_{b_1\in\{0,1\}}\sum_{b_2\in\{0,1\}}\cdots\sum_{b_v\in\{0,1\}}g(b_1,\cdots,b_v)H:=∑b1∈{0,1}∑b2∈{0,1}⋯∑bv∈{0,1}g(b1,⋯,bv) ……(1)
以上(1)方程式本质是 sum up the evaluations of a polynomial over all Boolean inputs,初看该求和似乎并不实用,但是后续介绍中会指出many natural problems可转化为an inatance of Equation (1)。
【借助sum-check protocol,Verifier不需要evaluate the entire boolean hypercube to verify the claim。相反的,Verifier仅需选择random points (r1,r2,rv)(r_1,r_2,r_v)(r1,r2,rv)。】
为了便于理解,可假设Verifier具有oracle access to ggg,即 VVV可evaluate g(r1,⋯,rv)g(r_1,\cdots,r_v)g(r1,⋯,rv) for a randomly chosen vector (r1,⋯,rv)∈Fv(r_1,\cdots,r_v)\in\mathbb{F}^v(r1,⋯,rv)∈Fv with a single query to an oracle,尽管在实际应用中该假设不成立。实际应用中,VVV可自己efficiently evaluate g(r1,⋯,rv)g(r_1,\cdots,r_v)g(r1,⋯,rv),或者要求Prover告诉它g(r1,⋯,rv)g(r_1,\cdots,r_v)g(r1,⋯,rv)的结果值的同时,PPP提供该结果值正确的证明(借助the sum-checkprotocol)。
整个sum-check protocol包含vvv轮,每一轮对应ggg中的一个变量。
第1轮:
- Prover:发送polynomial g1(X1)g_1(X_1)g1(X1),同时声明g1(X1)=∑x2,⋯,xv∈{0,1}v−1g(X1,x2,⋯,xv)g_1(X_1)=\sum_{x_2,\cdots,x_v\in\{0,1\}^{v-1}}g(X_1,x_2,\cdots,x_v)g1(X1)=∑x2,⋯,xv∈{0,1}v−1g(X1,x2,⋯,xv)。
若g1g_1g1是正确的,则有H=g1(0)+g1(1)H=g_1(0)+g_1(1)H=g1(0)+g1(1)。
【本文约定了该单变量多项式degree为不高于222,gj(Xj)=c0,j+c1,jXj+c2,jXj2g_j(X_j)=c_{0,j}+c_{1,j}X_j+c_{2,j}X_j^2gj(Xj)=c0,j+c1,jXj+c2,jXj2,可以系数(c0,j,c1,j,c2,j)(c_{0,j},c_{1,j},c_{2,j})(c0,j,c1,j,c2,j)来表示多项式gjg_jgj,或者以[(b1,gj(b1)),(b2,gj(b2)),(b3,gj(b3))][(b_1,g_j(b_1)),(b_2,g_j(b_2)),(b_3,g_j(b_3))][(b1,gj(b1)),(b2,gj(b2)),(b3,gj(b3))] 这样的3组eavaluations值 来表示。】【即每轮Prover将发送3个field elements。】【Hyrax以及Spartan论文中引入了extension eq~(t,x)\tilde{eq}(t,x)eq~(t,x),因此gj(Xj)=c0,j+c1,jXj+c2,jXj2+c3,jXj3g_j(X_j)=c_{0,j}+c_{1,j}X_j+c_{2,j}X_j^2+c_{3,j}X_j^3gj(Xj)=c0,j+c1,jXj+c2,jXj2+c3,jXj3 的degree 为3,但是不影响总体理解。所以本博文后续都是以degree为2举例的。】 - Verifier:
验证H=g1(0)+g1(1)H=g_1(0)+g_1(1)H=g1(0)+g1(1)是否成立,若成立,则发送random challenege r1←Fr_1\leftarrow \mathbb{F}r1←F。
第2轮:
- Prover:发送polynomial g2(X2)g_2(X_2)g2(X2),同时声明g2(X2)=∑(x3,⋯,xv)v−2g(r1,X2,x3,⋯,xv)g_2(X_2)=\sum_{(x_3,\cdots,x_v)^{v-2}}g(r_1,X_2,x_3,\cdots,x_v)g2(X2)=∑(x3,⋯,xv)v−2g(r1,X2,x3,⋯,xv)。
若g2g_2g2是正确的,则有g2(0)+g2(1)=g1(r1)g_2(0)+g_2(1)=g_1(r_1)g2(0)+g2(1)=g1(r1)。 - Verifier:
验证g2(0)+g2(1)=g1(r1)g_2(0)+g_2(1)=g_1(r_1)g2(0)+g2(1)=g1(r1)是否成立,若成立,则发送random challenege r2←Fr_2\leftarrow \mathbb{F}r2←F。
⋮\vdots⋮
第j>1j>1j>1轮:
- Prover:发送polynomial gj(Xj)g_j(X_j)gj(Xj),同时声明gj(Xj)=∑(xj+1,⋯,xv)v−jg(r1,⋯,rj−1,Xj,xj+1,⋯,xv)g_j(X_j)=\sum_{(x_{j+1},\cdots,x_v)^{v-j}}g(r_1,\cdots,r_{j-1},X_j,x_{j+1},\cdots,x_v)gj(Xj)=∑(xj+1,⋯,xv)v−jg(r1,⋯,rj−1,Xj,xj+1,⋯,xv)。
若gjg_jgj是正确的,则有gj(0)+gj(1)=gj−1(rj−1)g_j(0)+g_j(1)=g_{j-1}(r_{j-1})gj(0)+gj(1)=gj−1(rj−1)。 - Verifier:验证gj(0)+gj(1)=gj−1(rj−1)g_j(0)+g_j(1)=g_{j-1}(r_{j-1})gj(0)+gj(1)=gj−1(rj−1)是否成立,若成立,则发送random challenege rj←Fr_j\leftarrow \mathbb{F}rj←F。
⋮\vdots⋮
最后一轮:
- Prover:发送polynomial gv(Xv)g_v(X_v)gv(Xv),同时声明g(r1,⋯,rv−1,Xv)g(r_1,\cdots,r_{v-1},X_v)g(r1,⋯,rv−1,Xv)。
若gvg_vgv是正确的,则有gv(0)+gv(1)=gv−1(rv−1)g_v(0)+g_v(1)=g_{v-1}(r_{v-1})gv(0)+gv(1)=gv−1(rv−1)。 - Verifier:验证gv(0)+gv(1)=gv−1(rv−1)g_v(0)+g_v(1)=g_{v-1}(r_{v-1})gv(0)+gv(1)=gv−1(rv−1)是否成立,若成立,则Verifier选择random challenge rv←Fr_v\leftarrow \mathbb{F}rv←F并evaluates g(r1,⋯,rv)g(r_1,\cdots,r_v)g(r1,⋯,rv) with a single oracle query to ggg,Verifier验证gv(rv)=g(r1,⋯,rv)g_v(r_v)=g(r_1,\cdots,r_v)gv(rv)=g(r1,⋯,rv)是否成立,若成立,则Verifier可信任H=g1(0)+g1(1)H=g_1(0)+g_1(1)H=g1(0)+g1(1)。
以上整个sum-check protocol的描述可表示为:
整个sum-check protocol的开销为:
微软研究中心2020年论文《Spartan: Efficient and general-purpose zkSNARKs without trusted setup》中,则从Verifier的角度描述了整个sum-check protocol:
The verifier可process each message sent by the prover in O(1)O(1)O(1) time,at the very end of the sum-check protocol,verifier仍然需要evaluate ggg at signle point。
在此约定,在F\mathbb{F}F域内的任意的加法或乘法运算均take O(1)O(1)O(1) time。
3. verifier的角度看sum-check protocol
Verifier若自己直接计算方程式(1)中的HHH值,则需要evaluate ggg at 2v2^v2v inputs(即,all inputs in {0,1}v\{0,1\}^v{0,1}v)。当2v2^v2v为unacceptably large runtime for the verifier时,则需要借助sum-check protocol。
借助sum-check protocol,verifier的runtime为:
O(v+[the cost to evaluate gat a single input in Fv])O(v+[\text{the cost to evaluate }g\text{ at a single input in }\mathbb{F}^v])O(v+[the cost to evaluate g at a single input in Fv])
该runtime远远优于 直接计算 2v2^v2v evaluations of ggg。
sum-check protocol中的prover可计算all of its prescribed messages by evaluating ggg at O(2v)O(2^v)O(2v) inputs in Fv\mathbb{F}^vFv。This is only a constant factor more than what is required simply to compute HHH without proving correctness。
sum-check protocol 的soundness error为O(v/∣F∣)O(v/|\mathbb{F}|)O(v/∣F∣)。只要ggg is defined over a field of size significantly greater than vvv,则该soundness error可忽略。
4. sum-check protocol 的应用
应用场景之一为:
Verifier有input xxx,需要Prover计算F(x)F(x)F(x)。
为了使用sum-check protocol,需将 F(x)F(x)F(x) 表示为类似方程式(1)的形式,即需要 identify some vvv-variate polynomial ggg of degree 2 in each variable,使得F(x)F(x)F(x) can be inferred from the some of ggg's values over all inputs in {0,1}v\{0,1\}^v{0,1}v。同时要求Verifier可evaluate g(r⃗)g(\vec{r})g(r) at any desired input r⃗∈Fv\vec{r}\in\mathbb{F}^vr∈Fv in linear time。
举例:
input xxx为the adjacency matrix of a graph, F(x)F(x)F(x) 为the number of triangles in that graph。
即,假设GGG为 具有nnn个顶点的无向图,其edge set为EEE。假设A∈{0,1}n×nA\in\{0,1\}^{n\times n}A∈{0,1}n×n为相应的adjacency matrix,即Ai,j=1A_{i,j}=1Ai,j=1当且仅当(i,j)∈E(i,j)\in E(i,j)∈E。(对于无向图,其邻接矩阵是对称的,且主对角线一定为0,存储空间实际仅需n(n−1)/2n(n-1)/2n(n−1)/2即可。)
而在counting triangles问题中,输入为邻接矩阵AAA,输出要求为the number of vertex triples (i,j,k)(i,j,k)(i,j,k) that are all connected to each other by edges。
不将邻接矩阵AAA看成是矩阵,而将其看成是a function fAf_AfA mapping {0,1}logn×{0,1}logn\{0,1\}^{\log n}\times \{0,1\}^{\log n}{0,1}logn×{0,1}logn to {0,1}\{0,1\}{0,1},则可定义fA(x⃗,y⃗)f_A(\vec{x},\vec{y})fA(x,y),其中x⃗,y⃗\vec{x},\vec{y}x,y为整数i,j∈[1,n]i,j\in[1,n]i,j∈[1,n]的二进制表示,输出结果为Ai,jA_{i,j}Ai,j。
相应的,the number of triangels in GGG可简单表示为:
Δ=16∑x⃗,y⃗,z⃗∈{0,1}lognfA(x⃗,y⃗)⋅fA(y⃗,z⃗)⋅fA(x⃗,z⃗)\Delta=\frac{1}{6}\sum_{\vec{x},\vec{y},\vec{z}\in\{0,1\}^{\log n}}f_A(\vec{x},\vec{y})\cdot f_A(\vec{y},\vec{z})\cdot f_A(\vec{x},\vec{z})Δ=61∑x,y,z∈{0,1}lognfA(x,y)⋅fA(y,z)⋅fA(x,z) ……(2)
以上方程式(2)中的16\frac{1}{6}61 是因为针对的是无向图。
6Δ=∑x⃗,y⃗,z⃗∈{0,1}lognfA(x⃗,y⃗)⋅fA(y⃗,z⃗)⋅fA(x⃗,z⃗)6\Delta=\sum_{\vec{x},\vec{y},\vec{z}\in\{0,1\}^{\log n}}f_A(\vec{x},\vec{y})\cdot f_A(\vec{y},\vec{z})\cdot f_A(\vec{x},\vec{z})6Δ=∑x,y,z∈{0,1}lognfA(x,y)⋅fA(y,z)⋅fA(x,z)
设F\mathbb{F}F为a finite field,其field size p≥n3p\geq n^3p≥n3且ppp为prime,同时将矩阵AAA中的所有元素都看成是F\mathbb{F}F域内的元素,则选择足够大的ppp值以保证6Δ6\Delta6Δ 在[0,p−1][0,p-1][0,p−1]范围内。
假设f~A\tilde{f}_Af~A为the MLE of fAf_AfA over F\mathbb{F}F,则可定义(3logn)(3\log n)(3logn)-variate polynomial ggg为:
g(X,Y,Z)=f~A(X,Y)⋅f~A(Y,Z)⋅f~A(X,Z)g(X,Y,Z)=\tilde{f}_A(X,Y)\cdot \tilde{f}_A(Y,Z)\cdot \tilde{f}_A(X,Z)g(X,Y,Z)=f~A(X,Y)⋅f~A(Y,Z)⋅f~A(X,Z)
从而满足 6Δ=∑x,y,z∈{0,1}logng(x,y,z)6\Delta=\sum_{x,y,z\in\{0,1\}^{\log n}}g(x,y,z)6Δ=∑x,y,z∈{0,1}logng(x,y,z)。
整个IP(interactive proof) 过程需要3logn3\log n3logn轮,每轮Prover将发送3个field elements。
而Verifier的runtime主要在于:
evaluate ggg at single input (r1,r2,r3)∈F3logn(r_1,r_2,r_3)\in\mathbb{F}^{3\log n}(r1,r2,r3)∈F3logn,即相当于evaluate f~A\tilde{f}_Af~A at three inputs (r1,r2),(r2,r3),(r1,r3)(r_1,r_2),(r_2,r_3),(r_1,r_3)(r1,r2),(r2,r3),(r1,r3)。借助Multilinear Extension Lemma 仅需O(n2)O(n^2)O(n2) time。
Prover的runtime为:【该runtime matches the naive algorithm for counting triangles that iterates over all triples of vertices in GGG and checks if they are all connected to each other。】【Prover端可直接运行the best-known algorithm to solve the triangles problem,然后仅需做额外多一点点工作来证明the answer is correct。当前不存在有任何其它IPs或argument systems可实现super-efficiency for the prover的同时,keep the proof length sublinear in the input size。】
compute all of its prescribed messages in O(n3)O(n^3)O(n3) time。
当前已知的最快的count triangles算法,其需要matrix multiplication time (superlinear in the input size),而借助sum-check protocol的速度更优。
此外,借助sum-check protocol可实现super-efficient IP for matrix-powering。如已知任意的n×nn\times nn×n矩阵AAA over field F\mathbb{F}F,该IP可计算any desired entry of the powered matrix AkA^kAk。整个IP的round和communication cost为O(log(k)⋅logn)O(\log(k)\cdot \log n)O(log(k)⋅logn),而verifier的runtime为O(n2+log(k)⋅logn)O(n^2+\log(k)\cdot \log n)O(n2+log(k)⋅logn)。
Goldwasser, Kalai和Rothblum (GKR) 2008年论文《Delegating Computation: Interactive Proofs for Muggles》中正是利用了matrix-powering protocol证明了:
all problems solvable in logarithmic space have an IP with a quasilinear-time verifier, polynomial time prover, and polylogarithmic proof length。
该proof的核心思想为:
excute any Turing Machine MMM that uses sss bits of space可reduce 为 the problem of computing a single entry of A2sA^{2^s}A2s for a certain matrix AAA (AAA is in fact the configuration graph of MMM)。
因此,one can just apply the matrix-powering IP to AAA to determine the output of MMM。当AAA为huge matrix时(至少有2s2^s2s行和2s2^s2s列),则configuration graph具有a ton of structure,借助matrix-powering IP,使得Verifier evaluate f~A\tilde{f}_Af~A at a single input的时间为O(s⋅n)O(s\cdot n)O(s⋅n),当sss为logarithmic in the input size时,即意味着Verifier in the IP的runtime为O(nlogn)O(n\log n)O(nlogn)。
在GKR论文中,构建了an arithmetic circuit for computing A2sA^{2^s}A2s and then apply a sophisticated IP for arithmetic circuit evaluation to that circuit。
5. sum-check protocol + zero-knowledge
sum-check protocol 本身不具备zero-knowledge属性,而在 Wahby等人2018年论文《Hyrax Doubly-efficient zkSNARKs without trusted setup》中,实现了a zero-knowledge variant for the sum-check protocol:
借助“commit-and-prove”技术,在第2节的每一轮,Prover不再直接给Verifier 发送 多项式gj(Xj)g_j(X_j)gj(Xj),而是利用commitment的同态属性,对该多项式进行commit。
在讨论具体的zero-knowledge sum-check protocol实现细节之前,先介绍3个基于commitment的sub-protocol:
proof-of-opening
:
proof-of-equality
:(proof of commitment to the same value)
proof-of-product
:
5.1 直观版 zero-knowledge sum-check protocol
整个sum-check protocol包含vvv轮,每一轮对应ggg中的一个变量。【利用“commit-and-prove”,添加zero-knowledge属性。】
第1轮:
- Prover:计算polynomial g1(X1)g_1(X_1)g1(X1),同时声明g1(X1)=∑x2,⋯,xv∈{0,1}v−1g(X1,x2,⋯,xv)=c0,1+c1,1X1+c2,1X12g_1(X_1)=\sum_{x_2,\cdots,x_v\in\{0,1\}^{v-1}}g(X_1,x_2,\cdots,x_v)=c_{0,1}+c_{1,1}X_1+c_{2,1}X_1^2g1(X1)=∑x2,⋯,xv∈{0,1}v−1g(X1,x2,⋯,xv)=c0,1+c1,1X1+c2,1X12。
若g1g_1g1是正确的,则有H=g1(0)+g1(1)H=g_1(0)+g_1(1)H=g1(0)+g1(1)。
Prover对多项式的系数进行commit,δc0,1=Com(c0,1),δc1,1=Com(c1,1),δc2,1=Com(c2,1)\delta_{c_{0,1}}=Com(c_{0,1}),\delta_{c_{1,1}}=Com(c_{1,1}),\delta_{c_{2,1}}=Com(c_{2,1})δc0,1=Com(c0,1),δc1,1=Com(c1,1),δc2,1=Com(c2,1),将这些commitment值发送给Verifier。 - Prover & Verifier:对 δc0,1、δc1,1、δc2,1\delta_{c_{0,1}}、\delta_{c_{1,1}}、\delta_{c_{2,1}}δc0,1、δc1,1、δc2,1运行
proof-of-opening
。 - Verifier:
【由于g1(0)+g1(1)=2c0,1+c1,1+c2,1g_1(0)+g_1(1)=2c_{0,1}+c_{1,1}+c_{2,1}g1(0)+g1(1)=2c0,1+c1,1+c2,1,利用Pedersen commitment的加法同态属性,对于H=g1(0)+g1(1)H=g_1(0)+g_1(1)H=g1(0)+g1(1)有:】
验证Com(H;0)=δc0,12⋅δc1,1⋅δc2,1Com(H;0)=\delta_{c_{0,1}}^2\cdot\delta_{c_{1,1}}\cdot \delta_{c_{2,1}}Com(H;0)=δc0,12⋅δc1,1⋅δc2,1是否成立,若成立,则发送random challenege r1←Fr_1\leftarrow \mathbb{F}r1←F。
第2轮:
- Prover:计算polynomial g2(X2)g_2(X_2)g2(X2),同时声明g2(X2)=∑(x3,⋯,xv)v−2g(r1,X2,x3,⋯,xv)=c0,2+c1,2X2+c2,2X22g_2(X_2)=\sum_{(x_3,\cdots,x_v)^{v-2}}g(r_1,X_2,x_3,\cdots,x_v)=c_{0,2}+c_{1,2}X_2+c_{2,2}X_2^2g2(X2)=∑(x3,⋯,xv)v−2g(r1,X2,x3,⋯,xv)=c0,2+c1,2X2+c2,2X22。
若g2g_2g2是正确的,则有g2(0)+g2(1)=g1(r1)g_2(0)+g_2(1)=g_1(r_1)g2(0)+g2(1)=g1(r1)。
Prover对多项式的系数进行commit,δc0,2=Com(c0,2),δc1,2=Com(c1,2),δc2,2=Com(c2,2)\delta_{c_{0,2}}=Com(c_{0,2}),\delta_{c_{1,2}}=Com(c_{1,2}),\delta_{c_{2,2}}=Com(c_{2,2})δc0,2=Com(c0,2),δc1,2=Com(c1,2),δc2,2=Com(c2,2),将这些commitment值发送给Verifier。 - Prover & Verifier:对 δc0,2、δc1,2、δc2,2\delta_{c_{0,2}}、\delta_{c_{1,2}}、\delta_{c_{2,2}}δc0,2、δc1,2、δc2,2运行
proof-of-opening
。 - Verifier:
【由于g1(r1)=c0,1+c1,1⋅r1+c2,1⋅r12g_1(r_1)=c_{0,1}+c_{1,1}\cdot r_1+c_{2,1}\cdot r_1^2g1(r1)=c0,1+c1,1⋅r1+c2,1⋅r12 及 g2(0)+g2(1)=2c0,2+c1,2+c2,2g_2(0)+g_2(1)=2c_{0,2}+c_{1,2}+c_{2,2}g2(0)+g2(1)=2c0,2+c1,2+c2,2,利用Pedersen commitment的加法同态属性,对于g2(0)+g2(1)=g1(r1)g_2(0)+g_2(1)=g_1(r_1)g2(0)+g2(1)=g1(r1)有:】
验证δc0,22⋅δc1,2⋅δc2,2=δc0,1⋅δc1,1r1⋅δc2,1r12\delta_{c_{0,2}}^2\cdot\delta_{c_{1,2}}\cdot \delta_{c_{2,2}}=\delta_{c_{0,1}}\cdot\delta_{c_{1,1}}^{r_1}\cdot \delta_{c_{2,1}}^{r_1^2}δc0,22⋅δc1,2⋅δc2,2=δc0,1⋅δc1,1r1⋅δc2,1r12是否成立,若成立,则发送random challenege r2←Fr_2\leftarrow \mathbb{F}r2←F。
⋮\vdots⋮
第j>1j>1j>1轮:
- Prover:计算polynomial gj(Xj)g_j(X_j)gj(Xj),同时声明gj(Xj)=∑(xj+1,⋯,xv)v−jg(r1,⋯,rj−1,Xj,xj+1,⋯,xv)=c0,j+c1,jXj+c2,jXj2g_j(X_j)=\sum_{(x_{j+1},\cdots,x_v)^{v-j}}g(r_1,\cdots,r_{j-1},X_j,x_{j+1},\cdots,x_v)=c_{0,j}+c_{1,j}X_j+c_{2,j}X_j^2gj(Xj)=∑(xj+1,⋯,xv)v−jg(r1,⋯,rj−1,Xj,xj+1,⋯,xv)=c0,j+c1,jXj+c2,jXj2。
若gjg_jgj是正确的,则有gj(0)+gj(1)=gj−1(rj−1)g_j(0)+g_j(1)=g_{j-1}(r_{j-1})gj(0)+gj(1)=gj−1(rj−1)。
Prover对多项式的系数进行commit,δc0,j=Com(c0,j),δc1,j=Com(c1,j),δc2,j=Com(c2,j)\delta_{c_{0,j}}=Com(c_{0,j}),\delta_{c_{1,j}}=Com(c_{1,j}),\delta_{c_{2,j}}=Com(c_{2,j})δc0,j=Com(c0,j),δc1,j=Com(c1,j),δc2,j=Com(c2,j),将这些commitment值发送给Verifier。 - Prover & Verifier:对 δc0,j、δc1,j、δc2,j\delta_{c_{0,j}}、\delta_{c_{1,j}}、\delta_{c_{2,j}}δc0,j、δc1,j、δc2,j运行
proof-of-opening
。 - Verifier:
【由于gj−1(rj−1)=c0,j−1+c1,j−1⋅rj−1+c2,j−1⋅rj−12g_{j-1}(r_{j-1})=c_{0,j-1}+c_{1,j-1}\cdot r_{j-1}+c_{2,{j-1}}\cdot r_{j-1}^2gj−1(rj−1)=c0,j−1+c1,j−1⋅rj−1+c2,j−1⋅rj−12 及 gj(0)+gj(1)=2c0,j+c1,j+c2,jg_j(0)+g_j(1)=2c_{0,j}+c_{1,j}+c_{2,j}gj(0)+gj(1)=2c0,j+c1,j+c2,j,利用Pedersen commitment的加法同态属性,对于gj(0)+gj(1)=gj−1(rj−1)g_j(0)+g_j(1)=g_{j-1}(r_{j-1})gj(0)+gj(1)=gj−1(rj−1)有:】
验证δc0,j2⋅δc1,j⋅δc2,j=δc0,j−1⋅δc1,j−1rj−1⋅δc2,j−1rj−12\delta_{c_{0,j}}^2\cdot\delta_{c_{1,j}}\cdot \delta_{c_{2,j}}=\delta_{c_{0,j-1}}\cdot\delta_{c_{1,j-1}}^{r_{j-1}}\cdot \delta_{c_{2,j-1}}^{r_{j-1}^2}δc0,j2⋅δc1,j⋅δc2,j=δc0,j−1⋅δc1,j−1rj−1⋅δc2,j−1rj−12是否成立,若成立,则发送random challenege rj←Fr_j\leftarrow \mathbb{F}rj←F。
⋮\vdots⋮
最后一轮:
- Prover:计算polynomial gv(Xv)g_v(X_v)gv(Xv),同时声明g(r1,⋯,rv−1,Xv)=c0,v+c1,vXv+c2,vXv2g(r_1,\cdots,r_{v-1},X_v)=c_{0,v}+c_{1,v}X_v+c_{2,v}X_v^2g(r1,⋯,rv−1,Xv)=c0,v+c1,vXv+c2,vXv2。
若gvg_vgv是正确的,则有gv(0)+gv(1)=gv−1(rv−1)g_v(0)+g_v(1)=g_{v-1}(r_{v-1})gv(0)+gv(1)=gv−1(rv−1)。
Prover对多项式的系数进行commit,δc0,v=Com(c0,v),δc1,v=Com(c1,v),δc2,v=Com(c2,v)\delta_{c_{0,v}}=Com(c_{0,v}),\delta_{c_{1,v}}=Com(c_{1,v}),\delta_{c_{2,v}}=Com(c_{2,v})δc0,v=Com(c0,v),δc1,v=Com(c1,v),δc2,v=Com(c2,v),将这些commitment值发送给Verifier。 - Prover & Verifier:对 δc0,v、δc1,v、δc2,v\delta_{c_{0,v}}、\delta_{c_{1,v}}、\delta_{c_{2,v}}δc0,v、δc1,v、δc2,v运行
proof-of-opening
。 - Verifier:
【由于gv−1(rv−1)=c0,v−1+c1,v−1⋅rv−1+c2,v−1⋅rv−12g_{v-1}(r_{v-1})=c_{0,v-1}+c_{1,v-1}\cdot r_{v-1}+c_{2,{v-1}}\cdot r_{v-1}^2gv−1(rv−1)=c0,v−1+c1,v−1⋅rv−1+c2,v−1⋅rv−12 及 gv(0)+gv(1)=2c0,v+c1,v+c2,vg_v(0)+g_v(1)=2c_{0,v}+c_{1,v}+c_{2,v}gv(0)+gv(1)=2c0,v+c1,v+c2,v,利用Pedersen commitment的加法同态属性,对于gv(0)+gv(1)=gv−1(rv−1)g_v(0)+g_v(1)=g_{v-1}(r_{v-1})gv(0)+gv(1)=gv−1(rv−1)有:】
验证δc0,v2⋅δc1,v⋅δc2,v=δc0,v−1⋅δc1,v−1rv−1⋅δc2,v−1rv−12\delta_{c_{0,v}}^2\cdot\delta_{c_{1,v}}\cdot \delta_{c_{2,v}}=\delta_{c_{0,v-1}}\cdot\delta_{c_{1,v-1}}^{r_{v-1}}\cdot \delta_{c_{2,v-1}}^{r_{v-1}^2}δc0,v2⋅δc1,v⋅δc2,v=δc0,v−1⋅δc1,v−1rv−1⋅δc2,v−1rv−12是否成立,若成立,则Verifier选择random challenge rv←Fr_v\leftarrow \mathbb{F}rv←F并evaluates g(r1,⋯,rv)g(r_1,\cdots,r_v)g(r1,⋯,rv) with a single oracle query to ggg。
【由于gv(rv)=c0,v+c1,v⋅rv+c2,v⋅rv2g_{v}(r_{v})=c_{0,v}+c_{1,v}\cdot r_{v}+c_{2,v}\cdot r_{v}^2gv(rv)=c0,v+c1,v⋅rv+c2,v⋅rv2 ,利用Pedersen commitment的加法同态属性,对于gv(rv)=g(r1,⋯,rv)g_v(r_v)=g(r_1,\cdots,r_v)gv(rv)=g(r1,⋯,rv)有:】
Verifier验证Com(g(r1,⋯,rv);0)=δc0,v⋅δc1,vrv⋅δc2,vrv2Com(g(r_1,\cdots,r_v);0)=\delta_{c_{0,v}}\cdot\delta_{c_{1,v}}^{r_{v}}\cdot \delta_{c_{2,v}}^{r_{v}^2}Com(g(r1,⋯,rv);0)=δc0,v⋅δc1,vrv⋅δc2,vrv2是否成立,若成立,则Verifier可信任H=g1(0)+g1(1)H=g_1(0)+g_1(1)H=g1(0)+g1(1)。
5.2 reduce cost版 zero-knowledge sum-check protocol
【具体参考Hyrax论文第4和第5章内容。】
在以上“5.1 直观版”中,Prover为每一轮的每个多项式系数都单独生成发送相应的commitment,同时需在每一轮为每个commitment都运行proof-of-opening
,存在的问题是:
- proof size会很长;
- Verifier需运行expensive crytographic operations。
可记住multi-commitment scheme(即Pedersen vector commitment)来reduce the communication and number of cryptographic operations for the verifier。
以v=3v=3v=3为例,可将“5.1 直观版”中Verifier在每一轮验证的关系表示为2c0,j+c1,j+c2,j−c0,j−1−c1,j−1⋅rj−1−c2,j−1⋅rj−12=02c_{0,j}+c_{1,j}+c_{2,j}-c_{0,j-1}-c_{1,j-1}\cdot r_{j-1}-c_{2,{j-1}}\cdot r_{j-1}^2=02c0,j+c1,j+c2,j−c0,j−1−c1,j−1⋅rj−1−c2,j−1⋅rj−12=0,在最后一轮额外增加了gv(rv)=c0,v+c1,v⋅rv+c2,v⋅rv2g_{v}(r_{v})=c_{0,v}+c_{1,v}\cdot r_{v}+c_{2,v}\cdot r_{v}^2gv(rv)=c0,v+c1,v⋅rv+c2,v⋅rv2关系判断,可将该关系以matrix-vector product表示为:
[211000000−1−r1−r12211000000−1−r2−r222110000001r3r32]⋅[c0,1c1,1c2,1c0,2c1,2c2,2c0,3c1,3c2,3]=M⋅π⃗=[M⃗1M⃗2M⃗3M⃗4]⋅π⃗=[H00g3(r3)]\begin{bmatrix} 2 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\ -1 & -r_1 & -r_1^2 & 2 & 1 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & -1 & -r_2 & -r_2^2 & 2 & 1 & 1\\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & r_3 & r_3^2 \end{bmatrix}\cdot \begin{bmatrix} c_{0,1}\\ c_{1,1}\\ c_{2,1}\\ c_{0,2}\\ c_{1,2}\\ c_{2,2}\\ c_{0,3}\\ c_{1,3}\\ c_{2,3} \end{bmatrix}=\mathbf{M}\cdot \vec{\pi}=\begin{bmatrix} \vec{M}_1\\ \vec{M}_2\\ \vec{M}_3\\ \vec{M}_4 \end{bmatrix}\cdot \vec{\pi}=\begin{bmatrix} H\\ 0\\ 0\\ g_3(r_3) \end{bmatrix}⎣⎢⎢⎡2−1001−r1001−r120002−1001−r2001−r2200021001r3001r32⎦⎥⎥⎤⋅⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡c0,1c1,1c2,1c0,2c1,2c2,2c0,3c1,3c2,3⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=M⋅π=⎣⎢⎢⎢⎡M1M2M3M4⎦⎥⎥⎥⎤⋅π=⎣⎢⎢⎡H00g3(r3)⎦⎥⎥⎤ ……(5)
其中π⃗=[c0,1,c1,1,c2,1,c0,2,c1,2,c2,2,c0,3,c1,3,c2,3]\vec{\pi}=[c_{0,1},c_{1,1},c_{2,1},c_{0,2},c_{1,2},c_{2,2},c_{0,3},c_{1,3},c_{2,3}]π=[c0,1,c1,1,c2,1,c0,2,c1,2,c2,2,c0,3,c1,3,c2,3] 为Prover witness。
将矩阵M\mathbf{M}M的每一行kkk引入随机系数ρk\rho_kρk,然后行加,可将v+1v+1v+1个验证压缩为1个验证:【根据Schwartz-Zippel lemma,该soundness error不高于1/∣F∣1/|\mathbb{F}|1/∣F∣。】
[2∗ρ1−1∗ρ2,1∗ρ1−r1∗ρ2,1∗ρ1−r12∗ρ2,2∗ρ2−1∗ρ3,1∗ρ2−r2∗ρ3,1∗ρ2−r22∗ρ3,2∗ρ3+1∗ρ4,1∗ρ3+r3∗ρ4,1∗ρ3+r32∗ρ4]⋅[c0,1c1,1c2,1c0,2c1,2c2,2c0,3c1,3c2,3]=<∑ρk⋅M⃗k,π⃗>=<M⃗,π⃗>=[H∗ρ1+g3(r3)∗ρ4][2*\rho_1-1*\rho_2,1*\rho_1-r_1*\rho_2, 1*\rho_1-r_1^2*\rho_2, 2*\rho_2-1*\rho_3,1*\rho_2-r_2*\rho_3 ,1*\rho_2-r_2^2*\rho_3 , 2*\rho_3+1*\rho_4,1*\rho_3+r_3*\rho_4, 1*\rho_3+r_3^2*\rho_4]\cdot \begin{bmatrix} c_{0,1}\\ c_{1,1}\\ c_{2,1}\\ c_{0,2}\\ c_{1,2}\\ c_{2,2}\\ c_{0,3}\\ c_{1,3}\\ c_{2,3} \end{bmatrix}=<\sum\rho_k\cdot \vec{M}_k, \vec{\pi}>=<\vec{M}, \vec{\pi}>=\begin{bmatrix} H*\rho_1+g_3(r_3)*\rho_4 \end{bmatrix}[2∗ρ1−1∗ρ2,1∗ρ1−r1∗ρ2,1∗ρ1−r12∗ρ2,2∗ρ2−1∗ρ3,1∗ρ2−r2∗ρ3,1∗ρ2−r22∗ρ3,2∗ρ3+1∗ρ4,1∗ρ3+r3∗ρ4,1∗ρ3+r32∗ρ4]⋅⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡c0,1c1,1c2,1c0,2c1,2c2,2c0,3c1,3c2,3⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=<∑ρk⋅Mk,π>=<M,π>=[H∗ρ1+g3(r3)∗ρ4]
以上可转为 dot product(inner product) 证明,但是,sum-check protocol中要求Prover必须先commit c0,j,c1,j,c2,jc_{0,j},c_{1,j},c_{2,j}c0,j,c1,j,c2,j 然后Verifier在发送rjr_jrj,因此Prover不能 直接对π⃗\vec{\pi}π 所有内容进行commit。
Prover需commit to π⃗\vec{\pi}π incrmentally,using one group element per round of the sum-check。即在sum-check protocol的每一轮:
- Prover commit to a vector encoding the coefficients of that round’s polynomial,即有commitment αj=Com((c0,j,c1,j,c2,j);rαj)\alpha_j=Com((c_{0,j},c_{1,j},c_{2,j});r_{\alpha_j})αj=Com((c0,j,c1,j,c2,j);rαj);
- Verifier responds with random challenge rjr_jrj。
直到最后Prover has committed to all of its messages for the sum-check,运行如下sum-check protocol:
第1轮:
Prover:计算polynomial g1(X1)g_1(X_1)g1(X1),同时声明g1(X1)=∑x2,⋯,xv∈{0,1}v−1g(X1,x2,⋯,xv)=c0,1+c1,1X1+c2,1X12g_1(X_1)=\sum_{x_2,\cdots,x_v\in\{0,1\}^{v-1}}g(X_1,x_2,\cdots,x_v)=c_{0,1}+c_{1,1}X_1+c_{2,1}X_1^2g1(X1)=∑x2,⋯,xv∈{0,1}v−1g(X1,x2,⋯,xv)=c0,1+c1,1X1+c2,1X12。
若g1g_1g1是正确的,则有H=g1(0)+g1(1)H=g_1(0)+g_1(1)H=g1(0)+g1(1)。
Prover对多项式的系数进行vector commit,α1=Com((c0,1,c1,1,c2,1);rα1)\alpha_1=Com((c_{0,1},c_{1,1},c_{2,1});r_{\alpha_1})α1=Com((c0,1,c1,1,c2,1);rα1),将该commitment值发送给Verifier。Verifier:
发送random challenege r1←Fr_1\leftarrow \mathbb{F}r1←F。
第2轮:
Prover:计算polynomial g2(X2)g_2(X_2)g2(X2),同时声明g2(X2)=∑(x3,⋯,xv)v−2g(r1,X2,x3,⋯,xv)=c0,2+c1,2X2+c2,2X22g_2(X_2)=\sum_{(x_3,\cdots,x_v)^{v-2}}g(r_1,X_2,x_3,\cdots,x_v)=c_{0,2}+c_{1,2}X_2+c_{2,2}X_2^2g2(X2)=∑(x3,⋯,xv)v−2g(r1,X2,x3,⋯,xv)=c0,2+c1,2X2+c2,2X22。
若g2g_2g2是正确的,则有g2(0)+g2(1)=g1(r1)g_2(0)+g_2(1)=g_1(r_1)g2(0)+g2(1)=g1(r1)。
Prover对多项式的系数进行 vector commit,α2=Com((c0,2,c1,2,c2,2);rα2)\alpha_2=Com((c_{0,2},c_{1,2},c_{2,2});r_{\alpha_2})α2=Com((c0,2,c1,2,c2,2);rα2),将该commitment值发送给Verifier。Verifier:
【由于g1(r1)=c0,1+c1,1⋅r1+c2,1⋅r12g_1(r_1)=c_{0,1}+c_{1,1}\cdot r_1+c_{2,1}\cdot r_1^2g1(r1)=c0,1+c1,1⋅r1+c2,1⋅r12 及 g2(0)+g2(1)=2c0,2+c1,2+c2,2g_2(0)+g_2(1)=2c_{0,2}+c_{1,2}+c_{2,2}g2(0)+g2(1)=2c0,2+c1,2+c2,2,利用Pedersen commitment的加法同态属性,对于g2(0)+g2(1)=g1(r1)g_2(0)+g_2(1)=g_1(r_1)g2(0)+g2(1)=g1(r1)有:】
发送random challenege r2←Fr_2\leftarrow \mathbb{F}r2←F。
⋮\vdots⋮
第j>1j>1j>1轮:
- Prover:计算polynomial gj(Xj)g_j(X_j)gj(Xj),同时声明gj(Xj)=∑(xj+1,⋯,xv)v−jg(r1,⋯,rj−1,Xj,xj+1,⋯,xv)=c0,j+c1,jXj+c2,jXj2g_j(X_j)=\sum_{(x_{j+1},\cdots,x_v)^{v-j}}g(r_1,\cdots,r_{j-1},X_j,x_{j+1},\cdots,x_v)=c_{0,j}+c_{1,j}X_j+c_{2,j}X_j^2gj(Xj)=∑(xj+1,⋯,xv)v−jg(r1,⋯,rj−1,Xj,xj+1,⋯,xv)=c0,j+c1,jXj+c2,jXj2。
若gjg_jgj是正确的,则有gj(0)+gj(1)=gj−1(rj−1)g_j(0)+g_j(1)=g_{j-1}(r_{j-1})gj(0)+gj(1)=gj−1(rj−1)。
Prover对多项式的系数进行vector commit,αj=Com((c0,j,c1,j,c2,j);rαj)\alpha_j=Com((c_{0,j},c_{1,j},c_{2,j});r_{\alpha_j})αj=Com((c0,j,c1,j,c2,j);rαj),将该commitment值发送给Verifier。 - Verifier:
【由于gj−1(rj−1)=c0,j−1+c1,j−1⋅rj−1+c2,j−1⋅rj−12g_{j-1}(r_{j-1})=c_{0,j-1}+c_{1,j-1}\cdot r_{j-1}+c_{2,{j-1}}\cdot r_{j-1}^2gj−1(rj−1)=c0,j−1+c1,j−1⋅rj−1+c2,j−1⋅rj−12 及 gj(0)+gj(1)=2c0,j+c1,j+c2,jg_j(0)+g_j(1)=2c_{0,j}+c_{1,j}+c_{2,j}gj(0)+gj(1)=2c0,j+c1,j+c2,j,利用Pedersen commitment的加法同态属性,对于gj(0)+gj(1)=gj−1(rj−1)g_j(0)+g_j(1)=g_{j-1}(r_{j-1})gj(0)+gj(1)=gj−1(rj−1)有:】
发送random challenege rj←Fr_j\leftarrow \mathbb{F}rj←F。
⋮\vdots⋮
最后一轮:
Prover:计算polynomial gv(Xv)g_v(X_v)gv(Xv),同时声明g(r1,⋯,rv−1,Xv)=c0,v+c1,vXv+c2,vXv2g(r_1,\cdots,r_{v-1},X_v)=c_{0,v}+c_{1,v}X_v+c_{2,v}X_v^2g(r1,⋯,rv−1,Xv)=c0,v+c1,vXv+c2,vXv2。
若gvg_vgv是正确的,则有gv(0)+gv(1)=gv−1(rv−1)g_v(0)+g_v(1)=g_{v-1}(r_{v-1})gv(0)+gv(1)=gv−1(rv−1)。
Prover对多项式的系数进行vector commit,αv=Com((c0,v,c1,v,c2,v);rαv)\alpha_v=Com((c_{0,v},c_{1,v},c_{2,v});r_{\alpha_v})αv=Com((c0,v,c1,v,c2,v);rαv),将这些commitment值发送给Verifier。Verifier:
【由于gv−1(rv−1)=c0,v−1+c1,v−1⋅rv−1+c2,v−1⋅rv−12g_{v-1}(r_{v-1})=c_{0,v-1}+c_{1,v-1}\cdot r_{v-1}+c_{2,{v-1}}\cdot r_{v-1}^2gv−1(rv−1)=c0,v−1+c1,v−1⋅rv−1+c2,v−1⋅rv−12 及 gv(0)+gv(1)=2c0,v+c1,v+c2,vg_v(0)+g_v(1)=2c_{0,v}+c_{1,v}+c_{2,v}gv(0)+gv(1)=2c0,v+c1,v+c2,v,利用Pedersen commitment的加法同态属性,对于gv(0)+gv(1)=gv−1(rv−1)g_v(0)+g_v(1)=g_{v-1}(r_{v-1})gv(0)+gv(1)=gv−1(rv−1)有:】
Verifier选择random challenge rv←Fr_v\leftarrow \mathbb{F}rv←F并evaluates g(r1,⋯,rv)g(r_1,\cdots,r_v)g(r1,⋯,rv) with a single oracle query to ggg。
【由于gv(rv)=c0,v+c1,v⋅rv+c2,v⋅rv2g_{v}(r_{v})=c_{0,v}+c_{1,v}\cdot r_{v}+c_{2,v}\cdot r_{v}^2gv(rv)=c0,v+c1,v⋅rv+c2,v⋅rv2 ,利用Pedersen commitment的加法同态属性,对于gv(rv)=g(r1,⋯,rv)g_v(r_v)=g(r_1,\cdots,r_v)gv(rv)=g(r1,⋯,rv)有:】Prover:选择rδ1,⋯,rδn∈RFr_{\delta_1},\cdots,r_{\delta_n}\in_R\mathbb{F}rδ1,⋯,rδn∈RF 以及d⃗∈RF=(dc0,1,dc1,1,dc2,1,⋯,dc0,v,dc1,v,dc2,v)\vec{d}\in_R\mathbb{F}=(d_{c_{0,1}},d_{c_{1,1}},d_{c_{2,1}},\cdots,d_{c_{0,v}},d_{c_{1,v}},d_{c_{2,v}})d∈RF=(dc0,1,dc1,1,dc2,1,⋯,dc0,v,dc1,v,dc2,v),Prover计算并发送:
δj=Com((dc0,j,dc1,j,dc2,j);rδj),j∈{1,⋯,v}\delta_j=Com((d_{c_{0,j}},d_{c_{1,j}},d_{c_{2,j}});r_{\delta_j}),j\in\{1,\cdots,v\}δj=Com((dc0,j,dc1,j,dc2,j);rδj),j∈{1,⋯,v}Verifier:发送随机数 ρ1,⋯,ρv+1∈RF\rho_1,\cdots,\rho_{v+1}\in_R\mathbb{F}ρ1,⋯,ρv+1∈RF
Prover和Verifier:均计算J⃗=∑ρk⋅M⃗k\vec{J}=\sum\rho_k\cdot\vec{M}_kJ=∑ρk⋅Mk。
Prover:选择随机数rC∈RFr_C\in_R\mathbb{F}rC∈RF,计算并发送:
C=Com(<J⃗,d⃗>;rC)C=Com(<\vec{J},\vec{d}>;r_C)C=Com(<J,d>;rC)Verifier:发送random challenge c∈RFc\in_R\mathbb{F}c∈RF。
Prover:
计算并发送:
z⃗=c⋅π⃗+d⃗\vec{z}=c\cdot\vec{\pi}+\vec{d}z=c⋅π+d
zδj=c⋅rαj+rδj,j∈{1,⋯,v}z_{\delta_j}=c\cdot r_{\alpha_j}+r_{\delta_j},j\in\{1,\cdots,v\}zδj=c⋅rαj+rδj,j∈{1,⋯,v}Verifier:
– 解析z⃗=(zc0,1,zc1,1,zc2,1,⋯,zc0,v,zc1,v,zc2,v)\vec{z}=(z_{c_{0,1}},z_{c_{1,1}},z_{c_{2,1}},\cdots,z_{c_{0,v}},z_{c_{1,v}},z_{c_{2,v}})z=(zc0,1,zc1,1,zc2,1,⋯,zc0,v,zc1,v,zc2,v)
验证Com((zc0,j,zc1,j,zc2,j);zδj)=Com(c(c0,j,c1,j,c2,j)+(dc0,j,dc1,j,dc2,j);c⋅rαj+rδj)=αjc⋅δj,j∈{1,⋯,v}Com((z_{c_{0,j}},z_{c_{1,j}},z_{c_{2,j}});z_{\delta_j})=Com(c(c_{0,j},c_{1,j},c_{2,j})+(d_{c_{0,j}},d_{c_{1,j}},d_{c_{2,j}});c\cdot r_{\alpha_j}+r_{\delta_j})=\alpha_j^c\cdot \delta_j,j\in\{1,\cdots,v\}Com((zc0,j,zc1,j,zc2,j);zδj)=Com(c(c0,j,c1,j,c2,j)+(dc0,j,dc1,j,dc2,j);c⋅rαj+rδj)=αjc⋅δj,j∈{1,⋯,v} 是否成立。
– 验证 Com(ρ1⋅H+ρv⋅gv(rv);0)c⋅C=Com(<J⃗,z⃗>;rc)Com(\rho_1\cdot H+\rho_v\cdot g_v(r_v);0)^c\cdot C=Com(<\vec{J},\vec{z}>;r_c)Com(ρ1⋅H+ρv⋅gv(rv);0)c⋅C=Com(<J,z>;rc) 是否成立。
6. zero-knowledge sum-check protocol + succinct evaluation proof
以实现sub-linear verification cost 和 sub-linear communication cost。
在 “5. sum-check protocol + zero-knowledge” 中,添加了zero-knowledge 属性后,需要由Prover来计算g(r1,⋯,rv)g(r_1,\cdots,r_v)g(r1,⋯,rv)的值,其中ggg为multilinear polynomial,可借助Hyrax论文 “6.1 A commitment scheme for multilinear polynomials” 中的算法来实现:
在此基础上,在借助Bulletproofs思路进一步压缩,有:
【具体可参见博客 Spartan: zkSNARKS without trusted setup 源代码解析
中的:
// 拆分为 <(\vec{L}\cdot \mathbf{Z}), \vec{R}> 进行evaluation计算。let eval_with_LR = evaluate_with_LR(&Z, &r);
】
参考资料
[1] Justin Thaler博客 The Unreasonable Power of the Sum-Check Protocol
[2] utexas大学课件 Lecture 3: The Sum Check Protocol
[3] Justin Thaler 在georgetown大学的课件 The Sum-Check Protocol
[4] adjacency matrix 邻接矩阵
[5] Gorka Irazoqui Apecechea medium博客 Spartan: zkSNARKS without trusted setup
sum-check protocol in zkproof相关推荐
- golang学习笔记(进阶篇)
四.Golang进阶部分(并发) 并发编程在当前软件领域是一个非常重要的概念,随着CPU等硬件的发展,我们无一例外的想让我们的程序运行的快一点.再快一点.Go语言在语言层面天生支持并发,充分利用现代C ...
- Compressed sigma-Protocol Theory and Practical Application to Plug Play Secure Algorithmics学习笔记
1. 引言 Thomas Attema等人2020年论文<Compressed sigma-Protocol Theory and Practical Application to Plug & ...
- swift_028(Swift 的协议)
//***********swift学习之28--协议--*************************** /* 协议规定了用来实现某一特定功能所必需的方法和属性. 任意能够满足协议要求的类型被 ...
- [SHOI2015]自动刷题机
[SHOI2015]自动刷题机 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机--一种可以自动 AC 题目的神秘装置. 自动刷题机刷题的方式非常简单:首先会瞬间得出 ...
- Oracle内部错误:ORA-00600[2608]一例
一套10.2.0.4的单节点数据库在恢复数据文件时出现了ORA-00600: internal error code, arguments: [2608], [1], [0], [690423], [ ...
- 读取oracle注释
2019独角兽企业重金招聘Python工程师标准>>> # coding=utf-8 __author__ = 'jspdba' u''' 读取oracle注释 ''' import ...
- 关于 UDP Hole Punching 的资料
平时用两台电脑,一台 Win, 一台Mac,在这两个平台上进行文件传送非常不方便, 原因是公司不让用企鹅传公司内部文件. 于是想自己写一个传送文件的工具, 服务器使用 GAE,开发语言可以选择 Pyt ...
- python字符串替换空格_python - 用pandas中的NaN替换空白值(空格)
python - 用pandas中的NaN替换空白值(空格) 我想在Pandas数据帧中找到包含空格(任意数量)的所有值,并用NaN替换这些值. 有什么想法可以改进吗? 基本上我想转此: A B C ...
- 共识机制-权益证明 PoS
共识机制-权益证明 PoS 什么是权益证明 权益证明( Proof of Stake,PoS )最早在2013年被提出,并在 Peercoin 系统中实现,类似于现实生活中的股东机制,拥有股份越多的人 ...
最新文章
- _BLOCK_TYPE_IS_VALID错误
- python如何导入txt文件-python如何导入txt数据库?
- 多播程序设计(基于UDP协议)
- 工业4.0的小小思考
- 【转】我的第一个Python小程序
- java学习(121):treeset排序集合
- am335x gpio驱动
- 一文了解 Kubernetes 中的服务发现
- python 持续集成_使用jenkins和Gitlab进行Python项目的持续集成
- LOJ#3083. 「GXOI / GZOI2019」与或和(单调栈)
- Feign如何针对单个服务屏蔽Hystrix熔断功能
- 达芬奇影视后期处理4K/8K图形工作站、存储完美2021配置推荐
- 基于STM32的人体红外测温
- 广西北部湾经济区升级发展 全面对接粤港澳大湾区
- k2.第一章 基于kubeadm安装kubernetes v1.20 -- 集群部署(二)
- 摘抄整理:基于数据驱动的故障诊断方法综述
- 荣耀绽放 | 白玉兰酒店荣膺金光奖“中国发展潜力酒店品牌”奖项
- Linux常用命令——mailq命令
- 视频拍摄常用运镜方式
- C++ Vjudge 训练题
热门文章
- 微处理器与微型计算机不同,微型计算机与微处理器.ppt
- 武汉新时标文化传媒有限公司抢夺用户最关键的是建立用户认知
- 9024:单链表的遍历与长度计算
- 淘宝店铺流量惨不忍睹!那是因为你没有学会这些操作方法!
- 北京工业大学计算机科学与技术考研真题,北京工业大学计算机科学与技术考研...
- java override例子_java经常碰到的@Override标签
- Spring AOP之PointCut详解
- 工业环保工程案例展示企业网站织梦模板(带手机端)
- 嚼得菜根做得大事·《菜根谭》·十一
- 那如何才能提升沟通效率呢?