Skip to article frontmatterSkip to article content

缺失的协议 PH23-PCS(一)

在 Improving logarithmic derivative lookups using GKR ([PH23]) 论文中, 作者给出了一个将 MLE 转成 Univariate Polynomial 的思路,虽然论文没有给出完整的协议描述,但是这个协议也展示了在某些特性方面的优势,比如可以支持任意偏移的 Shift Argument。

这个方案的主要优势是能支持任意的 Shift Argument(见论文 Appendix A.2)。其次,如果对接 KZG10,那么这个 PCS Adaptor 的证明仅仅包含常数个 G1\mathbb{G}_1 元素,和对数个 Fr\mathbb{F}_r 元素。这要优于 Gemini-PCS 与 Zeromorph-PCS(KT23),后者需要对数个 G1\mathbb{G}_1 元素。

这个协议的思路与 Virgo-PCS 有类似之处,都是将 MLE 的多项式运算看成是一个求和,并且都是利用 Univariate Sumcheck 协议来完成「求和证明」。但是 PH23-PCS 还要求 Prover 证明 MLE Lagrange Polynomial 在求值点上的值,从而减轻 Verifier 的负担;而 Virgo-PCS 则利用了 GKR 协议来做到这一点。另一个不同之处是,Virgo-PCS 要求 MLE 多项式需要是一个 Coefficient Form 的表示,因此 Virgo-PCS 利用 GKR 电路来完成 MLE 多项式由 Evaluation Form 到 Coefficient Form 的转换的计算正确性的证明。

这个文章系列补全了 [PH23] 论文中关于 PH23-PCS 的描述,并给出了 PH23-KZG10 的一个简化协议来帮助大家理解这个协议的基本思路。

本文先详细介绍 PH23-PCS-Adaptor 的基础原理,然后给出 PH23-KZG10 的一个简单协议实现。

1. 原理概述

在解释 Prover 如何证明一个 MLE 多项式 f~(X)\tilde{f}(\vec{X}) 的 Evaluation 之前,我们先回忆下 MLE 多项式的定义:

f~(X0,X1,,Xn1)=i=0N1aieq(bits(i),(X0,X1,,Xn1))\tilde{f}(X_0, X_1, \ldots, X_{n-1}) = \sum_{i=0}^{N-1} a_i \cdot \overset{\sim}{eq}(\mathsf{bits}(i), (X_0, X_1, \ldots, X_{n-1}))

这里 N=2nN=2^n 。 当要计算 f~(X)\tilde{f}(\vec{X})X=(u0,u1,,un1)\vec{X}=(u_0, u_1, \ldots, u_{n-1}) 处的值时,我们需要计算 i=0N1aieq(bits(i),u)\sum_{i=0}^{N-1} a_i \cdot \overset{\sim}{eq}(\mathsf{bits}(i), \vec{u})。为了方便解释,我们引入一个新的向量 c\vec{c} ,其中的每一个元素 cic_i = eq(bits(i),u)\overset{\sim}{eq}(\mathsf{bits}(i), \vec{u})

如果 n=3n=3 and N=8N=8, 那么 c\vec{c} 的值可以全部枚举出:

c0=(1u0)(1u1)(1u2)c1=u0(1u1)(1u2)c2=(1u0)u1(1u2)c3=u0u1(1u2)c4=(1u0)(1u1)u2c5=u0(1u1)u2c6=(1u0)u1u2c7=u0u1u2\begin{array}{ccccc} c_0 &= &(1-u_0)&(1-u_1)&(1-u_2) \\ c_1 &= &u_0&(1-u_1)&(1-u_2) \\ c_2 &= &(1-u_0) &u_1 &(1-u_2) \\ c_3 &= &u_0 &u_1 &(1-u_2) \\ c_4 &= &(1-u_0)&(1-u_1) & u_2 \\ c_5 &= &u_0&(1-u_1)&u_2 \\ c_6 &= &(1-u_0) &u_1 &u_2 \\ c_7 &= &u_0 &u_1 &u_2 \\ \end{array}

可以看出,c\vec{c} 的元素定义具有一定的规律。比如 cic_iss 个数值的连乘,这些数值也具有一定的规律。其中 (1ui)(1-u_i) 表示二进制的 0 ,而 uiu_i 表示二进制的 1 。比如 c7c_7 是由三个数相乘,分别为 u0,u1,u2u_0, u_1, u_2 ,这表示 (111),这恰好是 7 的二进制表示。又比如 c5c_5 是由三个数相乘,分别为 u0,(1u1),u2u_0, (1-u_1), u_2 ,这表示 (101),正是 5 的二进制表示。

而 PH23 的关键思路是,是否可以让 Prover 先承诺向量 c\vec{c},然后证明 c\vec{c} 的每一个元素都是按照上面的二进制规律去正确定义的。如果可以,那么 Prover 再证明一个 Inner Product 关系,即可以证明 a,c=v\langle \vec{a}, \vec{c} \rangle = v ,这正是等价于证明 f~(X)=v\tilde{f}(\vec{X})=v

因此 PH23 的证明协议分为两部分:

  1. 证明 c\vec{c} 向量的 Well-Formedness。
  2. 证明 a,c=v\langle \vec{a}, \vec{c} \rangle = v

2. Well-Formedness of c\vec{c}

