Skip to article frontmatterSkip to article content

缺失的协议 PH23-PCS(四)

本文给出 PH23 协议接一元多项式承诺 FRI-PCS 的方案。

对接 FRI

先回顾下 PH23 协议,对于一个 nn 元 MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0,X_1, \ldots, X_{n - 1}) ,其写成在 hypercube {0,1}n\{0,1\}^n 上的点值形式:

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 。当要证明该 MLE 多项式在一个点 u=(u0,u1,,un1)\vec{u} = (u_0, u_1, \ldots, u_{n-1}) 的值为 vv 时,即

f~(u0,u1,,un1)=i=0N1aieq(bits(i),(u0,u1,,un1))=v\tilde{f}(u_0, u_1, \ldots, u_{n-1}) = \sum_{i=0}^{N-1} a_i \cdot \overset{\sim}{eq}(\mathsf{bits}(i), (u_0, u_1, \ldots, u_{n-1})) = v

ci=eq(bits(i),(u0,u1,,un1))c_i = \overset{\sim}{eq}(\mathsf{bits}(i), (u_0, u_1, \ldots, u_{n-1})) ,那么上面的求值证明就转换为证明一个内积

i=0N1aici=a,c=v\sum_{i = 0}^{N - 1} a_i \cdot c_i = \langle \vec{a}, \vec{c} \rangle = v

c\vec{c} 是 Prover 提供的,为了防止 Prover 作弊,需要证明 c\vec{c} 是正确构造的。PH23 协议的证明也就分为两部分:

  1. 证明 c\vec{c} 是 Well-Formedness。
  2. 证明内积 a,c=v\langle \vec{a}, \vec{c} \rangle = v

为了证明 1 的正确性,需要证明下面 n+1n + 1 个多项式在一个乘法子群 H={ω0,ω1,,ωN1}H = \{\omega^0, \omega^1, \ldots, \omega^{N - 1}\} 上的值都为 0

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}

为了证明 2 内积的正确性,采用 Grand Sum 方法来证明,构造出多项式 z(X)z(X) ,用下面的多项式进行约束,这些多项式同样需要在 HH 上的取值为 0

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 给出的随机数 α 可以将上述 n+4n + 4 个多项式聚合成一个多项式 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}

那么现在只需要说明 h(X)h(X)HH 上的取值都为 0 ,也就能完成 f~(u0,u1,,un1)=v\tilde{f}(u_0, u_1, \ldots, u_{n-1}) = v 的证明。取 vH(X)v_H(X)HH 上的 Vanishing 多项式,那么存在一个商多项式 t(X)t(X) ,满足

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

为了验证商多项式的存在性,Verifier 选取随机点 ζ ,似乎 Prover 发送 t(ζ),h(ζ)t(\zeta), h(\zeta) 给 Verifier 就可以了,但其实,Prover 承诺的是 a(X)a(X)c(X)c(X)z(X)z(X)t(X)t(X) ,因此 Prover 发送的值

(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)

Verifier 拿着 Prover 发送的 a(ζ),c(ζ),c(ζω),c(ζω2),,c(ζω2n1),z(ζ),z(ζω1)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}) 可以自己计算出 h(ζ)h(\zeta)HH 是公开的,因此 Verifier 可以自行计算出 vH(ζ)v_H(\zeta) ,然后验证

h(ζ)=?t(ζ)vH(ζ)h(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta)

要让 Verifier 相信 Prover 发送过来的这些值没有问题,那么就要用一元多项式的 PCS 来实现。前面的文章已经介绍了用 KZG10 来实现,本文用 FRI-PCS 来进行证明。

通过上面多项式的构造过程,可以得知 a(X),c(X),z(X),t(X)a(X), c(X), z(X), t(X) 的次数都为 N1N - 1a(X)a(X) 需要在 ζ 点打开,FRI-PCS 用到了 DEEP 技巧,记 Reed-Solomon 编码空间 RSk[F,D]\mathsf{RS}_{k}[\mathbb{F},D] 表示

