1. 引言

本博文主要研究的是 Benedikt Bünz 等人(standford,ethereum,berkeley) 2019年论文《Proofs for Inner Pairing Products and Applications》中的Pairing-based polynomial commitment schemes,其本质为 a generalization of two-tiered commitment scheme from Groth [Gro11] (Groth等人2011年论文EfficientZero-KnowledgeArgumentsfromTwo-Tiered HomomorphicCommitments)。

前序博文为:Proofs for Inner Pairing Products and Applications 学习笔记

以下的“本文”是指:Benedikt Bünz 等人(standford,ethereum,berkeley) 2019年论文《Proofs for Inner Pairing Products and Applications》。

1.1 Polynomial commitment

Polynomial commitment由[KZG10] Kate等人 2010年论文《Constant-Size Commitments to Polynomials and Their Applications》 首次提出,具体是指:

  • committer输出一个short commitment to polynomial;
  • committer输出一个short proof (或者opening),用于证明the correctness of an evaluation of that committed polynomial at any point。

Polynomial commitment (PC) 在很多领域用于reduce communication and computation costs,如:

  • proofs of storage and replication [XYZW16] [Fis18];
  • anonymous credentials [CDHK15] [FHS19];
  • verifiable secret sharing [KZG10] [BDK13];
  • zero-knowledge arguments [WTSTW18] [MBKM19] [Gab19] [Set19] [GWC19] [XZZPS19] [CHMMVW20]。

本文将polynomial commitment与inner product argument结合,构建了a pairing based inner product argument,具有constant-sized commitments、logarithmic-sized openings 和 square root reference string。

本文采用了与[Gro11] 中类似的two-tiered homomorphic commitment,同时支持单变量和双变量多项式。本文提供了一种实例化方式,使得其同时具有public-coin setup, achieving square root verifier time以及upadatable SRS [GKMMM18],achieving log-time verification。

The transparent variant is secure in the plain model under the standard SXDH assumption,而本文的trusted setup scheme is secure in the algebraic group model (AGM) [FKL18]。本文的这种trusted setup scheme 具有的优势主要体现在produce opening proofs的时效上:

  • 对于单变量多项式,opening cost为square root in the degree of the polynomial;
  • 对于双变量多项式,opening cost为linear in the degree of one variable。

1.2 现有各种polynomial commitment对比

双变量polynomial commitment

  • [KZG10] 的trusted setup scheme 支持constant proof size and verifier time (而本文的算法是logarithmic),但是本文的算法quadratically improve the opening efficiency,同时the maximum degree polynomial supported by a SRS of a given size。更小的SRS有助于节约storage,提升setup效率,而且还有助于security。
    Gurk等人在论文[GGW18] 中指出,Cheon‘s attck on q-type assumption [Che10] can degrade the security of some SNARK schemes over BLS12-381 from the advertised 128 bits of security to 114 bits of security。
    [KZG10] 论文中的scheme is secure under an updatable setup in the algebraic group model。

  • [Gro11] 论文中 designed a pairing based “batch product argument” secure under SXDH。该argument可看作是一种类型的polynomial commitment scheme。

  • [BG13] 论文中 Bayer和Groth designed a zero-knowledge proving system to show that a committed value is the correct evaluation of a known polynomial, under discrete-logarithm assumption。

  • [WTSTW18] 论文中 Wahby等人证明了可借用Bulletproofs中的inner product argument 来构建polynomial commitment scheme。

  • [BGH19] 论文中 Bowe等人证明了Bulletproofs的inner product argument 是可highly aggregatable to the point where aggregated proofs can be verified using a one off linear cost and an additional logarithmic factor per proof。

  • [ZXZS19] 论文中使用Reed-Solomon codes构建了polynomial commitment scheme。该论文中的commtiment使用了highly efficient symmetric key primitives,however the protocols that use them require soundness boosting techniques that result in large constant overheads。

  • [BFS19] 论文中 Bünz等人借助groups of unkown order such as RSA groups or class groups构建了polynomial commitment scheme,具有efficient verifier time and small proof size,但是需要super-linear commitment and prover time。

2. two-tiered homomorphic commitments