继续 s=3s=3c\vec{c} 的例子,

c0=(1u0)(1u1)(1u2)c1=u0(1u1)(1u2)c2=(1u0)u1(1u2)c3=u0u1(1u2)c4=(1u0)(1u1)u2c5=u0(1u1)u2c6=(1u0)u1u2c7=u0u1u2\begin{array}{ccccc} c_0 &= &(1-u_0)&(1-u_1)&(1-u_2) \\ c_1 &= &u_0&(1-u_1)&(1-u_2) \\ c_2 &= &(1-u_0) &u_1 &(1-u_2) \\ c_3 &= &u_0 &u_1 &(1-u_2) \\ c_4 &= &(1-u_0)&(1-u_1) & u_2 \\ c_5 &= &u_0&(1-u_1)&u_2 \\ c_6 &= &(1-u_0) &u_1 &u_2 \\ c_7 &= &u_0 &u_1 &u_2 \\ \end{array}

观察到

c0c4=1u2u2\frac{c_0}{c_4} = \frac{1-u_2}{u_2}

于是,如果 c0c_0 是正确的,那么我们可以通过证明下面的约束等式

c0u2c4(1u2)=0c_0\cdot u_2 - c_4\cdot (1-u_2) = 0

来证明 c4c_4 是正确的。接下来,观察

c0c2=c4c6=1u1u1\frac{c_0}{c_2} = \frac{c_4}{c_6} = \frac{1-u_1}{u_1} \\

由此我们可以推断,如果 c0c_0 是正确的,那么下面两个约束等式保证了 c2,c6c_2, c_6 是正确的:

c0u1c2(1u1)=0c4u1c6(1u1)=0\begin{split} c_0\cdot u_1 - c_2\cdot (1-u_1) = 0 \\ c_4\cdot u_1 - c_6\cdot (1-u_1) = 0 \\ \end{split}

接下来,我们可以证明 c1,c3,c5,c7c_1, c_3, c_5, c_7 是正确的,因为它们可以由 c0,c2,c4,c6c_0, c_2, c_4, c_6 推导出来,而 c0,c2,c4,c6c_0, c_2, c_4, c_6 已经在上一步中证明正确:

c0u0c1(1u0)=0c2u0c3(1u0)=0c4u0c5(1u0)=0c6u0c7(1u0)=0\begin{split} c_0 \cdot u_0 - c_1 \cdot (1-u_0) = 0 \\ c_2 \cdot u_0 - c_3 \cdot (1-u_0) = 0 \\ c_4 \cdot u_0 - c_5 \cdot (1-u_0) = 0 \\ c_6 \cdot u_0 - c_7 \cdot (1-u_0) = 0 \\ \end{split}

最后结论,通过上面的 1+2+41+2+4 个约束等式,我们在已知 c0c_0 正确的前提下,可以证明 c1,c2,c3,c4,c5,c6,c7c_1, c_2, c_3, c_4, c_5, c_6, c_7 都是正确的。向量 c\vec{c} 的元素之间的推理关系如下图所示:

c4c2c6c1c3c5c7\begin{array}{cccc} c_4 & & & \\ c_2 & c_6 & & \\ c_1& c_3 & c_5& c_7 \\ \cdots & & & \\ \end{array}

假设 HH 为大小为 8 的有限域 Fp\mathbb{F}_p 的乘法子群,H={1,ω,ω2,ω3,ω4,ω5,ω6,ω7}H=\{1, \omega, \omega^2, \omega^3, \omega^4, \omega^5, \omega^6, \omega^7\},其中 ωFp\omega\in \mathbb{F}_p8 次单位根。并且将 {Li(X)}i=0N1\{L_i(X)\}_{i=0}^{N-1} 记为 HH 上的 Lagrange Basis 多项式。

然后我们可以引入 c(X)c(X) 作为 c\vec{c} 按照 Lagrange Basis 编码的多项式:

c(X)=i=0N1ciLi(X)c(X) = \sum_{i=0}^{N-1} c_i \cdot L_i(X)

容易验证,c(ωi)=cic(\omega^i) = c_i,其中 i=0,1,2,,N1i=0,1,2,\ldots, N-1

进一步,上面证明 c1,c3,c5,c7c_1, c_3, c_5, c_7 的四个约束等式可以合并为一个多项式约束等式:

(Xω)(Xω3)(Xω5)(Xω7)(c(X)u0c(ωX)(1u0))=0,XH(X-\omega)(X-\omega^3)(X-\omega^5)(X-\omega^7)\cdot \big(c(X)u_0 - c(\omega\cdot X)(1-u_0)\big) = 0, \quad X\in H

我们可以代入 X=ω2X=\omega^2,上面的约束等式则对应于:

c(ω2)u0c(ω3)(1u0)=c2u0c3(1u0)=0c(\omega^2) \cdot u_0 - c(\omega^3) \cdot (1-u_0) = c_2 \cdot u_0 - c_3 \cdot (1-u_0) = 0 \\

分别代入 X=ω,X=ω4,X=ω6X=\omega, X=\omega^4, X=\omega^6,我们可以得到证明 c1,c5,c7c_1, c_5, c_7 正确性的约束等式。

(Xω)(Xω3)(Xω5)(Xω7)(X-\omega)(X-\omega^3)(X-\omega^5)(X-\omega^7) 这个多项式像是一个 Selector 多项式,过滤掉不满足的 XX 值。

