Skip to article frontmatterSkip to article content

Gemini-PCS 算法复杂度分析

优化版本 1

下面的协议证明一个 MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1}) 在点 u=(u0,u1,,un1)\vec{u}=(u_0, u_1, \ldots, u_{n-1}) 处的值 v=f~(u0,u1,,un1)v = \tilde{f}(u_0, u_1, \ldots, u_{n-1}) 。其中 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1}) 表示为如下的系数形式:

f~(X0,X1,,Xn1)=i=0n1fiX0i0X1i1Xn1in1\tilde{f}(X_0, X_1, \ldots, X_{n-1}) = \sum_{i=0}^{n-1} f_i\cdot X_0^{i_0}X_1^{i_1}\cdots X_{n-1}^{i_{n-1}}

公共输入

  1. 向量 f=(f0,f1,,fn1)\vec{f}=(f_0, f_1, \ldots, f_{n-1}) 的承诺 CfC_f
Cf=KZG10.Commit(f)C_f = \mathsf{KZG10.Commit}(\vec{f})
  1. 求值点 u=(u0,u1,,un1)\vec{u}=(u_0, u_1, \ldots, u_{n-1})

  2. v=f~(u0,u1,,un1)v = \tilde{f}(u_0, u_1, \ldots, u_{n-1})

Witenss

  1. 多项式 f(X)f(X) 的系数 f0,f1,,fn1f_0, f_1, \ldots, f_{n-1}

Round 1

  1. Prover 计算 h1(X),h2(X),,hn1(X)h_1(X), h_2(X), \ldots, h_{n-1}(X),使得:
hi+1(X2)=hi(X)+hi(X)2+uihi(X)hi(X)2Xh_{i+1}(X^2) = \frac{h_i(X) + h_i(-X)}{2} + u_i\cdot \frac{h_i(X) - h_i(-X)}{2X}

其中 h0(X)=f(X)h_0(X) = f(X)

  1. Prover 计算承诺 (H1,H2,,Hn1)(H_1, H_2, \ldots, H_{n-1}),使得:
Hi+1=KZG10.Commit(hi+1(X))H_{i+1} = \mathsf{KZG10.Commit}(h_{i+1}(X))
  1. Prover 发送 (H1,H2,,Hn1)(H_1, H_2, \ldots, H_{n-1})

Prover:

  • 对于 i=1,,n1i = 1, \ldots, n-1 计算多项式 hih_{i} ,其计算公式为
>hi(X)=he(i1)(X)+ui1ho(i1)(X)>> h_{i}(X) = h_e^{(i-1)}(X) + u_{i-1} \cdot h_o^{(i-1)}(X) >

💡 这里 prover 不需要计算和发送 hn(X)h_n(X) 的原因是最后一个为常数多项式,其应该就等于求值的结果 vv ,Verifier 可以通过对 hn1(X)h_{n - 1}(X) 进行 oracle 来进行验证。

那么计算 hi(X)h_{i}(X) 就按上式进行计算,hi1(X)h_{i - 1}(X) 的系数是已知的,he(i1)(X)h_e^{(i-1)}(X)ho(i1)(X)h_o^{(i-1)}(X) 的系数就分别是 hi1(X)h_{i - 1}(X) 系数的偶数项和奇数项,因此主要的复杂度在计算 ui1ho(i1)(X)u_{i-1} \cdot h_o^{(i-1)}(X) ,这里涉及有限域元素的乘积,hi1(X)h_{i - 1}(X) 的系数有 2n(i1)2^{n - (i - 1)} 个,那么 ho(i1)(X)h_o^{(i-1)}(X) 的系数取 hi1(X)h_{i - 1}(X) 的奇数项系数,因此系数有 2n(i1)1=2ni2^{n - (i - 1) - 1} = 2^{n - i} 个,因此分别计算 ui1u_{i - 1} 与这些系数相乘的复杂度为 2ni Fmul2^{n - i} ~ \mathbb{F}_{\mathsf{mul}}

因此计算 h1(X),,hn1(X)h_1(X), \ldots, h_{n - 1}(X) 的复杂度为

>i=1n12ni Fmul=(2n2) Fmul>> \sum_{i = 1}^{n - 1} 2^{n - i} ~ \mathbb{F}_{\mathsf{mul}} = (2^n - 2) ~ \mathbb{F}_{\mathsf{mul}} >
  • 计算 H1=[h1(τ)]1,,Hn1=[hn1(τ)]1H_1 = [h_{1}(\tau)]_1,\ldots,H_{n - 1} = [h_{n-1}(\tau)]_1 的复杂度为

    >i=1n1msm(2ni,G1)=i=1n1msm(2i,G1)>> \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{n - i}, \mathbb{G}_1) = \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) >

因此这一轮的计算复杂度总共为

>(2n2) Fmul+i=1n1msm(2i,G1)>> (2^n - 2) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) >

Round 2

  1. Verifier 发送随机点 βFp\beta\in\mathbb{F}_p

  2. Prover 计算 h0(β),h1(β),,hn1(β)h_0(\beta), h_1(\beta), \ldots, h_{n-1}(\beta)

  3. Prover 计算 h0(β),h1(β),,hn1(β)h_0(-\beta), h_1(-\beta), \ldots, h_{n-1}(-\beta)

  4. Prover 计算 h0(β2)h_0(\beta^2)

  5. Prover 发送 {hi(β),hi(β)}i=0n1\{h_i(\beta), h_i(-\beta)\}_{i=0}^{n-1},以及 h0(β2)h_0(\beta^2)

Prover:

2i=0n12ni Fmul=(2n+14) Fmul2 \sum_{i = 0}^{n - 1} 2^{n - i} ~ \mathbb{F}_{\mathsf{mul}} = (2^{n + 1} - 4) ~ \mathbb{F}_{\mathsf{mul}}

因此这一轮的总复杂度为

