本文给出 PH23 协议接一元多项式承诺 FRI-PCS 的方案。
对接 FRI ¶ 先回顾下 PH23 协议,对于一个 n n n 元 MLE 多项式 f ~ ( X 0 , X 1 , … , X n − 1 ) \tilde{f}(X_0,X_1, \ldots, X_{n - 1}) f ~ ( X 0 , X 1 , … , X n − 1 ) ,其写成在 hypercube { 0 , 1 } n \{0,1\}^n { 0 , 1 } n 上的点值形式:
f ~ ( X 0 , X 1 , … , X n − 1 ) = ∑ i = 0 N − 1 a i ⋅ e q ∼ ( b i t s ( i ) , ( X 0 , X 1 , … , X n − 1 ) ) \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 ~ ( X 0 , X 1 , … , X n − 1 ) = i = 0 ∑ N − 1 a i ⋅ e q ∼ ( bits ( i ) , ( X 0 , X 1 , … , X n − 1 )) 其中 N = 2 n N = 2^n N = 2 n 。当要证明该 MLE 多项式在一个点 u ⃗ = ( u 0 , u 1 , … , u n − 1 ) \vec{u} = (u_0, u_1, \ldots, u_{n-1}) u = ( u 0 , u 1 , … , u n − 1 ) 的值为 v v v 时,即
f ~ ( u 0 , u 1 , … , u n − 1 ) = ∑ i = 0 N − 1 a i ⋅ e q ∼ ( b i t s ( i ) , ( u 0 , u 1 , … , u n − 1 ) ) = 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 f ~ ( u 0 , u 1 , … , u n − 1 ) = i = 0 ∑ N − 1 a i ⋅ e q ∼ ( bits ( i ) , ( u 0 , u 1 , … , u n − 1 )) = v 令 c i = e q ∼ ( b i t s ( i ) , ( u 0 , u 1 , … , u n − 1 ) ) c_i = \overset{\sim}{eq}(\mathsf{bits}(i), (u_0, u_1, \ldots, u_{n-1})) c i = e q ∼ ( bits ( i ) , ( u 0 , u 1 , … , u n − 1 )) ,那么上面的求值证明就转换为证明一个内积
∑ i = 0 N − 1 a i ⋅ c i = ⟨ a ⃗ , c ⃗ ⟩ = v \sum_{i = 0}^{N - 1} a_i \cdot c_i = \langle \vec{a}, \vec{c} \rangle = v i = 0 ∑ N − 1 a i ⋅ c i = ⟨ a , c ⟩ = v c ⃗ \vec{c} c 是 Prover 提供的,为了防止 Prover 作弊,需要证明 c ⃗ \vec{c} c 是正确构造的。PH23 协议的证明也就分为两部分:
证明 c ⃗ \vec{c} c 是 Well-Formedness。 证明内积 ⟨ a ⃗ , c ⃗ ⟩ = v \langle \vec{a}, \vec{c} \rangle = v ⟨ a , c ⟩ = v 。 为了证明 1 的正确性,需要证明下面 n + 1 n + 1 n + 1 个多项式在一个乘法子群 H = { ω 0 , ω 1 , … , ω N − 1 } H = \{\omega^0, \omega^1, \ldots, \omega^{N - 1}\} H = { ω 0 , ω 1 , … , ω N − 1 } 上的值都为 0 。
p 0 ( X ) = s 0 ( X ) ⋅ ( c ( X ) − ( 1 − u 0 ) ( 1 − u 1 ) ⋯ ( 1 − u n − 1 ) ) p 1 ( X ) = s 0 ( X ) ⋅ ( c ( X ) u n − 1 − c ( ω 2 n − 1 ⋅ X ) ( 1 − u n − 1 ) ) p 2 ( X ) = s 1 ( X ) ⋅ ( c ( X ) u n − 2 − c ( ω 2 n − 2 ⋅ X ) ( 1 − u n − 2 ) ) ⋯ ⋯ p n ( X ) = s n − 1 ( X ) ⋅ ( c ( X ) u 0 − c ( ω ⋅ X ) ( 1 − u 0 ) ) \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} p 0 ( X ) = p 1 ( X ) = p 2 ( X ) = ⋯ p n ( X ) = s 0 ( X ) ⋅ ( c ( X ) − ( 1 − u 0 ) ( 1 − u 1 ) ⋯ ( 1 − u n − 1 ) ) s 0 ( X ) ⋅ ( c ( X ) u n − 1 − c ( ω 2 n − 1 ⋅ X ) ( 1 − u n − 1 ) ) s 1 ( X ) ⋅ ( c ( X ) u n − 2 − c ( ω 2 n − 2 ⋅ X ) ( 1 − u n − 2 ) ) ⋯ s n − 1 ( X ) ⋅ ( c ( X ) u 0 − c ( ω ⋅ X ) ( 1 − u 0 ) ) 为了证明 2 内积的正确性,采用 Grand Sum 方法来证明,构造出多项式 z ( X ) z(X) z ( X ) ,用下面的多项式进行约束,这些多项式同样需要在 H H H 上的取值为 0 ,
h 0 ( X ) = L 0 ( X ) ⋅ ( z ( X ) − a 0 ⋅ c 0 ) h 1 ( X ) = ( X − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ X ) − a ( X ) ⋅ c ( X ) ) h 2 ( X ) = L N − 1 ( 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} h 0 ( X ) = h 1 ( X ) = h 2 ( X ) = L 0 ( X ) ⋅ ( z ( X ) − a 0 ⋅ c 0 ) ( X − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ X ) − a ( X ) ⋅ c ( X )) L N − 1 ( X ) ⋅ ( z ( X ) − v ) 用 Verifier 给出的随机数 α 可以将上述 n + 4 n + 4 n + 4 个多项式聚合成一个多项式 h ( X ) h(X) h ( X ) ,
h ( X ) = p 0 ( X ) + α ⋅ p 1 ( X ) + α 2 ⋅ p 2 ( X ) + ⋯ + α n ⋅ p n ( X ) + α n + 1 ⋅ h 0 ( X ) + α n + 2 ⋅ h 1 ( X ) + α n + 3 ⋅ h 2 ( 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 ) = p 0 ( X ) + α ⋅ p 1 ( X ) + α 2 ⋅ p 2 ( X ) + ⋯ + α n ⋅ p n ( X ) + α n + 1 ⋅ h 0 ( X ) + α n + 2 ⋅ h 1 ( X ) + α n + 3 ⋅ h 2 ( X ) 那么现在只需要说明 h ( X ) h(X) h ( X ) 在 H H H 上的取值都为 0 ,也就能完成 f ~ ( u 0 , u 1 , … , u n − 1 ) = v \tilde{f}(u_0, u_1, \ldots, u_{n-1}) = v f ~ ( u 0 , u 1 , … , u n − 1 ) = v 的证明。取 v H ( X ) v_H(X) v H ( X ) 为 H H H 上的 Vanishing 多项式,那么存在一个商多项式 t ( X ) t(X) t ( X ) ,满足
h ( X ) = t ( X ) ⋅ v H ( X ) h(X) = t(X) \cdot v_H(X) h ( X ) = t ( X ) ⋅ v H ( X ) 为了验证商多项式的存在性,Verifier 选取随机点 ζ ,似乎 Prover 发送 t ( ζ ) , h ( ζ ) t(\zeta), h(\zeta) t ( ζ ) , h ( ζ ) 给 Verifier 就可以了,但其实,Prover 承诺的是 a ( X ) a(X) a ( X ) ,c ( X ) c(X) c ( X ) ,z ( X ) z(X) z ( X ) ,t ( X ) t(X) t ( X ) ,因此 Prover 发送的值
( a ( ζ ) , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , 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) ( a ( ζ ) , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , z ( ζ ) , z ( ζ ⋅ ω − 1 ) , t ( ζ ) ) Verifier 拿着 Prover 发送的 a ( ζ ) , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , 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}) a ( ζ ) , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , z ( ζ ) , z ( ζ ⋅ ω − 1 ) 可以自己计算出 h ( ζ ) h(\zeta) h ( ζ ) ,H H H 是公开的,因此 Verifier 可以自行计算出 v H ( ζ ) v_H(\zeta) v H ( ζ ) ,然后验证
h ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) h(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta) h ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) 要让 Verifier 相信 Prover 发送过来的这些值没有问题,那么就要用一元多项式的 PCS 来实现。前面的文章已经介绍了用 KZG10 来实现,本文用 FRI-PCS 来进行证明。
通过上面多项式的构造过程,可以得知 a ( X ) , c ( X ) , z ( X ) , t ( X ) a(X), c(X), z(X), t(X) a ( X ) , c ( X ) , z ( X ) , t ( X ) 的次数都为 N − 1 N - 1 N − 1 。a ( X ) a(X) a ( X ) 需要在 ζ 点打开,FRI-PCS 用到了 DEEP 技巧,记 Reed-Solomon 编码空间 R S k [ F , D ] \mathsf{RS}_{k}[\mathbb{F},D] RS k [ F , D ] 表示
R S k [ F , D ] = { p ( x ) x ∈ D : p ( X ) ∈ F [ X ] , deg p ( X ) ≤ k − 1 } \mathsf{RS}_{k}[\mathbb{F},D] = \{p(x)_{x \in D} : p(X) \in \mathbb{F}[X], \deg p(X) \le k - 1 \} RS k [ F , D ] = { p ( x ) x ∈ D : p ( X ) ∈ F [ X ] , deg p ( X ) ≤ k − 1 } 那么这里要求 Verifier 选取的随机数来自 ζ ← $ F ∖ D \zeta \stackrel{\$}{\leftarrow} \mathbb{F} \setminus D ζ ← $ F ∖ D 。为了证明 a ( ζ ) a(\zeta) a ( ζ ) 的正确性,需要证明商多项式
q a ( X ) = a ( X ) − a ( ζ ) X − ζ q_a(X) = \frac{a(X) - a(\zeta)}{X - \zeta} q a ( X ) = X − ζ a ( X ) − a ( ζ ) 的次数小于 N − 1 N - 1 N − 1 。
对于 c ( X ) c(X) c ( X ) ,其要打开的点有 n + 1 n + 1 n + 1 个,为 H ζ ′ = { ζ , ζ ⋅ ω , ζ ⋅ ω 2 , … , ζ ⋅ ω 2 n − 1 } H_{\zeta}' = \{\zeta, \zeta\cdot\omega, \zeta\cdot\omega^2, \ldots, \zeta\cdot\omega^{2^{n-1}} \} H ζ ′ = { ζ , ζ ⋅ ω , ζ ⋅ ω 2 , … , ζ ⋅ ω 2 n − 1 } ,用 [H22] 论文在 Multi-point queries 小节介绍的方法同时打开多个点,令商多项式
q c ( X ) = ∑ x ∈ H ζ ′ c ( X ) − c ( x ) X − x = c ( X ) − c ( ζ ) X − ζ + c ( X ) − c ( ζ ⋅ ω ) X − ζ ⋅ ω + … + c ( X ) − c ( ζ ⋅ ω 2 n − 1 ) X − ζ ⋅ ω 2 n − 1 q_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}}} q c ( X ) = x ∈ H ζ ′ ∑ X − x c ( X ) − c ( x ) = X − ζ c ( X ) − c ( ζ ) + X − ζ ⋅ ω c ( X ) − c ( ζ ⋅ ω ) + … + X − ζ ⋅ ω 2 n − 1 c ( X ) − c ( ζ ⋅ ω 2 n − 1 ) 这样转换为需要证明 q c ( X ) q_c(X) q c ( X ) 的次数小于 N − 1 N - 1 N − 1 。
对于 z ( X ) z(X) z ( X ) ,类似地,证明商多项式
q z ( X ) = z ( X ) − z ( ζ ) X − ζ + z ( X ) − z ( ζ ⋅ ω − 1 ) X − ζ ⋅ ω − 1 q_z(X) = \frac{z(X) - z(\zeta)}{X - \zeta} + \frac{z(X) - z(\zeta \cdot \omega^{-1})}{X - \zeta \cdot \omega^{-1}} q z ( X ) = X − ζ z ( X ) − z ( ζ ) + X − ζ ⋅ ω − 1 z ( X ) − z ( ζ ⋅ ω − 1 ) 次数小于 N − 1 N - 1 N − 1 。
对于 t ( X ) t(X) t ( X ) ,证明商多项式
q t ( X ) = t ( X ) − t ( ζ ) X − ζ q_t(X) = \frac{t(X) - t(\zeta)}{X - \zeta} q t ( X ) = X − ζ t ( X ) − t ( ζ ) 次数小于 N − 1 N - 1 N − 1 。
这时,向 Verifier 要一个随机数 r ← $ F r \stackrel{\$}{\leftarrow} \mathbb{F} r ← $ F ,可以将上面要证明的四个商多项式 batch 在一起,令
q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q z ( X ) + r 3 ⋅ q t ( X ) q'(X) = q_a(X) + r \cdot q_c(X) + r^2 \cdot q_z(X) + r^3 \cdot q_t(X) q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q z ( X ) + r 3 ⋅ q t ( X ) 这样只需要调用一次 FRI 的 low degree test 就可以了,证明 deg ( q ′ ( X ) ) < N − 1 \deg(q'(X)) < N - 1 deg ( q ′ ( X )) < N − 1 。最后为了对接 FRI low degree test 协议,需要将 q ′ ( X ) q'(X) q ′ ( X ) 的次数对齐到 2 的幂次,即向 Verifier 要一个随机数 λ ,证明
q ( X ) = ( 1 + λ ⋅ X ) q ′ ( X ) q(X) = (1 + \lambda \cdot X) q'(X) q ( X ) = ( 1 + λ ⋅ X ) q ′ ( X ) 的次数小于 N N N 。
📝 Remark:
上面 batch 不同多项式时也可以从 F \mathbb{F} F 中选取三个不同的随机数 r 1 , r 2 , r 3 r_1, r_2,r_3 r 1 , r 2 , r 3 ,令
> q ′ ( X ) = q a ( X ) + r 1 ⋅ q c ( X ) + r 2 ⋅ q z ( X ) + r 3 ⋅ q t ( X ) > > q'(X) = q_a(X) + r_1 \cdot q_c(X) + r_2 \cdot q_z(X) + r_3 \cdot q_t(X)
> > q ′ ( X ) = q a ( X ) + r 1 ⋅ q c ( X ) + r 2 ⋅ q z ( X ) + r 3 ⋅ q t ( X ) > 这种方式会比上面用一个随机数的幂次进行 batch 有更高一点的安全性。([BCIKS20])
还有一点需要说明,由于我们用 DEEP 方法来构造商多项式,因此这里要求选取的随机数 ζ 构成打开点的集合与 Reed-Solomon 编码的群不能相交,即
{ ζ , ζ ⋅ ω , ζ ⋅ ω 2 , … , ζ ⋅ ω 2 n − 1 , ζ ⋅ ω − 1 } ∩ D = ∅ \{\zeta, \zeta\cdot\omega, \zeta\cdot\omega^2, \ldots, \zeta\cdot\omega^{2^{n-1}}, \zeta \cdot \omega^{-1}\} \cap D = \emptyset { ζ , ζ ⋅ ω , ζ ⋅ ω 2 , … , ζ ⋅ ω 2 n − 1 , ζ ⋅ ω − 1 } ∩ D = ∅ PH23 + FRI 协议 ¶ 证明目标:对于一个有 n n n 个变量的 MLE 多项式 f ~ ( X 0 , X 1 , … , X n − 1 ) \tilde{f}(X_0, X_1, \ldots, X_{n - 1}) f ~ ( X 0 , X 1 , … , X n − 1 ) ,其表示为点值形式:
f ~ ( X 0 , X 1 , … , X n − 1 ) = ∑ i = 0 N − 1 a i ⋅ e q ∼ ( b i t s ( i ) , ( X 0 , X 1 , … , X n − 1 ) ) \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 ~ ( X 0 , X 1 , … , X n − 1 ) = i = 0 ∑ N − 1 a i ⋅ e q ∼ ( bits ( i ) , ( X 0 , X 1 , … , X n − 1 )) 证明的目标是证明 f ~ ( X 0 , X 1 , … , X n − 1 ) \tilde{f}(X_0, X_1, \ldots, X_{n - 1}) f ~ ( X 0 , X 1 , … , X n − 1 ) 在点 u ⃗ = ( u 0 , u 1 , … , u n − 1 ) \vec{u} = (u_0,u_1, \ldots, u_{n - 1}) u = ( u 0 , u 1 , … , u n − 1 ) 处的值为 v = f ~ ( u 0 , u 1 , … , u n − 1 ) v = \tilde{f}(u_0,u_1, \ldots, u_{n - 1}) v = f ~ ( u 0 , u 1 , … , u n − 1 ) 。
Commit 阶段 ¶ 对于 FRI 协议,对多项式的承诺就是计算其 Reed-Solomon 编码,并对编码进行承诺。在 PCS 的 Commit 阶段需要对原 MLE 多项式进行承诺,即
f ~ ( X 0 , X 1 , … , X n − 1 ) = ∑ i = 0 N − 1 a i ⋅ e q ∼ ( b i t s ( i ) , ( X 0 , X 1 , … , X n − 1 ) ) \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 ~ ( X 0 , X 1 , … , X n − 1 ) = i = 0 ∑ N − 1 a i ⋅ e q ∼ ( bits ( i ) , ( X 0 , X 1 , … , X n − 1 )) a ⃗ \vec{a} a 就唯一确定了一个 n n n 元 MLE 多项式,要对 MLE 多项式 f ~ \tilde{f} f ~ 承诺其实就是对 a ⃗ \vec{a} a 进行承诺,若用 FRI 协议,那么就先要将 a ⃗ \vec{a} a 转换成多项式 a ( X ) a(X) a ( X ) ,再对其在 D D D 上的 Reed-Solomon 编码进行承诺。
Prover 构造一元多项式 a ( X ) a(X) a ( X ) ,使其在 H H H 上的求值为 a ⃗ = ( a 0 , a 1 , … , a N − 1 ) \vec{a} = (a_{0,}a_{1},\ldots, a_{N-1}) a = ( a 0 , a 1 , … , a N − 1 ) 。 a ( X ) = a 0 ⋅ L 0 ( X ) + a 1 ⋅ L 1 ( X ) + … + a N − 1 ⋅ L N − 1 ( X ) a(X) = a_0 \cdot L_0(X) + a_1 \cdot L_1(X) + \ldots + a_{N-1} \cdot L_{N-1}(X) a ( X ) = a 0 ⋅ L 0 ( X ) + a 1 ⋅ L 1 ( X ) + … + a N − 1 ⋅ L N − 1 ( X ) Prover 计算多项式 a ( X ) a(X) a ( X ) 的承诺 C a C_a C a ,并将 C a C_a C a 发送给 Verifier C a = c m ( [ a ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ a ( x ) ∣ x ∈ D ] ) C_a = \mathsf{cm}([a(x)|_{x \in D}]) = \mathsf{MT.commit}([a(x)|_{x \in D}]) C a = cm ([ a ( x ) ∣ x ∈ D ]) = MT.commit ([ a ( x ) ∣ x ∈ D ]) 公共输入 ¶ FRI 协议参数:Reed Solomon 编码选取的区域 D n ⊂ D n − 1 ⊂ ⋯ ⊂ D 0 = D D_n \subset D_{n-1} \subset \cdots \subset D_0 = D D n ⊂ D n − 1 ⊂ ⋯ ⊂ D 0 = D ,码率 ρ ,查询阶段的次数 l l l 。 承诺 C a C_a C a C a = c m ( [ a ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ a ( x ) ∣ x ∈ D ] ) C_a = \mathsf{cm}([a(x)|_{x \in D}]) = \mathsf{MT.commit}([a(x)|_{x \in D}]) C a = cm ([ a ( x ) ∣ x ∈ D ]) = MT.commit ([ a ( x ) ∣ x ∈ D ]) 求值点 u ⃗ = ( u 0 , u 1 , … , u n − 1 ) \vec{u} = (u_0,u_1, \ldots, u_{n - 1}) u = ( u 0 , u 1 , … , u n − 1 ) v = f ~ ( u 0 , u 1 , … , u n − 1 ) v = \tilde{f}(u_0,u_1, \ldots, u_{n - 1}) v = f ~ ( u 0 , u 1 , … , u n − 1 ) Witness ¶ 多元多项式 f ~ ( X 0 , X 1 , … , X n − 1 ) \tilde{f}(X_0, X_1, \ldots, X_{n - 1}) f ~ ( X 0 , X 1 , … , X n − 1 ) 的在 Boolean Hypercube 上的取值 a ⃗ = ( a 0 , a 1 , … , a N − 1 ) \vec{a} = (a_0,a_1, \ldots, a_{N-1}) a = ( a 0 , a 1 , … , a N − 1 ) Evaluation 证明协议 ¶ Round 1 ¶ Prover:
计算向量 c ⃗ \vec{c} c ,其中每个元素 c i = e q ∼ ( b i t s ( i ) , u ⃗ ) c_i=\overset{\sim}{eq}(\mathsf{bits}(i), \vec{u}) c i = e q ∼ ( bits ( i ) , u )
构造多项式 c ( X ) c(X) c ( X ) ,其在 H H H 上的运算结果恰好是 c ⃗ \vec{c} c 。
c ( X ) = ∑ i = 0 N − 1 c i ⋅ L i ( X ) c(X) = \sum_{i=0}^{N-1} c_i \cdot L_i(X) c ( X ) = i = 0 ∑ N − 1 c i ⋅ L i ( X ) 计算 c ( X ) c(X) c ( X ) 的承诺 C c C_c C c ,并发送 C c C_c C c C c = c m ( [ c ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ c ( x ) ∣ x ∈ D ] ) C_c = \mathsf{cm}([c(x)|_{x \in D}]) = \mathsf{MT.commit}([c(x)|_{x \in D}]) C c = cm ([ c ( x ) ∣ x ∈ D ]) = MT.commit ([ c ( x ) ∣ x ∈ D ]) Round 2 ¶ Verifier: 发送挑战数 α ← $ F p \alpha \stackrel{\$}{\leftarrow} \mathbb{F}_p α ← $ F p
Prover:
构造关于 c ⃗ \vec{c} c 的约束多项式 p 0 ( X ) , … , p n ( X ) p_0(X),\ldots, p_{n}(X) p 0 ( X ) , … , p n ( X ) p 0 ( X ) = s 0 ( X ) ⋅ ( c ( X ) − ( 1 − u 0 ) ( 1 − u 1 ) . . . ( 1 − u n − 1 ) ) p k ( X ) = s k − 1 ( X ) ⋅ ( u n − k ⋅ c ( X ) − ( 1 − u n − k ) ⋅ c ( ω 2 n − k ⋅ X ) ) , k = 1 … n \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} p 0 ( X ) p k ( X ) = s 0 ( X ) ⋅ ( c ( X ) − ( 1 − u 0 ) ( 1 − u 1 ) ... ( 1 − u n − 1 ) ) = s k − 1 ( X ) ⋅ ( u n − k ⋅ c ( X ) − ( 1 − u n − k ) ⋅ c ( ω 2 n − k ⋅ X ) ) , k = 1 … n 把 { p i ( X ) } \{p_i(X)\} { p i ( X )} 聚合为一个多项式 p ( X ) p(X) p ( X ) p ( X ) = p 0 ( X ) + α ⋅ p 1 ( X ) + α 2 ⋅ p 2 ( X ) + ⋯ + α n ⋅ p n ( X ) p(X) = p_0(X) + \alpha\cdot p_1(X) + \alpha^2\cdot p_2(X) + \cdots + \alpha^{n}\cdot p_{n}(X) p ( X ) = p 0 ( X ) + α ⋅ p 1 ( X ) + α 2 ⋅ p 2 ( X ) + ⋯ + α n ⋅ p n ( X ) 构造累加多项式 z ( X ) z(X) z ( X ) ,满足 z ( 1 ) = a 0 ⋅ c 0 z ( ω i ) − z ( ω i − 1 ) = a ( ω i ) ⋅ c ( ω i ) , i = 1 , … , N − 1 z ( ω N − 1 ) = 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} z ( 1 ) z ( ω i ) − z ( ω i − 1 ) z ( ω N − 1 ) = a 0 ⋅ c 0 = a ( ω i ) ⋅ c ( ω i ) , i = 1 , … , N − 1 = v 构造约束多项式 h 0 ( X ) , h 1 ( X ) , h 2 ( X ) h_0(X), h_1(X), h_2(X) h 0 ( X ) , h 1 ( X ) , h 2 ( X ) ,满足 h 0 ( X ) = L 0 ( X ) ⋅ ( z ( X ) − c 0 ⋅ a ( X ) ) h 1 ( X ) = ( X − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ X ) − a ( X ) ⋅ c ( X ) ) h 2 ( X ) = L N − 1 ( 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} h 0 ( X ) h 1 ( X ) h 2 ( X ) = L 0 ( X ) ⋅ ( z ( X ) − c 0 ⋅ a ( X ) ) = ( X − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ X ) − a ( X ) ⋅ c ( X )) = L N − 1 ( X ) ⋅ ( z ( X ) − v ) 把 p ( X ) p(X) p ( X ) 和 h 0 ( X ) , h 1 ( X ) , h 2 ( X ) h_0(X), h_1(X), h_2(X) h 0 ( X ) , h 1 ( X ) , h 2 ( X ) 聚合为一个多项式 h ( X ) h(X) h ( X ) ,满足 h ( X ) = p ( X ) + α n + 1 ⋅ h 0 ( X ) + α n + 2 ⋅ h 1 ( X ) + α n + 3 ⋅ h 2 ( 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} h ( X ) = p ( X ) + α n + 1 ⋅ h 0 ( X ) + α n + 2 ⋅ h 1 ( X ) + α n + 3 ⋅ h 2 ( X ) 计算 Quotient 多项式 t ( X ) t(X) t ( X ) ,满足 h ( X ) = t ( X ) ⋅ v H ( X ) h(X) =t(X)\cdot v_H(X) h ( X ) = t ( X ) ⋅ v H ( X ) 计算 t ( X ) t(X) t ( X ) 和 z ( X ) z(X) z ( X ) 的承诺 C t , C z C_t, C_z C t , C z ,并发送给 Verifier C t = c m ( [ t ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ t ( x ) ∣ x ∈ D ] ) C z = c m ( [ z ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ z ( x ) ∣ x ∈ D ] ) \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} C t C z = cm ([ t ( x ) ∣ x ∈ D ]) = MT.commit ([ t ( x ) ∣ x ∈ D ]) = cm ([ z ( x ) ∣ x ∈ D ]) = MT.commit ([ z ( x ) ∣ x ∈ D ]) Round 3 ¶ Verifier: 发送随机求值点 ζ ← $ F p ∗ ∖ D \zeta \stackrel{\$}{\leftarrow} \mathbb{F}_p^* \setminus D ζ ← $ F p ∗ ∖ D
Prover:
计算 s i ( X ) s_i(X) s i ( X ) 在 ζ 处的取值: s 0 ( ζ ) , s 1 ( ζ ) , … , s n − 1 ( ζ ) s_0(\zeta), s_1(\zeta), \ldots, s_{n-1}(\zeta) s 0 ( ζ ) , s 1 ( ζ ) , … , s n − 1 ( ζ ) 这里 Prover 可以高效计算 s i ( ζ ) s_i(\zeta) s i ( ζ ) ,由 s i ( X ) s_i(X) s i ( X ) 的公式得
s i ( ζ ) = ζ N − 1 ζ 2 i − 1 = ( ζ N − 1 ) ( ζ 2 i + 1 ) ( ζ 2 i − 1 ) ( ζ 2 i + 1 ) = ζ N − 1 ζ 2 i + 1 − 1 ⋅ ( ζ 2 i + 1 ) = s i + 1 ( ζ ) ⋅ ( ζ 2 i + 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} s i ( ζ ) = ζ 2 i − 1 ζ N − 1 = ( ζ 2 i − 1 ) ( ζ 2 i + 1 ) ( ζ N − 1 ) ( ζ 2 i + 1 ) = ζ 2 i + 1 − 1 ζ N − 1 ⋅ ( ζ 2 i + 1 ) = s i + 1 ( ζ ) ⋅ ( ζ 2 i + 1 ) 因此 s i ( ζ ) s_i(\zeta) s i ( ζ ) 的值可以通过 s i + 1 ( ζ ) s_{i + 1}(\zeta) s i + 1 ( ζ ) 计算得到,而
s n − 1 ( ζ ) = ζ N − 1 ζ 2 n − 1 − 1 = ζ 2 n − 1 + 1 s_{n-1}(\zeta) = \frac{\zeta^N - 1}{\zeta^{2^{n-1}} - 1} = \zeta^{2^{n-1}} + 1 s n − 1 ( ζ ) = ζ 2 n − 1 − 1 ζ N − 1 = ζ 2 n − 1 + 1 因此可以得到一个 O ( n ) O(n) O ( n ) 的算法来计算 s i ( ζ ) s_i(\zeta) s i ( ζ ) ,并且这里不含除法运算。计算过程是:s n − 1 ( ζ ) → s n − 2 ( ζ ) → ⋯ → s 0 ( ζ ) s_{n-1}(\zeta) \rightarrow s_{n-2}(\zeta) \rightarrow \cdots \rightarrow s_0(\zeta) s n − 1 ( ζ ) → s n − 2 ( ζ ) → ⋯ → s 0 ( ζ ) 。
定义求值 Domain H ζ ′ H_\zeta' H ζ ′ ,包含 n + 1 n+1 n + 1 个元素: H ζ ′ = ζ H = { ζ , ω ζ , ω 2 ζ , ω 4 ζ , … , ω 2 n − 1 ζ } H_\zeta'=\zeta H = \{\zeta, \omega\zeta, \omega^2\zeta,\omega^4\zeta, \ldots, \omega^{2^{n-1}}\zeta\} H ζ ′ = ζ H = { ζ , ω ζ , ω 2 ζ , ω 4 ζ , … , ω 2 n − 1 ζ } 计算并发送 c ( X ) c(X) c ( X ) 在 H ζ ′ H_\zeta' H ζ ′ 上的取值 c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}}) c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) 计算并发送 z ( ζ ) z(\zeta) z ( ζ ) 和 z ( ω − 1 ⋅ ζ ) z(\omega^{-1}\cdot\zeta) z ( ω − 1 ⋅ ζ ) 计算并发送 t ( ζ ) t(\zeta) t ( ζ ) 计算并发送 a ( ζ ) a(\zeta) a ( ζ ) Round 4 ¶ Verifier: 发送随机数 r ← $ F p r \stackrel{\$}{\leftarrow} \mathbb{F}_p r ← $ F p
Prover:
计算商多项式 q a ( X ) q_a(X) q a ( X ) q a ( X ) = a ( X ) − a ( ζ ) X − ζ q_a(X) = \frac{a(X) - a(\zeta)}{X - \zeta} q a ( X ) = X − ζ a ( X ) − a ( ζ ) 计算商多项式 q c ( X ) q_c(X) q c ( X ) q c ( X ) = ∑ x ∈ H ζ ′ c ( X ) − c ( x ) X − x = c ( X ) − c ( ζ ) X − ζ + c ( X ) − c ( ζ ⋅ ω ) X − ζ ⋅ ω + … + c ( X ) − c ( ζ ⋅ ω 2 n − 1 ) X − ζ ⋅ ω 2 n − 1 q_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}}} q c ( X ) = x ∈ H ζ ′ ∑ X − x c ( X ) − c ( x ) = X − ζ c ( X ) − c ( ζ ) + X − ζ ⋅ ω c ( X ) − c ( ζ ⋅ ω ) + … + X − ζ ⋅ ω 2 n − 1 c ( X ) − c ( ζ ⋅ ω 2 n − 1 ) 计算商多项式 q z ( X ) q_z(X) q z ( X ) q z ( X ) = z ( X ) − z ( ζ ) X − ζ + z ( X ) − z ( ζ ⋅ ω − 1 ) X − ζ ⋅ ω − 1 q_z(X) = \frac{z(X) - z(\zeta)}{X - \zeta} + \frac{z(X) - z(\zeta \cdot \omega^{-1})}{X - \zeta \cdot \omega^{-1}} q z ( X ) = X − ζ z ( X ) − z ( ζ ) + X − ζ ⋅ ω − 1 z ( X ) − z ( ζ ⋅ ω − 1 ) 计算商多项式 q t ( X ) q_t(X) q t ( X ) q t ( X ) = t ( X ) − t ( ζ ) X − ζ q_t(X) = \frac{t(X) - t(\zeta)}{X - \zeta} q t ( X ) = X − ζ t ( X ) − t ( ζ ) 将上面的四个商多项式用随机数 r r r 的幂次 batch 成一个多项式 q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q z ( X ) + r 3 ⋅ q t ( X ) q'(X) = q_a(X) + r \cdot q_c(X) + r^2 \cdot q_z(X) + r^3 \cdot q_t(X) q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q z ( X ) + r 3 ⋅ q t ( X ) Round 5 ¶ 这一轮将商多项式 q ′ ( X ) q'(X) q ′ ( X ) 对齐到 2 的幂次,以对接 FRI 协议。
Verifier 发送随机数 λ ← $ F \lambda \stackrel{\$}{\leftarrow} \mathbb{F} λ ← $ F Prover 计算 q ( X ) = ( 1 + λ ⋅ X ) q ′ ( X ) q(X) = (1 + \lambda \cdot X) q'(X) q ( X ) = ( 1 + λ ⋅ X ) q ′ ( X ) 在 D D D 上的值。
Round 6 ¶ Prover 和 Verifier 进行 FRI 的 low degree test 证明交互,证明 q ( X ) q(X) q ( X ) 的次数小于 2 n 2^n 2 n 。
π q = F R I . L D T ( q ( X ) , 2 n ) \pi_{q} = \mathsf{FRI.LDT}(q(X), 2^n) π q = FRI.LDT ( q ( X ) , 2 n ) 这里包含 n n n 轮的交互,直到最后将原来的多项式折叠为常数多项式。下面用 i i i 表示第 i i i 轮,具体交互过程如下:
记 q ( 0 ) ( x ) ∣ x ∈ D : = q ( x ) ∣ x ∈ D q^{(0)}(x)|_{x \in D} := q(x)|_{x \in D} q ( 0 ) ( x ) ∣ x ∈ D := q ( x ) ∣ x ∈ D
对于 i = 1 , … , n i = 1,\ldots, n i = 1 , … , n ,
Verifier 发送随机数 α ( i ) \alpha^{(i)} α ( i ) 对于任意的 y ∈ D i y \in D_i y ∈ D i ,在 D i − 1 D_{i - 1} D i − 1 中找到 x x x 满足 x 2 = y x^2 = y x 2 = y ,Prover 计算 q ( i ) ( y ) = q ( i − 1 ) ( x ) + q ( i − 1 ) ( − x ) 2 + α ( i ) ⋅ q ( i − 1 ) ( x ) − q ( i − 1 ) ( − x ) 2 x q^{(i)}(y) = \frac{q^{(i - 1)}(x) + q^{(i - 1)}(-x)}{2} + \alpha^{(i)} \cdot \frac{q^{(i - 1)}(x) - q^{(i - 1)}(-x)}{2x} q ( i ) ( y ) = 2 q ( i − 1 ) ( x ) + q ( i − 1 ) ( − x ) + α ( i ) ⋅ 2 x q ( i − 1 ) ( x ) − q ( i − 1 ) ( − x ) 如果 i < n i < n i < n ,Prover 发送 [ q ( i ) ( x ) ∣ x ∈ D i ] [q^{(i)}(x)|_{x \in D_{i}}] [ q ( i ) ( x ) ∣ x ∈ D i ] 的 Merkle Tree 承诺, c m ( q ( i ) ( X ) ) = c m ( [ q ( i ) ( x ) ∣ x ∈ D i ] ) = M T . c o m m i t ( [ q ( i ) ( x ) ∣ x ∈ D i ] ) \mathsf{cm}(q^{(i)}(X)) = \mathsf{cm}([q^{(i)}(x)|_{x \in D_{i}}]) = \mathsf{MT.commit}([q^{(i)}(x)|_{x \in D_{i}}]) cm ( q ( i ) ( X )) = cm ([ q ( i ) ( x ) ∣ x ∈ D i ]) = MT.commit ([ q ( i ) ( x ) ∣ x ∈ D i ]) 如果 i = n i = n i = n ,任选 x 0 ∈ D n x_0 \in D_{n} x 0 ∈ D n ,Prover 发送 q ( i ) ( x 0 ) q^{(i)}(x_0) q ( i ) ( x 0 ) 的值。 📝 Notes
如果折叠次数 r < n r < n r < n ,那么最后不会折叠到常数多项式,因此 Prover 在第 r r r 轮时会发送一个 Merkle Tree 承诺,而不是发送一个值。
Round 7 ¶ 这一轮是接着 Prover 与 Verifier 进行 FRI 协议的 low degree test 交互的查询阶段,Verifier 重复查询 l l l 次,每一次 Verifier 都会从 D 0 D_0 D 0 中选取一个随机数,让 Prover 发送在第 i i i 轮折叠的值及对应的 Merkle Path,用来让 Verifier 验证每一轮折叠的正确性。
重复 l l l 次:
Verifier 从 D 0 D_0 D 0 中随机选取一个数 s ( 0 ) ← $ D 0 s^{(0)} \stackrel{\$}{\leftarrow} D_0 s ( 0 ) ← $ D 0 Prover 打开 a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , z ( s ( 0 ) ) , z ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) a(s^{(0)}), a(-s^{(0)},c(s^{(0)}),c(-s^{(0)}),z(s^{(0)}),z(-s^{(0)}),t(s^{(0)}),t(-s^{(0)}) a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , z ( s ( 0 ) ) , z ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) 的承诺,即这些点的值与对应的 Merkle Path,并发送给 Verifier ( a ( s ( 0 ) ) , π a ( s ( 0 ) ) ) ← M T . o p e n ( [ a ( x ) ∣ x ∈ D 0 ] , 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 ) ∣ x ∈ D 0 ] , s ( 0 ) ) ( a ( − s ( 0 ) ) , π a ( − s ( 0 ) ) ) ← M T . o p e n ( [ a ( x ) ∣ x ∈ D 0 ] , − 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 ) ∣ x ∈ D 0 ] , − s ( 0 ) ) ( c ( s ( 0 ) ) , π c ( s ( 0 ) ) ) ← M T . o p e n ( [ c ( x ) ∣ x ∈ D 0 ] , 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 ) ∣ x ∈ D 0 ] , s ( 0 ) ) ( c ( − s ( 0 ) ) , π c ( − s ( 0 ) ) ) ← M T . o p e n ( [ c ( x ) ∣ x ∈ D 0 ] , − 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 ) ∣ x ∈ D 0 ] , − s ( 0 ) ) ( z ( s ( 0 ) ) , π z ( s ( 0 ) ) ) ← M T . o p e n ( [ z ( x ) ∣ x ∈ D 0 ] , 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 ) ∣ x ∈ D 0 ] , s ( 0 ) ) ( z ( − s ( 0 ) ) , π z ( − s ( 0 ) ) ) ← M T . o p e n ( [ z ( x ) ∣ x ∈ D 0 ] , − 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 ) ∣ x ∈ D 0 ] , − s ( 0 ) ) ( t ( s ( 0 ) ) , π t ( s ( 0 ) ) ) ← M T . o p e n ( [ t ( x ) ∣ x ∈ D 0 ] , 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 ) ∣ x ∈ D 0 ] , s ( 0 ) ) ( t ( − s ( 0 ) ) , π t ( − s ( 0 ) ) ) ← M T . o p e n ( [ t ( x ) ∣ x ∈ D 0 ] , − 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 ) ∣ x ∈ D 0 ] , − s ( 0 ) ) Prover 计算 s ( 1 ) = ( s ( 0 ) ) 2 s^{(1)} = (s^{(0)})^2 s ( 1 ) = ( s ( 0 ) ) 2
对于 i = 1 , … , n − 1 i = 1, \ldots, n - 1 i = 1 , … , n − 1
Prover 发送 q ( i ) ( s ( i ) ) , q ( i ) ( − s ( i ) ) q^{(i)}(s^{(i)}), q^{(i)}(-s^{(i)}) q ( i ) ( s ( i ) ) , q ( i ) ( − s ( i ) ) 的值,并附上 Merkle Path。 { ( q ( i ) ( s ( i ) ) , π q ( i ) ( s ( i ) ) ) } ← M T . o p e n ( [ q ( i ) ( x ) ∣ x ∈ D i ] , s ( i ) ) \{(q^{(i)}(s^{(i)}), \pi_{q^{(i)}}(s^{(i)}))\} \leftarrow \mathsf{MT.open}([q^{(i)}(x)|_{x \in D_i}], s^{(i)}) {( q ( i ) ( s ( i ) ) , π q ( i ) ( s ( i ) ))} ← MT.open ([ q ( i ) ( x ) ∣ x ∈ D i ] , s ( i ) ) { ( q ( i ) ( − s ( i ) ) , π q ( i ) ( − s ( i ) ) ) } ← M T . o p e n ( [ q ( i ) ( x ) ∣ x ∈ D i ] , − s ( i ) ) \{(q^{(i)}(-s^{(i)}), \pi_{q}^{(i)}(-s^{(i)}))\} \leftarrow \mathsf{MT.open}([q^{(i)}(x)|_{x \in D_i}], -s^{(i)}) {( q ( i ) ( − s ( i ) ) , π q ( i ) ( − s ( i ) ))} ← MT.open ([ q ( i ) ( x ) ∣ x ∈ D i ] , − s ( i ) ) Prover 计算 s ( i + 1 ) = ( s ( i ) ) 2 s^{(i + 1)} = (s^{(i)})^2 s ( i + 1 ) = ( s ( i ) ) 2 如果折叠次数 r < n r < n r < n ,那么最后一步就要发送 q ( r ) ( s ( r ) ) q^{(r)}(s^{(r)}) q ( r ) ( s ( r ) ) 的值,并附上 Merkle Path。
Proof ¶ Prover 发送的证明为
π = ( C c , C t , C z , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , 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}) π = ( C c , C t , C z , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , z ( ζ ) , z ( ω − 1 ⋅ ζ ) , t ( ζ ) , a ( ζ ) , π q ) 用符号 { ⋅ } l \{\cdot\}^l { ⋅ } l 表示在 FRI low degree test 的查询阶段重复查询 l l l 次产生的证明,由于每次查询是随机选取的,因此花括号中的证明也是随机的。那么 FRI 进行 low degree test 的证明为
π q = ( c m ( q ( 1 ) ( X ) ) , … , c m ( q ( n − 1 ) ( X ) ) , q ( n ) ( x 0 ) , { 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 ( n − 1 ) ( s ( n − 1 ) ) , π q ( n − 1 ) ( s ( n − 1 ) ) , q ( n − 1 ) ( − s ( n − 1 ) ) , π q ( i ) ( − s ( n − 1 ) ) } 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} π q = ( cm ( q ( 1 ) ( X )) , … , cm ( q ( n − 1 ) ( X )) , q ( n ) ( x 0 ) , { 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 ( n − 1 ) ( s ( n − 1 ) ) , π q ( n − 1 ) ( s ( n − 1 ) ) , q ( n − 1 ) ( − s ( n − 1 ) ) , π q ( i ) ( − s ( n − 1 ) ) } l ) Verification ¶ Verifier 计算 s 0 ( ζ ) , … , s n − 1 ( ζ ) s_0(\zeta), \ldots, s_{n-1}(\zeta) s 0 ( ζ ) , … , s n − 1 ( ζ ) ,其计算方法可以采用前文提到的递推方式进行计算。 Verifier 计算 p 0 ( ζ ) , … , p n ( ζ ) p_0(\zeta), \ldots, p_n(\zeta) p 0 ( ζ ) , … , p n ( ζ ) p 0 ( ζ ) = s 0 ( ζ ) ⋅ ( c ( ζ ) − ( 1 − u 0 ) ( 1 − u 1 ) . . . ( 1 − u n − 1 ) ) p k ( ζ ) = s k − 1 ( ζ ) ⋅ ( u n − k ⋅ c ( ζ ) − ( 1 − u n − k ) ⋅ c ( ω 2 n − k ⋅ ζ ) ) , k = 1 … n \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} p 0 ( ζ ) p k ( ζ ) = s 0 ( ζ ) ⋅ ( c ( ζ ) − ( 1 − u 0 ) ( 1 − u 1 ) ... ( 1 − u n − 1 ) ) = s k − 1 ( ζ ) ⋅ ( u n − k ⋅ c ( ζ ) − ( 1 − u n − k ) ⋅ c ( ω 2 n − k ⋅ ζ ) ) , k = 1 … n Verifier 计算 p ( ζ ) p(\zeta) p ( ζ ) p ( ζ ) = p 0 ( ζ ) + α ⋅ p 1 ( ζ ) + α 2 ⋅ p 2 ( ζ ) + ⋯ + α n ⋅ p n ( ζ ) p(\zeta) = p_0(\zeta) + \alpha\cdot p_1(\zeta) + \alpha^2\cdot p_2(\zeta) + \cdots + \alpha^{n}\cdot p_{n}(\zeta) p ( ζ ) = p 0 ( ζ ) + α ⋅ p 1 ( ζ ) + α 2 ⋅ p 2 ( ζ ) + ⋯ + α n ⋅ p n ( ζ ) Verifier 计算 v H ( ζ ) , L 0 ( ζ ) , L N − 1 ( ζ ) v_H(\zeta), L_0(\zeta), L_{N-1}(\zeta) v H ( ζ ) , L 0 ( ζ ) , L N − 1 ( ζ ) v H ( ζ ) = ζ N − 1 v_H(\zeta) = \zeta^N - 1 v H ( ζ ) = ζ N − 1 L 0 ( ζ ) = 1 N ⋅ v H ( ζ ) ζ − 1 L_0(\zeta) = \frac{1}{N}\cdot \frac{v_{H}(\zeta)}{\zeta-1} L 0 ( ζ ) = N 1 ⋅ ζ − 1 v H ( ζ ) L N − 1 ( ζ ) = ω N − 1 N ⋅ v H ( ζ ) ζ − ω N − 1 L_{N-1}(\zeta) = \frac{\omega^{N-1}}{N}\cdot \frac{v_{H}(\zeta)}{\zeta-\omega^{N-1}} L N − 1 ( ζ ) = N ω N − 1 ⋅ ζ − ω N − 1 v H ( ζ ) Verifier 计算 h 0 ( ζ ) , h 1 ( ζ ) , h 2 ( ζ ) h_0(\zeta), h_1(\zeta), h_2(\zeta) h 0 ( ζ ) , h 1 ( ζ ) , h 2 ( ζ ) h 0 ( ζ ) = L 0 ( ζ ) ⋅ ( z ( ζ ) − c 0 ⋅ a ( ζ ) ) h 1 ( ζ ) = ( ζ − 1 ) ⋅ ( z ( ζ ) − z ( ω − 1 ⋅ ζ ) − a ( ζ ) ⋅ c ( ζ ) ) h 2 ( ζ ) = L N − 1 ( ζ ) ⋅ ( 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} h 0 ( ζ ) h 1 ( ζ ) h 2 ( ζ ) = L 0 ( ζ ) ⋅ ( z ( ζ ) − c 0 ⋅ a ( ζ ) ) = ( ζ − 1 ) ⋅ ( z ( ζ ) − z ( ω − 1 ⋅ ζ ) − a ( ζ ) ⋅ c ( ζ )) = L N − 1 ( ζ ) ⋅ ( z ( ζ ) − v ) Verifier 计算 h ( ζ ) h(\zeta) h ( ζ ) h ( ζ ) = p ( ζ ) + α n + 1 ⋅ h 0 ( ζ ) + α n + 2 ⋅ h 1 ( ζ ) + α n + 3 ⋅ h 2 ( ζ ) \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} h ( ζ ) = p ( ζ ) + α n + 1 ⋅ h 0 ( ζ ) + α n + 2 ⋅ h 1 ( ζ ) + α n + 3 ⋅ h 2 ( ζ ) Verifier 验证商多项式的正确性 h ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) h(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta) h ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) Verifier 验证 q ( X ) q(X) q ( X ) 的 low degree test 证明, F R I . L D T . v e r i f y ( π q , 2 n ) = ? 1 \mathsf{FRI.LDT.verify}(\pi_{q}, 2^n) \stackrel{?}{=} 1 FRI.LDT.verify ( π q , 2 n ) = ? 1 具体验证过程为,重复 l l l 次:
验证 a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , z ( s ( 0 ) ) , z ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) a(s^{(0)}), a(-s^{(0)},c(s^{(0)}),c(-s^{(0)}),z(s^{(0)}),z(-s^{(0)}),t(s^{(0)}),t(-s^{(0)}) a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , z ( s ( 0 ) ) , z ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) 的正确性 ,验证 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 Verifier 根据 a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , z ( s ( 0 ) ) , z ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) a(s^{(0)}), a(-s^{(0)},c(s^{(0)}),c(-s^{(0)}),z(s^{(0)}),z(-s^{(0)}),t(s^{(0)}),t(-s^{(0)}) a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , z ( s ( 0 ) ) , z ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) 这些值计算出 q ( 0 ) ( s ( 0 ) ) q^{(0)}(s^{(0)}) q ( 0 ) ( s ( 0 ) ) 与 q ( 0 ) ( − s ( 0 ) ) q^{(0)}(-s^{(0)}) q ( 0 ) ( − s ( 0 ) ) ,对于 x ∈ { s ( 0 ) , − s ( 0 ) } x \in \{s^{(0)}, -s^{(0)} \} x ∈ { s ( 0 ) , − s ( 0 ) } ,计算 q ′ ( x ) = a ( x ) − a ( ζ ) x − ζ + r ⋅ ( c ( x ) − c ( ζ ) x − ζ + c ( x ) − c ( ζ ⋅ ω ) x − ζ ⋅ ω + … + c ( x ) − c ( ζ ⋅ ω 2 n − 1 ) x − ζ ⋅ ω 2 n − 1 ) + r 2 ⋅ ( z ( x ) − z ( ζ ) x − ζ + z ( x ) − z ( ζ ⋅ ω − 1 ) x − ζ ⋅ ω − 1 ) + r 3 ⋅ t ( 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 ′ ( x ) = x − ζ a ( x ) − a ( ζ ) + r ⋅ ( x − ζ c ( x ) − c ( ζ ) + x − ζ ⋅ ω c ( x ) − c ( ζ ⋅ ω ) + … + x − ζ ⋅ ω 2 n − 1 c ( x ) − c ( ζ ⋅ ω 2 n − 1 ) ) + r 2 ⋅ ( x − ζ z ( x ) − z ( ζ ) + x − ζ ⋅ ω − 1 z ( x ) − z ( ζ ⋅ ω − 1 ) ) + r 3 ⋅ x − ζ t ( x ) − t ( ζ ) 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 − λ ⋅ 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 ( 1 ) ( s ( 1 ) ) , q ( 1 ) ( − s ( 1 ) ) q^{(1)}(s^{(1)}), q^{(1)}(-s^{(1)}) q ( 1 ) ( s ( 1 ) ) , q ( 1 ) ( − s ( 1 ) ) 的正确性 M T . v e r i f y ( c m ( 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 M T . v e r i f y ( c m ( 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 q ( 1 ) ( s ( 1 ) ) = ? q ( 0 ) ( s ( 0 ) ) + q ( 0 ) ( − s ( 0 ) ) 2 + α ( 1 ) ⋅ q ( 0 ) ( s ( 0 ) ) − q ( 0 ) ( − s ( 0 ) ) 2 ⋅ s ( 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)}} q ( 1 ) ( s ( 1 ) ) = ? 2 q ( 0 ) ( s ( 0 ) ) + q ( 0 ) ( − s ( 0 ) ) + α ( 1 ) ⋅ 2 ⋅ s ( 0 ) q ( 0 ) ( s ( 0 ) ) − q ( 0 ) ( − s ( 0 ) ) 对于 i = 2 , … , n − 1 i = 2, \ldots, n - 1 i = 2 , … , n − 1
验证 q ( i ) ( s ( i ) ) , q ( i ) ( − s ( i ) ) q^{(i)}(s^{(i)}), q^{(i)}(-s^{(i)}) q ( i ) ( s ( i ) ) , q ( i ) ( − s ( i ) ) 的正确性 M T . v e r i f y ( c m ( q ( i ) ( X ) ) , q ( i ) ( s ( i ) ) , π q ( i ) ( s ( i ) ) ) = ? 1 \mathsf{MT.verify}(\mathsf{cm}(q^{(i)}(X)), q^{(i)}(s^{(i)}), \pi_{q^{(i)}}(s^{(i)})) \stackrel{?}{=} 1 MT.verify ( cm ( q ( i ) ( X )) , q ( i ) ( s ( i ) ) , π q ( i ) ( s ( i ) )) = ? 1 M T . v e r i f y ( c m ( q ( i ) ( X ) ) , q ( i ) ( − s ( i ) ) , π q ( i ) ( − s ( i ) ) ) = ? 1 \mathsf{MT.verify}(\mathsf{cm}(q^{(i)}(X)), q^{(i)}(-s^{(i)}), \pi_{q^{(i)}}(-s^{(i)})) \stackrel{?}{=} 1 MT.verify ( cm ( q ( i ) ( X )) , q ( i ) ( − s ( i ) ) , π q ( i ) ( − s ( i ) )) = ? 1 验证第 i i i 轮的折叠是否正确
q ( i ) ( s ( i ) ) = ? q ( i − 1 ) ( s ( i − 1 ) ) + q ( i − 1 ) ( − s ( i − 1 ) ) 2 + α ( i ) ⋅ q ( i − 1 ) ( s ( i − 1 ) ) − q ( i − 1 ) ( − s ( i − 1 ) ) 2 ⋅ s ( i − 1 ) q^{(i)}(s^{(i)}) \stackrel{?}{=} \frac{q^{(i-1)}(s^{(i - 1)}) + q^{(i - 1)}(- s^{(i - 1)})}{2} + \alpha^{(i)} \cdot \frac{q^{(i - 1)}(s^{(i - 1)}) - q^{(i - 1)}(- s^{(i - 1)})}{2 \cdot s^{(i - 1)}} q ( i ) ( s ( i ) ) = ? 2 q ( i − 1 ) ( s ( i − 1 ) ) + q ( i − 1 ) ( − s ( i − 1 ) ) + α ( i ) ⋅ 2 ⋅ s ( i − 1 ) q ( i − 1 ) ( s ( i − 1 ) ) − q ( i − 1 ) ( − s ( i − 1 ) ) 验证最后是否折叠到常数多项式
q ( n ) ( x 0 ) = ? q ( n − 1 ) ( s ( n − 1 ) ) + q ( n − 1 ) ( − s ( n − 1 ) ) 2 + α ( n ) ⋅ q ( n − 1 ) ( s ( n − 1 ) ) − q ( n − 1 ) ( − s ( n − 1 ) ) 2 ⋅ s ( n − 1 ) q^{(n)}(x_0) \stackrel{?}{=} \frac{q^{(n-1)}(s^{(n - 1)}) + q^{(n - 1)}(- s^{(n - 1)})}{2} + \alpha^{(n)} \cdot \frac{q^{(n - 1)}(s^{(n - 1)}) - q^{(n - 1)}(- s^{(n - 1)})}{2 \cdot s^{(n - 1)}} q ( n ) ( x 0 ) = ? 2 q ( n − 1 ) ( s ( n − 1 ) ) + q ( n − 1 ) ( − s ( n − 1 ) ) + α ( n ) ⋅ 2 ⋅ s ( n − 1 ) q ( n − 1 ) ( s ( n − 1 ) ) − q ( n − 1 ) ( − s ( n − 1 ) ) 本文用 ph23 协议对接 FRI 协议来实现 MLE 多项式的 PCS,该协议的内积证明是通过 Grand Sum 实现的,其也能通过 Univariate Sumcheck ,在下一篇文章中将具体介绍这种协议,并与该协议进行对比。
References ¶ [PH23] Papini, Shahar, and Ulrich Haböck. “Improving logarithmic derivative lookups using GKR.” Cryptology ePrint Archive (2023). https:// eprint .iacr .org /2023 /1284 [H22] Haböck, Ulrich. “A summary on the FRI low degree test.” Cryptology ePrint Archive (2022). [BCIKS20] Eli Ben-Sasson, Dan Carmon, Yuval Ishai, Swastik Kopparty, and Shubhangi Saraf. Proximity Gaps for Reed–Solomon Codes. In Proceedings of the 61st Annual IEEE Symposium on Foundations of Computer Science , pages 900–909, 2020.