利用这个方法,我们可以利用 n=logNn=\log{N} 个多项式约束来证明 c\vec{c} 的 Well-Formedness。

对于 N=8N=8 的例子,我们需要引入 3 个 Selector 多项式 s0(X),s1(X),s2(X)s_0(X), s_1(X), s_2(X)

si(X)=vH(X)vHi(X),i=0,1,2s_i(X) = \frac{v_H(X)}{v_{H_i}(X)}, \qquad i=0,1,2

其中 vH(X)v_H(X)vHi(X)v_{H_i}(X) 分别是 Domain HHHiH_i 的 Vanishing 多项式。而 HiH_iHH 的子群,并且满足下面的 Group Tower 关系:

{1}=H0H1H2H3=H\{1\} = H_0 \sub H_1 \sub H_2 \sub H_3 = H

他们的定义如下:

H=H3=(1,ω,ω2,ω3,ω4,ω5,ω6,ω7)H2=(1,ω2,ω4,ω6)H1=(1,ω4)H0=(1)\begin{split} H = H_3 &= (1, \omega, \omega^2, \omega^3, \omega^4, \omega^5, \omega^6, \omega^7) \\ H_2 & = (1, \omega^2, \omega^4, \omega^6)\\ H_1 & = (1, \omega^4)\\ H_0 & = (1)\\ \end{split}

自然地,Selector 多项式 s0(X),s1(X),s2(X)s_0(X), s_1(X), s_2(X) 的表示如下:

s0(X)=(Xω)(Xω2)(Xω3)(X+1)(X+ω)(X+ω2)(X+ω3)s1(X)=(Xω)(Xω2)(Xω3)(X+ω)(X+ω2)(X+ω3)s2(X)=(Xω)(Xω3)(X+ω)(X+ω3)\begin{split} s_0(X) &= (X-\omega)(X-\omega^2)(X-\omega^3)(X+1)(X+\omega)(X+\omega^2)(X+\omega^3) \\ s_1(X) &= (X-\omega)(X-\omega^2)(X-\omega^3)(X+\omega)(X+\omega^2)(X+\omega^3) \\ s_2(X) &= (X-\omega)(X-\omega^3)(X+\omega)(X+\omega^3) \\ \end{split}

多项式约束等式

保证 c0c_0 正确的约束等式可以表示为下面的多项式约束:

s0(X)(c(X)(1u0)(1u1)(1u2))=0,XHs_0(X)\cdot \big(c(X) - (1-u_0)(1-u_1)(1-u_{2})\big) = 0, \quad X\in H

保证 c4c_4 正确的约束等式可以表示为下面的多项式约束:

s0(X)(c(X)u2c(ω4X)(1u2))=0,XHs_0(X)\cdot \big(c(X)u_2 - c(\omega^4\cdot X)(1-u_2)\big) = 0, \quad X\in H

下面是保证 c2,c6c_2, c_6 正确的约束等式:

s1(X)(c(X)u1c(ω2X)(1u1))=0,XHs_1(X)\cdot \big(c(X)u_1 - c(\omega^2\cdot X)(1-u_1)\big) = 0, \quad X\in H

最后,保证 c1,c3,c5,c7c_1,c_3,c_5,c_7 正确的约束等式:

s2(X)(c(X)u0c(ωX)(1u0))=0,XHs_2(X)\cdot \big(c(X)u_0 - c(\omega\cdot X)(1-u_0)\big) = 0, \quad X\in H

3. 证明 Inner Product

证明的第二个部分是证明 a,c=v\langle \vec{a}, \vec{c} \rangle = v。假设 a(X)a(X) 是向量 a\vec{a} 的编码,即 a(X)H=aa(X)\mid_H=\vec{a},那么 a(X)a(X) 被承诺为 [a(τ)]1[a(\tau)]_1,加上 c(X)c(X) 的承诺,[c(τ)]1[c(\tau)]_1 ,我们可以使用 Univariate Sumcheck 协议来证明内积。

Univariate Sumcheck

这里我们先看一个定理(Remark 5.6 in [BCRSVW19], Sec.3 in [RZ21], Sec.5.1 in [CHMMVW19]):对任意的 P(X)F[X]P(X)\in \mathbb{F}[X],一个乘法子群 HFH\sub \mathbb{F}P(X)P(X) 可以分解为:

P(X)=q(X)vH(X)+Xg(X)+(v/N)P(X) = q(X)\cdot v_H(X) + X\cdot g(X) + (v/N)

这里 vvP(X)P(X)HH 上的求和,即

ωHP(ω)=v\sum_{\omega\in H}P(\omega)=v

因此,我们可以使用这个定理来证明两个向量的内积。如果 a(X)c(X)a(X)\cdot c(X) 可以表示为下面的等式,

a(X)c(X)=q(X)vH(X)+Xg(X)+(v/N),deg(g)<N1a(X)\cdot c(X) = q(X)\cdot v_H(X) + X\cdot g(X) + (v/N), \quad \deg(g)<N-1

那么 a,c=v\langle \vec{a}, \vec{c}\rangle = v

Prover 可以发送 q(X)q(X)g(X)g(X) 的承诺,然后 Verifier 通过挑战 ζ ,Prover 发送相关多项式在 X=ζX=\zeta 的取值,然后 Verifier 验证上面等式是否成立:

a(ζ)c(ζ)=?q(ζ)vH(ζ)+ζg(ζ)+(v/N)a(\zeta)\cdot c(\zeta) \overset{?}{=} q(\zeta)\cdot v_H(\zeta) + \zeta\cdot g(\zeta) + (v/N)

Prover 和 Verifier 再通过一个一元多项式承诺方案,比如 KZG10 来证明 a(ζ),c(ζ),q(ζ),g(ζ)a(\zeta), c(\zeta), q(\zeta), g(\zeta) 的正确性。

同时通过 KZG10 协议还可以证明 g(X)g(X) 的 Degree Bound,即 deg(g(X))<N1\deg(g(X))\lt N-1

Grand Sum

其实,我们还可以使用 Grand Sum 协议来证明两个向量的内积。

Univariate Sumcheck 的一个问题是它包含了一个 Degree Bound 约束,即 deg(g(X))<N1\deg(g(X))\lt N-1。这对于协议下层的KZG10 协议来说,需要进行额外的处理,这会使得协议的复杂度增加,也会引入过多的 Pairing 运算。而 Grand Sum 协议则避免了引入 Degree Bound 约束。

Grand Sum 协议的思路来自于 Plonk [GWC19] 中的 Grand Product Argument,而这个协议最早由 [BG12] 提出。

假设有一个多项式 f(X)f(X) 编码了向量 f\vec{f} 的值,那么我们构造一个辅助的向量 z\vec{z},满足:

z0=a0c0z1=z0+a1c1z2=z1+a2c2zN1=zN2+aN1cN1\begin{split} z_0 &= a_0\cdot c_0 \\ z_1 &= z_0 + a_1\cdot c_1 \\ z_2 &= z_1 + a_2\cdot c_2 \\ \cdots \\ z_{N-1} &= z_{N-2} + a_{N-1}\cdot c_{N-1} \\ \end{split}

或者用更简洁的递推公式表示:

z0=a0c0zi=zi1+aici,i=1,,N1\begin{split} z_0 &= a_0\cdot c_0 \\ z_i &= z_{i-1} + a_i\cdot c_i, \quad i=1,\ldots, N-1 \\ \end{split}

我们可以通过多项式 z(X)z(X) 来编码 z\vec{z},即

z(X)=i=0N1ziLi(X)z(X) = \sum_{i=0}^{N-1} z_i \cdot L_i(X)

其中 Li(X)L_i(X) 是上面定义的关于 HH 的 Lagrange Basis 多项式。

然后我们可以利用下面三个多项式约束来表示 ziz_i 的递推公式,从而保证 z(X)z(X) 的正确性:

L0(X)(z(X)a(X)c0)=0(X1)(z(X)z(ω1X)a(X)c(X))=0LN1(X)(z(X)v)=0\begin{split} L_0(X)\cdot\big(z(X) - a(X)\cdot c_0\big) = 0 \\ (X-1)\cdot\big(z(X)-z(\omega^{-1}\cdot X)-a(X)\cdot c(X)) =0 \\ L_{N-1}(X)\cdot\big( z(X) - v \big) = 0 \\ \end{split}

注意这里我们用 z(ω1X)z(\omega^{-1}\cdot X) 来表示 zi1z_{i-1}。并且第三个多项式约束,保证了求和的结果等于最终的多项式运算结果 vv

利用一个 Univariate PCS 协议,比如 KZG10 或者 FRI,我们可以证明上述这些多项式约束等式的正确性。

4. 对接 KZG10

对于证明上面列出的多项式约束,我们可以基于 KZG10 协议来实现对这些多项式等式的证明。总结下,我们有两类的多项式约束。第一类是关于 c(X)c(X) 的正确性的约束,第二类是关于 z(X)z(X) 的正确性的约束。

p0(X)=s0(X)(c(X)(1u0)(1u1)(1un1))p1(X)=s0(X)(c(X)un1c(ω2n1X)(1un1))p2(X)=s1(X)(c(X)un2c(ω2n2X)(1un2))pn(X)=sn1(X)(c(X)u0c(ωX)(1u0))\begin{aligned} p_0(X) = &s_0(X)\cdot \big(c(X) - (1-u_0)(1-u_1)\cdots(1-u_{n-1})\big) \\ p_1(X) = &s_0(X)\cdot \big(c(X)u_{n-1} - c(\omega^{2^{n-1}}\cdot X)(1-u_{n-1})\big) \\ p_2(X) = &s_1(X)\cdot \big(c(X)u_{n-2} - c(\omega^{2^{n-2}}\cdot X)(1-u_{n-2})\big) \\ \cdots & \quad\cdots \\ p_{n}(X) = &s_{n-1}(X)\cdot \big(c(X)u_0 - c(\omega\cdot X)(1-u_0)\big) \\ \end{aligned}

第二类多项式为

