Skip to article frontmatterSkip to article content

缺失的协议 PH23-PCS(二)

本文给出 PH23-KZG10 的完整的优化协议。

1. 协议框架与优化

首先回顾下 PH23+KZG10 协议的 Evaluation Argument 的简单流程,然后我们看看有哪些可以优化的地方。

P: 发送 c(X)c(X) 的承诺 CcC_c V: 发送随机数 α 用来聚合多个多项式的约束等式 P: 计算公开的多项式集合 {si(X)}\{s_i(X)\} P: 计算聚合的约束多项式 h(X)h(X)

h(X)=G(c(X),s0(X),s1(X),,sn1(X),z(X),z(ω1X),X)h(X) = G(c(X), s_0(X), s_1(X),\ldots, s_{n-1}(X), z(X), z(\omega^{-1}X), X)

P: 计算商多项式 t(X)t(X) 的承诺 CtC_t, z(X)z(X) 的承诺 CzC_z

t(X)=h(X)vH(X)t(X) = \frac{h(X)}{v_H(X)}

V: 发送随机的求值点 ζ

P: 计算 c(ζω),c(ζω2),c(ζω4),,c(ζω2n1)c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), c(ζ)c(\zeta) ,还有 z(ζ),z(ω1ζ)z(\zeta), z(\omega^{-1}\cdot\zeta)t(ζ),a(ζ)t(\zeta), a(\zeta) ;发送上述多项式求值的 KZG10 Evaluation Arguments

V: 验证所有的 KZG10 Evaluation Arguments,然后验证下面的等式:

h(ζ)=?t(ζ)vH(ζ)\begin{split} h(\zeta) \overset{?}{=} t(\zeta)\cdot v_H(\zeta) \\ \end{split}

c(X)c^*(X) 在多点求值的证明优化

在证明中,Prover 需要证明 c(X)c(X) 多项式在 n+1n+1 个点上的 Evaluation,即

c(ωζ),c(ω2ζ),c(ω4ζ),,c(ω2n1ζ),c(ζ)c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), c(\zeta)

利用 [BDFG20] 论文中的技术,如果一个 f(X)f(X)mm 个点 D=(z0,z1,,zm1)D=(z_0,z_1,\ldots,z_{m-1}) 上的 Evaluation 为 v=(v0,v1,,vm1)\vec{v}=(v_0, v_1, \ldots, v_{m-1}),定义 f(X)f^*(X)v\vec{v}DD 上的插值多项式,即 deg(f(X))=m1\deg(f^*(X)) = m-1,并且有 f(zi)=f(zi),i[0,m)f^*(z_i) = f(z_i), \forall i\in[0,m)

vD(X)=i=0m1(Xzi)v_D(X) = \prod_{i=0}^{m-1} (X-z_i)

那么 f(X)f(X) 满足下面的等式:

f(X)f(X)=q(X)(Xz0)(Xz1)(Xzm1)f(X) - f^*(X) = q(X)\cdot (X-z_0)(X-z_1)\cdots(X-z_{m-1})

上面等式这个很容易验证,因为当 X=ziX=z_i 的时候,等式左边等于零,那么 f(X)f(X)f(X)-f^*(X) 可以被 (Xzi)(X-z_i) 整除。那么对于所有的 i=0,1,,m1i=0,1,\ldots,m-1f(X)f(X)f(X)-f^*(X) 可以被 vD(X)v_D(X) 整除,

vD(X)=i=0m1(Xzi)v_D(X) = \prod_{i=0}^{m-1} (X-z_i)

这样一来,Prover 只要向 Verifier 证明存在 q(X)q(X),使得 f(X)f(X)=q(X)vD(X)f(X) - f^*(X) = q(X)\cdot v_D(X),那么 f(X)f(X)DD 上的 Evaluation 就等于 v\vec{v}。而这个等式又可以通过 Verifier 提供一个随机挑战点 X=ξX=\xi 来验证,其中 vD(ξ)v_D(\xi)f(ξ)f^*(\xi) 可以由 Verifier 自行计算,而 f(ξ)f(\xi)q(ξ)q(\xi) 可以通过 KZG10 的 Evaluation Argument 来证明。

c(X)c^*(X) 多项式计算的优化

Prover 可以构造多项式 c(X)c^*(X),它是下面向量在 ζD\zeta D 上的插值多项式。这样做的优势是可以让 Prover 一次证明 c(X)c(X) 的多个不同点的 Evaluation,记为 c\vec{c^*}