Fmul+(2n+14) Fmul+2n Fmul=(32n3) Fmul\mathbb{F}_{\mathsf{mul}} + (2^{n + 1} - 4) ~ \mathbb{F}_{\mathsf{mul}} + 2^{n} ~ \mathbb{F}_{\mathsf{mul}} = (3 \cdot 2^{n} - 3) ~ \mathbb{F}_{\mathsf{mul}}

🎈 代码中 Prover 也计算了 {hi(β2)}i=1n1\{h_i(\beta^2)\}_{i = 1}^{n - 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

  1. Verifier 发送随机值 γFp\gamma\in\mathbb{F}_p,用于聚合多个多项式

  2. Prover 计算 h(X)h(X)

h(X)=h0(X)+γh1(X)+γ2h2(X)++γn1hn1(X)h(X) = h_0(X) + \gamma\cdot h_1(X) + \gamma^2\cdot h_2(X) + \cdots + \gamma^{n-1}\cdot h_{n-1}(X)
  1. 定义一个新的 Domain DD,包含 3 个元素:
D={β,β,β2}D = \{\beta, -\beta, \beta^2\}
  1. Prover 计算二次多项式 h(X)h^*(X) 使得它在 DD 上取值等于 h(X)h(X) 的取值:
h(X)=h(β)(X+β)(Xβ2)2β(ββ2)+h(β)(Xβ)(Xβ2)2β(β2+β)+h(β2)X2β2β4β2h^*(X) = h(\beta)\cdot \frac{(X+\beta)(X-\beta^2)}{2\beta(\beta-\beta^2)} + h(-\beta)\cdot \frac{(X-\beta)(X-\beta^2)}{2\beta(\beta^2+\beta)} + h(\beta^2)\cdot \frac{X^2-\beta^2}{\beta^4-\beta^2}
  1. Prover 计算商多项式 q(X)q(X)
q(X)=h(X)h(X)(X2β2)(Xβ2)q(X) = \frac{h(X) - h^*(X)}{(X^2-\beta^2)(X-\beta^2)}
  1. Prover 计算 q(X)q(X) 的承诺 CqC_q
Cq=KZG10.Commit(q(X))C_q = \mathsf{KZG10.Commit}(q(X))
  1. Prover 发送 CqC_q

Prover:

i=1n12ni Fmul=(2n2) Fmul\sum_{i = 1}^{n - 1} 2^{n - i} ~ \mathbb{F}_{\mathsf{mul}} = (2^n - 2) ~ \mathbb{F}_{\mathsf{mul}}
polymul(1,1)+polymul(2,1)+polydiv(2n1,3)\mathsf{polymul}(1, 1) + \mathsf{polymul}(2, 1) + \mathsf{polydiv}(2^n - 1, 3)
msm(2n3,G1)\mathsf{msm}(2^n - 3, \mathbb{G}_1)

因此这一轮的总复杂度为

(n2) Fmul+(2n2) Fmul+12 Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polydiv(2n1,3)+msm(2n3,G1)=(2n+n+8) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polydiv(2n1,3)+msm(2n3,G1)\begin{aligned} & (n - 2) ~ \mathbb{F}_{\mathsf{mul}} + (2^n - 2) ~ \mathbb{F}_{\mathsf{mul}} + 12 ~ \mathbb{F}_{\mathsf{mul}} + 3 ~ \mathbb{F}_{\mathsf{inv}}\\ & + \mathsf{polymul}(1, 1) + \mathsf{polymul}(2, 1) + \mathsf{polydiv}(2^n - 1, 3) + \mathsf{msm}(2^n - 3, \mathbb{G}_1) \\ = & (2^{n} + n + 8) ~ \mathbb{F}_{\mathsf{mul}} + 3 ~ \mathbb{F}_{\mathsf{inv}} \\ & + \mathsf{polymul}(1, 1) + \mathsf{polymul}(2, 1) + \mathsf{polydiv}(2^n - 1, 3) + \mathsf{msm}(2^n - 3, \mathbb{G}_1) \\ \end{aligned}

Round 4

  1. Verifier 发送随机点 ζFp\zeta\in\mathbb{F}_p

  2. Prover 计算线性化多项式 r(X)r(X),它在 X=ζX=\zeta 处取值为 0,即 r(ζ)=0r(\zeta) = 0

r(X)=h(X)h(ζ)(ζ2β2)(ζβ2)q(X)r(X) = h(X) - h^*(\zeta) - (\zeta^2-\beta^2)(\zeta-\beta^2)\cdot q(X)
  1. Prover 计算商多项式 w(X)w(X)
w(X)=r(X)(Xζ)w(X) = \frac{r(X)}{(X-\zeta)}
  1. Prover 计算 w(X)w(X) 的承诺 CwC_w
Cw=KZG10.Commit(w(X))C_w = \mathsf{KZG10.Commit}(w(X))
  1. Prover 发送 CwC_w

Prover:

这一轮的总复杂度为

Fmul+4 Fmul+polymul(0,2n4)+(2n1) Fmul+msm(2n1,G1)=(2n+4) Fmul+polymul(0,2n4)+msm(2n1,G1)\begin{aligned} & \mathbb{F}_{\mathsf{mul}} + 4 ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{polymul}(0, 2^n - 4) + (2^n - 1) ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \\ = & (2^n + 4) ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{polymul}(0, 2^n - 4) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \end{aligned}

Prover 总复杂度

将上面的所有复杂度进行汇总,为

(2n2) Fmul+i=1n1msm(2i,G1)+(32n3) Fmul+(2n+n+8) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polydiv(2n1,3)+msm(2n3,G1)+(2n+4) Fmul+polymul(0,2n4)+msm(2n1,G1)=(62n+n+7) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polymul(0,2n4)+polydiv(2n1,3)+i=1n1msm(2i,G1)+msm(2n3,G1)+msm(2n1,G1)\begin{aligned} & (2^n - 2) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) \\ & + (3 \cdot 2^{n} - 3) ~ \mathbb{F}_{\mathsf{mul}} \\ & + (2^{n} + n + 8) ~ \mathbb{F}_{\mathsf{mul}} + 3 ~ \mathbb{F}_{\mathsf{inv}} \\ & + \mathsf{polymul}(1, 1) + \mathsf{polymul}(2, 1) + \mathsf{polydiv}(2^n - 1, 3) + \mathsf{msm}(2^n - 3, \mathbb{G}_1) \\ & + (2^n + 4) ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{polymul}(0, 2^n - 4) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \\ = & (6 \cdot 2^{n} + n + 7) ~ \mathbb{F}_{\mathsf{mul}} + 3 ~ \mathbb{F}_{\mathsf{inv}} \\ & + \mathsf{polymul}(1, 1) + \mathsf{polymul}(2, 1) + \mathsf{polymul}(0, 2^n - 4) + \mathsf{polydiv}(2^n - 1, 3) \\ & + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + \mathsf{msm}(2^n - 3, \mathbb{G}_1) + \mathsf{msm}(2^n - 1, \mathbb{G}_1)\\ \end{aligned}