本文采用的是Groth [Gro11] (Groth等人2011年论文EfficientZero-KnowledgeArgumentsfromTwo-Tiered HomomorphicCommitments) 中的 two-tiered homomorphic commitments,即:commitments to commitments。

假设要commit to a polynomial:
f(X,Y)=f0(Y)+f1(Y)X++fm1(Y)Xm1=i=0m1fi(Y)Xif(X,Y)=f_0(Y)+f_1(Y)X+\cdots+f_{m-1}(Y)X^{m-1}=\sum_{i=0}^{m-1}f_i(Y)X^i

可将polynomial f(X,Y)f(X,Y) 以矩阵形式表示为:【a polynomial of degree m1m-1 in XX and l1l-1 in YY.】
f(X,Y)=(1,X,X2,,Xm1)(a0,0a0,1a0,2a0,l1a1,0a1,1a1,2a1,l1a2,0a2,1a2,2a2,l1am1,0am1,1am1,2am1,l1)(1YY2Yl1)=(1,X,X2,,Xm1)A(1YY2Yl1)f(X,Y)=(1,X,X^2,\cdots,X^{m-1})\begin{pmatrix} a_{0,0} & a_{0,1} & a_{0,2} & \cdots & a_{0,l-1}\\ a_{1,0} & a_{1,1} & a_{1,2} & \cdots & a_{1,l-1}\\ a_{2,0} & a_{2,1} & a_{2,2} & \cdots & a_{2,l-1}\\ \vdots & & & \ddots & \vdots\\ a_{m-1,0} & a_{m-1,1} & a_{m-1,2} & \cdots & a_{m-1,l-1} \end{pmatrix} \begin{pmatrix} 1\\ Y\\ Y^2\\ \cdots \\ Y^{l-1} \end{pmatrix}=(1,X,X^2,\cdots,X^{m-1})\mathcal{A}\begin{pmatrix} 1\\ Y\\ Y^2\\ \cdots \\ Y^{l-1} \end{pmatrix}

于是,polynomial f(X,Y)=i=0m1fi(Y)Xif(X,Y)=\sum_{i=0}^{m-1}f_i(Y)X^i,其中fi(Y)=j=0l1ai,jYjf_i(Y)=\sum_{j=0}^{l-1}a_{i,j}Y^j

则commit to f(X,Y)f(X,Y) 可表示为:

  • 先对polynomials f0(Y),,fm1(Y)f_0(Y),\cdots,f_{m-1}(Y)进行commit,相应的commitment值依次为A0,,Am1A_0,\cdots,A_{m-1}
  • 再对A0,,Am1A_0,\cdots,A_{m-1}进行commit,其commitment值为 T=CM(A0,,Am1)T=CM(A_0,\cdots,A_{m-1})

双变量polynomial commitment
如上图所示,当收到challenge (x,y)(x,y) 时,Prover:

  • 先在第一层 evalute at xx to obtain a commitment AA to f(x,Y)f(x,Y)。可通过multiexponentiation IPP argument (MIPP) 来实现。
  • 然后在第二层 open commitment AA at yy 来获取 eval=f(x,y)eval=f(x,y)。这可利用单变量polynomial commitment scheme来实现。
    – 若在第二层采用Bulletproofs (Bünz等人2018年论文 [BBBPWM18] Bulletproofs: Short Proofs for Confidential Transactions and More)方式来实现,则对应的是transparent version。
    – 若在第二层采用的是KZG方式,则对应的是structured setup version。

2.0 MIPP (multiexponentiation inner pairing product argument)

具体的信息为:

  • public info:vG2m,TGT,AG1,bFm\vec{v}\in\mathbb{G}_2^m,T\in\mathbb{G}_T, A\in\mathbb{G}_1,\vec{b}\in\mathbb{F}^m
  • private info:AG1m\vec{A}\in\mathbb{G}_1^m
  • 待证明:T=Av=e(A0,v0)e(Am1,vm1)A=<A,b>=A0b0Am1bm1T=\vec{A}*\vec{v}=e(A_0,v_0)\cdots e(A_{m-1},v_{m-1})\wedge A=<\vec{A},\vec{b}>=A_0^{b_0}\cdots A_{m-1}^{b_{m-1}}

整个relation表示为:
双变量polynomial commitment

2.1 transparent版本的双变量polynomial commitment【即无需trusted setup】