h0(X)=L0(X)(z(X)a0c0)h1(X)=(X1)(z(X)z(ω1X)a(X)c(X))h2(X)=LN1(X)(z(X)v)\begin{aligned} h_0(X) = &L_0(X)\cdot\big(z(X) - a_0\cdot c_0\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{aligned}

我们可以利用一个 Verifier 提供的 α 将这些多项式聚合为一个大的多项式,记为 h(X)h(X)

h(X)=p0(X)+αp1(X)+α2p2(X)++αnpn(X)+αn+1h0(X)+αn+2h1(X)+αn+3h2(X)\begin{aligned} h(X) &= p_0(X) + \alpha\cdot p_1(X) + \alpha^2\cdot p_2(X) + \cdots + \alpha^{n}\cdot p_{n}(X)\\ & + \alpha^{n+1} \cdot h_0(X) + \alpha^{n+2} \cdot h_1(X) + \alpha^{n+3} \cdot h_2(X) \end{aligned}

如果 c\vec{c}z\vec{z} 是正确的,那么 h(X)h(X)XHX\in H 上的取值都为零,然后我们知道 h(X)h(X)HH 上处处为零,因此它必然包含 HH 的 Vanishing 多项式 vH(X)v_H(X) 作为因式,即存在一个 Quotient 多项式 t(X)t(X),使得

h(X)=t(X)vH(X)h(X) = t(X) \cdot v_H(X)

然后 Verifier 挑战一个随机点 ζ,要求 Prover 计算并发送 a(X)a(X)c(X)c(X) 以及 z(X)z(X) t(X)t(X)ζ 处的取值,以及 z(X)z(X)X=ζω1X=\zeta\cdot\omega^{-1} 处的取值,还有 c(X)c(X)X=ζω,ζω2,,ζω2n1X=\zeta\cdot\omega, \zeta\cdot\omega^2, \ldots, \zeta\cdot\omega^{2^{n-1}} 处的取值。并提供这些求值的 KZG10 Evaluation 证明 πkzg10\pi_{kzg10}

πe=(a(ζ),c(ζ),c(ζω),c(ζω2),,c(ζω2n1),z(ζ),z(ζω1),t(ζ))πkzg10=(πa(ζ),πc(ζ),πc(ζω),πc(ζω2),,πc(ζω2n1),πz(ζ),πz(ζω1),πt(ζ))\begin{split} \pi_e &= \big(a(\zeta), c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), z(\zeta), z(\zeta\cdot\omega^{-1}), t(\zeta)\big) \\ \pi_{kzg10} &= \big(\pi_{a(\zeta)}, \pi_{c(\zeta)}, \pi_{c(\zeta\cdot\omega)}, \pi_{c(\zeta\cdot\omega^2)}, \ldots, \pi_{c(\zeta\cdot\omega^{2^{n-1}})}, \pi_{z(\zeta)}, \pi_{z(\zeta\cdot\omega^{-1})}, \pi_{t(\zeta)}\big) \end{split}

Verifier 首先验证 πkzg10\pi_{kzg10} 的正确性, 然后 Verifier 自行计算下面的公开多项式在 X=ζX=\zeta 处的取值:

s0(ζ)=vH(ζ)vH0(ζ)s1(ζ)=vH(ζ)vH1(ζ)s2(ζ)=vH(ζ)vH2(ζ)sn1(ζ)=vH(ζ)vHn1(ζ)s_0(\zeta) = \frac{v_H(\zeta)}{v_{H_0}(\zeta)} \quad s_1(\zeta) = \frac{v_H(\zeta)}{v_{H_1}(\zeta)} \quad s_2(\zeta) = \frac{v_H(\zeta)}{v_{H_2}(\zeta)} \quad \cdots \quad s_{n-1}(\zeta) = \frac{v_H(\zeta)}{v_{H_{n-1}}(\zeta)}

还有

L0(ζ)=vH(ζ)N(ζ1)LN1(ζ)=vH(ζ)N(ωζ1)\begin{split} L_0(\zeta) &= \frac{v_H(\zeta)}{N(\zeta - 1)} \\ L_{N-1}(\zeta) &= \frac{v_H(\zeta)}{N(\omega\cdot\zeta - 1)} \\ \end{split}

然后通过 πe\pi_e 中包含的所有的多项式运算值计算下面的值:

p0(ζ)=s0(ζ)(c(ζ)(1u0)(1u1)(1un1))p1(ζ)=s0(ζ)(c(ζ)un1c(ω2n1ζ)(1un1))p2(ζ)=s1(ζ)(c(ζ)u1c(ω2n2ζ)(1u1))pn(ζ)=sn1(ζ)(c(ζ)u0c(ωζ)(1u0))h1(ζ)=L0(ζ)(z(ζ)a0c0)h2(ζ)=(ζ1)(z(ζ)z(ω1ζ)a(ζ)c(ζ))h3(ζ)=LN1(ζ)(z(ζ)v)\begin{split} p_0(\zeta) &= s_0(\zeta)\cdot \big(c(\zeta) - (1-u_0)(1-u_1)\cdots(1-u_{n-1})\big) \\ p_1(\zeta) &= s_0(\zeta)\cdot \big(c(\zeta)u_{n-1} - c(\omega^{2^{n-1}}\cdot\zeta)(1-u_{n-1})\big) \\ p_2(\zeta) &= s_1(\zeta)\cdot \big(c(\zeta)u_1 - c(\omega^{2^{n-2}}\cdot\zeta)(1-u_1)\big) \\ \cdots \\ p_{n}(\zeta) &= s_{n-1}(\zeta)\cdot \big(c(\zeta)u_0 - c(\omega\cdot\zeta)(1-u_0)\big) \\ h_1(\zeta) &= L_0(\zeta)\cdot\big(z(\zeta) - a_0\cdot c_0\big) \\ h_2(\zeta) &= (\zeta-1)\cdot\big(z(\zeta)-z(\omega^{-1}\cdot\zeta)-a(\zeta)\cdot c(\zeta)\big) \\ h_3(\zeta) &= L_{N-1}(\zeta)\cdot\big( z(\zeta) - v \big) \\ \end{split}

α 来聚合这些多项式求值,得到 h(ζ)h(\zeta)

h(ζ)=p0(ζ)+αp1(ζ)+α2p2(ζ)++αnpn(ζ)+αn+1h0(ζ)+αn+2h1(ζ)+αn+3h2(ζ)\begin{split} h(\zeta) &= p_0(\zeta) + \alpha\cdot p_1(\zeta) + \alpha^2\cdot p_2(\zeta) + \cdots + \alpha^{n}\cdot p_{n}(\zeta) \\ &+ \alpha^{n+1} \cdot h_0(\zeta) + \alpha^{n+2} \cdot h_1(\zeta) + \alpha^{n+3} \cdot h_2(\zeta) \end{split}

最后检查下面的等式是否成立:

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

其中 vH(ζ)v_H(\zeta)HH 的 Vanishing 多项式在 ζ 处的取值,由 Verifier 自行计算。

5. PH23+KZG10 协议流程(简单版)

本文我们不考虑协议的性能,仅仅展示 PH23+KZG10 的一个简单直接的实现方式。协议主要分为三部分:

Commit

如果要承诺一个有 nn 个未知数的 MLE 多项式,f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1}) ,定义如下:

f~(X0,X1,,Xn1)=i=0N1aieq(bits(i),(X0,X1,,Xn1))\tilde{f}(X_0, X_1, \ldots, X_{n-1}) = \sum_{i=0}^{N-1} a_i \cdot \overset{\sim}{eq}(\mathsf{bits}(i), (X_0, X_1, \ldots, X_{n-1}))

这里 a=(a0,a1,,aN1)\vec{a}=(a_0,a_1,\ldots,a_{N-1}) 表示该 MLE 多项式在 {0,1}n\{0, 1\}^n Boolean HyperCube 上的取值。

首先 Prover 构造一个一元多项式,记为 a(X)a(X),使其在 Domain HH 上的取值恰好为 a\vec{a},并且 HH 的大小恰好为 NN。并且, HH 一般是一个 FFT 友好的乘法子群,它可以由一个 N 次单位根(NN-th Root of Unity)来作为生成元(记为 ω )产生:

H=(1,ω,ω2,ω3,,ωN1)H = (1, \omega, \omega^2, \omega^3,\ldots, \omega^{N-1})

那么 a(X)a(X) 定义如下:

a(X)=a0L0(X)+a1L1(X)++aN1LN1(X)a(X) = a_0\cdot L_0(X) + a_1\cdot L_1(X) + \cdots + a_{N-1}\cdot L_{N-1}(X)

这里 {Li}i=0N1\{L_i\}_{i=0}^{N-1} 表示基于 HH 的 Lagrange 多项式,其定义如下:

Li(X)=ωivH(X)N(Xωi),i=0,1,,N1L_i(X) = \frac{\omega_i\cdot v_H(X)}{N\cdot(X-\omega_i)}, \qquad i=0,1,\ldots, N-1

这里 vH(X)v_H(X)HH 上的 Vanishing 多项式,定义如下:

vH(X)=(X1)(Xω)(Xω2)(XωN1)v_H(X) = (X-1)(X-\omega)(X-\omega^2)\cdots(X-\omega^{N-1})

然后 Prover 计算得到 a(X)a(X) 的系数形式,利用 KZG10 的 SRS 计算 a(X)a(X) 的承诺,记为 CaC_a

Ca=b0[1]1+b1[τ]1+b2[τ2]1++bN1[τN1]1C_a = b_0\cdot [1]_1 + b_1\cdot [\tau]_1 + b_2 \cdot [\tau^2]_1 + \cdots + b_{N-1}\cdot[\tau^{N-1}]_1

这里 (b0,b1,,bN1)(b_0, b_1, \ldots, b_{N-1})a(X)a(X) 的系数形式:

a(X)=b0+b1X+b2X2++bN1XN1a(X) = b_0 + b_1X+b_2X^2 + \cdots + b_{N-1}X^{N-1}

Evaluation 证明协议

所谓的 Evaluation Argument 是指 Prover 向 Verifier 证明一个多项式承诺 CfC_f 所对应的具有 nn 个未知数的 MLE 多项式 f~\tilde{f} 在一个公开点 (u0,u1,,un1)(u_0, u_1, \ldots, u_{n-1}) 的取值:

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

这里,我们同样假设多项式在公开点的取值也是一个公开的值,记为 vv

公共输入

  1. Ca=[a(τ)]1C_a=[a(\tau)]_1: 对于向量 a=(a0,a1,,aN1)\vec{a}=(a_0, a_1, \ldots, a_{N-1}) 的一元多项式承诺。其中 a\vec{a} 等于 MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1}) 在 n-维 Boolean Hypercube 上的取值,也是 a(X)a(X)HH 上的取值。
  2. u=(u0,u1,,un1)\vec{u}=(u_0, u_1, \ldots, u_{n-1}): MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1}) 的求值点
  3. vv: MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n-1})u\vec{u} 处的取值。

Round 1.

Prover:

  1. 构造多项式 c(X)c(X), where ci=eq(bits(i),u)c_i=\overset{\sim}{eq}(\mathsf{bits}(i), \vec{u})
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=[c(τ)]1=KZG10.commit(c)C_c = [c(\tau)]_1 = \mathsf{KZG10.commit}(\vec{c})

Round 2.

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

Prover:

  1. 构造 Selector 多项式 s0(X),s1(X),,sn1(X)s_0(X), s_1(X), \ldots, s_{n-1}(X)
si(X)=vH(X)zHi(X)=X2n1X2i1,i=0,1,,n1s_i(X) = \frac{v_H(X)}{z_{H_i}(X)} = \frac{X^{2^n}-1}{X^{2^i}-1}, \qquad i=0,1,\ldots, n-1
  1. 构造 c\vec{c} 的约束多项式 p0(X),,pn1(X)p_0(X),\ldots, p_{n-1}(X)
    p0(X)=s0(X)(c(X)(1u0)(1u1)...(1un1))p_0(X) = s_0(X) \cdot \Big( c(X) - (1-u_0)(1-u_1)...(1-u_{n-1}) \Big)
pk(X)=sk1(X)(unkc(X)(1unk)c(ω2nkX)),k=1np_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), \qquad k = 1\ldots n
  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}
  2. 构造聚合多项式 h(X)h(X)

h(X)=p0(X)+αp1(X)+α2p2(X)++αnpn(X)+αn+1h0(X)+αn+2h1(X)+αn+3h2(X)\begin{split} h(X) &= p_0(X) + \alpha\cdot p_1(X) + \alpha^2\cdot p_2(X) + \cdots + \alpha^{n}\cdot p_{n}(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),满足
t(X)vH(X)=h(X)t(X)\cdot v_H(X) = h(X)
  1. 计算多项式承诺 Ct=[t(τ)]1C_t=[t(\tau)]_1Cz=[z(τ)]1C_z=[z(\tau)]_1,并发送 CtC_tCzC_z

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)
  1. 定义一个新的 Domain DD,包含 n+1n+1 个元素:
D={ω,ω2,ω4,,ω2n1,1}D = \{\omega, \omega^2,\omega^4, \ldots, \omega^{2^{n-1}}, 1\}

它的陪集 D=ζDD'=\zeta D 是 Prover 要计算 c(X)c(X) 的求值点的集合。

D=ζD={ζω,ζω2,ζω4,,ζω2n1,ζ}D'=\zeta D = \{\zeta\omega, \zeta\omega^2,\zeta\omega^4, \ldots, \zeta\omega^{2^{n-1}}, \zeta\}
  1. 计算 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)

  2. 计算 z(ζ),z(ω1ζ)z(\zeta), z(\omega^{-1}\cdot\zeta)t(ζ),a(ζ)t(\zeta), a(\zeta)

  3. 发送这些多项式的取值:

(a(ζ),c(ζ),c(ζω),c(ζω2),,c(ζω2n1),z(ζ),z(ζω1),t(ζ))\big(a(\zeta), c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), z(\zeta), z(\zeta\cdot\omega^{-1}), t(\zeta)\big)
  1. 发送 KZG10 的求值证明
πkzg10=(πa(ζ),πc(ζ),πc(ζω),πc(ζω2),,πc(ζω2n1),πz(ζ),πz(ζω1),πt(ζ))\pi_{kzg10} = \big(\pi_{a(\zeta)}, \pi_{c(\zeta)}, \pi_{c(\zeta\cdot\omega)}, \pi_{c(\zeta\cdot\omega^2)}, \ldots, \pi_{c(\zeta\cdot\omega^{2^{n-1}})}, \pi_{z(\zeta)}, \pi_{z(\zeta\cdot\omega^{-1})}, \pi_{t(\zeta)}\big)

Verification

证明 π 包含下面的元素:

π=(Ct,Cz,Cc,a(ζ),z(ζ),z(ζω1),t(ζ),c(ζ),c(ζω),c(ζω2),,c(ζω2n1),πa(ζ),πz(ζ),πz(ζω1),πt(ζ),πc(ζ),πc(ζω),πc(ζω2),,πc(ζω2n1),)\pi = \left(\begin{array}{c} C_t, C_z, C_c, a(\zeta), z(\zeta), z(\zeta\cdot\omega^{-1}), t(\zeta), \\[1.5ex] c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), \\[1.5ex] \pi_{a(\zeta)}, \pi_{z(\zeta)}, \pi_{z(\zeta\cdot\omega^{-1})}, \pi_{t(\zeta)}, \\[1.5ex] \pi_{c(\zeta)}, \pi_{c(\zeta\cdot\omega)}, \pi_{c(\zeta\cdot\omega^2)}, \ldots, \pi_{c(\zeta\cdot\omega^{2^{n-1}})}, \end{array}\right)

Verifier 先计算出 s0(ζ),,sn1(ζ)s_0(\zeta), \ldots, s_{n-1}(\zeta)vH(ζ)v_H(\zeta)L0(ζ),LN1(ζ)L_0(\zeta), L_{N-1}(\zeta)