RSk[F,D]={p(x)xD:p(X)F[X],degp(X)k1}\mathsf{RS}_{k}[\mathbb{F},D] = \{p(x)_{x \in D} : p(X) \in \mathbb{F}[X], \deg p(X) \le k - 1 \}

那么这里要求 Verifier 选取的随机数来自 ζ$FD\zeta \stackrel{\$}{\leftarrow} \mathbb{F} \setminus D 。为了证明 a(ζ)a(\zeta) 的正确性,需要证明商多项式

qa(X)=a(X)a(ζ)Xζq_a(X) = \frac{a(X) - a(\zeta)}{X - \zeta}

的次数小于 N1N - 1

对于 c(X)c(X) ,其要打开的点有 n+1n + 1 个,为 Hζ={ζ,ζω,ζω2,,ζω2n1}H_{\zeta}' = \{\zeta, \zeta\cdot\omega, \zeta\cdot\omega^2, \ldots, \zeta\cdot\omega^{2^{n-1}} \} ,用 [H22] 论文在 Multi-point queries 小节介绍的方法同时打开多个点,令商多项式

qc(X)=xHζc(X)c(x)Xx=c(X)c(ζ)Xζ+c(X)c(ζω)Xζω++c(X)c(ζω2n1)Xζω2n1q_c(X) = \sum_{x \in H_\zeta'} \frac{c(X) - c(x)}{X - x} = \frac{c(X) - c(\zeta)}{X - \zeta} + \frac{c(X) - c(\zeta \cdot \omega)}{X - \zeta \cdot \omega} + \ldots + \frac{c(X) - c(\zeta \cdot \omega^{2^{n-1}})}{X - \zeta \cdot \omega^{2^{n-1}}}

这样转换为需要证明 qc(X)q_c(X) 的次数小于 N1N - 1

对于 z(X)z(X) ,类似地,证明商多项式

qz(X)=z(X)z(ζ)Xζ+z(X)z(ζω1)Xζω1q_z(X) = \frac{z(X) - z(\zeta)}{X - \zeta} + \frac{z(X) - z(\zeta \cdot \omega^{-1})}{X - \zeta \cdot \omega^{-1}}

次数小于 N1N - 1

对于 t(X)t(X) ,证明商多项式

qt(X)=t(X)t(ζ)Xζq_t(X) = \frac{t(X) - t(\zeta)}{X - \zeta}

次数小于 N1N - 1

这时,向 Verifier 要一个随机数 r$Fr \stackrel{\$}{\leftarrow} \mathbb{F} ,可以将上面要证明的四个商多项式 batch 在一起,令

q(X)=qa(X)+rqc(X)+r2qz(X)+r3qt(X)q'(X) = q_a(X) + r \cdot q_c(X) + r^2 \cdot q_z(X) + r^3 \cdot q_t(X)

这样只需要调用一次 FRI 的 low degree test 就可以了,证明 deg(q(X))<N1\deg(q'(X)) < N - 1 。最后为了对接 FRI low degree test 协议,需要将 q(X)q'(X) 的次数对齐到 2 的幂次,即向 Verifier 要一个随机数 λ ,证明

q(X)=(1+λX)q(X)q(X) = (1 + \lambda \cdot X) q'(X)

的次数小于 NN

📝 Remark: 上面 batch 不同多项式时也可以从 F\mathbb{F} 中选取三个不同的随机数 r1,r2,r3r_1, r_2,r_3 ,令

>q(X)=qa(X)+r1qc(X)+r2qz(X)+r3qt(X)>> q'(X) = q_a(X) + r_1 \cdot q_c(X) + r_2 \cdot q_z(X) + r_3 \cdot q_t(X) >

这种方式会比上面用一个随机数的幂次进行 batch 有更高一点的安全性。([BCIKS20])

还有一点需要说明,由于我们用 DEEP 方法来构造商多项式,因此这里要求选取的随机数 ζ 构成打开点的集合与 Reed-Solomon 编码的群不能相交,即

{ζ,ζω,ζω2,,ζω2n1,ζω1}D=\{\zeta, \zeta\cdot\omega, \zeta\cdot\omega^2, \ldots, \zeta\cdot\omega^{2^{n-1}}, \zeta \cdot \omega^{-1}\} \cap D = \emptyset

PH23 + FRI 协议

证明目标:对于一个有 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}))

证明的目标是证明 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})

Commit 阶段

对于 FRI 协议,对多项式的承诺就是计算其 Reed-Solomon 编码,并对编码进行承诺。在 PCS 的 Commit 阶段需要对原 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}))

a\vec{a} 就唯一确定了一个 nn 元 MLE 多项式,要对 MLE 多项式 f~\tilde{f} 承诺其实就是对 a\vec{a} 进行承诺,若用 FRI 协议,那么就先要将 a\vec{a} 转换成多项式 a(X)a(X) ,再对其在 DD 上的 Reed-Solomon 编码进行承诺。

  1. Prover 构造一元多项式 a(X)a(X) ,使其在 HH 上的求值为 a=(a0,a1,,aN1)\vec{a} = (a_{0,}a_{1},\ldots, a_{N-1})
a(X)=a0L0(X)+a1L1(X)++aN1LN1(X)a(X) = a_0 \cdot L_0(X) + a_1 \cdot L_1(X) + \ldots + a_{N-1} \cdot L_{N-1}(X)
  1. Prover 计算多项式 a(X)a(X) 的承诺 CaC_a ,并将 CaC_a 发送给 Verifier
Ca=cm([a(x)xD])=MT.commit([a(x)xD])C_a = \mathsf{cm}([a(x)|_{x \in D}]) = \mathsf{MT.commit}([a(x)|_{x \in D}])

公共输入

  1. FRI 协议参数:Reed Solomon 编码选取的区域 DnDn1D0=DD_n \subset D_{n-1} \subset \cdots \subset D_0 = D ,码率 ρ ,查询阶段的次数 ll
  2. 承诺 CaC_a
Ca=cm([a(x)xD])=MT.commit([a(x)xD])C_a = \mathsf{cm}([a(x)|_{x \in D}]) = \mathsf{MT.commit}([a(x)|_{x \in D}])
  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

Evaluation 证明协议

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) 的承诺 CcC_c,并发送 CcC_c
Cc=cm([c(x)xD])=MT.commit([c(x)xD])C_c = \mathsf{cm}([c(x)|_{x \in D}]) = \mathsf{MT.commit}([c(x)|_{x \in D}])

Round 2

Verifier: 发送挑战数 α$Fp\alpha \stackrel{\$}{\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. 计算 t(X)t(X)z(X)z(X) 的承诺 Ct,CzC_t, C_z ,并发送给 Verifier
Ct=cm([t(x)xD])=MT.commit([t(x)xD])Cz=cm([z(x)xD])=MT.commit([z(x)xD])\begin{split} C_t &= \mathsf{cm}([t(x)|_{x \in D}]) = \mathsf{MT.commit}([t(x)|_{x \in D}]) \\ C_z &= \mathsf{cm}([z(x)|_{x \in D}]) = \mathsf{MT.commit}([z(x)|_{x \in D}]) \end{split}

Round 3

Verifier: 发送随机求值点 ζ$FpD\zeta \stackrel{\$}{\leftarrow} \mathbb{F}_p^* \setminus D

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 HζH_\zeta',包含 n+1n+1 个元素:
Hζ=ζH={ζ,ωζ,ω2ζ,ω4ζ,,ω2n1ζ}H_\zeta'=\zeta H = \{\zeta, \omega\zeta, \omega^2\zeta,\omega^4\zeta, \ldots, \omega^{2^{n-1}}\zeta\}
  1. 计算并发送 c(X)c(X)HζH_\zeta' 上的取值
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(ζ)z(\zeta)z(ω1ζ)z(\omega^{-1}\cdot\zeta)
  2. 计算并发送 t(ζ)t(\zeta)
  3. 计算并发送 a(ζ)a(\zeta)

Round 4

Verifier: 发送随机数 r$Fpr \stackrel{\$}{\leftarrow} \mathbb{F}_p

Prover:

  1. 计算商多项式 qa(X)q_a(X)
qa(X)=a(X)a(ζ)Xζq_a(X) = \frac{a(X) - a(\zeta)}{X - \zeta}
  1. 计算商多项式 qc(X)q_c(X)
qc(X)=xHζc(X)c(x)Xx=c(X)c(ζ)Xζ+c(X)c(ζω)Xζω++c(X)c(ζω2n1)Xζω2n1q_c(X) = \sum_{x \in H_\zeta'} \frac{c(X) - c(x)}{X - x} = \frac{c(X) - c(\zeta)}{X - \zeta} + \frac{c(X) - c(\zeta \cdot \omega)}{X - \zeta \cdot \omega} + \ldots + \frac{c(X) - c(\zeta \cdot \omega^{2^{n-1}})}{X - \zeta \cdot \omega^{2^{n-1}}}
  1. 计算商多项式 qz(X)q_z(X)
qz(X)=z(X)z(ζ)Xζ+z(X)z(ζω1)Xζω1q_z(X) = \frac{z(X) - z(\zeta)}{X - \zeta} + \frac{z(X) - z(\zeta \cdot \omega^{-1})}{X - \zeta \cdot \omega^{-1}}
  1. 计算商多项式 qt(X)q_t(X)
qt(X)=t(X)t(ζ)Xζq_t(X) = \frac{t(X) - t(\zeta)}{X - \zeta}
  1. 将上面的四个商多项式用随机数 rr 的幂次 batch 成一个多项式
q(X)=qa(X)+rqc(X)+r2qz(X)+r3qt(X)q'(X) = q_a(X) + r \cdot q_c(X) + r^2 \cdot q_z(X) + r^3 \cdot q_t(X)

Round 5

这一轮将商多项式 q(X)q'(X) 对齐到 2 的幂次,以对接 FRI 协议。

  1. Verifier 发送随机数 λ$F\lambda \stackrel{\$}{\leftarrow} \mathbb{F}
  2. Prover 计算
q(X)=(1+λX)q(X)q(X) = (1 + \lambda \cdot X) q'(X)

DD 上的值。

Round 6

Prover 和 Verifier 进行 FRI 的 low degree test 证明交互,证明 q(X)q(X) 的次数小于 2n2^n

πq=FRI.LDT(q(X),2n)\pi_{q} = \mathsf{FRI.LDT}(q(X), 2^n)

这里包含 nn 轮的交互,直到最后将原来的多项式折叠为常数多项式。下面用 ii 表示第 ii 轮,具体交互过程如下:

📝 Notes

如果折叠次数 r<nr < n ,那么最后不会折叠到常数多项式,因此 Prover 在第 rr 轮时会发送一个 Merkle Tree 承诺,而不是发送一个值。

Round 7

这一轮是接着 Prover 与 Verifier 进行 FRI 协议的 low degree test 交互的查询阶段,Verifier 重复查询 ll 次,每一次 Verifier 都会从 D0D_0 中选取一个随机数,让 Prover 发送在第 ii 轮折叠的值及对应的 Merkle Path,用来让 Verifier 验证每一轮折叠的正确性。

重复 ll 次:

(a(s(0)),πa(s(0)))MT.open([a(x)xD0],s(0))(a(s^{(0)}), \pi_{a}(s^{(0)})) \leftarrow \mathsf{MT.open}([a(x)|_{x \in D_0}], s^{(0)})
(a(s(0)),πa(s(0)))MT.open([a(x)xD0],s(0))(a(-s^{(0)}), \pi_{a}(-s^{(0)})) \leftarrow \mathsf{MT.open}([a(x)|_{x \in D_0}], -s^{(0)})
(c(s(0)),πc(s(0)))MT.open([c(x)xD0],s(0))(c(s^{(0)}), \pi_{c}(s^{(0)})) \leftarrow \mathsf{MT.open}([c(x)|_{x \in D_0}], s^{(0)})
(c(s(0)),πc(s(0)))MT.open([c(x)xD0],s(0))(c(-s^{(0)}), \pi_{c}(-s^{(0)})) \leftarrow \mathsf{MT.open}([c(x)|_{x \in D_0}], -s^{(0)})
(z(s(0)),πz(s(0)))MT.open([z(x)xD0],s(0))(z(s^{(0)}), \pi_{z}(s^{(0)})) \leftarrow \mathsf{MT.open}([z(x)|_{x \in D_0}], s^{(0)})
(z(s(0)),πz(s(0)))MT.open([z(x)xD0],s(0))(z(-s^{(0)}), \pi_{z}(-s^{(0)})) \leftarrow \mathsf{MT.open}([z(x)|_{x \in D_0}], -s^{(0)})
(t(s(0)),πt(s(0)))MT.open([t(x)xD0],s(0))(t(s^{(0)}), \pi_{t}(s^{(0)})) \leftarrow \mathsf{MT.open}([t(x)|_{x \in D_0}], s^{(0)})
(t(s(0)),πt(s(0)))MT.open([t(x)xD0],s(0))(t(-s^{(0)}), \pi_{t}(-s^{(0)})) \leftarrow \mathsf{MT.open}([t(x)|_{x \in D_0}], -s^{(0)})
{(q(i)(s(i)),πq(i)(s(i)))}MT.open([q(i)(x)xDi],s(i))\{(q^{(i)}(-s^{(i)}), \pi_{q}^{(i)}(-s^{(i)}))\} \leftarrow \mathsf{MT.open}([q^{(i)}(x)|_{x \in D_i}], -s^{(i)})

如果折叠次数 r<nr < n ,那么最后一步就要发送 q(r)(s(r))q^{(r)}(s^{(r)}) 的值,并附上 Merkle Path。

Proof

Prover 发送的证明为

π=(Cc,Ct,Cz,c(ζ),c(ζω),c(ζω2),c(ζω4),,c(ζω2n1),z(ζ),z(ω1ζ),t(ζ),a(ζ),πq)\pi = (C_c,C_t, C_z, c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), z(\zeta), z(\omega^{-1} \cdot \zeta), t(\zeta), a(\zeta), \pi_{q})

用符号 {}l\{\cdot\}^l 表示在 FRI low degree test 的查询阶段重复查询 ll 次产生的证明,由于每次查询是随机选取的,因此花括号中的证明也是随机的。那么 FRI 进行 low degree test 的证明为

πq=(cm(q(1)(X)),,cm(q(n1)(X)),q(n)(x0),{a(s(0)),πa(s(0)),a(s(0)),πa(s(0)),c(s(0)),πc(s(0)),c(s(0)),πc(s(0)),z(s(0)),πz(s(0)),z(s(0)),πz(s(0)),t(s(0)),πt(s(0)),t(s(0)),πt(s(0)),q(1)(s(1)),πq(1)(s(1)),q(1)(s(1)),πq(1)(s(1)),,q(n1)(s(n1)),πq(n1)(s(n1)),q(n1)(s(n1)),πq(i)(s(n1))}l)\begin{aligned} \pi_{q} = & ( \mathsf{cm}(q^{(1)}(X)), \ldots, \mathsf{cm}(q^{(n - 1)}(X)),q^{(n)}(x_0), \\ & \, \{a(s^{(0)}), \pi_{a}(s^{(0)}), a(- s^{(0)}), \pi_{a}(-s^{(0)}),\\ & \quad c(s^{(0)}), \pi_{c}(s^{(0)}), c(- s^{(0)}), \pi_{c}(-s^{(0)}), \\ & \quad z(s^{(0)}), \pi_{z}(s^{(0)}), z(- s^{(0)}), \pi_{z}(-s^{(0)}), \\ & \quad t(s^{(0)}), \pi_{t}(s^{(0)}), t(- s^{(0)}), \pi_{t}(-s^{(0)}), \\ & \quad q^{(1)}(s^{(1)}), \pi_{q^{(1)}}(s^{(1)}),q^{(1)}(-s^{(1)}), \pi_{q^{(1)}}(-s^{(1)}), \ldots, \\ & \quad q^{(n - 1)}(s^{(n - 1)}), \pi_{q^{(n - 1)}}(s^{(n - 1)}),q^{(n - 1)}(-s^{(n - 1)}), \pi_{q^{(i)}}(-s^{(n - 1)})\}^l) \end{aligned}

Verification

  1. Verifier 计算 s0(ζ),,sn1(ζ)s_0(\zeta), \ldots, s_{n-1}(\zeta) ,其计算方法可以采用前文提到的递推方式进行计算。
  2. Verifier 计算 p0(ζ),,pn(ζ)p_0(\zeta), \ldots, p_n(\zeta)
p0(ζ)=s0(ζ)(c(ζ)(1u0)(1u1)...(1un1))pk(ζ)=sk1(ζ)(unkc(ζ)(1unk)c(ω2nkζ)),k=1n\begin{split} p_0(\zeta) &= s_0(\zeta) \cdot \Big( c(\zeta) - (1-u_0)(1-u_1)...(1-u_{n-1}) \Big) \\ p_k(\zeta) &= s_{k-1}(\zeta) \cdot \Big( u_{n-k}\cdot c(\zeta) - (1-u_{n-k})\cdot c(\omega^{2^{n-k}}\cdot \zeta)\Big) , \quad k=1\ldots n \end{split}
  1. Verifier 计算 p(ζ)p(\zeta)
p(ζ)=p0(ζ)+αp1(ζ)+α2p2(ζ)++αnpn(ζ)p(\zeta) = p_0(\zeta) + \alpha\cdot p_1(\zeta) + \alpha^2\cdot p_2(\zeta) + \cdots + \alpha^{n}\cdot p_{n}(\zeta)
  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 计算 h0(ζ),h1(ζ),h2(ζ)h_0(\zeta), h_1(\zeta), h_2(\zeta)
h0(ζ)=L0(ζ)(z(ζ)c0a(ζ))h1(ζ)=(ζ1)(z(ζ)z(ω1ζ)a(ζ)c(ζ))h2(ζ)=LN1(ζ)(z(ζ)v)\begin{split} h_0(\zeta) &= L_0(\zeta)\cdot\big(z(\zeta) - c_0\cdot a(\zeta) \big) \\ h_1(\zeta) &= (\zeta-1)\cdot\big(z(\zeta)-z(\omega^{-1}\cdot \zeta)-a(\zeta)\cdot c(\zeta)) \\ h_2(\zeta) & = L_{N-1}(\zeta)\cdot\big( z(\zeta) - v \big) \\ \end{split}
  1. Verifier 计算 h(ζ)h(\zeta)
h(ζ)=p(ζ)+αn+1h0(ζ)+αn+2h1(ζ)+αn+3h2(ζ)\begin{split} h(\zeta) &= p(\zeta) + \alpha^{n+1} \cdot h_0(\zeta) + \alpha^{n+2} \cdot h_1(\zeta) + \alpha^{n+3} \cdot h_2(\zeta) \end{split}
  1. Verifier 验证商多项式的正确性
h(ζ)=?t(ζ)vH(ζ)h(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta)
  1. Verifier 验证 q(X)q(X) 的 low degree test 证明,
FRI.LDT.verify(πq,2n)=?1\mathsf{FRI.LDT.verify}(\pi_{q}, 2^n) \stackrel{?}{=} 1

具体验证过程为,重复 ll 次:

MT.verify(cm(a(X)),a(s(0)),πa(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(a(X)), a(s^{(0)}), \pi_{a}(s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(a(X)),a(s(0)),πa(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(a(X)), a(-s^{(0)}), \pi_{a}(-s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(c(X)),c(s(0)),πc(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(c(X)), c(s^{(0)}), \pi_{c}(s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(c(X)),c(s(0)),πc(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(c(X)), c(-s^{(0)}), \pi_{c}(-s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(z(X)),z(s(0)),πz(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(z(X)), z(s^{(0)}), \pi_{z}(s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(z(X)),z(s(0)),πz(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(z(X)), z(-s^{(0)}), \pi_{z}(-s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(t(X)),t(s(0)),πt(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(t(X)), t(s^{(0)}), \pi_{t}(s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(t(X)),t(s(0)),πt(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(t(X)), t(-s^{(0)}), \pi_{t}(-s^{(0)})) \stackrel{?}{=} 1
q(x)=a(x)a(ζ)xζ+r(c(x)c(ζ)xζ+c(x)c(ζω)xζω++c(x)c(ζω2n1)xζω2n1)+r2(z(x)z(ζ)xζ+z(x)z(ζω1)xζω1)+r3t(x)t(ζ)xζ\begin{align} q'(x) & = \frac{a(x) - a(\zeta)}{x - \zeta} + r \cdot \left( \frac{c(x) - c(\zeta)}{x - \zeta} + \frac{c(x) - c(\zeta \cdot \omega)}{x - \zeta \cdot \omega} + \ldots + \frac{c(x) - c(\zeta \cdot \omega^{2^{n-1}})}{x - \zeta \cdot \omega^{2^{n-1}}}\right) \\ \\ & \qquad + r^2 \cdot \left(\frac{z(x) - z(\zeta)}{x - \zeta} + \frac{z(x) - z(\zeta \cdot \omega^{-1})}{x - \zeta \cdot \omega^{-1}}\right) + r^3 \cdot \frac{t(x) - t(\zeta)}{x - \zeta} \end{align}
q(0)(s(0))=(1+λs(0))q(s(0))q^{(0)}(s^{(0)}) = (1 + \lambda \cdot s^{(0)}) q'(s^{(0)})
q(0)(s(0))=(1λs(0))q(s(0))q^{(0)}(-s^{(0)}) = (1 - \lambda \cdot s^{(0)}) q'(-s^{(0)})
MT.verify(cm(q(1)(X)),q(1)(s(1)),πq(1)(s(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q^{(1)}(X)), q^{(1)}(s^{(1)}), \pi_{q^{(1)}}(s^{(1)})) \stackrel{?}{=} 1
MT.verify(cm(q(1)(X)),q(1)(s(1)),πq(1)(s(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q^{(1)}(X)), q^{(1)}(-s^{(1)}), \pi_{q^{(1)}}(-s^{(1)})) \stackrel{?}{=} 1
q(1)(s(1))=?q(0)(s(0))+q(0)(s(0))2+α(1)q(0)(s(0))q(0)(s(0))2s(0)q^{(1)}(s^{(1)}) \stackrel{?}{=} \frac{q^{(0)}(s^{(0)}) + q^{(0)}(- s^{(0)})}{2} + \alpha^{(1)} \cdot \frac{q^{(0)}(s^{(0)}) - q^{(0)}(- s^{(0)})}{2 \cdot s^{(0)}}

总结

本文用 ph23 协议对接 FRI 协议来实现 MLE 多项式的 PCS,该协议的内积证明是通过 Grand Sum 实现的,其也能通过 Univariate Sumcheck ,在下一篇文章中将具体介绍这种协议,并与该协议进行对比。

References