假设f(X,Y)=i=0m1fi(Y)Xi,fi(Y)=j=0l1ai,jYjf(X,Y)=\sum_{i=0}^{m-1}f_i(Y)X^i,f_i(Y)=\sum_{j=0}^{l-1}a_{i,j}Y^j为 a polynomial of degree m1m-1 in XX and l1l-1 in YY

则commitment key 应包含 ll 个随机选择的generators in G1\mathbb{G}_1mm 个随机选择的generators in G2\mathbb{G}_2
ck=(g0,,gl1)G1l,(v0,,vm1)G2mck=(g_0,\cdots,g_{l-1})\in\mathbb{G}_1^l,(v_0,\cdots,v_{m-1})\in\mathbb{G}_2^m

2.1.1 Commit

进行commit,实际实现为:

  • 首先,生成mm个generalized Pedersen commitments A0,,Am1A_0,\cdots,A_{m-1} to f0(Y),,fm1(Y)f_0(Y),\cdots,f_{m-1}(Y):【即相当于对矩阵A\mathcal{A}逐行进行commit】
    Ai=PedersenCommit(ai,0,,ai,l1)=g0ai,0gl1ai,l1A_i=PedersenCommit(a_{i,0},\cdots,a_{i,l-1})=g_0^{a_{i,0}}\cdots g_{l-1}^{a_{i,l-1}}

  • 然后,计算pairing commitment to the Pedersen commitments:
    T=PairingCommit(A0,,Am1)=i=0m1e(Ai,vi)T=PairingCommit(A_0,\cdots,A_{m-1})=\prod_{i=0}^{m-1}e(A_i,v_i)

于是对双变量多项式的commitment为:
T=e(g0a0,0gl1a0,l1,v0)e(g0am1,0gl1am1,l1,vm1)T=e(g_0^{a_{0,0}}\cdots g_{l-1}^{a_{0,l-1}},v_0)\cdots e(g_0^{a_{m-1,0}}\cdots g_{l-1}^{a_{m-1,l-1}},v_{m-1})

该commitment 在qq-DBP assumption和 DL assumption 下具有binding属性。
双变量polynomial commitment

2.1.2 对第一层进行evaluation

双变量polynomial commitment
先在第一层 evalute at xx to obtain a commitment AA to f(x,Y)f(x,Y)。可通过multiexponentiation IPP argument (MIPP) 来实现。

Transparent版本的MIPP算法为MIPPtransMIPP_{trans},其实现细节为:

  • Setup:commitment key (v0,,vm1)G2m,h^G2(v_0,\cdots,v_{m-1})\in\mathbb{G}_2^m,\hat{h}\in\mathbb{G}_2,这些key之间为随机的,无明确关系。
  • Initialize:Verifier发送a random challege cc,Prover和Verifier均可计算Z=Te(A,h^c)Z=T\cdot e(A,\hat{h}^c)。这样MIPP证明转换为证明Prover知道an opening AA\vec{A}||A to ZZ under the commitment key vh^c\vec{v}||\hat{h}^c,such that A=AbA=\vec{A}^{\vec{b}}

至此,具体信息调整为:【转换为博客 Proofs for Inner Pairing Products and Applications 学习笔记 4.4节中的GIPA证明 】

  • public info:(v,h^c)G2m+1,TGT,AG1,bFm(\vec{v},\hat{h}^c)\in\mathbb{G}_2^{m+1}, T\in\mathbb{G}_T, A\in\mathbb{G}_1,\vec{b}\in\mathbb{F}^m以及inner product commitment (Z,bFm)(Z,\vec{b}\in\mathbb{F}^m)
  • private info:AG1m\vec{A}\in\mathbb{G}_1^m
  • 待证明:CM((v,1,h^c),(A,b,A))=((AA)(vh^c),b)=(Z,b)CM((\vec{v},\vec{1},\hat{h}^c),(\vec{A},\vec{b},A))=((\vec{A}||A)*(\vec{v}||\hat{h}^c),\vec{b})=(Z,\vec{b})【注意,其中b\vec{b}为public info,故对应的commitment key选为1\vec{1}。】