c(ωζ),c(ω2ζ),c(ω4ζ),,c(ω2n1ζ),c(ζ)c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), c(\zeta)

我们引入 DD 满足 D=n+1|D|=n+1 ,其定义为

D=(ω, ω2, ω4, , ω2n1,ω2n=1)D = \big(\omega,\ \omega^2,\ \omega^4,\ \ldots,\ \omega^{2^{n-1}}, \omega^{2^n}=1\big)

那么 c(X)c^*(X) 的 Evaluation 的 Domain 就可以表示为 ζD\zeta D

D=Dζ=(ωζ, ω2ζ, ω4ζ, , ω2n1ζ, ζ)D'=D\zeta = \big(\omega\cdot\zeta,\ \omega^2\cdot\zeta,\ \omega^4\cdot\zeta,\ \ldots,\ \omega^{2^{n-1}}\cdot\zeta,\ \zeta\big)

其 Vanishing 多项式 vD(X)v_{D'}(X) 定义如下:

vD(X)=(Xωζ)(Xω2ζ)(Xω4ζ)(Xω2nζ)v_{D'}(X) = (X-\omega\zeta)(X-\omega^2\zeta)(X-\omega^4\zeta)\cdots(X-\omega^{2^n}\zeta)

对于 DD' 上的 Lagrange 多项式 可以定义如下:

LjD(X)=d^jvD(X)Xω2jζ,j=0,1,,nL^{D'}_j(X) = \hat{d}_j\cdot\frac{v_{D'}(X)}{X-\omega^{2^j}\zeta}, \qquad j=0,1,\ldots, n

其中 d^j\hat{d}_jDD' 上的 Bary-Centric Weights,定义为

d^j=lj1ζω2jζω2l=1ζnlj1ω2jω2l=1ζnw^j\hat{d}_j = \prod_{l\neq j} \frac{1}{\zeta\cdot\omega^{2^j} - \zeta\cdot\omega^{2^l}} = \frac{1}{\zeta^n}\cdot\prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}} = \frac{1}{\zeta^n}\cdot\hat{w}_j

这里 w^j\hat{w}_jDD 上的 Bary-Centric Weights,并且它的定义只与 DD 相关,和 ζ 无关。因此,我们可以事先预计算 w^j\hat{w}_j ,然后利用 w^j\hat{w}_j 来计算 c(X)c^*(X)