用 polynomial long division 方法,有

polydiv(N,k)=(Nk+1) Finv+(kNk2+k) Fmul\mathsf{polydiv}(N, k) = (N - k + 1) ~ \mathbb{F}_{\mathsf{inv}} + (kN - k^2 + k) ~ \mathbb{F}_{\mathsf{mul}}

可以得到

polydiv(2n1,3)=(N13+1) Finv+(3(N1)32+3) Fmul=(N3) Finv+(3N9) Fmul\begin{align} \mathsf{polydiv}(2^n - 1, 3) & = (N - 1 - 3 + 1) ~ \mathbb{F}_{\mathsf{inv}} + (3(N - 1) - 3^2 + 3) ~ \mathbb{F}_{\mathsf{mul}} \\ & = (N - 3) ~ \mathbb{F}_{\mathsf{inv}} + (3N - 9) ~ \mathbb{F}_{\mathsf{mul}} \end{align}

因此复杂度为

(62n+n+7) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polymul(0,2n4)+polydiv(2n1,3)+i=1n1msm(2i,G1)+msm(2n3,G1)+msm(2n1,G1)=(6N+n+7) Fmul+3 Finv+4 Fmul+6 Fmul+(N3) Fmul+(N3) Finv+(3N9) Fmul+i=1n1msm(2i,G1)+msm(2n3,G1)+msm(2n1,G1)=(10N+n+5) Fmul+N Finv+i=1n1msm(2i,G1)+msm(N3,G1)+msm(N1,G1)\begin{align} & (6 \cdot 2^{n} + n + 7) ~ \mathbb{F}_{\mathsf{mul}} + 3 ~ \mathbb{F}_{\mathsf{inv}} \\ & + \mathsf{polymul}(1, 1) + \mathsf{polymul}(2, 1) + \mathsf{polymul}(0, 2^n - 4) + \mathsf{polydiv}(2^n - 1, 3) \\ & + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + \mathsf{msm}(2^n - 3, \mathbb{G}_1) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \\ = & (6 N + n + 7) ~ \mathbb{F}_{\mathsf{mul}} + 3 ~ \mathbb{F}_{\mathsf{inv}} \\ & + 4 ~ \mathbb{F}_{\mathsf{mul}} + 6 ~ \mathbb{F}_{\mathsf{mul}} + (N - 3) ~ \mathbb{F}_{\mathsf{mul}}+ (N - 3) ~ \mathbb{F}_{\mathsf{inv}} + (3N - 9) ~ \mathbb{F}_{\mathsf{mul}} \\ & + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + \mathsf{msm}(2^n - 3, \mathbb{G}_1) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \\ = & (10 N + n + 5) ~ \mathbb{F}_{\mathsf{mul}} + N ~ \mathbb{F}_{\mathsf{inv}} \\ & + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + \mathsf{msm}(N - 3, \mathbb{G}_1) + \mathsf{msm}(N - 1, \mathbb{G}_1) \end{align}

证明表示

可以看出,证明包括 n+1n+1G1\mathbb{G}_1 元素,包括 2n+12n+1Fp\mathbb{F}_p 元素。

π=(H1,H2,,Hn1,Cq,Cw,{hi(β),hi(β)}i=0n1,h0(β2))\pi=\Big(H_1, H_2, \ldots, H_{n-1}, C_q, C_w, \{h_i(\beta), h_i(-\beta)\}_{i=0}^{n-1}, h_0(\beta^2) \Big)

证明大小:

(n+1) G1+(2n+1) Fp(n + 1)~\mathbb{G}_1 + (2n + 1) ~ \mathbb{F}_p

Verification

  1. Verifier 计算 (h1(β2),h2(β2),,hn1(β2))(h_1(\beta^2), h_2(\beta^2), \ldots, h_{n-1}(\beta^2))
hi+1(β2)=hi(β)+hi(β)2+uihi(β)hi(β)2βh_{i+1}(\beta^2) = \frac{h_i(\beta) + h_i(-\beta)}{2} + u_i\cdot \frac{h_i(\beta) - h_i(-\beta)}{2\beta}
  1. Verifier 检查 hn(β2)h_{n}(\beta^2) 是否等于所要证明的多项式求值 v=f~(u)v=\tilde{f}(\vec{u})
hn(β2)=?vh_n(\beta^2) \overset{?}{=} v
  1. Verifier 计算 h(X)h(X) 的承诺 ChC_h
Ch=Cf+γH1+γ2H2++γn1Hn1C_h = C_f + \gamma\cdot H_1 + \gamma^2\cdot H_2 + \cdots + \gamma^{n-1}\cdot H_{n-1}
  1. Verifier 计算 rζ(X)r_\zeta(X) 的承诺 CrC_r:
Cr=Chh(ζ)[1]1(ζ2β2)(ζβ2)CqC_r = C_h - h^*(\zeta)\cdot[1]_1 - (\zeta^2-\beta^2)(\zeta-\beta^2)\cdot C_q
  1. Verifier 检查 CwC_w 是否为 CrC_rX=ζX=\zeta 处的求值证明:
KZG10.Verify(Cr,ζ,0,Cw)=?1\mathsf{KZG10.Verify}(C_r, \zeta, 0, C_w) \overset{?}{=} 1

或者直接展开为 Pairing 形式:

e(Cr+ζCw,[1]2)=?e(Cw,[τ]2)e\Big(C_r + \zeta\cdot C_w, [1]_2\Big) \overset{?}{=} e\Big(C_w, [\tau]_2 \Big)

Verifier:

  1. 计算 h1(β2),,hn1(β2)h_1(\beta^2), \ldots, h_{n - 1}(\beta^2)

因此这一步的总复杂度为

Fmul+(2n2) Finv+(3n3) Fmul=(3n2) Fmul+(2n2) Finv\mathbb{F}_{\mathsf{mul}} + (2n - 2) ~ \mathbb{F}_{\mathsf{inv}} + (3n - 3) ~ \mathbb{F}_{\mathsf{mul}} = (3n - 2) ~ \mathbb{F}_{\mathsf{mul}} + (2n - 2) ~ \mathbb{F}_{\mathsf{inv}}
  1. 计算 ChC_h

这一步计算总复杂度为

(n2) Fmul+(n1) EccMulG1+(n1) EccAddG1(n - 2) ~ \mathbb{F}_{\mathsf{mul}} + (n - 1) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (n - 1) ~ \mathsf{EccAdd}^{\mathbb{G}_1}
  1. 计算 CrC_r
2 Fmul+EccMulG12 ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{EccMul}^{\mathbb{G}_1}

这一步的总复杂度为

10 Fmul+4 Finv+EccMulG1+2 Fmul+EccMulG1+2 EccAddG1=12 Fmul+4 Finv+2 EccMulG1+2 EccAddG1\begin{aligned} & 10 ~ \mathbb{F}_{\mathsf{mul}} + 4 ~ \mathbb{F}_{\mathsf{inv}}\\ & + \mathsf{EccMul}^{\mathbb{G}_1} \\ & + 2 ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{EccMul}^{\mathbb{G}_1} + 2 ~ \mathsf{EccAdd}^{\mathbb{G}_1} \\ = & 12 ~ \mathbb{F}_{\mathsf{mul}} + 4 ~ \mathbb{F}_{\mathsf{inv}} + 2 ~ \mathsf{EccMul}^{\mathbb{G}_1} + 2 ~ \mathsf{EccAdd}^{\mathbb{G}_1} \end{aligned}
  1. 通过 Pairing 的形式进行验证
e(Cr+ζCw,[1]2)=?e(Cw,[τ]2)e(C_r + \zeta \cdot C_w, [1]_2) \overset{?}{=} e(C_w, [\tau]_2)

这一步的总复杂度为

EccMulG1+EccAddG1+2 P\mathsf{EccMul}^{\mathbb{G}_1} + \mathsf{EccAdd}^{\mathbb{G}_1} + 2~P

Verifier 复杂度

汇总 Verifier 所有的计算复杂度,为

(3n2) Fmul+(2n2) Finv+(n2) Fmul+(n1) EccMulG1+(n1) 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\begin{aligned} & (3n - 2) ~ \mathbb{F}_{\mathsf{mul}} + (2n - 2) ~ \mathbb{F}_{\mathsf{inv}} \\ & + (n - 2) ~ \mathbb{F}_{\mathsf{mul}} + (n - 1) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (n - 1) ~ \mathsf{EccAdd}^{\mathbb{G}_1} \\ & + 12 ~ \mathbb{F}_{\mathsf{mul}} + 4 ~ \mathbb{F}_{\mathsf{inv}} + 2 ~ \mathsf{EccMul}^{\mathbb{G}_1} + 2 ~ \mathsf{EccAdd}^{\mathbb{G}_1} \\ & + \mathsf{EccMul}^{\mathbb{G}_1} + \mathsf{EccAdd}^{\mathbb{G}_1} + 2~P \\ = & (4n + 8) ~ \mathbb{F}_{\mathsf{mul}} + (2n + 2) ~ \mathbb{F}_{\mathsf{inv}} + (n + 1) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (n + 2) ~ \mathsf{EccAdd}^{\mathbb{G}_1} + 2~P \end{aligned}

总结

Prover’s cost:

(62n+n+7) Fmul+3 Finv+polymul(1,1)+polymul(2,1)+polymul(0,2n4)+polydiv(2n1,3)+i=1n1msm(2i,G1)+msm(2n3,G1)+msm(2n1,G1)\begin{aligned} & (6 \cdot 2^{n} + n + 7) ~ \mathbb{F}_{\mathsf{mul}} + 3 ~ \mathbb{F}_{\mathsf{inv}} \\ & + \mathsf{polymul}(1, 1) + \mathsf{polymul}(2, 1) + \mathsf{polymul}(0, 2^n - 4) + \mathsf{polydiv}(2^n - 1, 3) \\ & + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + \mathsf{msm}(2^n - 3, \mathbb{G}_1) + \mathsf{msm}(2^n - 1, \mathbb{G}_1)\\ \end{aligned}

化简有

(10N+n+5) Fmul+N Finv+i=1n1msm(2i,G1)+msm(N3,G1)+msm(N1,G1)(10 N + n + 5) ~ \mathbb{F}_{\mathsf{mul}} + N ~ \mathbb{F}_{\mathsf{inv}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + \mathsf{msm}(N - 3, \mathbb{G}_1) + \mathsf{msm}(N - 1, \mathbb{G}_1)

Verifier’s cost:

(4n+8) Fmul+(2n+2) Finv+(n+1) EccMulG1+(n+2) EccAddG1+2 P\begin{aligned} & (4n + 8) ~ \mathbb{F}_{\mathsf{mul}} + (2n + 2) ~ \mathbb{F}_{\mathsf{inv}} + (n + 1) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (n + 2) ~ \mathsf{EccAdd}^{\mathbb{G}_1} + 2~P \end{aligned}

Proof size:

(2n+1)Fp+(n+1)G1(2n + 1) \mathbb{F}_p + (n + 1) \cdot \mathbb{G}_1

优化版本 2

优化技巧:

本文介绍一个不同的优化协议,它采用了 FRI 协议的 Query-phase 中选取点的思路,对 h0(X)h_0(X) 挑战 X=βX=\beta 求值,进而对折叠后的多项式 h1(X)h_1(X) 挑战 X=β2X=\beta^2,依次类推,直到 hn1(β2n1)h_{n-1}(\beta^{2^{n-1}}) 。这样做的好处是,每一次 hi(X)h_i(X) 的打开点可以在验证 hi+1(X)h_{i+1}(X) 的折叠时复用,从而总共可以节省 nn 个打开点。

证明目标:一个 nn 个变量的 MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1}) 在点 u=(u0,u1,,un1)\vec{u}=(u_0, u_1, \ldots, u_{n-1}) 处的值 v=f~(u0,u1,,un1)v = \tilde{f}(u_0, u_1, \ldots, u_{n-1})

其中 MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1}) 表示为如下的系数形式:

f~(X0,X1,,Xn1)=i=0n1ciX0i0X1i1Xn1in1\tilde{f}(X_0, X_1, \ldots, X_{n-1}) = \sum_{i=0}^{n-1} c_i\cdot X_0^{i_0}X_1^{i_1}\cdots X_{n-1}^{i_{n-1}}

公共输入

  1. 向量 c=(c0,c1,,cn1)\vec{c}=(c_0, c_1, \ldots, c_{n-1}) 的承诺 CfC_f
Cf=KZG10.Commit(c)C_f = \mathsf{KZG10.Commit}(\vec{c})
  1. 求值点 u=(u0,u1,,un1)\vec{u}=(u_0, u_1, \ldots, u_{n-1})

  2. v=f~(u0,u1,,un1)v = \tilde{f}(u_0, u_1, \ldots, u_{n-1})

Witness

Round 1

  1. Prover 记 h0(X)=f(X)h_0(X) = f(X),然后计算折叠多项式 h1(X),h2(X),,hn1(X)h_1(X), h_2(X), \ldots, h_{n-1}(X),使得:
hi+1(X2)=hi(X)+hi(X)2+uihi(X)hi(X)2Xh_{i+1}(X^2) = \frac{h_i(X) + h_i(-X)}{2} + u_i\cdot \frac{h_i(X) - h_i(-X)}{2X}
  1. Prover 计算承诺 (Ch1,Ch2,,Chn1)(C_{h_1}, C_{h_2}, \ldots, C_{h_{n-1}}),使得:
Chi+1=KZG10.Commit(hi+1(X))C_{h_{i+1}} = \mathsf{KZG10.Commit}(h_{i+1}(X))
  1. Prover 发送 (Ch1,Ch2,,Chn1)(C_{h_1}, C_{h_2}, \ldots, C_{h_{n-1}})

这一轮的计算方式和优化版本 1 一样,因此计算复杂度相同,为

(2n2) Fmul+i=1n1msm(2i,G1)(2^n - 2) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1)

Round 2

  1. Verifier 发送随机点 βFp\beta\in\mathbb{F}_p

  2. Prover 计算 h0(β)h_0(\beta)

  3. Prover 计算 h0(β),h1(β2),,hn1(β2n1)h_0(-\beta), h_1(-\beta^2), \ldots, h_{n-1}(-\beta^{2^{n-1}})

  4. Prover 发送 (h0(β),h0(β),h1(β2),,hn1(β2n1))\big(h_0(\beta), h_0(-\beta), h_1(-\beta^2), \ldots, h_{n-1}(-\beta^{2^{n-1}})\big)

Prover:

2n Fmul+i=0n12ni Fmul=(32n2) Fmul2^{n} ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 0}^{n - 1} 2^{n - i} ~ \mathbb{F}_{\mathsf{mul}} = (3 \cdot 2^{n} - 2) ~ \mathbb{F}_{\mathsf{mul}}

因此这一轮的总复杂度为

(n1) Fmul+(32n2) Fmul=(32n+n3) Fmul(n - 1) ~ \mathbb{F}_{\mathsf{mul}} + (3 \cdot 2^{n} - 2) ~ \mathbb{F}_{\mathsf{mul}} = (3 \cdot 2^{n} + n - 3) ~ \mathbb{F}_{\mathsf{mul}}

Round 3

  1. Verifier 发送随机值 γFp\gamma\in\mathbb{F}_p,用于聚合多个多项式

  2. Prover 计算 q(X)q(X) ,满足下面的等式

q(X)=h0(X)h0(β)Xβ+i=0n1γi+1hi(X)hi(β2i)X+β2iq(X) = \frac{h_0(X)-h_0(\beta)}{X-\beta}+ \sum_{i=0}^{n-1} \gamma^{i+1}\cdot \frac{h_i(X)-h_i(-\beta^{2^i})}{X+\beta^{2^i}}
  1. 定义一个新的 Domain DD,包含 3 个元素:
D={β,β,β2,,β2n1}D = \{\beta, -\beta, -\beta^2, \ldots, -\beta^{2^{n-1}}\}
  1. Prover 计算发送承诺 Cq=KZG10.Commit(q(X))C_q=\mathsf{KZG10.Commit}(q(X))

Prover:

2n Fmul+i=0n1(polymul(0,2ni)+2ni Fmul)=(32n2) Fmul+i=0n1polymul(0,2i+1)2^{n} ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 0}^{n - 1} (\mathsf{polymul}(0, 2^{n - i}) + 2^{n - i} ~ \mathbb{F}_{\mathsf{mul}}) = (3 \cdot 2^{n} - 2) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1})

因此这一轮的总复杂度为

(n1) Fmul+(32n2) Fmul+i=0n1polymul(0,2i+1)+msm(2n1,G1)=(32n+n3) Fmul+i=0n1polymul(0,2i+1)+msm(2n1,G1)\begin{aligned} & (n - 1) ~ \mathbb{F}_{\mathsf{mul}} + (3 \cdot 2^{n} - 2) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{msm}(2^n - 1, \mathbb{G}_1)\\ & = (3 \cdot 2^{n} + n - 3) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \end{aligned}

Round 4

  1. Verifier 发送随机点 ζFq\zeta\in\mathbb{F}_q

  2. Prover 计算线性化多项式 Lζ(X)L_\zeta(X),它在 X=ζX=\zeta 处取值为 0,即 Lζ(ζ)=0L_\zeta(\zeta) = 0

Lζ(X)=vD(ζ)q(X)vD(ζ)ζβ(h0(X)h0(β))i=0n1γi+1vD(ζ)ζ+β2i(hi(X)hi(β2i))L_\zeta(X) = v_D(\zeta)\cdot q(X) - \frac{v_D(\zeta)}{\zeta-\beta}\cdot(h_0(X)-h_0(\beta)) - \sum_{i=0}^{n-1} \gamma^{i+1}\cdot \frac{v_D(\zeta)}{\zeta+\beta^{2^i}}\cdot(h_i(X)-h_i(-\beta^{2^i}))
  1. Prover 计算商多项式 w(X)w(X)
w(X)=Lζ(X)(Xζ)w(X) = \frac{L_\zeta(X)}{(X-\zeta)}
  1. Prover 计算并发送 w(X)w(X) 的承诺 CwC_w
Cw=KZG10.Commit(w(X))C_w = \mathsf{KZG10.Commit}(w(X))

复杂度分析:

  1. 计算 Lζ(X)L_{\zeta}(X)
polymul(0,2n2)+Finv+Fmul+polymul(0,2n)+i=0n1(Finv+2 Fmul+polymul(0,2ni))=(2n+1) Fmul+(n+1) Finv+i=0n1polymul(0,2i+1)+polymul(0,2n2)+polymul(0,2n)\begin{aligned} & \mathsf{polymul}(0, 2^n - 2) + \mathbb{F}_{\mathsf{inv}} + \mathbb{F}_{\mathsf{mul}} + \mathsf{polymul}(0, 2^n) \\ & + \sum_{i = 0}^{n - 1} (\mathbb{F}_{\mathsf{inv}} + 2 ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{polymul}(0, 2^{n - i})) \\ & = (2n + 1) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{polymul}(0, 2^n - 2) + \mathsf{polymul}(0, 2^n) \end{aligned}
  1. 计算 w(X)w(X) ,这里依然可以用线性除法方式,分子的次数是多少,那么复杂度就涉及多少次的乘法操作,由于 deg(w)=2n\deg(w) = 2^n ,因此这一步的复杂度为 2n Fmul2^n ~ \mathbb{F}_{\mathsf{mul}}

  2. 计算 CwC_w ,复杂度为 msm(2n1,G1)\mathsf{msm}(2^n - 1, \mathbb{G}_1)

因此这一轮的复杂度为

(2n+1) Fmul+(n+1) Finv+i=0n1polymul(0,2i+1)+polymul(0,2n2)+polymul(0,2n)+2n Fmul+msm(2n1,G1)=(2n+2n+1) Fmul+(n+1) Finv+i=0n1polymul(0,2i+1)+polymul(0,2n2)+polymul(0,2n)+msm(2n1,G1)\begin{aligned} & (2n + 1) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{polymul}(0, 2^n - 2) \\ & + \mathsf{polymul}(0, 2^n) + 2^n ~ \mathbb{F}_{\mathsf{mul}} + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \\ = & (2^n + 2n + 1) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{polymul}(0, 2^n - 2) \\ & + \mathsf{polymul}(0, 2^n) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \end{aligned}

证明表示

可以看出,单次证明包括 n+1n+1G1\mathbb{G}_1 元素,包括 n+1n+1Fq\mathbb{F}_q 元素。

π=(Cf1,Cf2,,Cfn1,Cq,Cw,h0(β),h0(β),h1(β2),,hn1(β2n1))\pi=\Big(C_{f_1}, C_{f_2}, \ldots, C_{f_{n-1}}, C_{q}, C_w, h_0(\beta), h_0(-\beta), h_1(-\beta^2), \ldots, h_{n-1}(-\beta^{2^{n-1}})\Big)

证明大小为

(n+1)G1+(n+1)Fp(n + 1) \cdot \mathbb{G}_1 + (n + 1) \cdot \mathbb{F}_p

Verification

  1. Verifier 计算 (h1(β2),h2(β22),,hn1(β2n1),hn(β2n))(h_1(\beta^2), h_2(\beta^{2^2}), \ldots, h_{n-1}(\beta^{2^{n-1}}), h_n(\beta^{2^n}))
hi+1(β2i+1)=hi(β2i)+hi(β2i)2+uihi(β2i)hi(β2i)2β2ih_{i+1}(\beta^{2^{i+1}}) = \frac{h_i(\beta^{2^i}) + h_i(-\beta^{2^i})}{2} + u_i\cdot \frac{h_i(\beta^{2^i}) - h_i(-\beta^{2^i})}{2\beta^{2^i}}
  1. Verifier 检查 hn(β2n)h_{n}(\beta^{2^n}) 是否等于所要证明的多项式求值 v=f~(u)v=\tilde{f}(\vec{u})