接下来为表述简洁,设置h^=h^c\hat{h}=\hat{h}^c
采用递归算法对以上CMCM算法进行证明,在每一个round都对input vectors A,b\vec{A},\vec{b} 和 commitment key v\vec{v} 进行二分fold为新的vectors A,b,v\vec{A}',\vec{b}',\vec{v}' of length m=m/2m'=m/2,使得Z=(Av)e(A,h^)Z'=(\vec{A}'*\vec{v}')\cdot e(A',\hat{h}) for A=<A,b>A'=<\vec{A}',\vec{b}'>
具体的实现为:

  • 1)Prover的输入为(A,b,v,Z,m)(\vec{A},\vec{b},\vec{v},Z,m),设置m=m/2m'=m/2,计算:
    A=A[m:]xA[:m]\vec{A}'=\vec{A}_{[m':]}^x\circ\vec{A}_{[:m']}
    b=x1b[m:]+b[:m]\vec{b}'=x^{-1}\vec{b}_{[m':]}+\vec{b}_{[:m']} 【Prover和Verifier均需计算】
    v=v[m:]x1v[:m]\vec{v}'=\vec{v}_{[m':]}^{x^{-1}}\circ\vec{v}_{[:m']}【Prover和Verifier均需计算】
    有:
    A=<A,b>=(<A[m:],b[:m]>)xA(<A[:m],b[m:]>)x1A'=<\vec{A}',\vec{b}'>=(<\vec{A}_{[m':]},\vec{b}_{[:m']}>)^x\cdot A\cdot (<\vec{A}_{[:m']},\vec{b}_{[m':]}>)^{x^{-1}}
    Av=(A[m:]v[:m])x(Av)(A[:m]v[m:])x1\vec{A}'*\vec{v}'=(\vec{A}_{[m':]}*\vec{v}_{[:m']})^x\cdot (\vec{A}*\vec{v})\cdot (\vec{A}_{[:m']}*\vec{v}_{[m':]})^{x^{-1}}
    为了使Z=(Av)e(A,h^)Z'=(\vec{A}'*\vec{v}')\cdot e(A',\hat{h}) for A=<A,b>A'=<\vec{A}',\vec{b}'>成立,于是有:
    ZL=(A[m:]v[:m])e(<A[m:],b[:m]>,h^)Z_L=(\vec{A}_{[m':]}*\vec{v}_{[:m']})\cdot e(<\vec{A}_{[m':]},\vec{b}_{[:m']}>,\hat{h})
    ZR=(A[:m]v[m:])e(<A[:m],b[m:]>,h^)Z_R=(\vec{A}_{[:m']}*\vec{v}_{[m':]})\cdot e(<\vec{A}_{[:m']},\vec{b}_{[m':]}>,\hat{h})
    最终:Z=ZLxZZRx1Z'=Z_L^x\cdot Z\cdot Z_R^{x^{-1}}

  • 2)当m1m'\neq 1时,设置(A,b,v,Z,m)=(A,b,v,Z,m)(\vec{A},\vec{b},\vec{v},Z,m)=(\vec{A}',\vec{b}',\vec{v}',Z',m'),继续执行步骤1)。

  • 3)当m=1m'=1时,Prover发送A=AG1,b=b,v=v,Z=ZA=\vec{A}'\in\mathbb{G}_1,b=\vec{b}',v=\vec{v}',Z=Z',Verifier只需验证Z=e(A,v)e(Ab,h^)=e(A,vh^b)Z=e(A,v)e(A^b,\hat{h})=e(A,v\hat{h}^b)是否成立即可。

transparent 版本的MIPP实现MIPPtransMIPP_{trans}的计算复杂度为:
双变量polynomial commitment

2.1.3 使用单变量polynomial commitment对第二层进行evaluation

双变量polynomial commitment

  • 在第一层用于evaluate TT at xx to a commitment AA to f(x,Y)f(x,Y)
  • 在第二层用于evaluate the commitment AA to f(x,y)f(x,y) at yy

第二层的polynomial可表示为f(x,Y)=j=0l1ajYjf(x,Y)=\sum_{j=0}^{l-1}a_jY^j,对其的Pedersen commitment为:
A=g0a0gl1al1=gaA=g_0^{a_0}\cdots g_{l-1}^{a_{l-1}}=\vec{g}^{\vec{a}}