c(X)=c0L0D(X)+c1L1D(X)++cnLnD(X)c^*(X) = c^*_0 \cdot L^{D'}_0(X) + c^*_1 \cdot L^{D'}_1(X) + \cdots + c^*_n \cdot L^{D'}_n(X)

上面的等式可以进一步优化,等式右边除以一个常数项多项式 g(X)=1g(X)=1

g(X)=1L0D(X)+1L1D(X)++1LnD(X)g(X) = 1 \cdot L^{D'}_0(X) + 1 \cdot L^{D'}_1(X) + \cdots + 1 \cdot L^{D'}_n(X)

可以得到:

c(X)=c(X)g(X)=c0L0D(X)+c1L1D(X)++cnLnD(X)g(X)c^*(X) = \frac{c^*(X)}{g(X)} = \frac{c^*_0 \cdot L^{D'}_0(X) + c^*_1 \cdot L^{D'}_1(X) + \cdots + c^*_n \cdot L^{D'}_n(X)}{g(X)} \\

展开 g(X)g(X)LiD(X)L^{D'}_i(X) ,可以得到:

c(X)=c0d^0zD(X)Xωζ+c1d^1zD(X)Xω2ζ++cnd^nzD(X)Xω2nζ1d^0zD(X)Xωζ+1d^1zD(X)Xω2ζ++1d^nzD(X)Xω2nζc^*(X) = \frac{c^*_0 \cdot \hat{d}_0 \cdot \frac{z_{D'}(X)}{X-\omega\zeta} + c^*_1 \cdot \hat{d}_1 \cdot \frac{z_{D'}(X)}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \hat{d}_n \cdot \frac{z_{D'}(X)}{X-\omega^{2^n}\zeta}}{ 1 \cdot \hat{d}_0 \cdot \frac{z_{D'}(X)}{X-\omega\zeta} + 1 \cdot \hat{d}_1 \cdot \frac{z_{D'}(X)}{X-\omega^2\zeta} + \cdots + 1 \cdot \hat{d}_n \cdot \frac{z_{D'}(X)}{X-\omega^{2^n}\zeta} }

分子分母同时消去 zD(X)z_{D'}(X),可以得到

c(X)=c0d^01Xωζ+c1d^11Xω2ζ++cnd^n1Xω2nζ1d^01Xωζ+1d^11Xω2ζ++1d^n1Xω2nζc^*(X) = \frac{c^*_0 \cdot \hat{d}_0 \cdot \frac{1}{X-\omega\zeta} + c^*_1 \cdot \hat{d}_1 \cdot \frac{1}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \hat{d}_n \cdot \frac{1}{X-\omega^{2^n}\zeta}}{ 1 \cdot \hat{d}_0 \cdot \frac{1}{X-\omega\zeta} + 1 \cdot \hat{d}_1 \cdot \frac{1}{X-\omega^2\zeta} + \cdots + 1 \cdot \hat{d}_n \cdot \frac{1}{X-\omega^{2^n}\zeta} }

再展开 d^i\hat{d}_i 的定义,并且分子分母同时消去 1ζn\frac{1}{\zeta^n} ,可以得到

c(X)=c0w^0Xωζ+c1w^1Xω2ζ++cnw^nXω2nζw^0Xωζ+w^1Xω2ζ++w^nXω2nζc^*(X) = \frac{c^*_0 \cdot \frac{\hat{w}_0}{X-\omega\zeta} + c^*_1 \cdot \frac{\hat{w}_1}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \frac{\hat{w}_n}{X-\omega^{2^n}\zeta}}{ \frac{\hat{w}_0}{X-\omega\zeta} + \frac{\hat{w}_1}{X-\omega^2\zeta} + \cdots + \frac{\hat{w}_n}{X-\omega^{2^n}\zeta} }

Prover 可以利用事先预计算的 DD 上的Bary-Centric Weights {w^i}\{\hat{w}_i\} 来快速计算 c(X)c^*(X),如果 nn 是固定的。 尽管如此,c(X)c^*(X) 的计算复杂度仍为 O(nlog2(n))O(n\log^2(n))。不过考虑到 n=log(N)n=\log(N),所以 c(X)c^*(X) 的计算复杂度是对数级别的。

c(X)=j=0n1w^jζnzDζ(X)Xζω2jc^*(X) = \sum_{j=0}^{n-1} \frac{{\hat{w}}_j}{\zeta^n} \cdot \frac{z_{D_\zeta}(X)}{X-\zeta\cdot\omega^{2^j}}

预计算的 w^j\hat{w}_j 的定义为

w^j=lj1ω2jω2l\hat{w}_j = \prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}}

不仅如此,Verifier 需要计算 c(X)c^*(X) 在某个挑战点上的取值 ,比如 X=ξX=\xi, Verifier 可以通过上面的等式,以 O(logN)O(\log{N}) 时间复杂度根据 Prover 提供的 c\vec{c^*} 来计算 c(ξ)c^*(\xi)

2. PH23+KZG10 协议(优化版)

对于 KZG10 协议,因为其 Commitment 具有加法同态性。

Precomputation

  1. 预计算 s0(X),,sn1(X)s_0(X),\ldots, s_{n-1}(X) and vH(X)v_H(X)
vH(X)=XN1v_H(X) = X^N -1
si(X)=vH(X)vHi(X)=XN1X2i1s_i(X) = \frac{v_H(X)}{v_{H_i}(X)} = \frac{X^N-1}{X^{2^i}-1}
  1. 预计算 D=(1,ω,ω2,,ω2n1)D=(1, \omega, \omega^2, \ldots, \omega^{2^{n-1}}) 上的 Bary-Centric Weights {w^i}\{\hat{w}_i\}。这个可以加速
w^j=lj1ω2jω2l\hat{w}_j = \prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}}
  1. 预计算 Lagrange Basis 的 KZG10 SRS A0=[L0(τ)]1,A1=[L1(τ)]1,A2=[L2(τ)]1,,AN1=[L2n1(τ)]1A_0 =[L_0(\tau)]_1, A_1= [L_1(\tau)]_1, A_2=[L_2(\tau)]_1, \ldots, A_{N-1} = [L_{2^{n-1}}(\tau)]_1

Common inputs

  1. Ca=[f^(τ)]1C_a=[\hat{f}(\tau)]_1: the (uni-variate) commitment of f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1})
  2. u=(u0,u1,,un1)\vec{u}=(u_0, u_1, \ldots, u_{n-1}): 求值点
  3. v=f~(u0,u1,,un1)v=\tilde{f}(u_0,u_1,\ldots, u_{n-1}): MLE 多项式 f~\tilde{f}X=u\vec{X}=\vec{u} 处的运算值

