Virgo 是一个基于 GKR 协议的 zkSNARK 证明系统,与 Libra 不同的是,Virgo 采用了不同的多项式承诺方案,或者论文中称之为 zkVPD -- Verifiable Polynomial Delegation。Virgo-zkVPD 基于源自 STARK 系统的 FRI (Fast Reed-Solomon IOP) 协议,因此是一个不需要可信预设置(Trusted Setup)的证明系统。其安全假设基于信息论与 Hash 函数的抗碰撞的安全假设。
本文介绍 Virgo-PCS 的协议原理和原论文有一些不同的地方。原论文中的 PCS 系统支持任意的多元多项式,而本文仅考虑 MLE 多项式。
1. 协议原理 ¶ 对于任意的 MLE 多项式,f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) \tilde{f}(X_0, X_1, \cdots, X_{n-1}) f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) ,其可以表示为下面的系数形式(或 Monomial 形式):
f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) = ∑ i = 0 2 n − 1 c i ⋅ X 0 i 0 X 1 i 1 ⋯ X n − 1 i n − 1 \tilde{f}(X_0, X_1, \cdots, X_{n-1}) = \sum_{i=0}^{2^{n}-1} c_i\cdot X_0^{i_0}X_1^{i_1}\cdots{}X_{n-1}^{i_{n-1}} f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) = i = 0 ∑ 2 n − 1 c i ⋅ X 0 i 0 X 1 i 1 ⋯ X n − 1 i n − 1 其中,c ⃗ = ( c 0 , c 1 , ⋯ , c 2 n − 1 ) \vec{c}=(c_0, c_1, \cdots, c_{2^n-1}) c = ( c 0 , c 1 , ⋯ , c 2 n − 1 ) 是系数向量,b i t s ( i ) = ( i 0 , i 1 , ⋯ , i n − 1 ) \mathsf{bits}(i)=(i_0, i_1, \cdots, i_{n-1}) bits ( i ) = ( i 0 , i 1 , ⋯ , i n − 1 ) 是 i i i 的二进制表示(Little Endian)。
那么如果我们考虑如何证明该多项式在一个给定点 u ⃗ = ( u 0 , u 1 , ⋯ , u n − 1 ) \vec{u}=(u_0, u_1, \cdots, u_{n-1}) u = ( u 0 , u 1 , ⋯ , u n − 1 ) 的运算取值,即 f ~ ( u ⃗ ) = v \tilde{f}(\vec{u})=v f ~ ( u ) = v ,那么我们只需要证明下面的「求和式」即可:
∑ i = 0 2 n − 1 c i ⋅ u 0 i 0 u 1 i 1 ⋯ u n − 1 i n − 1 = v \sum_{i=0}^{2^n - 1} c_i\cdot u_0^{i_0}u_1^{i_1}\cdots{}u_{n-1}^{i_{n-1}} = v i = 0 ∑ 2 n − 1 c i ⋅ u 0 i 0 u 1 i 1 ⋯ u n − 1 i n − 1 = v Virgo-PCS 的思路与 PH23-PCS 类似,采用一个 Univariate Sumcheck 协议来证明上面的求和式。即 Prover 先承诺 c ⃗ \vec{c} c ,然后通过下面的 Univariate Sumcheck 公式来证明:
c ( X ) ⋅ m ( X ) = h ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + v N c(X)\cdot{}m(X) = h(X)\cdot v_{\mathbb{H}}(X) + X\cdot g(X) + \frac{v}{N} c ( X ) ⋅ m ( X ) = h ( X ) ⋅ v H ( X ) + X ⋅ g ( X ) + N v 其中 H \mathbb{H} H 是有限域 F p \mathbb{F}_{p} F p 中的一个乘法子群,其大小为 N = ∣ H ∣ = 2 n N = |\mathbb{H}| = 2^n N = ∣ H ∣ = 2 n ,而 v H = ∏ x ∈ H ( X − x ) v_{\mathbb{H}}= \prod_{x \in \mathbb{H}}(X - x) v H = ∏ x ∈ H ( X − x ) 是 H \mathbb{H} H 中的 vaishing polynomial。这里的 m ( X ) m(X) m ( X ) 编码了 m ⃗ = ( m 0 , m 1 , ⋯ , m 2 n − 1 ) \vec{m}=(m_0, m_1, \cdots, m_{2^n-1}) m = ( m 0 , m 1 , ⋯ , m 2 n − 1 ) 向量:
m i = u 0 i 0 u 1 i 1 ⋯ u n − 1 i n − 1 m_i = u_0^{i_0}u_1^{i_1}\cdots{}u_{n-1}^{i_{n-1}} m i = u 0 i 0 u 1 i 1 ⋯ u n − 1 i n − 1 然后 Prover 计算 h ( X ) h(X) h ( X ) 的 FRI 承诺,并发送给 Verifier。然后 Prover 和 Verifier 通过 FRI 协议来证明下面的 Low Degree 商多项式 g ( X ) g(X) g ( X ) 的存在性:
g ( X ) = N ⋅ c ( X ) ⋅ m ( X ) − N ⋅ h ( X ) ⋅ v H ( X ) − v N ⋅ X g(X) = \frac{N\cdot c(X)\cdot m(X) - N\cdot h(X)\cdot v_{\mathbb{H}}(X) - v}{N\cdot X} g ( X ) = N ⋅ X N ⋅ c ( X ) ⋅ m ( X ) − N ⋅ h ( X ) ⋅ v H ( X ) − v 显然,只要我们能证明 deg ( g ) < N − 1 \deg(g)<N-1 deg ( g ) < N − 1 ,那么我们就证明了 ∑ i = 0 2 n − 1 c i ⋅ m i = v \sum_{i=0}^{2^n - 1} c_i\cdot m_i = v ∑ i = 0 2 n − 1 c i ⋅ m i = v 。
这里解释下是如何将证明上面的「求和式」转换为证明 deg ( g ) < N − 1 \deg(g)<N-1 deg ( g ) < N − 1 。为了证明 ∑ i = 0 2 n − 1 c i ⋅ m i = v \sum_{i=0}^{2^n - 1} c_i\cdot m_i = v ∑ i = 0 2 n − 1 c i ⋅ m i = v ,首先可以将 c i c_i c i 与 m i m_i m i 用多项式 c ( X ) c(X) c ( X ) 与 m ( X ) m(X) m ( X ) 在 H \mathbb{H} H 上进行编码,进而转换为证明
∑ x ∈ H c ( x ) ⋅ m ( x ) = v \sum_{x \in \mathbb{H}} c(x) \cdot m(x) = v x ∈ H ∑ c ( x ) ⋅ m ( x ) = v 并且 c ( X ) ⋅ m ( X ) c(X) \cdot m(X) c ( X ) ⋅ m ( X ) 的次数为 N − 1 + N − 1 = 2 N − 2 N - 1 + N - 1 = 2N - 2 N − 1 + N − 1 = 2 N − 2 。对 c ( X ) ⋅ m ( X ) c(X) \cdot m(X) c ( X ) ⋅ m ( X ) 进行分解可以得到
c ( X ) ⋅ m ( X ) = g ′ ( X ) + h ( X ) ⋅ v H ( X ) c(X) \cdot m(X) = g'(X) + h(X) \cdot v_{\mathbb{H}}(X) c ( X ) ⋅ m ( X ) = g ′ ( X ) + h ( X ) ⋅ v H ( X ) 其中 deg ( h ( X ) ) < 2 N − 1 − N = N − 1 \deg(h(X)) < 2N - 1 - N = N - 1 deg ( h ( X )) < 2 N − 1 − N = N − 1 ,deg ( g ′ ( X ) ) < N \deg(g'(X)) < N deg ( g ′ ( X )) < N 。因此「求和式」证明可以转换为证明
∑ x ∈ H c ( x ) ⋅ m ( x ) = ∑ x ∈ H ( g ′ ( x ) + h ( x ) ⋅ v H ( x ) ) = ∑ x ∈ H g ′ ( x ) = g ′ ( 0 ) ⋅ N = v \sum_{x \in \mathbb{H}} c(x) \cdot m(x) = \sum_{x \in \mathbb{H}} (g'(x) + h(x) \cdot v_{\mathbb{H}}(x)) = \sum_{x \in \mathbb{H}} g'(x) = g'(0) \cdot N = v x ∈ H ∑ c ( x ) ⋅ m ( x ) = x ∈ H ∑ ( g ′ ( x ) + h ( x ) ⋅ v H ( x )) = x ∈ H ∑ g ′ ( x ) = g ′ ( 0 ) ⋅ N = v 上面倒数第二个等式是由下面这个引理得到的。
引理 ([BC99]) 令 H \mathbb{H} H 为 F \mathbb{F} F 的乘法陪集,g ( X ) g(X) g ( X ) 是 F \mathbb{F} F 上一个次数严格小于 ∣ H ∣ |\mathbb{H}| ∣ H ∣ 的单变量多项式,那么 ∑ x ∈ H g ( x ) = g ( 0 ) ⋅ ∣ H ∣ \sum_{x \in \mathbb{H}}g(x) = g(0) \cdot |\mathbb{H}| ∑ x ∈ H g ( x ) = g ( 0 ) ⋅ ∣ H ∣ 。
现在只需要证明 deg ( g ′ ) < N \deg(g') < N deg ( g ′ ) < N 以及 g ′ ( 0 ) = v / N g'(0) = v/N g ′ ( 0 ) = v / N 即可。这可以转换为证明多项式
g ′ ( X ) − g ′ ( 0 ) X − 0 = g ′ ( X ) − v / N X − 0 = N ⋅ g ′ ( X ) − v N ⋅ X \frac{g'(X) - g'(0)}{X - 0} = \frac{g'(X) - v/N}{X - 0} = \frac{N \cdot g'(X) - v}{N \cdot X} X − 0 g ′ ( X ) − g ′ ( 0 ) = X − 0 g ′ ( X ) − v / N = N ⋅ X N ⋅ g ′ ( X ) − v 的次数小于 N − 1 N - 1 N − 1 ,上面的多项式即为
g ( X ) = N ⋅ c ( X ) ⋅ m ( X ) − N ⋅ h ( X ) ⋅ v H ( X ) − v N ⋅ X g(X) = \frac{N\cdot c(X)\cdot m(X) - N\cdot h(X)\cdot v_{\mathbb{H}}(X) - v}{N\cdot X} g ( X ) = N ⋅ X N ⋅ c ( X ) ⋅ m ( X ) − N ⋅ h ( X ) ⋅ v H ( X ) − v 至此证明「求和式」就转换为了证明 deg ( g ) < N − 1 \deg(g) < N - 1 deg ( g ) < N − 1 。
这个思路整体上没有问题,但是 Verifier 需要 O ( N ) O(N) O ( N ) 的工作量,因为他要计算 m ( X ) m(X) m ( X ) 在 κ 个抽样点的取值。而 m ( X ) m(X) m ( X ) 必须是一个公开的由 u ⃗ \vec{u} u 计算得到的向量。
Virgo 论文认为计算 m ( X ) m(X) m ( X ) 在一个点的取值可以利用一个 GKR 协议,将 Verifier 的计算代理给 Prover,同时通过 GKR 协议能够确保计算的正确性,这样 Verifier 只需要 O ( log 2 ( N ) ) O(\log^2(N)) O ( log 2 ( N )) 的工作量即可。
这个 GKR 电路分为下面四个部分:
根据 u ⃗ \vec{u} u 计算 m ⃗ \vec{m} m 的值
根据 m ⃗ \vec{m} m 通过 IFFT 算法计算得到 m ( X ) m(X) m ( X ) 的系数向量
根据 m ( X ) m(X) m ( X ) 的系数向量计算 m ( X ) m(X) m ( X ) 在 Extended Domain L \mathbb{L} L 上的取值。
根据 Verifier 提供的 FRI-Query 索引集合 Q Q Q ,过滤出 m ( X ) m(X) m ( X ) 在 { L i } i ∈ Q \{\mathbb{L}_i\}_{i\in Q} { L i } i ∈ Q 上的取值。
由于这个 GKR 协议的所有计算都是基于公开值,并且电路的输入长度为 n = log ( N ) n=\log(N) n = log ( N ) ,并且电路的深度为 log ( N ) \log(N) log ( N ) ,电路的宽度为 ∣ L ∣ = N / ρ |\mathbb{L}|=N / \rho ∣ L ∣ = N / ρ ,因此 Verifier 的计算量仅为 O ( log 2 ( N ) ) O(\log^2(N)) O ( log 2 ( N )) 即可完成验证。
2. 简化协议 ¶ 协议参数 ¶ Domain H \mathbb{H} H 为素数域 F p \mathbb{F}_p F p 的乘法子群,大小为 N = 2 n N=2^n N = 2 n 。 Extended Domain L ⊂ F p \mathbb{L}\subset\mathbb{F}_p L ⊂ F p 为大小为 ∣ L ∣ = N / ρ |\mathbb{L}|=N / \rho ∣ L ∣ = N / ρ 的乘法子群 Coset,其中 ρ 表示码率。 承诺计算 ¶ Prover 计算 f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) \tilde{f}(X_0, X_1, \cdots, X_{n-1}) f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) 的承诺值 C f ~ C_{\tilde{f}} C f ~ 与一般的 FRI 协议类似,计算该 MLE 多项式所对应的 Unviariate 多项式 c ( X ) c(X) c ( X ) 在 L \mathbb{L} L 上的取值。
C f ~ = M e r k l e T r e e . C o m m i t ( c ⃗ ) C_{\tilde{f}} = \mathsf{MerkleTree.Commit}(\vec{c}) C f ~ = MerkleTree.Commit ( c ) Evaluation 证明 ¶ 公开输入 ¶ C f ~ C_{\tilde{f}} C f ~ u ⃗ \vec{u} u v = f ~ ( u ⃗ ) v=\tilde{f}(\vec{u}) v = f ~ ( u ) Round 1. ¶ 计算 m ⃗ \vec{m} m ,并构造 m ( X ) m(X) m ( X ) ,其 Evaluation 为 m ⃗ \vec{m} m m ( X ) = m 0 ⋅ L 0 ( X ) + m 1 ⋅ L 1 ( X ) + ⋯ + m N − 1 ⋅ L N − 1 ( X ) m(X) = m_0\cdot L_{0}(X) + m_1\cdot L_{1}(X) + \cdots + m_{N-1}\cdot L_{N-1}(X) m ( X ) = m 0 ⋅ L 0 ( X ) + m 1 ⋅ L 1 ( X ) + ⋯ + m N − 1 ⋅ L N − 1 ( X ) 构造 h ( X ) h(X) h ( X ) ,并计算其承诺 C h C_h C h ,其中 h ( X ) h(X) h ( X ) 满足下面这样的等式 h ( X ) = c ( X ) ⋅ m ( X ) − X ⋅ g ( X ) − v / N v H ( X ) h(X) = \frac{c(X)\cdot m(X) - X\cdot g(X) - v/N}{v_{\mathbb{H}}(X)} h ( X ) = v H ( X ) c ( X ) ⋅ m ( X ) − X ⋅ g ( X ) − v / N C h = M e r k l e T r e e . C o m m i t ( h ∣ L ) C_h = \mathsf{MerkleTree.Commit}(h|_{\mathbb{L}}) C h = MerkleTree.Commit ( h ∣ L ) Round 2. ¶ Prover 和 Verifier 通过 FRI 协议证明 g ( X ) g(X) g ( X ) 的存在性。在协议的 Query 阶段,Verifier 提供一个索引集合 Q Q Q ,Prover 计算 c ( X ) c(X) c ( X ) ,h ( X ) h(X) h ( X ) 在 { x i } i ∈ Q \{x_i\}_{i\in Q} { x i } i ∈ Q 上的取值:
{ ( c ( x i ) , π c ( x i ) ) } ← M e r k l e T r e e . O p e n ( i , c ( X ) ∣ L ) , ∀ i ∈ Q \{(c(x_i), \pi_{c}(x_i))\} \leftarrow \mathsf{MerkleTree.Open}(i, c(X)|_{\mathbb{L}}), \quad \forall i\in Q {( c ( x i ) , π c ( x i ))} ← MerkleTree.Open ( i , c ( X ) ∣ L ) , ∀ i ∈ Q { ( h ( x i ) , π h ( x i ) ) } ← M e r k l e T r e e . O p e n ( i , h ( X ) ∣ L ) , ∀ i ∈ Q \{(h(x_i), \pi_{h}(x_i))\} \leftarrow \mathsf{MerkleTree.Open}(i, h(X)|_{\mathbb{L}}), \quad \forall i\in Q {( h ( x i ) , π h ( x i ))} ← MerkleTree.Open ( i , h ( X ) ∣ L ) , ∀ i ∈ Q 这里所有的 x i x_i x i 都是 L \mathbb{L} L 中的元素。
Round 3. ¶ Verifier 验证 { c ( x i ) , h ( x i ) } i ∈ Q \{c(x_i), h(x_i)\}_{i\in Q} { c ( x i ) , h ( x i ) } i ∈ Q 的正确性。
M e r k l e T r e e . V e r i f y ( C f , i , c ( x i ) , π c ( x i ) ) = ? 1 , ∀ i ∈ Q \mathsf{MerkleTree.Verify}(C_f, i, c(x_i), \pi_{c}(x_i)) \overset{?}{=} 1, \quad \forall i\in Q MerkleTree.Verify ( C f , i , c ( x i ) , π c ( x i )) = ? 1 , ∀ i ∈ Q M e r k l e T r e e . V e r i f y ( C h , i , h ( x i ) , π h ( x i ) ) = ? 1 , ∀ i ∈ Q \mathsf{MerkleTree.Verify}(C_h, i, h(x_i), \pi_{h}(x_i)) \overset{?}{=} 1, \quad \forall i\in Q MerkleTree.Verify ( C h , i , h ( x i ) , π h ( x i )) = ? 1 , ∀ i ∈ Q Round 4. ¶ Prover 和 Verifier 运行 GKR 协议,计算 m ∣ L m|_{\mathbb{L}} m ∣ L 的取值,并输出 { m ∣ x i } i ∈ Q \{m|_{x_i}\}_{i\in Q} { m ∣ x i } i ∈ Q 的取值,这里 x i x_i x i 是乘法子群 L \mathbb{L} L 中第 i i i 个元素。
Round 5. ¶ Verifier 通过 { c ( x i ) , h ( x i ) , m ( x i ) } i ∈ Q \{c(x_i), h(x_i), m(x_i)\}_{i\in Q} { c ( x i ) , h ( x i ) , m ( x i ) } i ∈ Q 来验证 FRI 协议中的每一步折叠的正确性。
3. 支持 Zero-Knowledge ¶ 为了支持 Zero-Knowledge 性质,Virgo 在两个地方引入了随机数:
在 c ( X ) c(X) c ( X ) 的承诺中加入了一个 Mask 多项式 r ( X ) r(X) r ( X )
在 Univariate Sumcheck 协议中,引入了一个随机的多项式 s ( X ) s(X) s ( X ) ,在验证 ∑ x i ∈ H c ( x i ) m ( x i ) = v \sum_{x_i\in\mathbb{H}}c(x_i)m(x_i)=v ∑ x i ∈ H c ( x i ) m ( x i ) = v 时,同时证明 ∑ x i ∈ H s ( x i ) = v ′ \sum_{x_i\in\mathbb{H}}s(x_i)=v' ∑ x i ∈ H s ( x i ) = v ′ 。
承诺计算 ¶ Prover 抽样一个随机的多项式 r ( X ) r(X) r ( X ) ,其 Degree 为 κ − 1 \kappa-1 κ − 1 ,即包含有 κ 个随机数。
c ∗ ( X ) = c ( X ) + v H ( X ) ⋅ r ( X ) c^*(X) = c(X) + v_{\mathbb{H}}(X)\cdot r(X) c ∗ ( X ) = c ( X ) + v H ( X ) ⋅ r ( X ) C f ~ = M e r k l e T r e e . C o m m i t ( c ∗ ( X ) ∣ L ) C_{\tilde{f}} = \mathsf{MerkleTree.Commit}(c^*(X)|_{\mathbb{L}}) C f ~ = MerkleTree.Commit ( c ∗ ( X ) ∣ L ) 显然,deg ( c ∗ ( X ) ) = N + κ − 1 \deg(c^*(X)) = N + \kappa - 1 deg ( c ∗ ( X )) = N + κ − 1 。
Evaluation 证明 ¶ 公开输入 ¶ C f ~ C_{\tilde{f}} C f ~ u ⃗ \vec{u} u v = f ~ ( u ⃗ ) v=\tilde{f}(\vec{u}) v = f ~ ( u ) Witness ¶ MLE 多项式 f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) \tilde{f}(X_0, X_1, \cdots, X_{n-1}) f ~ ( X 0 , X 1 , ⋯ , X n − 1 ) 的系数向量 c ⃗ \vec{c} c 随机多项式 r ( X ) r(X) r ( X ) Round 1. ¶ Prover 计算 m ⃗ \vec{m} m ,并构造 m ( X ) m(X) m ( X ) ,其 Evaluation 为 m ⃗ \vec{m} m m ( X ) = m 0 ⋅ L 0 ( X ) + m 1 ⋅ L 1 ( X ) + ⋯ + m N − 1 ⋅ L N − 1 ( X ) m(X) = m_0\cdot L_{0}(X) + m_1\cdot L_{1}(X) + \cdots + m_{N-1}\cdot L_{N-1}(X) m ( X ) = m 0 ⋅ L 0 ( X ) + m 1 ⋅ L 1 ( X ) + ⋯ + m N − 1 ⋅ L N − 1 ( X ) Prover 抽样一个多项式 s ( X ) s(X) s ( X ) ,其 Degree 为 2 N + κ − 1 2N + \kappa - 1 2 N + κ − 1 ,其在 H \mathbb{H} H 上的求和为 v ′ v' v ′ ∑ a ∈ H s ( a ) = v ′ \sum_{a\in\mathbb{H}}s(a) = v' a ∈ H ∑ s ( a ) = v ′ Prover 计算 s ( X ) s(X) s ( X ) 的承诺 C s = M e r k l e T r e e . C o m m i t ( s ∣ L ) C_s = \mathsf{MerkleTree.Commit}(s|_{\mathbb{L}}) C s = MerkleTree.Commit ( s ∣ L ) Round 2. ¶ Verifier 提供一个随机数 α,用来聚合两个不同的 Sumcheck 协议的和。 v ∗ = v + α ⋅ v ′ v^* = v + \alpha\cdot v' v ∗ = v + α ⋅ v ′ Prover 构造 h ( X ) h(X) h ( X ) ,并计算其承诺 C h C_h C h ,h ( X ) h(X) h ( X ) 满足 h ( X ) = c ∗ ( X ) ⋅ m ( X ) + α ⋅ s ( X ) − X ⋅ g ( X ) − v ∗ / N v H ( X ) h(X) = \frac{c^*(X)\cdot m(X) + \alpha\cdot s(X) - X\cdot g(X) - v^*/N}{v_{\mathbb{H}}(X)} h ( X ) = v H ( X ) c ∗ ( X ) ⋅ m ( X ) + α ⋅ s ( X ) − X ⋅ g ( X ) − v ∗ / N C h = M e r k l e T r e e . C o m m i t ( h ∣ L ) C_h = \mathsf{MerkleTree.Commit}(h|_{\mathbb{L}}) C h = MerkleTree.Commit ( h ∣ L ) Round 3. ¶ Prover 和 Verifier 通过 FRI 协议来证明 g ( X ) g(X) g ( X ) 的 Degree 小于 N − 1 N-1 N − 1 。这包括 O ( log ( N ) ) O(\log(N)) O ( log ( N )) 轮次的 Split-and-fold 折叠。
Round 4. ¶ Verifier 抽样 κ 个随机索引,Q Q Q ,并要求 Prover 提供 c ∗ ( X ) c^*(X) c ∗ ( X ) ,s ( X ) s(X) s ( X ) 与 h ( X ) h(X) h ( X ) 在 { a i } i ∈ Q \{a_i\}_{i\in Q} { a i } i ∈ Q 上的取值。这里 a i ∈ L a_i\in\mathbb{L} a i ∈ L ,是 L \mathbb{L} L 中的第 i i i 个元素。
Prover 发送 c ∗ ( X ) c^*(X) c ∗ ( X ) ,s ( X ) s(X) s ( X ) 与 h ( X ) h(X) h ( X ) 在 { a i } i ∈ Q \{a_i\}_{i\in Q} { a i } i ∈ Q 上的取值,并附加上 Merkle path。
{ ( c ∗ ( a i ) , π c ∗ ( a i ) ) } ← M e r k l e T r e e . O p e n ( i , c ∗ ( X ) ∣ L ) , ∀ i ∈ Q \{(c^*(a_i), \pi_{c^*}(a_i))\} \leftarrow \mathsf{MerkleTree.Open}(i, c^*(X)|_{\mathbb{L}}), \quad \forall i\in Q {( c ∗ ( a i ) , π c ∗ ( a i ))} ← MerkleTree.Open ( i , c ∗ ( X ) ∣ L ) , ∀ i ∈ Q { ( s ( a i ) , π s ( a i ) ) } ← M e r k l e T r e e . O p e n ( i , s ( X ) ∣ L ) , ∀ i ∈ Q \{(s(a_i), \pi_{s}(a_i))\} \leftarrow \mathsf{MerkleTree.Open}(i, s(X)|_{\mathbb{L}}), \quad \forall i\in Q {( s ( a i ) , π s ( a i ))} ← MerkleTree.Open ( i , s ( X ) ∣ L ) , ∀ i ∈ Q { ( h ( a i ) , π h ( a i ) ) } ← M e r k l e T r e e . O p e n ( i , h ( X ) ∣ L ) , ∀ i ∈ Q \{(h(a_i), \pi_{h}(a_i))\} \leftarrow \mathsf{MerkleTree.Open}(i, h(X)|_{\mathbb{L}}), \quad \forall i\in Q {( h ( a i ) , π h ( a i ))} ← MerkleTree.Open ( i , h ( X ) ∣ L ) , ∀ i ∈ Q Round 5. ¶ Prover 和 Verifier 运行 GKR 协议,计算 m ∣ L m|_{\mathbb{L}} m ∣ L 的取值,并输出 { m ∣ a i } i ∈ Q \{m|_{a_i}\}_{i\in Q} { m ∣ a i } i ∈ Q 的取值,这里 a i a_i a i 是乘法子群 L \mathbb{L} L 中第 i i i 个元素。
Verification ¶ Verifier 验证 { c ∗ ( a i ) , s ( a i ) , h ( a i ) } i ∈ Q \{c^*(a_i), s(a_i), h(a_i)\}_{i\in Q} { c ∗ ( a i ) , s ( a i ) , h ( a i ) } i ∈ Q 的正确性。 M e r k l e T r e e . V e r i f y ( C f , i , c ∗ ( a i ) , π c ∗ ( a i ) ) = ? 1 , ∀ i ∈ Q \mathsf{MerkleTree.Verify}(C_f, i, c^*(a_i), \pi_{c^*}(a_i)) \overset{?}{=} 1, \quad \forall i\in Q MerkleTree.Verify ( C f , i , c ∗ ( a i ) , π c ∗ ( a i )) = ? 1 , ∀ i ∈ Q M e r k l e T r e e . V e r i f y ( C s , i , s ( a i ) , π s ( a i ) ) = ? 1 , ∀ i ∈ Q \mathsf{MerkleTree.Verify}(C_s, i, s(a_i), \pi_{s}(a_i)) \overset{?}{=} 1, \quad \forall i\in Q MerkleTree.Verify ( C s , i , s ( a i ) , π s ( a i )) = ? 1 , ∀ i ∈ Q M e r k l e T r e e . V e r i f y ( C h , i , h ( a i ) , π h ( a i ) ) = ? 1 , ∀ i ∈ Q \mathsf{MerkleTree.Verify}(C_h, i, h(a_i), \pi_{h}(a_i)) \overset{?}{=} 1, \quad \forall i\in Q MerkleTree.Verify ( C h , i , h ( a i ) , π h ( a i )) = ? 1 , ∀ i ∈ Q Verifier 通过 { c ∗ ( a i ) , s ( a i ) , h ( a i ) , m ( a i ) } i ∈ Q \{c^*(a_i), s(a_i), h(a_i), m(a_i)\}_{i\in Q} { c ∗ ( a i ) , s ( a i ) , h ( a i ) , m ( a i ) } i ∈ Q 来验证 FRI 协议中的每一步折叠的正确性。 4. 总结 ¶ Virgo-PCS 是最早利用 MLE-to-Univariate 的思路来构造多项式承诺的协议。也是最早采用 Small Field, Mersenne-61 素数域来提高性能的协议。虽然 Virgo-PCS 协议要求 MLE 多项式以 Coefficient 形式给出,但是如果我们只考虑 MLE 多项式的承诺的话,我们可以无需将 MLE 多项式转换到 Coefficient (Monomial Basis)形式,而是直接利用 MLE 多项式的 Evaluation (Lagrange Basis) 形式进行证明。
References ¶ [ZXZS19] Jiaheng Zhang, Tiancheng Xie, Yupeng Zhang, and Dawn Song. “Transparent Polynomial Delegation and Its Applications to Zero Knowledge Proof”. In 2020 IEEE Symposium on Security and Privacy (SP), pp. 859-876. IEEE, 2020. https:// eprint .iacr .org /2019 /1482 . [PH23] Papini, Shahar, and Ulrich Haböck. “Improving logarithmic derivative lookups using GKR.” Cryptology ePrint Archive (2023). https:// eprint .iacr .org /2023 /1284 . [BCRSVW19] Eli Ben-Sasson, Alessandro Chiesa, Michael Riabzev, Nicholas Spooner, Madars Virza, and Nicholas P. Ward. “Aurora: Transparent succinct arguments for R1CS.” Advances in Cryptology–EUROCRYPT 2019: 38th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Darmstadt, Germany, May 19–23, 2019, Proceedings, Part I 38. Springer International Publishing, 2019. https:// eprint .iacr .org /2018 /828 . [BC99] Byott, Nigel P., and Robin J. Chapman. “Power sums over finite subspaces of a field.” Finite Fields and Their Applications 5, no. 3 (1999): 254-265.