假设eval=f(x,y)eval=f(x,y)
基本信息为:

  • public info:commitment key g=(g0,,gl1)G1l\vec{g}=(g_0,\cdots,g_{l-1})\in\mathbb{G}_1^lb=(1,y,,yl1)Fl,evalF,AG1\vec{b}=(1,y,\cdots,y^{l-1})\in\mathbb{F}^l,eval\in\mathbb{F},A\in\mathbb{G}_1
  • private info:aFl\vec{a}\in \mathbb{F}^l
  • 待证明:A=gaeval=<a,b>A=\vec{g}^{\vec{a}}\wedge eval=<\vec{a},\vec{b}>

双变量polynomial commitment

具体的实现为:

  • Setup:commitment key g=(g0,,gl1)G1l\vec{g}=(g_0,\cdots,g_{l-1})\in\mathbb{G}_1^l以及额外的random value uG1u\in\mathbb{G}_1
  • Initialize:Prover 发送evaleval给Verifier;Verifier发送random challenge cc。Prover和Verifier都计算P=AucevalP=A\cdot u^{c\cdot eval}。接下来,Prover需要证明其知道 a vector a\vec{a} such that (a,eval)(\vec{a},eval) is an evaluation to PP under the commitment key (g,uc)(\vec{g},u^c) such that eval=<a,b>eval=<\vec{a},\vec{b}>

至此,具体信息调整为:【转换为博客 Proofs for Inner Pairing Products and Applications 学习笔记 4.4节中的GIPA证明 】

  • public info:(g,uc)G1l+1,evalF,AG1,bFl(\vec{g},u^c)\in\mathbb{G}_1^{l+1}, eval\in\mathbb{F}, A\in\mathbb{G}_1,\vec{b}\in\mathbb{F}^l以及inner product commitment (PG1,bFl)(P\in\mathbb{G}_1,\vec{b}\in\mathbb{F}^l)
  • private info:aFl\vec{a}\in\mathbb{F}^l
  • 待证明:CM((g,1,uc),(a,b,eval))=(gauceval,b)=(P,b)CM((\vec{g},\vec{1},u^c),(\vec{a},\vec{b},eval))=(\vec{g}^{\vec{a}}u^{c\cdot eval},\vec{b})=(P,\vec{b})【注意,其中b\vec{b}为public info,故对应的commitment key选为1\vec{1}。】

接下来为表述简洁,设置u=ucu=u^c
采用递归算法对以上CMCM算法进行证明,在每一个round都对input vectors a,b\vec{a},\vec{b} 和 commitment key g\vec{g} 进行二分fold为新的vectors a,b,g\vec{a}',\vec{b}',\vec{g}' of length m=m/2m'=m/2,使得P=gauevalP'=\vec{g}'^{\vec{a}'}u^{eval'} for eval=<a,b>eval'=<\vec{a}',\vec{b}'>
具体的实现为:

  • 1)Prover的输入为(a,b,g,P,m)(\vec{a},\vec{b},\vec{g},P,m),设置m=m/2m'=m/2,计算:
    a=xa[m:]+a[:m]\vec{a}'=x\vec{a}_{[m':]}+\vec{a}_{[:m']}
    b=x1b[m:]+b[:m]\vec{b}'=x^{-1}\vec{b}_{[m':]}+\vec{b}_{[:m']} 【Prover和Verifier均需计算】
    g=g[m:]x1g[:m]\vec{g}'=\vec{g}_{[m':]}^{x^{-1}}\circ\vec{g}_{[:m']}【Prover和Verifier均需计算】
    有:
    eval=<a,b>=x(<a[:m],b[m:]>)evalx1(<a[m:],b[:m]>)eval'=<\vec{a}',\vec{b}'>=x(<\vec{a}_{[:m']},\vec{b}_{[m':]}>)\cdot eval \cdot {x^{-1}}(<\vec{a}_{[m':]},\vec{b}_{[:m']}>)
    ga=(g[:m]a[m:])xga(g[m:]a[:m])x1\vec{g}'^{\vec{a}'}=(\vec{g}_{[:m']}^{\vec{a}_{[m':]}})^x\cdot \vec{g}^{\vec{a}}\cdot (\vec{g}_{[m':]}^{\vec{a}_{[:m']}})^{x^{-1}}
    为了使P=gauevalP'=\vec{g}'^{\vec{a}'}u^{eval'} for eval=<a,b>eval'=<\vec{a}',\vec{b}'>成立,于是有:
    PL=g[m:]a[:m]u<a[:m],b[m:]>P_L=\vec{g}_{[m':]}^{\vec{a}_{[:m']}}\cdot u^{<\vec{a}_{[:m']},\vec{b}_{[m':]}>}
    PR=g[:m]v[m:]u<a[m:],b[:m]>P_R=\vec{g}_{[:m']}^{\vec{v}_{[m':]}}\cdot u^{<\vec{a}_{[m':]},\vec{b}_{[:m']}>}
    最终:P=PLxPPRx1P'=P_L^x\cdot P\cdot P_R^{x^{-1}}

  • 2)当m1m'\neq 1时,设置(a,b,g,P,m)=(a,b,g,P,m)(\vec{a},\vec{b},\vec{g},P,m)=(\vec{a}',\vec{b}',\vec{g}',P',m'),继续执行步骤1)。

  • 3)当m=1m'=1时,Prover发送a=aF,b=bF,P=PG1a=\vec{a}'\in\mathbb{F},b=\vec{b}'\in\mathbb{F},P=P'\in\mathbb{G}_1,Verifier只需验证P=gauabP=g^au^{a\cdot b}是否成立即可。