Commit 计算过程

  1. Prover 构造一元多项式 a(X)a(X),使其 Evaluation form 等于 a=(a0,a1,,aN1)\vec{a}=(a_0, a_1, \ldots, a_{N-1}),其中 ai=f~(bits(i))a_i = \tilde{f}(\mathsf{bits}(i)), 为 f~\tilde{f} 在 Boolean Hypercube {0,1}n\{0,1\}^n 上的取值。
a(X)=a0L0(X)+a1L1(X)+a2L2(X)++aN1LN1(X)a(X) = a_0\cdot L_0(X) + a_1\cdot L_1(X) + a_2\cdot L_2(X) + \cdots + a_{N-1}\cdot L_{N-1}(X)
  1. Prover 计算 f^(X)\hat{f}(X) 的承诺 CaC_a,并发送 CaC_a
Ca=a0A0+a1A1+a2A2++aN1AN1=[f^(τ)]1C_{a} = a_0\cdot A_0 + a_1\cdot A_1 + a_2\cdot A_2 + \cdots + a_{N-1}\cdot A_{N-1} = [\hat{f}(\tau)]_1

其中 A0=[L0(τ)]1,A1=[L1(τ)]1,A2=[L2(τ)]1,,AN1=[L2n1(τ)]1A_0 =[L_0(\tau)]_1, A_1= [L_1(\tau)]_1, A_2=[L_2(\tau)]_1, \ldots, A_{N-1} = [L_{2^{n-1}}(\tau)]_1 ,在预计算过程中已经得到。

Evaluation 证明协议

回忆下证明的多项式运算的约束:

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

这里 u=(u0,u1,u2,,un1)\vec{u}=(u_0, u_1, u_2, \ldots, u_{n-1}) 是一个公开的挑战点。

Round 1.

Prover:

  1. 计算向量 c\vec{c},其中每个元素 ci=eq(bits(i),u)c_i=\overset{\sim}{eq}(\mathsf{bits}(i), \vec{u})

  2. 构造多项式 c(X)c(X),其在 HH 上的运算结果恰好是 c\vec{c}

c(X)=i=0N1ciLi(X)c(X) = \sum_{i=0}^{N-1} c_i \cdot L_i(X)
  1. 计算 c(X)c(X) 的承诺 Cc=[c(τ)]1C_c= [c(\tau)]_1,并发送 CcC_c
Cc=KZG10.Commit(c)=[c(τ)]1C_c = \mathsf{KZG10.Commit}(\vec{c}) = [c(\tau)]_1

Round 2.

Verifier: 发送挑战数 α$Fp\alpha\leftarrow_{\$}\mathbb{F}_p

Prover:

  1. 构造关于 c\vec{c} 的约束多项式 p0(X),,pn(X)p_0(X),\ldots, p_{n}(X)
p0(X)=s0(X)(c(X)(1u0)(1u1)...(1un1))pk(X)=sk1(X)(unkc(X)(1unk)c(ω2nkX)),k=1n\begin{split} p_0(X) &= s_0(X) \cdot \Big( c(X) - (1-u_0)(1-u_1)...(1-u_{n-1}) \Big) \\ p_k(X) &= s_{k-1}(X) \cdot \Big( u_{n-k}\cdot c(X) - (1-u_{n-k})\cdot c(\omega^{2^{n-k}}\cdot X)\Big) , \quad k=1\ldots n \end{split}
  1. {pi(X)}\{p_i(X)\} 聚合为一个多项式 p(X)p(X)
p(X)=p0(X)+αp1(X)+α2p2(X)++αnpn(X)p(X) = p_0(X) + \alpha\cdot p_1(X) + \alpha^2\cdot p_2(X) + \cdots + \alpha^{n}\cdot p_{n}(X)
  1. 构造累加多项式 z(X)z(X),满足
z(1)=a0c0z(ωi)z(ωi1)=a(ωi)c(ωi),i=1,,N1z(ωN1)=v\begin{split} z(1) &= a_0\cdot c_0 \\ z(\omega_{i}) - z(\omega_{i-1}) &= a(\omega_{i})\cdot c(\omega_{i}), \quad i=1,\ldots, N-1 \\ z(\omega^{N-1}) &= v \\ \end{split}
  1. 构造约束多项式 h0(X),h1(X),h2(X)h_0(X), h_1(X), h_2(X),满足
h0(X)=L0(X)(z(X)c0a(X))h1(X)=(X1)(z(X)z(ω1X)a(X)c(X))h2(X)=LN1(X)(z(X)v)\begin{split} h_0(X) &= L_0(X)\cdot\big(z(X) - c_0\cdot a(X) \big) \\ h_1(X) &= (X-1)\cdot\big(z(X)-z(\omega^{-1}\cdot X)-a(X)\cdot c(X)) \\ h_2(X) & = L_{N-1}(X)\cdot\big( z(X) - v \big) \\ \end{split}
  1. p(X)p(X)h0(X),h1(X),h2(X)h_0(X), h_1(X), h_2(X) 聚合为一个多项式 h(X)h(X),满足
h(X)=p(X)+αn+1h0(X)+αn+2h1(X)+αn+3h2(X)\begin{split} h(X) &= p(X) + \alpha^{n+1} \cdot h_0(X) + \alpha^{n+2} \cdot h_1(X) + \alpha^{n+3} \cdot h_2(X) \end{split}
  1. 计算 Quotient 多项式 t(X)t(X),满足
h(X)=t(X)vH(X)h(X) =t(X)\cdot v_H(X)
  1. 计算 Ct=[t(τ)]1C_t=[t(\tau)]_1Cz=[z(τ)]1C_z=[z(\tau)]_1,并发送 CtC_tCzC_z
Ct=KZG10.Commit(t(X))=[t(τ)]1Cz=KZG10.Commit(z(X))=[z(τ)]1\begin{split} C_t &= \mathsf{KZG10.Commit}(t(X)) = [t(\tau)]_1 \\ C_z &= \mathsf{KZG10.Commit}(z(X)) = [z(\tau)]_1 \end{split}

Round 3.

Verifier: 发送随机求值点 ζ$Fp\zeta\leftarrow_{\$}\mathbb{F}_p

Prover:

  1. 计算 si(X)s_i(X)ζ 处的取值:
s0(ζ),s1(ζ),,sn1(ζ)s_0(\zeta), s_1(\zeta), \ldots, s_{n-1}(\zeta)

这里 Prover 可以高效计算 si(ζ)s_i(\zeta) ,由 si(X)s_i(X) 的公式得

si(ζ)=ζN1ζ2i1=(ζN1)(ζ2i+1)(ζ2i1)(ζ2i+1)=ζN1ζ2i+11(ζ2i+1)=si+1(ζ)(ζ2i+1)\begin{aligned} s_i(\zeta) & = \frac{\zeta^N - 1}{\zeta^{2^i} - 1} \\ & = \frac{(\zeta^N - 1)(\zeta^{2^i} +1)}{(\zeta^{2^i} - 1)(\zeta^{2^i} +1)} \\ & = \frac{\zeta^N - 1}{\zeta^{2^{i + 1}} - 1} \cdot (\zeta^{2^i} +1) \\ & = s_{i + 1}(\zeta) \cdot (\zeta^{2^i} +1) \end{aligned}

因此 si(ζ)s_i(\zeta) 的值可以通过 si+1(ζ)s_{i + 1}(\zeta) 计算得到,而

sn1(ζ)=ζN1ζ2n11=ζ2n1+1s_{n-1}(\zeta) = \frac{\zeta^N - 1}{\zeta^{2^{n-1}} - 1} = \zeta^{2^{n-1}} + 1

因此可以得到一个 O(n)O(n) 的算法来计算 si(ζ)s_i(\zeta) ,并且这里不含除法运算。计算过程是:sn1(ζ)sn2(ζ)s0(ζ)s_{n-1}(\zeta) \rightarrow s_{n-2}(\zeta) \rightarrow \cdots \rightarrow s_0(\zeta)

  1. 定义求值 Domain DD',包含 n+1n+1 个元素:
D=Dζ={ζ,ωζ,ω2ζ,ω4ζ,,ω2n1ζ}D'=D\zeta = \{\zeta, \omega\zeta, \omega^2\zeta,\omega^4\zeta, \ldots, \omega^{2^{n-1}}\zeta\}
  1. 计算并发送 c(X)c(X)DD' 上的取值
c(ζ),c(ζω),c(ζω2),c(ζω4),,c(ζω2n1)c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}})
  1. 计算并发送 z(ω1ζ)z(\omega^{-1}\cdot\zeta)

  2. 计算 Linearized Polynomial lζ(X)l_\zeta(X)

lζ(X)=(s0(ζ)(c(ζ)c0)+αs0(ζ)(un1c(ζ)(1un1)c(ω2n1ζ))+α2s1(ζ)(un2c(ζ)(1un2)c(ω2n2ζ))++αn1sn2(ζ)(u1c(ζ)(1u1)c(ω2ζ))+αnsn1(ζ)(u0c(ζ)(1u0)c(ωζ))+αn+1(L0(ζ)(z(X)c0a(X))+αn+2(ζ1)(z(X)z(ω1ζ)c(ζ)a(X))+αn+3LN1(ζ)(z(X)v)vH(ζ)t(X) )\begin{split} l_\zeta(X) =& \Big(s_0(\zeta) \cdot (c(\zeta) - c_0) \\ & + \alpha\cdot s_0(\zeta) \cdot (u_{n-1}\cdot c(\zeta) - (1-u_{n-1})\cdot c(\omega^{2^{n-1}}\cdot\zeta))\\ & + \alpha^2\cdot s_1(\zeta) \cdot (u_{n-2}\cdot c(\zeta) - (1-u_{n-2})\cdot c(\omega^{2^{n-2}}\cdot\zeta)) \\ & + \cdots \\ & + \alpha^{n-1}\cdot s_{n-2}(\zeta)\cdot (u_{1}\cdot c(\zeta) - (1-u_{1})\cdot c(\omega^2\cdot\zeta))\\ & + \alpha^n\cdot s_{n-1}(\zeta)\cdot (u_{0}\cdot c(\zeta) - (1-u_{0})\cdot c(\omega\cdot\zeta)) \\ & + \alpha^{n+1}\cdot (L_0(\zeta)\cdot\big(z(X) - c_0\cdot a(X))\\ & + \alpha^{n+2}\cdot (\zeta - 1)\cdot\big(z(X)-z(\omega^{-1}\cdot\zeta)-c(\zeta)\cdot a(X) ) \\ & + \alpha^{n+3}\cdot L_{N-1}(\zeta)\cdot(z(X) - v) \\ & - v_H(\zeta)\cdot t(X)\ \Big) \end{split}

显然,lζ(ζ)=0l_\zeta(\zeta)= 0,因此这个运算值不需要发给 Verifier,并且 [lζ(τ)]1[l_\zeta(\tau)]_1 可以由 Verifier 自行构造。

  1. 构造多项式 c(X)c^*(X),它是下面向量在 DζD\zeta 上的插值多项式
c=(c(ωζ),c(ω2ζ),c(ω4ζ),,c(ω2n1ζ),c(ζ))\vec{c^*}= \Big(c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), c(\zeta)\Big)

Prover 可以利用事先预计算的 DD 上的Bary-Centric Weights {w^i}\{\hat{w}_i\} 来快速计算 c(X)c^*(X)

c(X)=c0w^0Xωζ+c1w^1Xω2ζ++cnw^nXω2nζw^0Xωζ+w^1Xω2ζ++w^nXω2nζc^*(X) = \frac{c^*_0 \cdot \frac{\hat{w}_0}{X-\omega\zeta} + c^*_1 \cdot \frac{\hat{w}_1}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \frac{\hat{w}_n}{X-\omega^{2^n}\zeta}}{ \frac{\hat{w}_0}{X-\omega\zeta} + \frac{\hat{w}_1}{X-\omega^2\zeta} + \cdots + \frac{\hat{w}_n}{X-\omega^{2^n}\zeta} }

这里 w^j\hat{w}_j 为预计算的值:

w^j=lj1ω2jω2l\hat{w}_j = \prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}}
  1. 因为 lζ(ζ)=0l_\zeta(\zeta)= 0,所以存在 Quotient 多项式 qζ(X)q_\zeta(X) 满足
qζ(X)=1Xζlζ(X)q_\zeta(X) = \frac{1}{X-\zeta}\cdot l_\zeta(X)
  1. 构造 DζD\zeta 上的消失多项式 zDζ(X)z_{D_{\zeta}}(X)
zDζ(X)=(Xζω)(Xζω2n1)(Xζ)z_{D_{\zeta}}(X) = (X-\zeta\omega)\cdots (X-\zeta\omega^{2^{n-1}})(X-\zeta)
  1. 构造 Quotient 多项式 qc(X)q_c(X) :
qc(X)=(c(X)c(X))(Xζ)(Xωζ)(Xω2ζ)(Xω2n1ζ)q_c(X) = \frac{(c(X) - c^*(X))}{(X-\zeta)(X-\omega\zeta)(X-\omega^2\zeta)\cdots(X-\omega^{2^{n-1}}\zeta)}
  1. 构造 Quotient 多项式 qωζ(X)q_{\omega\zeta}(X)
qωζ(X)=z(X)z(ω1ζ)Xω1ζq_{\omega\zeta}(X) = \frac{z(X) - z(\omega^{-1}\cdot\zeta)}{X - \omega^{-1}\cdot\zeta}
  1. 发送 (Qc=[qc(τ)]1,Qζ=[qζ(τ)]1,Qωζ=[qωζ(τ)]1,)\big(Q_c = [q_c(\tau)]_1, Q_\zeta=[q_\zeta(\tau)]_1, Q_{\omega\zeta}=[q_{\omega\zeta}(\tau)]_1, \big)

Round 4.

  1. Verifier 发送第二个随机挑战点 ξ$Fp\xi\leftarrow_{\$}\mathbb{F}_p

  2. Prover 构造第三个 Quotient 多项式 qξ(X)q_\xi(X)

qξ(X)=c(X)c(ξ)zDζ(ξ)qc(X)Xξq_\xi(X) = \frac{c(X) - c^*(\xi) - z_{D_\zeta}(\xi)\cdot q_c(X)}{X-\xi}
  1. Prover 计算并发送 QξQ_\xi
Qξ=KZG10.Commit(qξ(X))=[qξ(τ)]1Q_\xi = \mathsf{KZG10.Commit}(q_\xi(X)) = [q_\xi(\tau)]_1

证明表示

7G17\cdot\mathbb{G}_1, (n+1)F(n+1)\cdot\mathbb{F}

πeval=(z(ω1ζ),c(ζ),c(ωζ),c(ω2ζ),c(ω4ζ),,c(ω2n1ζ),Cc,Ct,Cz,Qc,Qζ,Qξ,Qωζ)\begin{aligned} \pi_{eval} &= \big(z(\omega^{-1}\cdot\zeta), c(\zeta), c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), \\ & \qquad C_{c}, C_{t}, C_{z}, Q_c, Q_\zeta, Q_\xi, Q_{\omega\zeta}\big) \end{aligned}

验证过程

  1. Verifier 计算 c(ξ)c^*(\xi) 使用预计算的 Barycentric Weights {w^i}\{\hat{w}_i\}
c(ξ)=iciw^iξxiiw^iξxic^*(\xi)=\frac{\sum_i c_i^*\frac{\hat{w}_i}{\xi-x_i}}{\sum_i \frac{\hat{w}_i}{\xi-x_i}}

再计算对应的承诺 C(ξ)=[c(ξ)]1C^*(\xi)=[c^*(\xi)]_1

  1. Verifier 计算 vH(ζ),L0(ζ),LN1(ζ)v_H(\zeta), L_0(\zeta), L_{N-1}(\zeta)
vH(ζ)=ζN1v_H(\zeta) = \zeta^N - 1
L0(ζ)=1NvH(ζ)ζ1L_0(\zeta) = \frac{1}{N}\cdot \frac{v_{H}(\zeta)}{\zeta-1}
LN1(ζ)=ωN1NvH(ζ)ζωN1L_{N-1}(\zeta) = \frac{\omega^{N-1}}{N}\cdot \frac{v_{H}(\zeta)}{\zeta-\omega^{N-1}}
  1. Verifier 计算 s0(ζ),,sn1(ζ)s_0(\zeta), \ldots, s_{n-1}(\zeta) ,其计算方法可以采用前文提到的递推方式进行计算。

  2. Verifier 计算 zDζ(ξ)z_{D_\zeta}(\xi)

zDζ(ξ)=(ξζω)(ξζω2n1)(ξζ)z_{D_{\zeta}}(\xi) = (\xi-\zeta\omega)\cdots (\xi-\zeta\omega^{2^{n-1}})(\xi-\zeta)
  1. Verifier 计算线性化多项式的承诺 ClC_l
Cl=(((c(ζ)c0)s0(ζ)+α(un1c(ζ)(1un1)c(ω2n1ζ))s0(ζ)+α2(un2c(ζ)(1un2)c(ω2n2ζ))s1(ζ)++αn1(u1c(ζ)(1u1)c(ω2ζ))sn2(ζ)+αn(u0c(ζ)(1u0)c(ωζ))sn1(ζ))[1]1+αn+1L0(ζ)(Czc0Ca)+αn+2(ζ1)(Czz(ω1ζ)[1]1c(ζ)Ca)+αn+3LN1(ζ)(Czv[1]1)vH(ζ)Ct)\begin{split} C_l & = \Big( \Big((c(\zeta) - c_0)s_0(\zeta) \\ & + \alpha \cdot (u_{n-1}\cdot c(\zeta) - (1-u_{n-1})\cdot c(\omega^{2^{n-1}}\cdot\zeta))\cdot s_0(\zeta)\\ & + \alpha^2\cdot (u_{n-2}\cdot c(\zeta) - (1-u_{n-2})\cdot c(\omega^{2^{n-2}}\cdot\zeta))\cdot s_1(\zeta) \\ & + \cdots \\ & + \alpha^{n-1}\cdot (u_{1}\cdot c(\zeta) - (1-u_{1})\cdot c(\omega^2\cdot\zeta))\cdot s_{n-2}(\zeta)\\ & + \alpha^n\cdot (u_{0}\cdot c(\zeta) - (1-u_{0})\cdot c(\omega\cdot\zeta))\cdot s_{n-1}(\zeta) \Big) \cdot [1]_1 \\ & + \alpha^{n+1}\cdot L_0(\zeta)\cdot(C_z - c_0\cdot C_a)\\ & + \alpha^{n+2}\cdot (\zeta-1)\cdot\big(C_z - z(\omega^{-1}\cdot \zeta) \cdot [1]_1 -c(\zeta)\cdot C_{a} ) \\ & + \alpha^{n+3}\cdot L_{N-1}(\zeta)\cdot(C_z - v \cdot [1]_1) \\ & - v_H(\zeta)\cdot C_t \Big) \end{split}
  1. Verifier 产生随机数 η 来合并下面的 Pairing 验证:
e(Cl+ζQζ,[1]2)=?e(Qζ,[τ]2)e(CcC(ξ)zDζ(ξ)Qc+ξQξ,[1]2)=?e(Qξ,[τ]2)e(Cz+ζQωζz(ω1ζ)[1]1,[1]2)=?e(Qωζ,[τ]2)\begin{split} e(C_l + \zeta\cdot Q_\zeta, [1]_2)\overset{?}{=}e(Q_\zeta, [\tau]_2)\\ e(C_c - C^*(\xi) - z_{D_\zeta}(\xi)\cdot Q_c + \xi\cdot Q_\xi, [1]_2) \overset{?}{=} e(Q_\xi, [\tau]_2)\\ e(C_z + \zeta\cdot Q_{\omega\zeta} - z(\omega^{-1}\cdot\zeta)\cdot[1]_1, [1]_2) \overset{?}{=} e(Q_{\omega\zeta}, [\tau]_2)\\ \end{split}

合并后的验证只需要两个 Pairing 运算。

P=(Cl+ζQζ)+η(CcC(ξ)zDζ(ξ)Qc+ξQξ)+η2(Cz+ζQωζz(ω1ζ)[1]1)\begin{split} P &= \Big(C_l + \zeta\cdot Q_\zeta\Big) \\ & + \eta\cdot \Big(C_c - C^*(\xi) - z_{D_\zeta}(\xi)\cdot Q_c + \xi\cdot Q_\xi\Big) \\ & + \eta^2\cdot\Big(C_z + \zeta\cdot Q_{\omega\zeta} - z(\omega^{-1}\cdot\zeta)\cdot[1]_1\Big) \end{split}
e(P,[1]2)=?e(Qζ+ηQξ+η2Qωζ,[τ]2)e\Big(P, [1]_2\Big) \overset{?}{=} e\Big(Q_\zeta + \eta\cdot Q_\xi + \eta^2\cdot Q_{\omega\zeta}, [\tau]_2\Big)

3. 优化性能分析

Proof size: 7 G1+(n+1) F7~\mathbb{G}_1 + (n+1)~\mathbb{F}

Prover’s cost

Verifier’s cost: 4 F+O(n) F+3 G1+2 P4~\mathbb{F} + O(n)~\mathbb{F}+ 3~\mathbb{G}_1 + 2~P

References