在上篇文章 缺失的协议 PH23-PCS(四) 中的 对接 FRI 这一小节回顾了 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 ) ) 在文章 缺失的协议 PH23-PCS(四) 介绍的协议中为了证明 2 的正确性,采用的是 Grand Sum 方法来证明。这里我们使用 Univariate Sumcheck 协议来证明内积。对 a ( X ) ⋅ c ( X ) a(X) \cdot c(X) a ( X ) ⋅ c ( X ) 进行分解
a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) , deg ( g ) < N − 1 a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N), \quad \deg(g)<N-1 a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) , deg ( g ) < N − 1 如果证明了上面的等式成立以及 deg ( g ) < N − 1 \deg (g) < N - 1 deg ( g ) < N − 1 ,也就证明了内积正确 ⟨ a ⃗ , c ⃗ ⟩ = v \langle \vec{a}, \vec{c} \rangle = v ⟨ a , c ⟩ = v 。
下面看看 Verifier 如何验证上面的多项式成立以及 deg ( g ) < N − 1 \deg (g) < N - 1 deg ( g ) < N − 1 。
证明 c ⃗ \vec{c} c 是 Well-Formedness。
先用 Verifier 给出的随机数 α 将 n + 1 n + 1 n + 1 个多项式 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 ) 现在需要说明 p ( X ) p(X) p ( X ) 在 H H H 上的取值都为 0 ,那么取 v H ( X ) v_H(X) v H ( X ) 为 H H H 上的 Vanishing 多项式,那么存在一个商多项式 t ( X ) t(X) t ( X ) ,满足
p ( X ) = t ( X ) ⋅ v H ( X ) p(X) = t(X) \cdot v_H(X) p ( X ) = t ( X ) ⋅ v H ( X ) 为了验证商多项式的存在性,Verifier 选取随机点 ζ ,Prover 发送
( c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , t ( ζ ) ) \big(c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), t(\zeta)\big) ( c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , t ( ζ ) ) Verifier 可以计算出 p ( ζ ) p(\zeta) p ( ζ ) ,自行计算出 v H ( ζ ) v_H(\zeta) v H ( ζ ) ,来验证
p ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) p(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta) p ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) 证明内积 ⟨ a ⃗ , c ⃗ ⟩ = v \langle \vec{a}, \vec{c} \rangle = v ⟨ a , c ⟩ = v 。
为了证明
a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) , deg ( g ) < N − 1 a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N), \quad \deg(g)<N-1 a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) , deg ( g ) < N − 1 可以采用同一个随机数 ζ ,Prover 再发送
( a ( ζ ) , q a c ( ζ ) , g ( ζ ) ) \big(a(\zeta), q_{ac}(\zeta), g(\zeta)\big) ( a ( ζ ) , q a c ( ζ ) , g ( ζ ) ) Verifier 验证
a ( ζ ) ⋅ c ( ζ ) = ? q a c ( ζ ) ⋅ v H ( ζ ) + ζ ⋅ g ( ζ ) + ( v / N ) a(\zeta)\cdot c(\zeta) \overset{?}{=} q_{ac}(\zeta)\cdot v_H(\zeta) + \zeta\cdot g(\zeta) + (v/N) a ( ζ ) ⋅ c ( ζ ) = ? q a c ( ζ ) ⋅ v H ( ζ ) + ζ ⋅ g ( ζ ) + ( v / N ) 同时需要证明 deg ( g ) < N − 1 \deg(g)<N-1 deg ( g ) < N − 1 ,这可以用 FRI 的 low degree test 来证明。
为了说明上面 Prover 发送的值正确,需要借助 FRI-PCS 来进行证明。为了结合 FRI 协议,这里先分析这些多项式的次数,由于 a ( X ) a(X) a ( X ) 与 c ( X ) c(X) c ( X ) 分别是通过 a ⃗ \vec{a} a 与 c ⃗ \vec{c} c 得到的,因此
deg ( a ( X ) ) = N − 1 , deg ( c ( X ) ) = N − 1 \deg(a(X)) = N - 1, \quad \deg(c(X)) = N - 1 deg ( a ( X )) = N − 1 , deg ( c ( X )) = N − 1 而
s i ( X ) = v H ( X ) v H i ( X ) = X N − 1 X 2 i − 1 s_i(X) = \frac{v_H(X)}{v_{H_i}(X)} = \frac{X^N-1}{X^{2^i}-1} s i ( X ) = v H i ( X ) v H ( X ) = X 2 i − 1 X N − 1 可知 deg ( s i ) = N − 2 i \deg(s_i) = N - 2^i deg ( s i ) = N − 2 i ,因此
deg ( p ( X ) ) = deg ( p 0 ( X ) ) = deg ( s 0 ( X ) ) + deg ( c ( X ) ) = N − 1 + N − 1 = 2 N − 2 \deg(p(X)) = \deg(p_0(X)) = \deg(s_0(X)) + \deg(c(X)) = N - 1+ N - 1 = 2N - 2 deg ( p ( X )) = deg ( p 0 ( X )) = deg ( s 0 ( X )) + deg ( c ( X )) = N − 1 + N − 1 = 2 N − 2 deg ( t ( X ) ) = deg ( p ( X ) ) − deg ( v H ( X ) ) = 2 N − 2 − N = N − 2 \deg(t(X)) = \deg(p(X)) - \deg(v_H(X)) = 2N - 2 - N = N - 2 deg ( t ( X )) = deg ( p ( X )) − deg ( v H ( X )) = 2 N − 2 − N = N − 2 根据 a ( X ) ⋅ c ( X ) a(X) \cdot c(X) a ( X ) ⋅ c ( X ) 的分解,可以得出
deg ( q a c ( X ) ) = deg ( a ( X ) ⋅ c ( X ) ) − deg ( v H ( X ) ) = 2 N − 2 − N = N − 2 \deg(q_{ac}(X)) = \deg(a(X) \cdot c(X)) - \deg(v_H(X)) = 2N - 2 - N = N - 2 deg ( q a c ( X )) = deg ( a ( X ) ⋅ c ( X )) − deg ( v H ( X )) = 2 N − 2 − N = N − 2 deg ( g ( X ) ) = N − 1 − 1 = N − 2 \deg(g(X)) = N - 1 - 1 = N - 2 deg ( g ( X )) = N − 1 − 1 = N − 2 为了只调用一次 FRI 的 low degree test ,先进行 degree correction,向 Verifier 要一个随机数 r ← $ F r \stackrel{\$}{\leftarrow} \mathbb{F} r ← $ F ,
t ′ ( X ) = t ( X ) + r ⋅ X ⋅ t ( X ) t'(X) = t(X) + r \cdot X \cdot t(X) t ′ ( X ) = t ( X ) + r ⋅ X ⋅ t ( X ) q a c ′ ( X ) = q a c ( X ) + r ⋅ X ⋅ q a c ( X ) q'_{ac}(X) = q_{ac}(X) + r \cdot X \cdot q_{ac}(X) q a c ′ ( X ) = q a c ( X ) + r ⋅ X ⋅ q a c ( X ) g ′ ( X ) = g ( X ) + r ⋅ X ⋅ g ( X ) g'(X) = g(X) + r \cdot X \cdot g(X) g ′ ( X ) = g ( X ) + r ⋅ X ⋅ g ( X ) 现在多项式 a ( X ) , c ( X ) , t ′ ( X ) , q a c ′ ( X ) , g ′ ( X ) a(X), c(X), t'(X), q'_{ac}(X), g'(X) a ( X ) , c ( X ) , t ′ ( X ) , q a c ′ ( X ) , g ′ ( X ) 的次数都为 N − 1 N - 1 N − 1 。Prover 发送的值有
( c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , t ( ζ ) , a ( ζ ) , q a c ( ζ ) , g ( ζ ) ) \big(c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), t(\zeta),a(\zeta), q_{ac}(\zeta), g(\zeta)\big) ( c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , t ( ζ ) , a ( ζ ) , q a c ( ζ ) , g ( ζ ) ) 为了证明上面发送的值是正确的,一个函数可能在多个点同时打开,依然采用与本文对接 FRI 小节介绍的构造商多项式的相同方法。
对于 a ( X ) a(X) 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 ( ζ ) 的次数小于 N − 1 N - 1 N − 1 。
对于 c ( X ) c(X) 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 ) 的次数小于 N − 1 N - 1 N − 1 。
对于 t ( X ) t(X) t ( X ) ,用 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 。
对于 q a c ( X ) q_{ac}(X) q a c ( X ) ,用 q a c ′ ( X ) q_{ac}'(X) q a c ′ ( X ) 的商多项式来证明,证明
q q a c ′ ( X ) = q a c ′ ( X ) − q a c ′ ( ζ ) X − ζ q_{q_{ac}'}(X) = \frac{q_{ac}'(X) - q_{ac}'(\zeta)}{X - \zeta} q q a c ′ ( X ) = X − ζ q a c ′ ( X ) − q a c ′ ( ζ ) 的次数小于 N − 1 N - 1 N − 1 。
对于 g ( X ) g(X) g ( X ) ,用 g ′ ( X ) g'(X) g ′ ( X ) 的商多项式来证明,证明
q g ′ ( X ) = g ′ ( X ) − g ′ ( ζ ) X − ζ q_{g'}(X) = \frac{g'(X) - g'(\zeta)}{X - \zeta} q g ′ ( X ) = X − ζ g ′ ( X ) − g ′ ( ζ ) 的次数小于 N − 1 N - 1 N − 1 。这里也就自然证明了 deg ( g ( X ) ) < N − 1 \deg(g(X)) < N - 1 deg ( g ( X )) < N − 1 。
接着用随机数 r r r 的幂次将上面 5 个 low degree test batch 成一个 low degree test 证明。令
q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q t ′ ( X ) + r 4 ⋅ q q a c ′ ( X ) + r 6 ⋅ q g ′ ( X ) q'(X) = q_a(X) + r \cdot q_c(X) + r^2 \cdot q_{t'}(X) + r^4 \cdot q_{q_{ac}'}(X) + r^6 \cdot q_{g'}(X) q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q t ′ ( X ) + r 4 ⋅ q q a c ′ ( X ) + r 6 ⋅ q g ′ ( X ) 注意,由于 t ′ ( X ) , q a c ′ ( X ) , g ′ ( X ) t'(X), q_{ac}'(X) , g'(X) t ′ ( X ) , q a c ′ ( X ) , g ′ ( X ) 多项式进行 degree correction 时已经用了随机数 r r r ,为了能用一个随机数的幂次达到多个随机数的效果,因此上面 batch 的幂次不是按自然数递增的,不是 ( 1 , r , r 2 , r 3 , r 4 ) (1, r, r^2, r^3, r^4) ( 1 , r , r 2 , r 3 , r 4 ) 而是 ( 1 , r , r 2 , r 4 , r 6 ) (1, r, r^2, r^4, r^6) ( 1 , r , r 2 , r 4 , r 6 ) 。
下面只需要用 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 。
PH23 + FRI 协议 ¶ 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 ]) 分解 a ( X ) ⋅ c ( X ) a(X) \cdot c(X) a ( X ) ⋅ c ( X ) ,计算得到 q a c ( X ) q_{ac}(X) q a c ( X ) 与 g ( X ) g(X) g ( X ) ,满足
a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N) a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) 计算 q a c ( X ) q_{ac}(X) q a c ( X ) 的承诺 C q a c C_{q_{ac}} C q a c ,并发送 C q a c C_{q_{ac}} C q a c
C q a c = c m ( [ q a c ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ q a c ( x ) ∣ x ∈ D ] ) C_{q_{ac}} = \mathsf{cm}([q_{ac}(x)|_{x \in D}]) = \mathsf{MT.commit}([q_{ac}(x)|_{x \in D}]) C q a c = cm ([ q a c ( x ) ∣ x ∈ D ]) = MT.commit ([ q a c ( x ) ∣ x ∈ D ]) 计算 g ( X ) g(X) g ( X ) 的承诺 C g C_g C g ,并发送 C g C_{g} C g
C g = c m ( [ g ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ g ( x ) ∣ x ∈ D ] ) C_{g} = \mathsf{cm}([g(x)|_{x \in D}]) = \mathsf{MT.commit}([g(x)|_{x \in D}]) C g = cm ([ g ( x ) ∣ x ∈ D ]) = MT.commit ([ g ( 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 ) 计算 Quotient 多项式 t ( X ) t(X) t ( X ) ,满足
p ( X ) = t ( X ) ⋅ v H ( X ) p(X) =t(X)\cdot v_H(X) p ( X ) = t ( X ) ⋅ v H ( X ) 计算 t ( X ) t(X) t ( X ) 的承诺 C t C_t C t ,并发送给 Verifier
C t = c m ( [ t ( x ) ∣ x ∈ D ] ) = M T . c o m m i t ( [ t ( x ) ∣ x ∈ D ] ) \begin{split}
C_t &= \mathsf{cm}([t(x)|_{x \in D}]) = \mathsf{MT.commit}([t(x)|_{x \in D}])
\end{split} C t = cm ([ t ( x ) ∣ x ∈ D ]) = MT.commit ([ t ( 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 ) 计算并发送 t ( ζ ) t(\zeta) t ( ζ )
计算并发送 a ( ζ ) a(\zeta) a ( ζ )
计算并发送 q a c ( ζ ) q_{ac}(\zeta) q a c ( ζ )
计算并发送 g ( ζ ) g(\zeta) g ( ζ )
Round 4 ¶ Verifier: 发送随机数 r ← $ F p r \stackrel{\$}{\leftarrow} \mathbb{F}_p r ← $ F p
Prover:
进行 degree correction ,计算多项式 t ′ ( X ) , q a c ′ ( X ) , g ′ ( X ) t'(X), q'_{ac}(X), g'(X) t ′ ( X ) , q a c ′ ( X ) , g ′ ( X )
t ′ ( X ) = t ( X ) + r ⋅ X ⋅ t ( X ) t'(X) = t(X) + r \cdot X \cdot t(X) t ′ ( X ) = t ( X ) + r ⋅ X ⋅ t ( X ) q a c ′ ( X ) = q a c ( X ) + r ⋅ X ⋅ q a c ( X ) q'_{ac}(X) = q_{ac}(X) + r \cdot X \cdot q_{ac}(X) q a c ′ ( X ) = q a c ( X ) + r ⋅ X ⋅ q a c ( X ) g ′ ( X ) = g ( X ) + r ⋅ X ⋅ g ( X ) g'(X) = g(X) + r \cdot X \cdot g(X) g ′ ( X ) = g ( X ) + r ⋅ X ⋅ g ( X ) 计算商多项式 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 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 ′ ( ζ ) 计算商多项式 q q a c ′ ( X ) q_{q_{ac}'}(X) q q a c ′ ( X )
q q a c ′ ( X ) = q a c ′ ( X ) − q a c ′ ( ζ ) X − ζ q_{q_{ac}'}(X) = \frac{q_{ac}'(X) - q_{ac}'(\zeta)}{X - \zeta} q q a c ′ ( X ) = X − ζ q a c ′ ( X ) − q a c ′ ( ζ ) 计算商多项式 q g ′ ( X ) q_{g'}(X) q g ′ ( X )
q g ′ ( X ) = g ′ ( X ) − g ′ ( ζ ) X − ζ q_{g'}(X) = \frac{g'(X) - g'(\zeta)}{X - \zeta} q g ′ ( X ) = X − ζ g ′ ( X ) − g ′ ( ζ ) 将上面的 5 个商多项式用随机数 r r r 的幂次 batch 成一个多项式
q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q t ′ ( X ) + r 4 ⋅ q q a c ′ ( X ) + r 6 ⋅ q g ′ ( X ) q'(X) = q_a(X) + r \cdot q_c(X) + r^2 \cdot q_{t'}(X) + r^4 \cdot q_{q_{ac}'}(X) + r^6 \cdot q_{g'}(X) q ′ ( X ) = q a ( X ) + r ⋅ q c ( X ) + r 2 ⋅ q t ′ ( X ) + r 4 ⋅ q q a c ′ ( X ) + r 6 ⋅ q g ′ ( 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 满足 y 2 = x y^2 = x y 2 = x ,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 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , g ( − s ( 0 ) ) a(s^{(0)}), a(-s^{(0)},c(s^{(0)}),c(-s^{(0)}),t(s^{(0)}),t(-s^{(0)}),q_{ac}(s^{(0)}),q_{ac}(-s^{(0)}),g(s^{(0)}),g(-s^{(0)}) a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , g ( − 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 ) ) ( 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 ) ) ( q a c ( s ( 0 ) ) , π q a c ( s ( 0 ) ) ) ← M T . o p e n ( [ q a c ( x ) ∣ x ∈ D 0 ] , s ( 0 ) ) (q_{ac}(s^{(0)}), \pi_{q_{ac}}(s^{(0)})) \leftarrow \mathsf{MT.open}([q_{ac}(x)|_{x \in D_0}], s^{(0)}) ( q a c ( s ( 0 ) ) , π q a c ( s ( 0 ) )) ← MT.open ([ q a c ( x ) ∣ x ∈ D 0 ] , s ( 0 ) ) ( q a c ( − s ( 0 ) ) , π q a c ( − s ( 0 ) ) ) ← M T . o p e n ( [ q a c ( x ) ∣ x ∈ D 0 ] , − s ( 0 ) ) (q_{ac}(-s^{(0)}), \pi_{q_{ac}}(-s^{(0)})) \leftarrow \mathsf{MT.open}([q_{ac}(x)|_{x \in D_0}], -s^{(0)}) ( q a c ( − s ( 0 ) ) , π q a c ( − s ( 0 ) )) ← MT.open ([ q a c ( x ) ∣ x ∈ D 0 ] , − s ( 0 ) ) ( g ( s ( 0 ) ) , π g ( s ( 0 ) ) ) ← M T . o p e n ( [ g ( x ) ∣ x ∈ D 0 ] , s ( 0 ) ) (g(s^{(0)}), \pi_{g}(s^{(0)})) \leftarrow \mathsf{MT.open}([g(x)|_{x \in D_0}], s^{(0)}) ( g ( s ( 0 ) ) , π g ( s ( 0 ) )) ← MT.open ([ g ( x ) ∣ x ∈ D 0 ] , s ( 0 ) ) ( g ( − s ( 0 ) ) , π g ( − s ( 0 ) ) ) ← M T . o p e n ( [ g ( x ) ∣ x ∈ D 0 ] , − s ( 0 ) ) (g(-s^{(0)}), \pi_{g}(-s^{(0)})) \leftarrow \mathsf{MT.open}([g(x)|_{x \in D_0}], -s^{(0)}) ( g ( − s ( 0 ) ) , π g ( − s ( 0 ) )) ← MT.open ([ g ( 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 q a c , C g , C t , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , t ( ζ ) , a ( ζ ) , q a c ( ζ ) , g ( ζ ) , π q ) \pi = (C_c,C_{q_{ac}}, C_g, C_t, c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), t(\zeta), a(\zeta), q_{ac}(\zeta), g(\zeta), \pi_{q}) π = ( C c , C q a c , C g , C t , c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , t ( ζ ) , a ( ζ ) , q a c ( ζ ) , g ( ζ ) , π 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 ) ) , t ( s ( 0 ) ) , π t ( s ( 0 ) ) , t ( − s ( 0 ) ) , π t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , π q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , π q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , π g ( s ( 0 ) ) , g ( − s ( 0 ) ) , π g ( − 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 t(s^{(0)}), \pi_{t}(s^{(0)}), t(- s^{(0)}), \pi_{t}(-s^{(0)}), \\
& \quad q_{ac}(s^{(0)}), \pi_{q_{ac}}(s^{(0)}), q_{ac}(- s^{(0)}), \pi_{q_{ac}}(-s^{(0)}), \\
& \quad g(s^{(0)}), \pi_{g}(s^{(0)}), g(- s^{(0)}), \pi_{g}(-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 ) ) , t ( s ( 0 ) ) , π t ( s ( 0 ) ) , t ( − s ( 0 ) ) , π t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , π q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , π q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , π g ( s ( 0 ) ) , g ( − s ( 0 ) ) , π g ( − 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 ( ζ ) v_H(\zeta) v H ( ζ )
v H ( ζ ) = ζ N − 1 v_H(\zeta) = \zeta^N - 1 v H ( ζ ) = ζ N − 1 Verifier 验证商多项式的正确性
p ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) p(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta) p ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) Verifier 验证内积的正确性
a ( ζ ) ⋅ c ( ζ ) = ? q a c ( ζ ) ⋅ v H ( ζ ) + ζ ⋅ g ( ζ ) + ( v / N ) a(\zeta)\cdot c(\zeta) \overset{?}{=} q_{ac}(\zeta)\cdot v_H(\zeta) + \zeta\cdot g(\zeta) + (v/N) a ( ζ ) ⋅ c ( ζ ) = ? q a c ( ζ ) ⋅ v H ( ζ ) + ζ ⋅ g ( ζ ) + ( v / N ) 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 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , g ( − s ( 0 ) ) a(s^{(0)}), a(-s^{(0)},c(s^{(0)}),c(-s^{(0)}),t(s^{(0)}),t(-s^{(0)}),q_{ac}(s^{(0)}),q_{ac}(-s^{(0)}),g(s^{(0)}),g(-s^{(0)}) a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , g ( − 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 ( 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 M T . v e r i f y ( c m ( q a c ( X ) ) , q a c ( s ( 0 ) ) , π q a c ( s ( 0 ) ) ) = ? 1 \mathsf{MT.verify}(\mathsf{cm}(q_{ac}(X)), q_{ac}(s^{(0)}), \pi_{q_{ac}}(s^{(0)})) \stackrel{?}{=} 1 MT.verify ( cm ( q a c ( X )) , q a c ( s ( 0 ) ) , π q a c ( s ( 0 ) )) = ? 1 M T . v e r i f y ( c m ( q a c ( X ) ) , q a c ( − s ( 0 ) ) , π q a c ( − s ( 0 ) ) ) = ? 1 \mathsf{MT.verify}(\mathsf{cm}(q_{ac}(X)), q_{ac}(-s^{(0)}), \pi_{q_{ac}}(-s^{(0)})) \stackrel{?}{=} 1 MT.verify ( cm ( q a c ( X )) , q a c ( − s ( 0 ) ) , π q a c ( − s ( 0 ) )) = ? 1 M T . v e r i f y ( c m ( g ( X ) ) , g ( s ( 0 ) ) , π g ( s ( 0 ) ) ) = ? 1 \mathsf{MT.verify}(\mathsf{cm}(g(X)), g(s^{(0)}), \pi_{g}(s^{(0)})) \stackrel{?}{=} 1 MT.verify ( cm ( g ( X )) , g ( s ( 0 ) ) , π g ( s ( 0 ) )) = ? 1 M T . v e r i f y ( c m ( g ( X ) ) , g ( − s ( 0 ) ) , π g ( − s ( 0 ) ) ) = ? 1 \mathsf{MT.verify}(\mathsf{cm}(g(X)), g(-s^{(0)}), \pi_{g}(-s^{(0)})) \stackrel{?}{=} 1 MT.verify ( cm ( g ( X )) , g ( − s ( 0 ) ) , π g ( − s ( 0 ) )) = ? 1 Verifier 计算出 t ′ ( s ( 0 ) ) , t ′ ( − s ( 0 ) ) , q a c ′ ( s ( 0 ) ) , q a c ′ ( − s ( 0 ) ) , g ′ ( s ( 0 ) ) , g ′ ( − s ( 0 ) ) t'(s^{(0)}), t'(-s^{(0)}), q'_{ac}(s^{(0)}), q'_{ac}(-s^{(0)}), g'(s^{(0)}), g'(-s^{(0)}) t ′ ( s ( 0 ) ) , t ′ ( − s ( 0 ) ) , q a c ′ ( s ( 0 ) ) , q a c ′ ( − s ( 0 ) ) , g ′ ( s ( 0 ) ) , g ′ ( − s ( 0 ) ) 以及 t ′ ( ζ ) , q a c ′ ( ζ ) , g ′ ( ζ ) t'(\zeta), q'_{ac}(\zeta), g'(\zeta) t ′ ( ζ ) , q a c ′ ( ζ ) , g ′ ( ζ ) t ′ ( s ( 0 ) ) = t ( s ( 0 ) ) + r ⋅ s ( 0 ) ⋅ t ( s ( 0 ) ) , t ′ ( − s ( 0 ) ) = t ( − s ( 0 ) ) + r ⋅ ( − s ( 0 ) ) ⋅ t ( − s ( 0 ) ) t'(s^{(0)}) = t(s^{(0)}) + r \cdot s^{(0)} \cdot t(s^{(0)}), \qquad t'(-s^{(0)}) = t(-s^{(0)}) + r \cdot (-s^{(0)}) \cdot t(-s^{(0)}) t ′ ( s ( 0 ) ) = t ( s ( 0 ) ) + r ⋅ s ( 0 ) ⋅ t ( s ( 0 ) ) , t ′ ( − s ( 0 ) ) = t ( − s ( 0 ) ) + r ⋅ ( − s ( 0 ) ) ⋅ t ( − s ( 0 ) ) q a c ′ ( s ( 0 ) ) = q a c ( s ( 0 ) ) + r ⋅ s ( 0 ) ⋅ q a c ( s ( 0 ) ) , q a c ′ ( − s ( 0 ) ) = q a c ( − s ( 0 ) ) + r ⋅ ( − s ( 0 ) ) ⋅ q a c ( − s ( 0 ) ) q_{ac}'(s^{(0)}) = q_{ac}(s^{(0)}) + r \cdot s^{(0)} \cdot q_{ac}(s^{(0)}), \qquad q_{ac}'(-s^{(0)}) = q_{ac}(-s^{(0)}) + r \cdot (-s^{(0)}) \cdot q_{ac}(-s^{(0)}) q a c ′ ( s ( 0 ) ) = q a c ( s ( 0 ) ) + r ⋅ s ( 0 ) ⋅ q a c ( s ( 0 ) ) , q a c ′ ( − s ( 0 ) ) = q a c ( − s ( 0 ) ) + r ⋅ ( − s ( 0 ) ) ⋅ q a c ( − s ( 0 ) ) g ′ ( s ( 0 ) ) = g ( s ( 0 ) ) + r ⋅ s ( 0 ) ⋅ g ( s ( 0 ) ) , g ′ ( − s ( 0 ) ) = g ( − s ( 0 ) ) + r ⋅ ( − s ( 0 ) ) ⋅ g ( − s ( 0 ) ) g'(s^{(0)}) = g(s^{(0)}) + r \cdot s^{(0)} \cdot g(s^{(0)}), \qquad g'(-s^{(0)}) = g(-s^{(0)}) + r \cdot (-s^{(0)}) \cdot g(-s^{(0)}) g ′ ( s ( 0 ) ) = g ( s ( 0 ) ) + r ⋅ s ( 0 ) ⋅ g ( s ( 0 ) ) , g ′ ( − s ( 0 ) ) = g ( − s ( 0 ) ) + r ⋅ ( − s ( 0 ) ) ⋅ g ( − s ( 0 ) ) t ′ ( ζ ) = t ( ζ ) + r ⋅ ζ ⋅ t ( ζ ) t'(\zeta) = t(\zeta) + r \cdot \zeta \cdot t(\zeta) t ′ ( ζ ) = t ( ζ ) + r ⋅ ζ ⋅ t ( ζ ) q a c ′ ( ζ ) = q a c ( ζ ) + r ⋅ ζ ⋅ q a c ( ζ ) q_{ac}'(\zeta) = q_{ac}(\zeta) + r \cdot \zeta \cdot q_{ac}(\zeta) q a c ′ ( ζ ) = q a c ( ζ ) + r ⋅ ζ ⋅ q a c ( ζ ) g ′ ( ζ ) = g ( ζ ) + r ⋅ ζ ⋅ g ( ζ ) g'(\zeta) = g(\zeta) + r \cdot \zeta \cdot g(\zeta) g ′ ( ζ ) = g ( ζ ) + r ⋅ ζ ⋅ g ( ζ ) Verifier 根据 a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , g ( − s ( 0 ) ) a(s^{(0)}), a(-s^{(0)},c(s^{(0)}),c(-s^{(0)}),t(s^{(0)}),t(-s^{(0)}),q_{ac}(s^{(0)}),q_{ac}(-s^{(0)}),g(s^{(0)}),g(-s^{(0)}) a ( s ( 0 ) ) , a ( − s ( 0 ) , c ( s ( 0 ) ) , c ( − s ( 0 ) ) , t ( s ( 0 ) ) , t ( − s ( 0 ) ) , q a c ( s ( 0 ) ) , q a c ( − s ( 0 ) ) , g ( s ( 0 ) ) , g ( − s ( 0 ) ) 这些值计算出 q ′ ( s ( 0 ) ) q'(s^{(0)}) q ′ ( s ( 0 ) ) 与 q ′ ( − s ( 0 ) ) q'(-s^{(0)}) q ′ ( − s ( 0 ) ) ,计算 q ′ ( s ( 0 ) ) = a ( s ( 0 ) ) − a ( ζ ) s ( 0 ) − ζ + r ⋅ ( c ( s ( 0 ) ) − c ( ζ ) s ( 0 ) − ζ + c ( s ( 0 ) ) − c ( ζ ⋅ ω ) s ( 0 ) − ζ ⋅ ω + … + c ( s ( 0 ) ) − c ( ζ ⋅ ω 2 n − 1 ) s ( 0 ) − ζ ⋅ ω 2 n − 1 ) + r 2 ⋅ t ′ ( s ( 0 ) ) − t ′ ( ζ ) s ( 0 ) − ζ + r 4 ⋅ q a c ′ ( s ( 0 ) ) − q a c ′ ( ζ ) s ( 0 ) − ζ + r 6 ⋅ g ′ ( s ( 0 ) ) − g ′ ( ζ ) s ( 0 ) − ζ \begin{align}
q'(s^{(0)}) & = \frac{a(s^{(0)}) - a(\zeta)}{s^{(0)} - \zeta} + r \cdot \left( \frac{c(s^{(0)}) - c(\zeta)}{s^{(0)} - \zeta} + \frac{c(s^{(0)}) - c(\zeta \cdot \omega)}{s^{(0)} - \zeta \cdot \omega} + \ldots + \frac{c(s^{(0)}) - c(\zeta \cdot \omega^{2^{n-1}})}{s^{(0)} - \zeta \cdot \omega^{2^{n-1}}}\right) \\ \\
& \qquad + r^2 \cdot \frac{t'(s^{(0)}) - t'(\zeta)}{s^{(0)} - \zeta} + r^4 \cdot \frac{q_{ac}'(s^{(0)}) - q_{ac}'(\zeta)}{s^{(0)} - \zeta} + r^6 \cdot \frac{g'(s^{(0)}) - g'(\zeta)}{s^{(0)} - \zeta}
\end{align} q ′ ( s ( 0 ) ) = s ( 0 ) − ζ a ( s ( 0 ) ) − a ( ζ ) + r ⋅ ( s ( 0 ) − ζ c ( s ( 0 ) ) − c ( ζ ) + s ( 0 ) − ζ ⋅ ω c ( s ( 0 ) ) − c ( ζ ⋅ ω ) + … + s ( 0 ) − ζ ⋅ ω 2 n − 1 c ( s ( 0 ) ) − c ( ζ ⋅ ω 2 n − 1 ) ) + r 2 ⋅ s ( 0 ) − ζ t ′ ( s ( 0 ) ) − t ′ ( ζ ) + r 4 ⋅ s ( 0 ) − ζ q a c ′ ( s ( 0 ) ) − q a c ′ ( ζ ) + r 6 ⋅ s ( 0 ) − ζ g ′ ( s ( 0 ) ) − g ′ ( ζ ) q ′ ( − s ( 0 ) ) = a ( − s ( 0 ) ) − a ( ζ ) − s ( 0 ) − ζ + r ⋅ ( c ( − s ( 0 ) ) − c ( ζ ) − s ( 0 ) − ζ + c ( − s ( 0 ) ) − c ( ζ ⋅ ω ) − s ( 0 ) − ζ ⋅ ω + … + c ( − s ( 0 ) ) − c ( ζ ⋅ ω 2 n − 1 ) − s ( 0 ) − ζ ⋅ ω 2 n − 1 ) + r 2 ⋅ t ′ ( − s ( 0 ) ) − t ′ ( ζ ) − s ( 0 ) − ζ + r 4 ⋅ q a c ′ ( − s ( 0 ) ) − q a c ′ ( ζ ) − s ( 0 ) − ζ + r 6 ⋅ g ′ ( − s ( 0 ) ) − g ′ ( ζ ) − s ( 0 ) − ζ \begin{align}
q'(-s^{(0)}) & = \frac{a(-s^{(0)}) - a(\zeta)}{-s^{(0)} - \zeta} + r \cdot \left( \frac{c(-s^{(0)}) - c(\zeta)}{-s^{(0)} - \zeta} + \frac{c(-s^{(0)}) - c(\zeta \cdot \omega)}{-s^{(0)} - \zeta \cdot \omega} + \ldots + \frac{c(-s^{(0)}) - c(\zeta \cdot \omega^{2^{n-1}})}{-s^{(0)} - \zeta \cdot \omega^{2^{n-1}}}\right) \\ \\
& \qquad + r^2 \cdot \frac{t'(-s^{(0)}) - t'(\zeta)}{-s^{(0)} - \zeta} + r^4 \cdot \frac{q_{ac}'(-s^{(0)}) - q_{ac}'(\zeta)}{-s^{(0)} - \zeta} + r^6 \cdot \frac{g'(-s^{(0)}) - g'(\zeta)}{-s^{(0)} - \zeta}
\end{align} q ′ ( − s ( 0 ) ) = − s ( 0 ) − ζ a ( − s ( 0 ) ) − a ( ζ ) + r ⋅ ( − s ( 0 ) − ζ c ( − s ( 0 ) ) − c ( ζ ) + − s ( 0 ) − ζ ⋅ ω c ( − s ( 0 ) ) − c ( ζ ⋅ ω ) + … + − s ( 0 ) − ζ ⋅ ω 2 n − 1 c ( − s ( 0 ) ) − c ( ζ ⋅ ω 2 n − 1 ) ) + r 2 ⋅ − s ( 0 ) − ζ t ′ ( − s ( 0 ) ) − t ′ ( ζ ) + r 4 ⋅ − s ( 0 ) − ζ q a c ′ ( − s ( 0 ) ) − q a c ′ ( ζ ) + r 6 ⋅ − s ( 0 ) − ζ g ′ ( − s ( 0 ) ) − g ′ ( ζ ) 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 ) ) 两种对接 FRI 协议的比较 ¶ 对比 缺失的协议 PH23-PCS(四) 和本文的协议,两种协议的不同点是由证明内积的方式不同导致的,用协议 1 表示文章 缺失的协议 PH23-PCS(四) 中的协议,证明内积使用的是 Grand Sum 方法,需要计算类和的多项式 z ( X ) z(X) z ( X ) ,并用三个多项式在 H H H 上都需要为 0 来约束 z ( X ) z(X) z ( X ) 构造的正确性,即
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 ) 用协议 2 表示本文的协议,协议 2 证明内积使用的是 Univariate Sumcheck 方法,需要对 a ( X ) ⋅ c ( X ) a(X) \cdot c(X) a ( X ) ⋅ c ( X ) 进行分解,得到 q a c ( X ) q_{ac}(X) q a c ( X ) 与 g ( X ) g(X) g ( X ) ,
a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) , deg ( g ) < N − 1 a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N), \quad \deg(g)<N-1 a ( X ) ⋅ c ( X ) = q a c ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + ( v / N ) , deg ( g ) < N − 1 下面根据这两个协议的不同之处对比下它们之间的计算复杂度。
Prover 计算量:
协议 1 需要额外计算的有
计算 z ( X ) , h 0 ( X ) , h 1 ( X ) , h 2 ( X ) z(X), h_0(X), h_1(X), h_2(X) z ( X ) , h 0 ( X ) , h 1 ( X ) , h 2 ( X ) 计算承诺 C z C_z C z 计算 z ( ζ ) , z ( ω − 1 ⋅ ζ ) z(\zeta), z(\omega^{-1} \cdot \zeta) z ( ζ ) , z ( ω − 1 ⋅ ζ ) 计算 q z ( X ) q_z(X) q z ( X ) 协议 2 需要额外计算的有
分解 a ( X ) ⋅ c ( X ) a(X) \cdot c(X) a ( X ) ⋅ c ( X ) 得到 q a c ( X ) q_{ac}(X) q a c ( X ) 与 g ( X ) g(X) g ( X ) 计算承诺 C q a c , C g C_{q_{ac}}, C_{g} C q a c , C g 计算 q a c ( ζ ) , g ( ζ ) q_{ac}(\zeta), g(\zeta) q a c ( ζ ) , g ( ζ ) 进行 degree correction,计算 t ′ ( X ) , q a c ′ ( X ) , g ′ ( X ) t'(X), q'_{ac}(X), g'(X) t ′ ( X ) , q a c ′ ( X ) , g ′ ( X ) 计算 q q a c ′ ( X ) , q g ′ ( X ) q_{q'_{ac}}(X), q_{g'}(X) q q a c ′ ( X ) , q g ′ ( X ) 通过对比可以发现,复杂度涉及多项式的计算方法,但整体上两个协议在 Prover 计算量上差别不是特别大。
Proof 大小:
协议 2 需要额外发送的证明有:多一个多项式的承诺,C g C_g C g FRI 的 query 阶段,重复 l l l 次,多发送两个点的值与其 Merkle Path 作为证明 通过对比可以发现协议 2 的 proof size 更大,需要额外发送一些哈希值和有限域上的值,且该数量是和重复次数 l l l 相关的。
Verifier 计算量:
协议 1 需要额外计算的有计算 L 0 ( ζ ) , L N − 1 ( ζ ) L_0(\zeta), L_{N-1}(\zeta) L 0 ( ζ ) , L N − 1 ( ζ ) 计算 h 0 ( ζ ) , h 1 ( ζ ) , h 2 ( ζ ) h_0(\zeta), h_1(\zeta), h_2(\zeta) h 0 ( ζ ) , h 1 ( ζ ) , h 2 ( ζ )
协议 1 额外计算的复杂度为 2 F i n v + 9 F m u l 2 ~ \mathbb{F}_{\mathsf{inv}} + 9 ~\mathbb{F}_{\mathsf{mul}} 2 F inv + 9 F mul 。 协议 2 需要额外计算的有验证 a ( ζ ) ⋅ c ( ζ ) = ? q a c ( ζ ) ⋅ v H ( ζ ) + ζ ⋅ g ( ζ ) + ( v / N ) a(\zeta)\cdot c(\zeta) \overset{?}{=} q_{ac}(\zeta)\cdot v_H(\zeta) + \zeta\cdot g(\zeta) + (v/N) a ( ζ ) ⋅ c ( ζ ) = ? q a c ( ζ ) ⋅ v H ( ζ ) + ζ ⋅ g ( ζ ) + ( v / N ) 重复 l l l 次:多 2 个打开点的验证,如验证 g ( s ( 0 ) ) , g ( − s ( 0 ) ) g(s^{(0)}), g(-s^{(0)}) g ( s ( 0 ) ) , g ( − s ( 0 ) ) 发送的是否正确,这里涉及一些哈希计算 重复 l l l 次:多计算 degree correction 后的多项式在对应点的值,对于 x ∈ { s ( 0 ) , − s ( 0 ) , ζ } x \in \{s^{(0)}, -s^{(0)}, \zeta\} x ∈ { s ( 0 ) , − s ( 0 ) , ζ } ,根据 t ( x ) , g ( x ) , q a c ( x ) t(x), g(x), q_{ac}(x) t ( x ) , g ( x ) , q a c ( x ) 来计算对应的 t ′ ( x ) , g ′ ( x ) , q a c ′ ( x ) t'(x), g'(x), q_{ac}'(x) t ′ ( x ) , g ′ ( x ) , q a c ′ ( x ) ,这里计算一个值的复杂度是 2 F m u l 2 ~ \mathbb{F}_{\mathsf{mul}} 2 F mul ,因此这里总的复杂度是 18 l F m u l 18l ~ \mathbb{F}_{\mathsf{mul}} 18 l F mul 。 通过对比可以发现协议 1 的 Verifier 计算量要优于协议 2。
综合来看,由于协议 2 中对接 FRI 协议时,需要处理的多项式有 5 个,分别是 a ( X ) , c ( X ) , t ( X ) , q a c ( X ) , g ( X ) a(X),c(X),t(X),q_{ac}(X),g(X) a ( X ) , c ( X ) , t ( X ) , q a c ( X ) , g ( X ) ,这相比协议 1 多了 1 个多项式,同时这 5 个多项式中的次数不统一,需要将 t ( X ) , q a c ( X ) , g ( X ) t(X),q_{ac}(X),g(X) t ( X ) , q a c ( X ) , g ( X ) 这几个多项式进行 degree correction 提升到 N − 1 N - 1 N − 1 次。由于协议开始承诺的是原多项式 a ( X ) , c ( X ) , t ( X ) , q a c ( X ) , g ( X ) a(X),c(X),t(X),q_{ac}(X),g(X) a ( X ) , c ( X ) , t ( X ) , q a c ( X ) , g ( X ) ,相比协议 1 多承诺的 1 个多项式以及进行 degree correction 的操作,就会导致在后续在进行 FRI low degree test 时增加复杂度。
在 query 阶段,协议 2 就需要多发送一个多项式对应查询点的证明,而这需要重复 l l l 次,这就导致了 proof size 的增加,另一方面,在 verifier 验证阶段,verifier 不仅要多对发过来的查询点的证明进行验证,同时需要自己计算 degree correction 之后的函数在查询点的值,这也是和 l l l 相关的,导致了 verifier 计算复杂度的增加。
通过上述分析能发现,对接 FRI 协议的复杂度是和需要处理的多项式的个数以及打开点的个数相关的。协议 2 中要处理的多项式更多,因此整体证明大小和 Verifier 计算复杂度也会比协议 1 高。
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.