hn(β2n)=?vh_n(\beta^{2^n}) \overset{?}{=} v
  1. Verifier 计算 Lζ(X)L_\zeta(X) 的承诺 CLC_L:
CL=vD(ζ)Cqe0(Ch0h0(β)[1]1)i=0n1ei+1(Chihi(β2i)[1]1)C_L = v_D(\zeta)\cdot C_q - e_0\cdot(C_{h_0} - h_0(\beta)\cdot[1]_1) - \sum_{i=0}^{n-1} e_{i+1}\cdot(C_{h_i} - h_i(-\beta^{2^i})\cdot[1]_1)

这里 e0,e1,,ene_0, e_1, \ldots, e_n 定义如下:

e0=vD(ζ)ζβei+1=γi+1vD(ζ)ζ+β2i,i=0,1,,n1\begin{aligned} e_0 &= \frac{v_D(\zeta)}{\zeta - \beta} \\ e_{i+1} &= \gamma^{i+1}\cdot \frac{v_D(\zeta)}{\zeta+\beta^{2^i}}, \quad i=0,1,\ldots,n-1 \end{aligned}
  1. Verifier 检查 CwC_w 是否为 CLC_LX=ζX=\zeta 处的求值证明:
KZG10.Verify(CL,ζ,0,Cw)=?1\mathsf{KZG10.Verify}(C_L, \zeta, 0, C_w) \overset{?}{=} 1

或者直接展开为 Pairing 形式:

e(CL+ζCw,[1]2)=?e(Cw,[τ]2)e\Big(C_L + \zeta\cdot C_w, [1]_2\Big) \overset{?}{=} e\Big(C_w, [\tau]_2 \Big)

Verifier:

  1. 计算 h1(β2),,hn(ββ2n)h_1(\beta^2), \ldots, h_{n}(\beta^{\beta^{2^n}})

因此这一步的总复杂度为

n Fmul+2n Finv+3n Fmul=4n Fmul+2n Finvn ~ \mathbb{F}_{\mathsf{mul}} + 2n ~ \mathbb{F}_{\mathsf{inv}} + 3n ~ \mathbb{F}_{\mathsf{mul}} = 4n ~ \mathbb{F}_{\mathsf{mul}} + 2n ~ \mathbb{F}_{\mathsf{inv}}
  1. 计算 CLC_L
i=0n1ei+1(Chihi(β2i)[1]1)\sum_{i = 0}^{n - 1} e_{i + 1} \cdot (C_{h_i} - h_i(- \beta^{2^{i}}) \cdot [1]_1)

计算 ei+1(Chihi(β2i)[1]1)e_{i + 1} \cdot (C_{h_i} - h_i(- \beta^{2^{i}}) \cdot [1]_1) 复杂度为 2 EccMulG1+EccAddG12 ~ \mathsf{EccMul}^{\mathbb{G}_1} + \mathsf{EccAdd}^{\mathbb{G}_1} ,总复杂度为 2n EccMulG1+n EccAddG1+(n1) EccAddG12n ~ \mathsf{EccMul}^{\mathbb{G}_1} + n ~ \mathsf{EccAdd}^{\mathbb{G}_1} + (n - 1) ~ \mathsf{EccAdd}^{\mathbb{G}_1} ,即 2n EccMulG1+(2n1) EccAddG12n ~ \mathsf{EccMul}^{\mathbb{G}_1} + (2n - 1) ~ \mathsf{EccAdd}^{\mathbb{G}_1}

因此这一步的总复杂度为

n Fmul+Finv+Fmul+(n1) Fmul+n Finv+2n Fmul+2n EccMulG1+(2n1) EccAddG1+2 EccMulG1+EccAddG1+EccMulG1+2 EccAddG1=4n Fmul+(n+1) Finv+(2n+3) EccMulG1+(2n+2) EccAddG1\begin{aligned} & n ~ \mathbb{F}_{\mathsf{mul}} + \mathbb{F}_{\mathsf{inv}} + \mathbb{F}_{\mathsf{mul}} + (n - 1) ~ \mathbb{F}_{\mathsf{mul}} + n ~ \mathbb{F}_{\mathsf{inv}} + 2n ~ \mathbb{F}_{\mathsf{mul}} \\ & + 2n ~ \mathsf{EccMul}^{\mathbb{G}_1} + (2n - 1) ~ \mathsf{EccAdd}^{\mathbb{G}_1} + 2 ~ \mathsf{EccMul}^{\mathbb{G}_1} + \mathsf{EccAdd}^{\mathbb{G}_1} + \mathsf{EccMul}^{\mathbb{G}_1} + 2~ \mathsf{EccAdd}^{\mathbb{G}_1} \\ = & 4n ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + (2n + 3) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (2n + 2) ~ \mathsf{EccAdd}^{\mathbb{G}_1} \end{aligned}
  1. 最后一步进行检查,用 Pairing 形式
e(CL+ζCw,[1]2)=?e(Cw,[τ]2)e(C_L + \zeta \cdot C_w, [1]_2) \overset{?}{=} e(C_w, [\tau]_2)

这一步的总复杂度为

EccMulG1+EccAddG1+2 P\mathsf{EccMul}^{\mathbb{G}_1} + \mathsf{EccAdd}^{\mathbb{G}_1} + 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\begin{aligned} & 4n ~ \mathbb{F}_{\mathsf{mul}} + 2n ~ \mathbb{F}_{\mathsf{inv}} \\ & + 4n ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + (2n + 3) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (2n + 2) ~ \mathsf{EccAdd}^{\mathbb{G}_1} \\ & + \mathsf{EccMul}^{\mathbb{G}_1} + \mathsf{EccAdd}^{\mathbb{G}_1} + 2~P \\ & = 8n ~ \mathbb{F}_{\mathsf{mul}} + (3n + 1) ~ \mathbb{F}_{\mathsf{inv}} + (2n + 4) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (2n + 3) ~ \mathsf{EccAdd}^{\mathbb{G}_1} + 2~P \end{aligned}

