Evaluation 证明协议(朴素版)复杂度分析¶
协议描述文档:Evaluation 证明协议(朴素版)
下面我们先给出一个简单朴素的协议实现,方便理解。
公共输入¶
- MLE 多项式 f~ 的承诺 cm([[f~]]n)
- 求值点 u=(u0,u1,…,un−1)
- 求值结果 v=f~(u)
Witness¶
- MLE 多项式 f~ 在 n 维 HyperCube 上的点值向量 a=(a0,a1,…,a2n−1)
Round 1¶
Prover 发送余数多项式的承诺
- 计算 n 个余数 MLE 多项式, {q~k}k=0n−1
- 构造余数 MLE 多项式所映射到的 Univariate 多项式 q^k=[[q~k]]k,0≤k<n
- 计算并发送它们的承诺:cm(q^0),cm(q^1),…,cm(q^n−1)
f~(X0,X1,…,Xn−1)−v=k=0∑n−1(Xk−uk)⋅q~k(X0,X1,…,Xk−1) Prover 计算,πk=cm(XDmax−2k+1⋅q^k),0≤k<n ,作为 deg(q^k)<2k 的 Degree Bound 证明 ,一并发送给 Verifier
Prover:
- 直接用 Zeromorph 论文 Appendix A.2 的算法能计算出 q~k 在 Hypercube 上的值,即可以得到 Qk 的系数,根据论文的结论,整个算法复杂度为 (2n+1−3) Fadd 以及 (2n−2) Fmul 。这里不计入加法的复杂度,因此计算出 q^k=[[q~k]]k,0≤k<n 的复杂度为 (2n−2) Fmul 。
- 计算 cm(q^0),cm(q^1),…,cm(q^n−1) ,这里涉及 MSM 算法,对于每一个 cm(q^k) ,多项式 qk 的系数有 2k 个,复杂度为 msm(2k,G1) ,因此这一步的总复杂度为
k=0∑n−1msm(2k,G1) - 计算 πk=cm(XDmax−2k+1⋅q^k),0≤k<n ,
- 计算 XDmax−2k+1⋅q^k ,这里涉及多项式的乘法,deg(q^k)=2k−1 ,复杂度记为 polymul(Dmax−2k+1,2k−1) ,因此总复杂度为
k=0∑n−1polymul(Dmax−2k+1,2k−1) - 计算 πk=cm(XDmax−2k+1⋅q^k),0≤k<n ,复杂度为
k=0∑n−1msm(Dmax+1,G1)=n msm(Dmax+1,G1)
因此这一步的总复杂度为
k=0∑n−1polymul(Dmax−2k+1,2k−1)+n msm(Dmax+1,G1)
因此这一轮的总复杂度为
>(2n−2) Fmul+k=0∑n−1msm(2k,G1)+k=0∑n−1polymul(Dmax−2k+1,2k−1)+n msm(Dmax+1,G1)>
💡 这里计算多项式的乘法,XDmax−2k+1⋅q^k 应该可以优化,直接挪动 q^k 的系数就可以了。
Round 2¶
Verifier 发送随机数 ζ∈Fp∗
Prover 计算辅助多项式 r(X) 与商多项式 h(X),并发送 cm(h)
r(X)=[[f~]]n−v⋅Φn(ζ)−k=0∑n−1(ζ2k⋅Φn−k−1(ζ2k+1)−uk⋅Φn−k(ζ2k))⋅q^k(X) - 计算 h(X) 及其承诺 cm(h), 作为 r(X) 在 X=ζ 点取值为零的证明
h(X)=X−ζr(X) Prover:
先根据随机数 ζ 计算出 ζ 的幂次,即 ζ2,…,ζ2n ,涉及 n 次有限域的乘法,复杂度为 n Fmul 。
计算 r(X) ,
- 计算 Φn(ζ),
Φn(ζ)=i=0∑n−1ζ2i
这里可以直接用前面计算出的 ζ 的幂次直接进行累加,涉及到的是有限域的加法,因此不做记录。
- 计算 v⋅Φn(ζ) ,涉及一次有限域乘法,复杂度为 Fmul 。
- 计算 Φn−k−1(ζ2k+1) ,由于
Φn−k−1(X2k+1)=1+X2k+1+X2⋅2k+1+…+X(2n−k−1−1)⋅2k+1
因此
Φn−k−1(ζ2k+1)=1+ζ2k+1+ζ2⋅2k+1+…+ζ(2n−k−1−1)⋅2k+1
这里依然可以通过有限域的加法直接计算得到,同理对于计算 Φn−k(ζ2k) 也是一样的,通过有限域的加法得到。 - 计算 ζ2k⋅Φn−k−1(ζ2k+1)−uk⋅Φn−k(ζ2k) 这里就涉及两次有限域的乘法,复杂度为 2 Fmul , k 次累加就为 2n Fmul 。
- 计算 (ζ2k⋅Φn−k−1(ζ2k+1)−uk⋅Φn−k(ζ2k))⋅q^k(X) ,涉及多项式的乘法,复杂度为 polymul(0,2k−1) 。k 经过累加之后,总复杂度为
k=0∑n−1polymul(0,2k−1)
因此计算 r(X) 的总复杂度为
>Fmul+2n Fmul+k=0∑n−1polymul(0,2k−1)=(2n+1) Fmul+k=0∑n−1polymul(0,2k−1)> 计算 cm(h) ,先计算 h(X) ,其可以用线性除法的方式得到,复杂度与 r(X) 的次数相关,由于 deg(r)=2n−1−1 ,因此这里多项式除法的复杂度为 (2n−1−1) Fmul ,接着计算承诺,其复杂度为 msm(2n−1−1,G1) 。 这里总复杂度为
(2n−1−1) Fmul+msm(2n−1−1,G1)
这一轮的总复杂度为:
(3n+2n−1) Fmul+k=0∑n−1polymul(0,2k−1)+msm(2n−1−1,G1)
Verification¶
Verifier 验证下面的等式
- 构造 cm(r) 的承诺:
cm(r)=cm([[f~]]n)−cm(v⋅Φn(ζ))−i=0∑n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅cm(q^i) - 验证 r(ζ)=0
e(cm(r), [1]2)=e(cm(h),[τ]2−ζ⋅[1]2) - 验证 (π0,π1,…,πn−1) 是否正确,即验证所有的余数多项式的 Degree Bound: deg(q^i)<2i ,对于 0≤i<n
e(cm(q^i),[τDmax−2i+1]2)=e(πi,[1]2),0≤i<n Verifier:
构造 cm(r) 的承诺
- 先根据随机数 ζ 计算出 ζ 的幂次,即 ζ2,…,ζ2n ,涉及 n 次有限域的乘法,复杂度为 n Fmul 。
- cm(v⋅Φn(ζ)) ,复杂度为 Fmul+EccMulG1
- 计算 ∑i=0n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅cm(q^i) ,复杂度为
n(2 Fmul+EccMulG1)+(n−1) EccAddG1=2n Fmul+n EccMulG1+(n−1) EccAddG1 - 计算 cm([[f~]]n)−cm(v⋅Φn(ζ))−∑i=0n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅cm(q^i) ,就是三个椭圆曲线上的点相加,复杂度为 2 EccAddG1 。
构造 r 的承诺的总复杂度为
(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1 验证 r(ζ)=0
- 计算 [τ]2−ζ⋅[1]2 ,复杂度为 EccMulG2+EccAddG2
- 计算 e(cm(r), [1]2) 与 e(cm(h),[τ]2−ζ⋅[1]2) ,涉及两个椭圆曲线上的配对操作,记为 2 P 。
这一步的总复杂度为
EccMulG2+EccAddG2+2 P 验证 (π0,π1,…,πn−1) 是否正确,
e(cm(q^i),[τDmax−2i+1]2)=e(πi,[1]2),0≤i<n 这里每一次涉及的复杂度为 2 P ,因此总复杂度为 2n P 。
这一轮的总复杂度为
>(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1+EccMulG2+EccAddG2+(2n+2) P>
Prover 计算复杂度:
>>>>=>(2n−2) Fmul+k=0∑n−1msm(2k,G1)+k=0∑n−1polymul(Dmax−2k+1,2k−1)+n msm(Dmax+1,G1)+(3n+2n−1) Fmul+k=0∑n−1polymul(0,2k−1)+msm(2n−1−1,G1)(3⋅2n−1+3n−2) Fmul+k=0∑n−1polymul(Dmax−2k+1,2k−1)+k=0∑n−1polymul(0,2k−1)+k=0∑n−1msm(2k,G1)+n msm(Dmax+1,G1)+msm(2n−1−1,G1)>> Verifier 计算复杂度:
>(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1+EccMulG2+EccAddG2+(2n+2) P> 证明大小:
Prover 发送的证明有
>(cm(q^0),cm(q^1),…,cm(q^n−1),π0,…,πn−1,cm(h))> 总计为 (2n+1)G1 .
代入多项式相乘的复杂度 polymul(a,b)=(a+1)(b+1) Fmul=(ab+a+b+1) Fmul ,得到
Prover 复杂度:
==(3⋅2n−1+3n−2) Fmul+k=0∑n−1polymul(Dmax−2k+1,2k−1)+k=0∑n−1polymul(0,2k−1)+k=0∑n−1msm(2k,G1)+n msm(Dmax+1,G1)+msm(2n−1−1,G1)(23N+3n−2) Fmul+((Dmax+2)(N−1)−31(N2−1)) Fmul+(N−1) Fmul+k=0∑n−1msm(2k,G1)+n msm(Dmax+1,G1)+msm(2n−1−1,G1)((Dmax+29)N−31N2+3n−Dmax−314) Fmul+k=0∑n−1msm(2k,G1)+n msm(Dmax+1,G1)+msm(2n−1−1,G1) Verifier 复杂度:
(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1+EccMulG2+EccAddG2+(2n+2) P Proof size:
(2n+1)G1 Evaluation 证明协议(优化版-Degree Bound 聚合)¶
协议描述文档:Evaluation 证明协议(优化版)
公共输入¶
- MLE 多项式 f~ 映射到 Univariate 多项式 f(X)=[[f~]]n 的承诺 cm([[f~]]n)
- 求值点 u=(u0,u1,…,un−1)
- 求值结果 v=f~(u)
Witness¶
- MLE 多项式 f~ 的求值向量 a=(a0,a1,…,a2n−1)
Round 1¶
第一轮:Prover 发送余数多项式的承诺
- 计算 n 个余数 MLE 多项式, {qi}i=0n−1
- 构造余数 MLE 多项式所映射到的 Univariate 多项式 q^i=[[qi]]i,0≤i<n
- 计算并发送它们的承诺:cm(q^0),cm(q^1),…,cm(q^n−1)
f~(X0,X1,…,Xn−1)−v=i=0∑n−1(Xk−uk)⋅qi(X0,X1,…,Xk−1) Prover:
- 直接用 Zeromorph 论文 Appendix A.2 的算法能计算出 qi 在 Hypercube 上的值,即可以得到 Qi 的系数,根据论文的结论,整个算法复杂度为 (2n+1−3) Fadd 以及 (2n−2) Fmul 。这里不计入加法的复杂度,因此计算出 Qi=[[qi]]i,0≤i<n 的复杂度为 (2n−2) Fmul 。
- 计算 cm(q0),cm(q1),…,cm(qn−1) ,这里涉及 MSM 算法,对于每一个 cm(qk) ,多项式 qk 的系数有 2k 个,复杂度为 msm(2k,G1) ,因此这一步的总复杂度为
>k=0∑n−1msm(2k,G1)> 因此这一轮的总复杂度为
>(2n−2) Fmul+k=0∑n−1msm(2k,G1)>
Round 2¶
Verifier 发送随机数 β∈Fp∗ 用来聚合多个 Degree Bound 证明
Prover 构造 qˉ(X) 作为聚合商多项式 {q^i(X)} 的多项式,并发送其承诺 cm(qˉ)
qˉ(X)=i=0∑n−1βi⋅X2n−2iq^i(X) Prover:
- 可以先由随机数 β 计算得到 β2,…,βn−1 ,复杂度为 (n−2) Fmul
- 计算 βi⋅X2n−2iq^i(X) ,为多项式的乘法,复杂度为 polymul(2n−2i,2i−1)+polymul(0,2n−1) ,因此求和相加的复杂度为
=i=0∑n−1(polymul(2n−2i,2i−1)+polymul(0,2n−1))n polymul(0,2n−1)+i=0∑n−1polymul(2n−2i,2i−1) - 计算 cm(qˉ) ,复杂度为 msm(2n,G1)
这一轮的总复杂度为
>(n−2) Fmul+n polymul(0,2n−1)+i=0∑n−1polymul(2n−2i,2i−1)+msm(2n,G1)>
Round 3¶
Verifier 发送随机数 ζ∈Fp∗ ,用来挑战多项式在 X=ζ 处的取值
Prover 计算 h0(X) 与 h1(X)
r(X)=f^(X)−v⋅Φn(ζ)−i=0∑n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅q^i(X) s(X)=qˉ(X)−k=0∑n−1βk⋅ζ2n−2k⋅q^k(X) - 计算商多项式 h0(X) 与 h1(X)
h0(X)=X−ζr(X),h1(X)=X−ζs(X) Prover:
先根据随机数 ζ 计算出 ζ 的幂次,即 ζ2,…,ζ2n ,涉及 n 次有限域的乘法,复杂度为 n Fmul 。
计算 r(X) 复杂度与上面朴素协议的分析一致,复杂度为
>(2n+1) Fmul+k=0∑n−1polymul(0,2k−1)> 计算 s(X)
- βk⋅ζ2n−2k ,复杂度为 Fmul
- βk⋅ζ2n−2k⋅q^k(X) ,复杂度为 polymul(0,2k−1)
因此 计算 s(X)=qˉ(X)−∑k=0n−1βk⋅ζ2n−2k⋅q^k(X) 复杂度为
>n Fmul+k=0∑n−1polymul(0,2k−1)> 计算商多项式 h0(X) 与 h1(X) ,这里可以用线性除法进行计算,由于 deg(r)=2n−1 ,deg(s(X))=2n−1 ,因此这里的复杂度为
>(2n+1−2) Fmul>
因此这一轮的总复杂度为
>>>>=n Fmul+(2n+1) Fmul+k=0∑n−1polymul(0,2k−1)+n Fmul+k=0∑n−1polymul(0,2k−1)+(2n+1−2) Fmul(4n+2n+1−1) Fmul+2k=0∑n−1polymul(0,2k−1)>>
Round 4¶
Verifier 发送随机数 α∈Fp∗ ,用来聚合 h0(X) 与 h1(X)
Prover 计算 h(X) 并发送其承诺 cm(h)
h(X)=(h0(X)+α⋅h1(X))⋅XDmax−2n+2 Prover:
- 计算 h0(X)+α⋅h1(X) ,复杂度为 polymul(0,2n−2) 。
- (h0(X)+α⋅h1(X))⋅XDmax−2n+1 复杂度为 polymul(2n−2,Dmax−2n+1) 。
- 计算 cm(h) 复杂度为 msm(Dmax+1,G1)
这一轮的总复杂度为
>polymul(0,2n−2)+polymul(2n−2,Dmax−2n+1)+msm(Dmax+1,G1)>
Verification¶
Verifier
- 构造 cm(r) 的承诺:
cm(r)=cm(f)−cm(v⋅Φn(ζ))−i=0∑n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅cm(q^i) - 构造 cm(s) 的承诺:
cm(s)=cm(qˉ)−i=0∑n−1βi⋅ζ2n−2i⋅cm(q^i) - 验证 r(ζ)=0 与 s(ζ)=0
e(cm(r)+α⋅cm(s), [τD−2n+2]2)=e(cm(h), [τ]2−ζ⋅[1]2) 证明大小:
在 Verifier 进行验证前,其收到的证明为
>π=(cm(q^0),cm(q^1),…,cm(q^n−1),cm(qˉ),cm(h))> 因此证明的大小为 (n+2) G1 。
Verifier:
构造 cm(r) 的承诺
计算 ζ2,ζ4,…,ζ2n ,复杂度为 n Fmul 。
计算 cm(v⋅Φn(ζ)) 复杂度: Fmul+EccMulG1
计算 ∑i=0n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅cm(q^i)
- (ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅cm(q^i) 复杂度为:2 Fmul+EccMulG1
得到的 n 个 G1 上的点还要相加,因此这步计算的总复杂为 2n Fmul+n EccMulG1+(n−1) EccAddG1
将上边得到的三个 G1 上的点相加,复杂度为 2 EccAddG1 。
因此计算出 cm(r) 的复杂度为
>>>=n Fmul+Fmul+EccMulG1+2n Fmul+n EccMulG1+(n−1) EccAddG1+2 EccAddG1(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1>> 计算 cm(s) 的承诺
先计算出 β2,…,βn−1 ,复杂度为 (n−2) Fmul
计算 βi⋅ζ2n−2i⋅cm(q^i) 复杂度为: Fmul+EccMulG1, 因此求和计算的复杂度不仅有每一项的计算,同时计算完椭圆曲线上的点之后,还要将这 n 个点相加,因此计算 ∑i=0n−1βi⋅ζ2n−2i⋅cm(q^i) 的总复杂度为
>n Fmul+n EccMulG1+(n−1) EccAddG1> 计算 cm(qˉ)−∑i=0n−1βi⋅ζ2n−2i⋅cm(q^i) 的复杂度为两个椭圆曲线 G1 上的点相加,为 EccAddG1 。
因此计算出 cm(s) 的复杂度为
>(2n−2) Fmul+n EccMulG1+n EccAddG1> 验证 r(ζ)=0 与 s(ζ)=0
- 计算 cm(r)+α⋅cm(s) 和 [τ]2−ζ⋅[1]2 的复杂度为 EccMulG1+EccAddG1+EccMulG2+EccAddG2
- 计算 e(cm(r)+α⋅cm(s), [τD−2n+2]2) 与 e(cm(h), [τ]2−ζ⋅[1]2) ,涉及两个椭圆曲线上的配对操作,记为 2 P 。
因此这一步的总复杂度为
>EccMulG1+EccAddG1+EccMulG2+EccAddG2+2 P>
因此在 Verification 阶段的总复杂度为
>>>>>=(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1+(2n−2) Fmul+n EccMulG1+n EccAddG1+EccMulG1+EccAddG1+EccMulG2+EccAddG2+2 P(5n−1) Fmul+(2n+2) EccMulG1+(2n+2) EccAddG1+EccMulG2+EccAddG2+2 P>>
Prover 计算复杂度:
>>>>>>=>>(2n−2) Fmul+k=0∑n−1msm(2k,G1)+(n−2) Fmul+n polymul(0,2n−1)+i=0∑n−1polymul(2n−2i,2i−1)+msm(2n,G1)+(4n+2n+1−1) Fmul+2k=0∑n−1polymul(0,2k−1)+polymul(0,2n−2)+polymul(2n−2,Dmax−2n+1)+msm(Dmax+1,G1)(3⋅2n+5n−5) Fmul+n polymul(0,2n−1)+i=0∑n−1polymul(2n−2i,2i−1)+2k=0∑n−1polymul(0,2k−1)+polymul(0,2n−2)+polymul(2n−2,Dmax−2n+1)+k=0∑nmsm(2k,G1)+msm(Dmax+1,G1)>> Verifier 计算复杂度:
>(5n−1) Fmul+(2n+2) EccMulG1+(2n+2) EccAddG1+EccMulG2+EccAddG2+2 P> 证明大小:
>(n+2) G1>
代入多项式相乘的复杂度 polymul(a,b)=(a+1)(b+1) Fmul=(ab+a+b+1) Fmul ,得到
Prover 复杂度:
==(3⋅2n+5n−5) Fmul+n polymul(0,2n−1)+i=0∑n−1polymul(2n−2i,2i−1)+2k=0∑n−1polymul(0,2k−1)+polymul(0,2n−2)+polymul(2n−2,Dmax−2n+1)+k=0∑nmsm(2k,G1)+msm(Dmax+1,G1)(3N+5n−5) Fmul+nN Fmul+(32N2−32) Fmul+(2N−2) Fmul+(N−1) Fmul+((Dmax+3)N−N2−Dmax−2) Fmul+k=0∑nmsm(2k,G1)+msm(Dmax+1,G1)(−31N2+nN+(Dmax+9)N+5n−332−Dmax) Fmul+k=0∑nmsm(2k,G1)+msm(Dmax+1,G1) Verifier 计算复杂度:
>(5n−1) Fmul+(2n+2) EccMulG1+(2n+2) EccAddG1+EccMulG2+EccAddG2+2 P> 证明大小:
>(n+2) G1>
zeromorph-pcs (degree bound optimized)¶
协议描述文档:Zeromorph-PCS (Part II)
公共输入¶
- MLE 多项式 f~ 映射到 Univariate 多项式 f(X)=[[f~]]n 的承诺 cm(f)
- 求值点 u=(u0,u1,…,un−1)
- 求值结果 v=f~(u)
Witness¶
- MLE 多项式 f~ 的求值向量 a=(a0,a1,…,a2n−1)
Round 1¶
- Prover 计算 n 个余数 MLE 多项式, {q~i}i=0n−1
- Prover 构造余数 MLE 多项式所映射到的 Univariate 多项式 qi=[[q~i]]i,0≤i<n
f~(X0,X1,…,Xn−1)−v=i=0∑n−1(Xi−ui)⋅q~i(X0,X1,…,Xi−1) - Prover 计算并发送它们的承诺:cm(q0),cm(q1),…,cm(qn−1)
Prover Cost:
这一轮和上一个 batched degree bound 协议一样,这一轮的复杂度为
(2n−2) Fmul+k=0∑n−1msm(2k,G1) Round 2¶
- Verifier 发送随机数 β∈Fq∗
- Prover 构造 g(X) 作为聚合多项式 {qi(X)} 的多项式,满足
g(X−1)=i=0∑n−1βi⋅X−2i+1⋅qi(X) - Prover 计算并发送 g(X) 的承诺 cm(g)
Prover Cost:
- 可以先由随机数 β 计算得到 β2,…,βn−1 ,复杂度为 (n−2) Fmul
- 计算 g(X) 的方式可以按下面这种方式计算
g(X)=i=0∑n−1βi⋅X2i−1qi(X−1) X2i−1qi(X−1) 其实是 qi(X) 的系数进行翻转,然后再乘以 βi ,这里的复杂度为 polymul(0,2i−1) ,因此求和相加的复杂度为
i=0∑n−1polymul(0,2i−1) - 计算 cm(g) ,由于 deg(g)=2n−1−1 ,因此复杂度为 msm(2n−1,G1) 。
这一轮的总复杂度为
(n−2) Fmul+i=0∑n−1polymul(0,2i−1)+msm(2n−1,G1) Round 3¶
Verifier 发送随机数 ζ∈Fp∗ ,用来挑战多项式在 X=ζ 处的取值
Prover 计算 g(ζ−1),并计算商多项式 qg(X)
qg(X)=X−ζ−1g(X)−g(ζ−1) - Prover 构造线性化多项式 rζ(X) ,sζ(X)
- 计算 rζ(X) ,
rζ(X)=f(X)−v⋅Φn(ζ)−i=0∑n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅qi(X) - 计算 sζ(X) ,它在 X=ζ 处取值为零
sζ(X)=g(ζ−1)−i∑βiζ2i−1⋅qi(X) - 计算商多项式 wr(X) 与 ws(X)
wr(X)=X−ζrζ(X),ws(X)=X−ζsζ(X) - 计算并发送承诺 cm(qg)
Prover Cost:
- 先根据随机数 ζ 计算出 ζ 的幂次,即 ζ2,…,ζ2n ,涉及 n 次有限域的乘法,复杂度为 n Fmul 。
- 计算 ζ−1 ,复杂度为 Finv 。
- 计算 g(ζ−1) ,用 Horner 求值方法,由于 deg(g)=2n−1−1 ,因此复杂度为 2n−1 Fmul 。
- 计算 qg(X) ,可以使用线性除法,复杂度为 (2n−1−1) Fmul 。
- 计算 rζ(X) ,计算方法与上面的优化协议一致,因此复杂度也是一样的,为
(2n+1) Fmul+k=0∑n−1polymul(0,2k−1) - 计算 sζ(X) ,计算 βi⋅ζ2i−1⋅qi(X) 的复杂度为 Fmul+polymul(0,2i−1) ,因此整体计算 sζ(X) 的复杂度为
n Fmul+i=0∑n−1polymul(0,2i−1) 计算 wr(X) 和 ws(X) ,都可以用多项式的线性除法算法,由于 deg(rζ)=2n−1 , deg(sζ)=2n−1−1 ,因此这一步的复杂度为 (3⋅2n−1−2) Fmul 。
计算 cm(qg) ,复杂度为 msm(2n−1−1,G1) 。
这一轮的总复杂度为
=n Fmul+Finv+2n−1 Fmul+(2n−1−1) Fmul+(2n+1) Fmul+k=0∑n−1polymul(0,2k−1)+n Fmul+i=0∑n−1polymul(0,2i−1)+(3⋅2n−1−2) Fmul+msm(2n−1−1,G1)(5⋅2n−1+4n−2) Fmul+Finv+2k=0∑n−1polymul(0,2k−1)+msm(2n−1−1,G1) Round 4¶
Verifier 发送随机数 α∈Fp∗ ,用来聚合 wr(X) 与 ws(X)
Prover 计算 w(X) 并发送其承诺 cm(w)
w(X)=wr(X)+α⋅ws(X) Prover Cost:
- 计算 wr(X)+α⋅ws(X) ,复杂度为 polymul(0,2n−1−2) 。
- 计算 cm(w) ,由于 deg(w(X))=2n−2 ,因此复杂度为 msm(2n−1,G1) 。
这一轮的总复杂度为
polymul(0,2n−1−2)+msm(2n−1,G1) Proof¶
总共 n+3 个 G1 ,1 个 Fq:
π=(cm(q0),cm(q1),…,cm(qn−1),cm(g),cm(qg),cm(w),g(ζ−1)) Proof size:
(n+3)⋅G1+Fq Verification¶
Verifier
- 构造 cm(rζ) 的承诺:
cm(rζ)=cm(f)−cm(v⋅Φn(ζ))−i=0∑n−1(ζ2i⋅Φn−i−1(ζ2i+1)−ui⋅Φn−i(ζ2i))⋅cm(qi) - 构造 cm(sζ) 的承诺:
cm(sζ)=g(ζ−1)⋅[1]1−i=0∑n−1βi⋅ζ−2i+1⋅cm(qi) - 验证 rζ(ζ)=0 与 sζ(ζ)=0
e(cm(rζ)+α⋅cm(sζ), [1]2)=e(cm(w), [τ]2−ζ⋅[1]2) 转换下,可以得到下面的 Pairing 等式:
e(cm(rζ)+α⋅cm(sζ)+ζ⋅cm(w), [1]2)=e(cm(w), [τ]2) - 验证 g(ζ−1) 的正确性
e(cm(g)−g(ζ−1)⋅[1]1+ζ−1⋅cm(qg), [1]2)=e(cm(qg), [τ]2) Verifier Cost:
- 构造 cm(rζ) ,复杂度与上面的优化协议一致,为
(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1 =Finv+EccMulG1+(n−2) Fmul+n Fmul+n EccMulG1+(n−1) EccAddG1+EccAddG1(2n−2) Fmul+Finv+(n+1) EccMulG1+n EccAddG1 - 验证 rζ(ζ)=0 与 sζ(ζ)=0
- 计算 cm(rζ)+α⋅cm(sζ)+ζ⋅cm(w) ,复杂度为 2 EccMulG1+2 EccAddG1 。
- 计算 e(cm(rζ)+α⋅cm(sζ)+ζ⋅cm(w),[1]2) 与 e(cm(w),[τ]2) ,复杂度为 2 P 。
因此这一步的总复杂度为 2 EccMulG1+2 EccAddG1+2 P 。
可以将 3 和 4 中的 pairing 进行合并,即验证
e(cm(rζ)+α⋅cm(sζ)+ζ⋅cm(w)+cm(g)−g(ζ−1)⋅[1]1+ζ−1⋅cm(qg),[1]2)=?e(cm(w)+cm(qg),[τ]2) 复杂度为 4 EccMulG1+6 EccAddG1+2 P
因此在 Verification 阶段的总复杂度为
=(3n+1) Fmul+(n+1) EccMulG1+(n+1) EccAddG1+(2n−2) Fmul+Finv+(n+1) EccMulG1+n EccAddG1+4 EccMulG1+6 EccAddG1+2 P(5n−1) Fmul+Finv+(2n+6) EccMulG1+(2n+7) EccAddG1+2 P Prover 计算复杂度:
=(2n−2) Fmul+k=0∑n−1msm(2k,G1)+(n−2) Fmul+i=0∑n−1polymul(0,2i−1)+msm(2n−1,G1)+(5⋅2n−1+4n−2) Fmul+Finv+2k=0∑n−1polymul(0,2k−1)+msm(2n−1−1,G1)+polymul(0,2n−1−2)+msm(2n−1,G1)(27⋅2n+5n−6) Fmul+Finv+3k=0∑n−1polymul(0,2k−1)+polymul(0,2n−1−2)+k=0∑nmsm(2k,G1)+msm(2n−1,G1)+msm(2n−1−1,G1)+msm(2n−1,G1) 即
(27⋅2n+5n−6) Fmul+Finv+3k=0∑n−1polymul(0,2k−1)+polymul(0,2n−1−2)+k=0∑nmsm(2k,G1)+msm(2n−1,G1)+msm(2n−1−1,G1)+msm(2n−1,G1) Verifier 计算复杂度:
(5n−1) Fmul+Finv+(2n+6) EccMulG1+(2n+7) EccAddG1+2 P 证明大小:
(n+3)⋅G1+Fq