优化版本 1¶
下面的协议证明一个 MLE 多项式 f~(X0,X1,…,Xn−1) 在点 u=(u0,u1,…,un−1) 处的值 v=f~(u0,u1,…,un−1) 。其中 f~(X0,X1,…,Xn−1) 表示为如下的系数形式:
f~(X0,X1,…,Xn−1)=i=0∑n−1fi⋅X0i0X1i1⋯Xn−1in−1 公共输入¶
- 向量 f=(f0,f1,…,fn−1) 的承诺 Cf
Cf=KZG10.Commit(f) 求值点 u=(u0,u1,…,un−1)
v=f~(u0,u1,…,un−1)
Witenss¶
- 多项式 f(X) 的系数 f0,f1,…,fn−1
Round 1¶
- Prover 计算 h1(X),h2(X),…,hn−1(X),使得:
hi+1(X2)=2hi(X)+hi(−X)+ui⋅2Xhi(X)−hi(−X) 其中 h0(X)=f(X)
- Prover 计算承诺 (H1,H2,…,Hn−1),使得:
Hi+1=KZG10.Commit(hi+1(X)) - Prover 发送 (H1,H2,…,Hn−1)
Prover:
- 对于 i=1,…,n−1 计算多项式 hi ,其计算公式为
>hi(X)=he(i−1)(X)+ui−1⋅ho(i−1)(X)> 💡 这里 prover 不需要计算和发送 hn(X) 的原因是最后一个为常数多项式,其应该就等于求值的结果 v ,Verifier 可以通过对 hn−1(X) 进行 oracle 来进行验证。
那么计算 hi(X) 就按上式进行计算,hi−1(X) 的系数是已知的,he(i−1)(X) 和 ho(i−1)(X) 的系数就分别是 hi−1(X) 系数的偶数项和奇数项,因此主要的复杂度在计算 ui−1⋅ho(i−1)(X) ,这里涉及有限域元素的乘积,hi−1(X) 的系数有 2n−(i−1) 个,那么 ho(i−1)(X) 的系数取 hi−1(X) 的奇数项系数,因此系数有 2n−(i−1)−1=2n−i 个,因此分别计算 ui−1 与这些系数相乘的复杂度为 2n−i Fmul 。
因此计算 h1(X),…,hn−1(X) 的复杂度为
>i=1∑n−12n−i Fmul=(2n−2) Fmul> 计算 H1=[h1(τ)]1,…,Hn−1=[hn−1(τ)]1 的复杂度为
>i=1∑n−1msm(2n−i,G1)=i=1∑n−1msm(2i,G1)>
因此这一轮的计算复杂度总共为
>(2n−2) Fmul+i=1∑n−1msm(2i,G1)>
Round 2¶
Verifier 发送随机点 β∈Fp
Prover 计算 h0(β),h1(β),…,hn−1(β)
Prover 计算 h0(−β),h1(−β),…,hn−1(−β)
Prover 计算 h0(β2)
Prover 发送 {hi(β),hi(−β)}i=0n−1,以及 h0(β2)
Prover:
- 计算 β2 复杂度为 Fmul ,计算 −β 只涉及有限域上的加减操作,因此不做计入。
- 使用 Horner 的方法求一个点在多项式处的值,多项式的系数有多少个就会涉及多少个有限域上的乘法操作,因此计算 {hi(β),hi(−β)}i=0n−1 复杂度为
2i=0∑n−12n−i Fmul=(2n+1−4) Fmul - 计算 h0(β2) 的复杂度为 2n Fmul
因此这一轮的总复杂度为
Fmul+(2n+1−4) Fmul+2n Fmul=(3⋅2n−3) Fmul 🎈 代码中 Prover 也计算了 {hi(β2)}i=1n−1 的值,其实可以不用计算,可以节省 Prover 的计算量,这样的话 Verifier 需要在验证阶段自己计算这些值,增加了 Verifier 一些计算量。
# Compute evaluations of h_i(X) at beta, -beta, beta^2
evals_pos = []
evals_neg = []
evals_sq = []
for i in range(k):
poly = h_poly_vec[i]
poly_at_beta = UniPolynomial.evaluate_at_point(poly, beta)
poly_at_neg_beta = UniPolynomial.evaluate_at_point(poly, -beta)
poly_at_beta_sq = UniPolynomial.evaluate_at_point(poly, beta * beta)
evals_pos.append(poly_at_beta)
evals_neg.append(poly_at_neg_beta)
evals_sq.append(poly_at_beta_sq)
Round 3¶
Verifier 发送随机值 γ∈Fp,用于聚合多个多项式
Prover 计算 h(X)
h(X)=h0(X)+γ⋅h1(X)+γ2⋅h2(X)+⋯+γn−1⋅hn−1(X) - 定义一个新的 Domain D,包含 3 个元素:
D={β,−β,β2} - Prover 计算二次多项式 h∗(X) 使得它在 D 上取值等于 h(X) 的取值:
h∗(X)=h(β)⋅2β(β−β2)(X+β)(X−β2)+h(−β)⋅2β(β2+β)(X−β)(X−β2)+h(β2)⋅β4−β2X2−β2 - Prover 计算商多项式 q(X)
q(X)=(X2−β2)(X−β2)h(X)−h∗(X) - Prover 计算 q(X) 的承诺 Cq
Cq=KZG10.Commit(q(X)) - Prover 发送 Cq
Prover:
- 先计算出 γ2,…,γn−1 ,复杂度为 (n−2) Fmul 。
- 计算 h(X) ,复杂度主要来自 γi⋅hi(X) ,这里涉及有限域上的乘法,需要将 γi 去分别乘以多项式 hi(X) 的各个系数,因此系数有多少个就涉及多少次有限域上的乘法草组欧,最后再将这些多项式相加,这里就只涉及有限域的加法操作了,因此计算出 h(X) 的复杂度为
i=1∑n−12n−i Fmul=(2n−2) Fmul 计算 h∗(X) ,
h∗(X)=h(β)⋅2β(β−β2)(X+β)(X−β2)+h(−β)⋅2β(β2+β)(X−β)(X−β2)+h(β2)⋅β4−β2X2−β2 如果按上式的计算方式计算
- 计算 β4 ,复杂度为 Fmul
- 计算分母 2β(β−β2),2β(β2+β),β4−β2 ,复杂度为 2 Fmul
- 计算分母 2β(β−β2),2β(β2+β),β4−β2 的逆元,复杂度为 3 Finv
- 用上一步计算的逆元,再分别乘以 h(β),h(−β),h(β2) ,复杂度为 3 Fmul
- 分子的三个多项式都可以直接展开构造,分别为
X2+(β−β2)X−β3X2−(β+β2)X+β3X2−β2 这里要计算 β3 ,复杂度为 Fmul 。
2 Fmul+2 Fmul+Fmul=5 Fmul 因此计算 h∗(X) 的总复杂度为
(1+2+3+1+5) Fmul+3 Finv=12 Fmul+3 Finv 🎈 代码里直接用的是将这三个点 (β,h(β)),(−β,h(−β)),(β2,h(β2)) 直接进行插值,用的是 Barycenreic 插值方法。
计算商多项式 q(X) ,分母为三个一次多项式相乘,分子为 h(X)−h∗(X) ,然后和分母的多项式相除,因此复杂度为
polymul(1,1)+polymul(2,1)+polydiv(2n−1,3) - 计算 Cq ,多项式 q((X) 的次数为 deg(q)=2n−1−3=2n−4 ,因此计算 Cq 的复杂度为
msm(2n−3,G1) 因此这一轮的总复杂度为
=(n−2) Fmul+(2n−2) Fmul+12 Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polydiv(2n−1,3)+msm(2n−3,G1)(2n+n+8) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polydiv(2n−1,3)+msm(2n−3,G1) Round 4¶
Verifier 发送随机点 ζ∈Fp
Prover 计算线性化多项式 r(X),它在 X=ζ 处取值为 0,即 r(ζ)=0:
r(X)=h(X)−h∗(ζ)−(ζ2−β2)(ζ−β2)⋅q(X) - Prover 计算商多项式 w(X)
w(X)=(X−ζ)r(X) - Prover 计算 w(X) 的承诺 Cw:
Cw=KZG10.Commit(w(X)) - Prover 发送 Cw
Prover:
计算 ζ2 ,复杂度为 Fmul
计算 r(X)
- 计算 h∗(ζ) ,由于 deg(h∗)=2 ,因此计算该多项式在一个点的取值的复杂度为 3 Fmul
- 计算 (ζ2−β2)(ζ−β2) ,涉及一次有限域的乘法,复杂度为 Fmul
- 计算 (ζ2−β2)(ζ−β2)⋅q(X) ,deg(q)=2n−4 ,因此这里的复杂度为 polymul(0,2n−4)
因此计算 r(X) 的总复杂度为
4 Fmul+polymul(0,2n−4) 计算商多项式 w(X) ,可以用线性除法,被除的多项式的次数为多少,就涉及多少的有限域上的乘法操作,由于 deg(r)=2n−1 ,因此这一步的复杂度为 (2n−1) Fmul 。
计算 Cw ,复杂度为 msm(2n−1,G1) 。
这一轮的总复杂度为
=Fmul+4 Fmul+polymul(0,2n−4)+(2n−1) Fmul+msm(2n−1,G1)(2n+4) Fmul+polymul(0,2n−4)+msm(2n−1,G1) Prover 总复杂度¶
将上面的所有复杂度进行汇总,为
=(2n−2) Fmul+i=1∑n−1msm(2i,G1)+(3⋅2n−3) Fmul+(2n+n+8) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polydiv(2n−1,3)+msm(2n−3,G1)+(2n+4) Fmul+polymul(0,2n−4)+msm(2n−1,G1)(6⋅2n+n+7) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polymul(0,2n−4)+polydiv(2n−1,3)+i=1∑n−1msm(2i,G1)+msm(2n−3,G1)+msm(2n−1,G1) 用 polynomial long division 方法,有
polydiv(N,k)=(N−k+1) Finv+(kN−k2+k) Fmul 可以得到
polydiv(2n−1,3)=(N−1−3+1) Finv+(3(N−1)−32+3) Fmul=(N−3) Finv+(3N−9) Fmul 因此复杂度为
==(6⋅2n+n+7) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polymul(0,2n−4)+polydiv(2n−1,3)+i=1∑n−1msm(2i,G1)+msm(2n−3,G1)+msm(2n−1,G1)(6N+n+7) Fmul+3 Finv+4 Fmul+6 Fmul+(N−3) Fmul+(N−3) Finv+(3N−9) Fmul+i=1∑n−1msm(2i,G1)+msm(2n−3,G1)+msm(2n−1,G1)(10N+n+5) Fmul+N Finv+i=1∑n−1msm(2i,G1)+msm(N−3,G1)+msm(N−1,G1) 证明表示¶
可以看出,证明包括 n+1 个 G1 元素,包括 2n+1 个 Fp 元素。
π=(H1,H2,…,Hn−1,Cq,Cw,{hi(β),hi(−β)}i=0n−1,h0(β2)) 证明大小:
(n+1) G1+(2n+1) Fp Verification¶
- Verifier 计算 (h1(β2),h2(β2),…,hn−1(β2))
hi+1(β2)=2hi(β)+hi(−β)+ui⋅2βhi(β)−hi(−β) - Verifier 检查 hn(β2) 是否等于所要证明的多项式求值 v=f~(u)
hn(β2)=?v - Verifier 计算 h(X) 的承诺 Ch
Ch=Cf+γ⋅H1+γ2⋅H2+⋯+γn−1⋅Hn−1 - Verifier 计算 rζ(X) 的承诺 Cr:
Cr=Ch−h∗(ζ)⋅[1]1−(ζ2−β2)(ζ−β2)⋅Cq - Verifier 检查 Cw 是否为 Cr 在 X=ζ 处的求值证明:
KZG10.Verify(Cr,ζ,0,Cw)=?1 或者直接展开为 Pairing 形式:
e(Cr+ζ⋅Cw,[1]2)=?e(Cw,[τ]2) Verifier:
- 计算 h1(β2),…,hn−1(β2)
计算 β2 ,复杂度为 Fmul
对于每一个 hi+1(β2) ,计算 2,2β 的逆元,再分别与分子相乘,复杂度为 2 Finv+2 Fmul ,后面一项计算好后和 ui 相乘,因此计算一项的复杂度为 2 Finv+3 Fmul ,总共有 n−1 项
是不是计算少写一项?
因此这一步的总复杂度为
Fmul+(2n−2) Finv+(3n−3) Fmul=(3n−2) Fmul+(2n−2) Finv - 计算 Ch
- 先计算 γ2,…,γn−1 ,复杂度为 (n−2) Fmul
- 计算 γ⋅H1,…,γn−1⋅Hn−1 ,复杂度为 (n−1) EccMulG1
- 将 n 个椭圆曲线上的点相加得到 Ch ,复杂度为 (n−1) EccAddG1
这一步计算总复杂度为
(n−2) Fmul+(n−1) EccMulG1+(n−1) EccAddG1 - 计算 Cr
计算 h∗(ζ) ,通过 bary-centric 插值方式,verifier 自己计算得到
这里分析的思路与 ph23 协议中的分析一致,这里 h∗(X) 是由 3 个点值对插值得到的,
h∗(X)=X−βω0^+X+βω1^+X−β2ω2^h(β)⋅X−βω0^+h(−β)⋅X+βω1^+h(β2)⋅X−β2ω2^ 其中
ω0^=(β+β)(β−β2)ω1^=(−β−β)(−β−β2)ω2^=(β2−β)(β2−(−β)) 这里由于 β 是随机产生的,因此没有办法预计算,复杂度为 3 Fmul 。
将 ζ 代入 h∗(X) 的表达式来计算 h∗(ζ) ,即
h∗(ζ)=ζ−βω0^+ζ+βω1^+ζ−β2ω2^h(β)⋅ζ−βω0^+h(−β)⋅ζ+βω1^+h(β2)⋅ζ−β2ω2^ 这里不详细列出方法,复杂度分析与 ph23 中的分析一致,对于一个长度为 n 的点值对,这一步计算的复杂度为 (2n+1) Fmul+(n+1) Finv ,因此这里计算的复杂度为 7 Fmul+4 Finv 。
因此计算 h∗(ζ) 的总复杂为
10 Fmul+4 Finv 计算 [h∗(ζ)]1 ,复杂度为 EccMulG1
计算 (ζ2−β2)(ζ−β2)⋅Cq ,计算 ζ2 复杂度为 Fmul ,计算 (ζ2−β2)(ζ−β2) 复杂度为 Fmul ,计算 (ζ2−β2)(ζ−β2)⋅Cq 复杂度为 EccMulG1 ,总复杂度为
2 Fmul+EccMulG1 - 计算 Cr ,三个椭圆曲线 G1 上的点进行相加减,复杂度为 2 EccAddG1
这一步的总复杂度为
=10 Fmul+4 Finv+EccMulG1+2 Fmul+EccMulG1+2 EccAddG112 Fmul+4 Finv+2 EccMulG1+2 EccAddG1 - 通过 Pairing 的形式进行验证
e(Cr+ζ⋅Cw,[1]2)=?e(Cw,[τ]2) - 计算 Cr+ζ⋅Cw 复杂度为 EccMulG1+EccAddG1
- 再计算两个 pairing ,复杂度为 2 P
这一步的总复杂度为
EccMulG1+EccAddG1+2 P Verifier 复杂度¶
汇总 Verifier 所有的计算复杂度,为
=(3n−2) Fmul+(2n−2) Finv+(n−2) Fmul+(n−1) EccMulG1+(n−1) EccAddG1+12 Fmul+4 Finv+2 EccMulG1+2 EccAddG1+EccMulG1+EccAddG1+2 P(4n+8) Fmul+(2n+2) Finv+(n+1) EccMulG1+(n+2) EccAddG1+2 P Prover’s cost:
(6⋅2n+n+7) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polymul(0,2n−4)+polydiv(2n−1,3)+i=1∑n−1msm(2i,G1)+msm(2n−3,G1)+msm(2n−1,G1) 化简有
(10N+n+5) Fmul+N Finv+i=1∑n−1msm(2i,G1)+msm(N−3,G1)+msm(N−1,G1) Verifier’s cost:
(4n+8) Fmul+(2n+2) Finv+(n+1) EccMulG1+(n+2) EccAddG1+2 P Proof size:
(2n+1)Fp+(n+1)⋅G1 优化版本 2¶
优化技巧:
本文介绍一个不同的优化协议,它采用了 FRI 协议的 Query-phase 中选取点的思路,对 h0(X) 挑战 X=β 求值,进而对折叠后的多项式 h1(X) 挑战 X=β2,依次类推,直到 hn−1(β2n−1) 。这样做的好处是,每一次 hi(X) 的打开点可以在验证 hi+1(X) 的折叠时复用,从而总共可以节省 n 个打开点。
证明目标:一个 n 个变量的 MLE 多项式 f~(X0,X1,…,Xn−1) 在点 u=(u0,u1,…,un−1) 处的值 v=f~(u0,u1,…,un−1) 。
其中 MLE 多项式 f~(X0,X1,…,Xn−1) 表示为如下的系数形式:
f~(X0,X1,…,Xn−1)=i=0∑n−1ci⋅X0i0X1i1⋯Xn−1in−1 公共输入¶
- 向量 c=(c0,c1,…,cn−1) 的承诺 Cf
Cf=KZG10.Commit(c) 求值点 u=(u0,u1,…,un−1)
v=f~(u0,u1,…,un−1)
Witness¶
- 多项式 f(X) 的系数 c=(c0,c1,…,cn−1)
Round 1¶
- Prover 记 h0(X)=f(X),然后计算折叠多项式 h1(X),h2(X),…,hn−1(X),使得:
hi+1(X2)=2hi(X)+hi(−X)+ui⋅2Xhi(X)−hi(−X) - Prover 计算承诺 (Ch1,Ch2,…,Chn−1),使得:
Chi+1=KZG10.Commit(hi+1(X)) - Prover 发送 (Ch1,Ch2,…,Chn−1)
这一轮的计算方式和优化版本 1 一样,因此计算复杂度相同,为
(2n−2) Fmul+i=1∑n−1msm(2i,G1) Round 2¶
Verifier 发送随机点 β∈Fp
Prover 计算 h0(β)
Prover 计算 h0(−β),h1(−β2),…,hn−1(−β2n−1)
Prover 发送 (h0(β),h0(−β),h1(−β2),…,hn−1(−β2n−1))
Prover:
- 计算 β2,…,β2n−1 ,复杂度为 (n−1) Fmul 。
- 计算 h0(β),h0(−β),…,hn−1(−β2n−1) ,复杂度为
2n Fmul+i=0∑n−12n−i Fmul=(3⋅2n−2) Fmul 因此这一轮的总复杂度为
(n−1) Fmul+(3⋅2n−2) Fmul=(3⋅2n+n−3) Fmul Round 3¶
Verifier 发送随机值 γ∈Fp,用于聚合多个多项式
Prover 计算 q(X) ,满足下面的等式
q(X)=X−βh0(X)−h0(β)+i=0∑n−1γi+1⋅X+β2ihi(X)−hi(−β2i) - 定义一个新的 Domain D,包含 3 个元素:
D={β,−β,−β2,…,−β2n−1} - Prover 计算发送承诺 Cq=KZG10.Commit(q(X))
Prover:
- 先计算出 γ2,…,γn ,复杂度为 (n−1) Fmul 。
- 计算 γi+1⋅(hi(X)−hi(−β2i)) ,复杂度为 polymul(0,2n−i) ,得到多项式再与 (X−(β2i)) 相除,这里可以用线性除法,复杂度为 2n−i Fmul ,加上 q(X) 中的第一项,整个计算出 q(X) 的复杂度为
2n Fmul+i=0∑n−1(polymul(0,2n−i)+2n−i Fmul)=(3⋅2n−2) Fmul+i=0∑n−1polymul(0,2i+1) - 最后计算 Cq ,复杂度为 msm(2n−1,G1) .
因此这一轮的总复杂度为
(n−1) Fmul+(3⋅2n−2) Fmul+i=0∑n−1polymul(0,2i+1)+msm(2n−1,G1)=(3⋅2n+n−3) Fmul+i=0∑n−1polymul(0,2i+1)+msm(2n−1,G1) Round 4¶
Verifier 发送随机点 ζ∈Fq
Prover 计算线性化多项式 Lζ(X),它在 X=ζ 处取值为 0,即 Lζ(ζ)=0:
Lζ(X)=vD(ζ)⋅q(X)−ζ−βvD(ζ)⋅(h0(X)−h0(β))−i=0∑n−1γi+1⋅ζ+β2ivD(ζ)⋅(hi(X)−hi(−β2i)) - Prover 计算商多项式 w(X)
w(X)=(X−ζ)Lζ(X) - Prover 计算并发送 w(X) 的承诺 Cw:
Cw=KZG10.Commit(w(X)) 复杂度分析:
- 计算 Lζ(X)
计算 γ2,…,γn ,复杂度为 (n−1) Fmul 。
计算 vD(ζ) ,
vD(ζ)=(ζ−β)(ζ−(−β))⋯(ζ−(−β2n−1)) D 中总共有 n+1 个元素,因此这里是 n+1 个元素相乘,复杂度为 n Fmul 。
计算 Lζ(X) 的复杂度为
polymul(0,2n−2)+Finv+Fmul+polymul(0,2n)+i=0∑n−1(Finv+2 Fmul+polymul(0,2n−i))=(2n+1) Fmul+(n+1) Finv+i=0∑n−1polymul(0,2i+1)+polymul(0,2n−2)+polymul(0,2n) 计算 w(X) ,这里依然可以用线性除法方式,分子的次数是多少,那么复杂度就涉及多少次的乘法操作,由于 deg(w)=2n ,因此这一步的复杂度为 2n Fmul。
计算 Cw ,复杂度为 msm(2n−1,G1) 。
因此这一轮的复杂度为
=(2n+1) Fmul+(n+1) Finv+i=0∑n−1polymul(0,2i+1)+polymul(0,2n−2)+polymul(0,2n)+2n Fmul+msm(2n−1,G1)(2n+2n+1) Fmul+(n+1) Finv+i=0∑n−1polymul(0,2i+1)+polymul(0,2n−2)+polymul(0,2n)+msm(2n−1,G1) 证明表示¶
可以看出,单次证明包括 n+1 个 G1 元素,包括 n+1 个 Fq 元素。
π=(Cf1,Cf2,…,Cfn−1,Cq,Cw,h0(β),h0(−β),h1(−β2),…,hn−1(−β2n−1)) 证明大小为
(n+1)⋅G1+(n+1)⋅Fp Verification¶
- Verifier 计算 (h1(β2),h2(β22),…,hn−1(β2n−1),hn(β2n))
hi+1(β2i+1)=2hi(β2i)+hi(−β2i)+ui⋅2β2ihi(β2i)−hi(−β2i) - Verifier 检查 hn(β2n) 是否等于所要证明的多项式求值 v=f~(u)
hn(β2n)=?v - Verifier 计算 Lζ(X) 的承诺 CL:
CL=vD(ζ)⋅Cq−e0⋅(Ch0−h0(β)⋅[1]1)−i=0∑n−1ei+1⋅(Chi−hi(−β2i)⋅[1]1) 这里 e0,e1,…,en 定义如下:
e0ei+1=ζ−βvD(ζ)=γi+1⋅ζ+β2ivD(ζ),i=0,1,…,n−1 - Verifier 检查 Cw 是否为 CL 在 X=ζ 处的求值证明:
KZG10.Verify(CL,ζ,0,Cw)=?1 或者直接展开为 Pairing 形式:
e(CL+ζ⋅Cw,[1]2)=?e(Cw,[τ]2) Verifier:
- 计算 h1(β2),…,hn(ββ2n)
- 计算 β2,β22,…,β2n ,复杂度为 n Fmul
- 对于每一个 hi+1(β2i+1) ,计算 2,2β2i 的逆元,再分别与分子相乘,复杂度为 2 Finv+2 Fmul ,后面一项计算好后和 ui 相乘,因此计算一项的复杂度为 2 Finv+3 Fmul ,总共有 n 项
因此这一步的总复杂度为
n Fmul+2n Finv+3n Fmul=4n Fmul+2n Finv - 计算 CL
先计算 vD(ζ) ,
vD(ζ)=(ζ−β)(ζ−(−β))⋯(ζ−(−β2n−1)) D 中总共有 n+1 个元素,因此这里是 n+1 个元素相乘,复杂度为 n Fmul 。
计算 e0 ,分母求逆后和分子相乘,复杂度为 Finv+Fmul 。
计算出 γ2,…,γn ,复杂度为 (n−1) Fmul 。
计算 ei+1 ,分母求逆后和分子相乘,再和 γi+1 相乘,复杂度为 Finv+2 Fmul ,i=0,1,…,n−1 ,总共有 n 项,因此这里总复杂度为 n Finv+2n Fmul 。
计算
i=0∑n−1ei+1⋅(Chi−hi(−β2i)⋅[1]1) 计算 ei+1⋅(Chi−hi(−β2i)⋅[1]1) 复杂度为 2 EccMulG1+EccAddG1 ,总复杂度为 2n EccMulG1+n EccAddG1+(n−1) EccAddG1 ,即 2n EccMulG1+(2n−1) EccAddG1 。
- 计算 e0⋅(Ch0−h0(β)⋅[1]1) ,复杂度为 2 EccMulG1+EccAddG1 。
- 计算 CL ,先计算出 vD(ζ)⋅Cq ,复杂度为 EccMulG1 ,接着三个椭圆曲线上的点相加,因此这里的总复杂度为 EccMulG1+2 EccAddG1 。
因此这一步的总复杂度为
=n Fmul+Finv+Fmul+(n−1) Fmul+n Finv+2n Fmul+2n EccMulG1+(2n−1) EccAddG1+2 EccMulG1+EccAddG1+EccMulG1+2 EccAddG14n Fmul+(n+1) Finv+(2n+3) EccMulG1+(2n+2) EccAddG1 - 最后一步进行检查,用 Pairing 形式
e(CL+ζ⋅Cw,[1]2)=?e(Cw,[τ]2) - 计算 CL+ζ⋅Cw 复杂度为 EccMulG1+EccAddG1
- 再计算两个 pairing ,复杂度为 2 P
这一步的总复杂度为
EccMulG1+EccAddG1+2 P Verifier 复杂度¶
汇总 Verifier 所有的计算复杂度,为
4n Fmul+2n Finv+4n Fmul+(n+1) Finv+(2n+3) EccMulG1+(2n+2) EccAddG1+EccMulG1+EccAddG1+2 P=8n Fmul+(3n+1) Finv+(2n+4) EccMulG1+(2n+3) EccAddG1+2 P Prover’s cost:
=(2n−2) Fmul+i=1∑n−1msm(2i,G1)+(3⋅2n+n−3) Fmul+(3⋅2n+n−3) Fmul+i=0∑n−1polymul(0,2i+1)+msm(2n−1,G1)+(2n+2n+1) Fmul+(n+1) Finv+i=0∑n−1polymul(0,2i+1)+polymul(0,2n−2)+polymul(0,2n)+msm(2n−1,G1)(8⋅2n+4n−7) Fmul+(n+1) Finv+2⋅i=0∑n−1polymul(0,2i+1)+polymul(0,2n−2)+polymul(0,2n)+i=1∑n−1msm(2i,G1)+2 msm(2n−1,G1) 即
(8N+4n−7) Fmul+(n+1) Finv+2⋅i=0∑n−1polymul(0,2i+1)+polymul(0,2n−2)+polymul(0,N)+i=1∑n−1msm(2i,G1)+2 msm(N−1,G1) 代入 polymul(0,N)=(N+1) Fmul 有
====(8N+4n−7) Fmul+(n+1) Finv+2⋅i=0∑n−1polymul(0,2i+1)+polymul(0,2n−2)+polymul(0,N)+i=1∑n−1msm(2i,G1)+2 msm(N−1,G1)(8N+4n−7) Fmul+(n+1) Finv+2⋅i=0∑n−1(2i+1+1) Fmul+(2n−1) Fmul+(N+1) Fmul+i=1∑n−1msm(2i,G1)+2 msm(N−1,G1)(8N+4n−7) Fmul+(n+1) Finv+2⋅i=0∑n−1(2i+1+1) Fmul+(2n−1) Fmul+(N+1) Fmul+i=1∑n−1msm(2i,G1)+2 msm(N−1,G1)(8N+4n−7) Fmul+(n+1) Finv+(4N+2n−4) Fmul+(N−1) Fmul+(N+1) Fmul+i=1∑n−1msm(2i,G1)+2 msm(N−1,G1)(14N+6n−11) Fmul+(n+1) Finv+i=1∑n−1msm(2i,G1)+2 msm(N−1,G1) Verifier’s cost:
8n Fmul+(3n+1) Finv+(2n+4) EccMulG1+(2n+3) EccAddG1+2 P Proof size:
(n+1)⋅Fp+(n+1)⋅G1