总结

Prover’s cost:

(2n2) Fmul+i=1n1msm(2i,G1)+(32n+n3) Fmul+(32n+n3) Fmul+i=0n1polymul(0,2i+1)+msm(2n1,G1)+(2n+2n+1) Fmul+(n+1) Finv+i=0n1polymul(0,2i+1)+polymul(0,2n2)+polymul(0,2n)+msm(2n1,G1)=(82n+4n7) Fmul+(n+1) Finv+2i=0n1polymul(0,2i+1)+polymul(0,2n2)+polymul(0,2n)+i=1n1msm(2i,G1)+2 msm(2n1,G1)\begin{aligned} & (2^n - 2) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) \\ & + (3 \cdot 2^{n} + n - 3) ~ \mathbb{F}_{\mathsf{mul}} \\ & + (3 \cdot 2^{n} + n - 3) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \\ & + (2^n + 2n + 1) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{polymul}(0, 2^n - 2) \\ & + \mathsf{polymul}(0, 2^n) + \mathsf{msm}(2^n - 1, \mathbb{G}_1) \\ = & (8 \cdot 2^{n} + 4n - 7) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + 2 \cdot \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{polymul}(0, 2^n - 2) \\ & + \mathsf{polymul}(0, 2^n) + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + 2 ~ \mathsf{msm}(2^n - 1, \mathbb{G}_1)\\ \end{aligned}

(8N+4n7) Fmul+(n+1) Finv+2i=0n1polymul(0,2i+1)+polymul(0,2n2)+polymul(0,N)+i=1n1msm(2i,G1)+2 msm(N1,G1)\begin{aligned} & (8 N + 4n - 7) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + 2 \cdot \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{polymul}(0, 2^n - 2) \\ & + \mathsf{polymul}(0, N) + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + 2 ~ \mathsf{msm}(N - 1, \mathbb{G}_1)\\ \end{aligned}

代入 polymul(0,N)=(N+1) Fmul\mathsf{polymul}(0, N) = (N + 1) ~ \mathbb{F}_{\mathsf{mul}}

(8N+4n7) Fmul+(n+1) Finv+2i=0n1polymul(0,2i+1)+polymul(0,2n2)+polymul(0,N)+i=1n1msm(2i,G1)+2 msm(N1,G1)=(8N+4n7) Fmul+(n+1) Finv+2i=0n1(2i+1+1) Fmul+(2n1) Fmul+(N+1) Fmul+i=1n1msm(2i,G1)+2 msm(N1,G1)=(8N+4n7) Fmul+(n+1) Finv+2i=0n1(2i+1+1) Fmul+(2n1) Fmul+(N+1) Fmul+i=1n1msm(2i,G1)+2 msm(N1,G1)=(8N+4n7) Fmul+(n+1) Finv+(4N+2n4) Fmul+(N1) Fmul+(N+1) Fmul+i=1n1msm(2i,G1)+2 msm(N1,G1)=(14N+6n11) Fmul+(n+1) Finv+i=1n1msm(2i,G1)+2 msm(N1,G1)\begin{aligned} & (8 N + 4n - 7) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + 2 \cdot \sum_{i = 0}^{n - 1} \mathsf{polymul}(0, 2^{i + 1}) + \mathsf{polymul}(0, 2^n - 2) \\ & + \mathsf{polymul}(0, N) + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + 2 ~ \mathsf{msm}(N - 1, \mathbb{G}_1)\\ = & (8 N + 4n - 7) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + 2 \cdot \sum_{i = 0}^{n - 1} (2^{i + 1} + 1) ~ \mathbb{F}_{\mathsf{mul}} + (2^n - 1) ~ \mathbb{F}_{\mathsf{mul}} \\ & + (N + 1) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + 2 ~ \mathsf{msm}(N - 1, \mathbb{G}_1) \\ = & (8 N + 4n - 7) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + 2 \cdot \sum_{i = 0}^{n - 1} (2^{i + 1} + 1) ~ \mathbb{F}_{\mathsf{mul}} + (2^n - 1) ~ \mathbb{F}_{\mathsf{mul}} \\ & + (N + 1) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + 2 ~ \mathsf{msm}(N - 1, \mathbb{G}_1) \\ = & (8 N + 4n - 7) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + (4N + 2n - 4) ~ \mathbb{F}_{\mathsf{mul}} + (N - 1) ~ \mathbb{F}_{\mathsf{mul}} \\ & + (N + 1) ~ \mathbb{F}_{\mathsf{mul}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + 2 ~ \mathsf{msm}(N - 1, \mathbb{G}_1) \\ = & (14 N + 6n - 11) ~ \mathbb{F}_{\mathsf{mul}} + (n + 1) ~ \mathbb{F}_{\mathsf{inv}} + \sum_{i = 1}^{n - 1} \mathsf{msm}(2^{i}, \mathbb{G}_1) + 2 ~ \mathsf{msm}(N - 1, \mathbb{G}_1) \\ \end{aligned}

Verifier’s cost:

8n Fmul+(3n+1) Finv+(2n+4) EccMulG1+(2n+3) EccAddG1+2 P8n ~ \mathbb{F}_{\mathsf{mul}} + (3n + 1) ~ \mathbb{F}_{\mathsf{inv}} + (2n + 4) ~ \mathsf{EccMul}^{\mathbb{G}_1} + (2n + 3) ~ \mathsf{EccAdd}^{\mathbb{G}_1} + 2~P

Proof size:

(n+1)Fp+(n+1)G1(n + 1) \cdot \mathbb{F}_p + (n + 1) \cdot \mathbb{G}_1