以上RDLR_{DL}关系的证明算法计算复杂度为:
双变量polynomial commitment

2.2 structured setup版本的双变量polynomial commitment【即需要trusted setup】

假设f(X,Y)=i=0m1fi(Y)Xi,fi(Y)=j=0l1ai,jYjf(X,Y)=\sum_{i=0}^{m-1}f_i(Y)X^i,f_i(Y)=\sum_{j=0}^{l-1}a_{i,j}Y^j为 a polynomial of degree m1m-1 in XX and l1l-1 in YY

选择generator gG1,hG2g\in\mathbb{G}_1,h\in\mathbb{G}_2,则commitment key 应包含 ll 个元素 in G1\mathbb{G}_1mm 个 元素 in G2\mathbb{G}_2:【trusted setup,需要选择随机数α,β\alpha,\beta
ck=((g0,,gl1)=(g,gα,,gαl1)G1l,(v0,,vm1)=(h,hβ2,,hβ2m2)G2m)ck=((g_0,\cdots,g_{l-1})=(g,g^{\alpha},\cdots,g^{\alpha^{l-1}})\in\mathbb{G}_1^l,(v_0,\cdots,v_{m-1})=(h,h^{\beta^2},\cdots,h^{\beta^{2m-2}})\in\mathbb{G}_2^m)

2.2.1 commit

进行commit,实际实现为:

  • 首先,生成mm个KZG polynomial commitments A0,,Am1A_0,\cdots,A_{m-1} to f0(Y),,fm1(Y)f_0(Y),\cdots,f_{m-1}(Y):【即相当于对矩阵A\mathcal{A}逐行进行commit】
    Ai=KZGCommit(ai,0,,ai,l1)=g0ai,0gl1ai,l1=gj=0l1ai,jαjA_i=KZGCommit(a_{i,0},\cdots,a_{i,l-1})=g_0^{a_{i,0}}\cdots g_{l-1}^{a_{i,l-1}}=g^{\sum_{j=0}^{l-1}a_{i,j}\alpha^j}

  • 然后,计算pairing commitment to the KZG commitments:
    T=PairingCommit(A0,,Am1)=i=0m1e(Ai,vi)=i=0m1e(Ai,hβ2i)T=PairingCommit(A_0,\cdots,A_{m-1})=\prod_{i=0}^{m-1}e(A_i,v_i)=\prod_{i=0}^{m-1}e(A_i,h^{\beta^{2i}})

于是对双变量多项式的commitment为:
T=e(g,h)i=0m1j=0l1ai,jαjβ2iT=e(g,h)^{\sum_{i=0}^{m-1}\sum_{j=0}^{l-1}a_{i,j}\alpha^j\beta^{2i}}

该commitment 在qq-ASDBP assumption和 qq-SDH assumption 下具有binding属性。