Verifier 需要验证下面的等式,来完成对多项式 a(X)a(X), c(X)c(X), t(X)t(X), z(X)z(X) 多项式的求值证明的验证过程:

KZG.Verify(Ca,ζ,a(ζ),πa(ζ))=?1KZG.Verify(Ct,ζ,t(ζ),πt(ζ))=?1KZG.Verify(Cz,ζ,z(ζ),πz(ζ))=?1KZG.Verify(Cz,ζω1,z(ζω1),πz(ζω1))=?1KZG.Verify(Cc,ζ,c(ζ),πc(ζ))=?1KZG.Verify(Cc,ζω,c(ζω),πc(ζω))=?1KZG.Verify(Cc,ζω2,c(ζω2),πc(ζω2))=?1KZG.Verify(Cc,ζω2n1,c(ζω2n1),πc(ζω2n1))=?1\begin{aligned} \mathsf{KZG.Verify}(C_a, \zeta, a(\zeta), \pi_{a(\zeta)}) &\overset{?}{=} 1 \\ \mathsf{KZG.Verify}(C_t, \zeta, t(\zeta), \pi_{t(\zeta)}) &\overset{?}{=} 1 \\ \mathsf{KZG.Verify}(C_z, \zeta, z(\zeta), \pi_{z(\zeta)}) &\overset{?}{=} 1 \\ \mathsf{KZG.Verify}(C_z, \zeta\omega^{-1}, z(\zeta\omega^{-1}), \pi_{z(\zeta\omega^{-1})}) &\overset{?}{=} 1 \\ \mathsf{KZG.Verify}(C_c, \zeta, c(\zeta), \pi_{c(\zeta)}) &\overset{?}{=} 1 \\ \mathsf{KZG.Verify}(C_c, \zeta\omega, c(\zeta\omega), \pi_{c(\zeta\omega)}) &\overset{?}{=} 1 \\ \mathsf{KZG.Verify}(C_c, \zeta\omega^2, c(\zeta\omega^2), \pi_{c(\zeta\omega^2)}) &\overset{?}{=} 1 \\ \cdots \\ \mathsf{KZG.Verify}(C_c, \zeta\omega^{2^{n-1}}, c(\zeta\omega^{2^{n-1}}), \pi_{c(\zeta\omega^{2^{n-1}})}) &\overset{?}{=} 1 \\ \end{aligned}

Verifier 用多项式在 X=ζX=\zeta 处的取值来验证下面的约束等式:

t(ζ)vH(ζ)=?(i=0nαipi(ζ))+αn+1h0(ζ)+αn+2h1(ζ)+αn+3h2(ζ)t(\zeta)\cdot v_H(\zeta) \overset{?}{=} \Big(\sum_{i=0}^{n} \alpha^i\cdot p_i(\zeta)\Big) + \alpha^{n+1}\cdot h_0(\zeta) + \alpha^{n+2}\cdot h_1(\zeta) + \alpha^{n+3}\cdot h_2(\zeta)

这里 p0(ζ),,pn(ζ),h0(ζ),h1(ζ),h2(ζ)p_0(\zeta),\ldots, p_{n}(\zeta), h_0(\zeta), h_1(\zeta), h_2(\zeta) 的定义如下:

p0(ζ)=s0(ζ)(c(ζ)(1u0)(1u1)(1un1))p1(ζ)=s0(ζ)(c(ζ)un1c(ω2n1ζ)(1un1))p2(ζ)=s1(ζ)(c(ζ)u1c(ω2n2ζ)(1u1))pn(ζ)=sn1(ζ)(c(ζ)u0c(ωζ)(1u0))h0(ζ)=L0(ζ)(z(ζ)a0c0)h1(ζ)=(ζ1)(z(ζ)z(ζω1)a(ζ)c(ζ))h2(ζ)=LN1(ζ)(z(ζ)v)\begin{split} p_0(\zeta) &= s_0(\zeta)\cdot \big(c(\zeta) - (1-u_0)(1-u_1)\cdots(1-u_{n-1})\big) \\ p_1(\zeta) &= s_0(\zeta)\cdot \big(c(\zeta)u_{n-1} - c(\omega^{2^{n-1}}\cdot\zeta)(1-u_{n-1})\big) \\ p_2(\zeta) &= s_1(\zeta)\cdot \big(c(\zeta)u_1 - c(\omega^{2^{n-2}}\cdot\zeta)(1-u_1)\big) \\ \cdots \\ p_{n}(\zeta) &= s_{n-1}(\zeta)\cdot \big(c(\zeta)u_0 - c(\omega\cdot\zeta)(1-u_0)\big) \\ h_0(\zeta) &= L_0(\zeta)\cdot\big(z(\zeta) - a_0\cdot c_0\big) \\ h_1(\zeta) &= (\zeta-1)\cdot\big(z(\zeta)-z(\zeta\omega^{-1})-a(\zeta)\cdot c(\zeta)\big) \\ h_2(\zeta) &= L_{N-1}(\zeta)\cdot\big( z(\zeta) - v \big) \\ \end{split}

总结

PH23 PCS Adaptor 是将 MLE 多项式的 Evaluations 映射到一个一元多项式的 Evaluations,然后再利用「求和证明」来保证 MLE 多项式运算的正确性。

我们将在后续文章优化和改进这个协议。

References