双变量polynomial commitment

2.2.2 MIPP 对第一层进行evaluation

双变量polynomial commitment
先在第一层 evalute at xx to obtain a commitment AA to f(x,Y)f(x,Y)。可通过multiexponentiation IPP argument (MIPP) 来实现。

Structured版本的MIPP算法为MIPPsrsMIPP_{srs},其实现细节为:

  • Setup:commitment key (gβG2,v={hβ2i}i=0m1G2m,h^G2)(g^{\beta}\in\mathbb{G}_2,\vec{v}=\{h^{\beta^{2i}}\}_{i=0}^{m-1}\in\mathbb{G}_2^m,\hat{h}\in\mathbb{G}_2)。而对于Verifier,仅需要gβG2,h^G2g^{\beta}\in\mathbb{G}_2,\hat{h}\in\mathbb{G}_2
  • Initialize:Verifier发送a random challege cc,Prover和Verifier均可计算Z=Te(A,h^c)Z=T\cdot e(A,\hat{h}^c)。这样MIPP证明转换为证明Prover知道an opening AA\vec{A}||A to ZZ under the commitment key vh^c\vec{v}||\hat{h}^c,such that A=<A,b>=AbA=<\vec{A},\vec{b}>=\vec{A}^{\vec{b}}

与2.1.2类似,改为证明CM((v,1,h^c),(A,b,A))=((AA)(vh^c),b)=(Z,b)CM((\vec{v},\vec{1},\hat{h}^c),(\vec{A},\vec{b},A))=((\vec{A}||A)*(\vec{v}||\hat{h}^c),\vec{b})=(Z,\vec{b})

借助博客 Proofs for Inner Pairing Products and Applications 学习笔记 中5.2节的RckR_{ck} 的polynomial commitment 来优化verifier计算recursive commitment key的算力。注意,此处只需关注v\vec{v}即可。且此处不考虑aggregation,设置r=1r=1,于是在最后一个round有:
v=hfv(β)v=h^{f_v(\beta)} for fv(X)=j=0l(xlj1+X2j+1)f_v(X)=\prod_{j=0}^{l}(x_{l-j}^{-1}+X^{2^{j+1}})

最终Verifier仍然是验证Z=e(A,v)e(Ab,h^)=e(A,vh^b)Z=e(A,v)e(A^b,\hat{h})=e(A,v\hat{h}^b)是否成立以及对recursive commitment key vv的相应的KZG proof是否成立。
双变量polynomial commitment
Structured 版本MIPP算法MIPPsrsMIPP_{srs}的计算复杂度为:
双变量polynomial commitment

2.2.3 使用单变量polynomial commitment对第二层进行evaluation

双变量polynomial commitment
Structured setup场景下,第二层的polynomial可表示为f(x,Y)=j=0l1ajYjf(x,Y)=\sum_{j=0}^{l-1}a_jY^j,对其的KZG polynomial commitment为:
A=g0a0gl1al1=gj=0l1ajαjA=g_0^{a_0}\cdots g_{l-1}^{a_{l-1}}=g^{\sum_{j=0}^{l-1}a_j\alpha^j}

假设eval=f(x,y)eval=f(x,y)
基本信息为:

  • public info:commitment key g={gαi}i=0l1G1l\vec{g}=\{g^{\alpha^i}\}_{i=0}^{l-1}\in\mathbb{G}_1^lyF,evalF,AG1y\in\mathbb{F},eval\in\mathbb{F},A\in\mathbb{G}_1
  • private info:aFl\vec{a}\in \mathbb{F}^l
  • 待证明:A=gaeval=j=0l1ajyjA=\vec{g}^{\vec{a}}\wedge eval=\sum_{j=0}^{l-1}a_jy^j

双变量polynomial commitment
证明过程为:
双变量polynomial commitment

3. polynomial commitment + inner product argument

参考资料:

[1] Benedikt Bünz 等人(standford,ethereum,berkeley) 2019年论文《Proofs for Inner Pairing Products and Applications》。
[2] Groth等人2011年论文EfficientZero-KnowledgeArgumentsfromTwo-Tiered HomomorphicCommitments
[3] Kate等人 2010年论文《Constant-Size Commitments to Polynomials and Their Applications

相关文章: