Skip to article frontmatterSkip to article content

Zeromorph-PCS : 对接 FRI

之前的文章介绍了 zeromorph 协议对接 KZG 做多元线性多项式的 PCS 协议,这里介绍 zeromorph 协议接 FRI 对应的 PCS 协议。

对接 FRI

在之前的文章中已经介绍过,zeromorph 协议最后转换为证明一个关键的等式

f^(X)vΦn(X)=k=0n1(X2kΦnk1(X2k+1)ukΦnk(X2k))q^k(X)\hat{f}(X) - v\cdot\Phi_n(X) = \sum_{k = 0}^{n - 1} \Big(X^{2^k}\cdot \Phi_{n-k-1}(X^{2^{k+1}}) - u_k\cdot\Phi_{n-k}(X^{2^k})\Big)\cdot \hat{q}_k(X)

以及要求商多项式 q^k(X)\hat{q}_k(X) 的次数都小于 2k2^k ,来防止 Prover 作弊。

为了证明上面的等式成立,Verifier 可以随机选取一个点 X=ζX = \zeta ,然后让 Prover 提供 f^(ζ)\hat{f}(\zeta)q^k(ζ)\hat{q}_k(\zeta) 的值,以便于 Verifier 验证下面的等式是否成立:

f^(ζ)vΦn(ζ)=k=0n1(ζ2kΦnk1(ζ2k+1)ukΦnk(ζ2k))q^k(ζ)\hat{f}(\zeta) - v\cdot\Phi_n(\zeta) = \sum_{k = 0}^{n - 1} \Big(\zeta^{2^k}\cdot \Phi_{n-k-1}(\zeta^{2^{k+1}}) - u_k\cdot\Phi_{n-k}(\zeta^{2^k})\Big)\cdot \hat{q}_k(\zeta)

用 zeromorph 对接 FRI 协议时,可以用 FRI 协议实现的 PCS 来提供 f^(ζ)\hat{f}(\zeta)q^k(ζ)\hat{q}_k(\zeta) 的值,并用 FRI 协议的 low degree test 来证明 deg(qk^)<2k\deg(\hat{q_k}) < 2^k

例如 Prover 要证明发送的 f^(ζ)\hat{f}(\zeta) 值的正确性。证明该值正确,等价于证明商多项式

f^(X)f^(ζ)Xζ\frac{\hat{f}(X) - \hat{f}(\zeta)}{X - \zeta}

存在。要证明该商多项式存在,就等价要证明其次数小于 2n12^{n} - 1 。为了对接 FRI 协议来进行 low degree test ,这里次数需要对齐到 2 的幂次,因此还需要做 degree correction。这时可以向 Verifier 要一个随机数 λ\lambda ,令

qf^ζ(X)=f^(X)f^(ζ)Xζ+λXf^(X)f^(ζ)Xζq_{\hat{f}_{\zeta}}(X) = \frac{\hat{f}(X) - \hat{f}(\zeta)}{X - \zeta} + \lambda \cdot X \cdot \frac{\hat{f}(X) - \hat{f}(\zeta)}{X - \zeta}

用 FRI 协议来证明该商多项式的次数小于 2n2^n

Commit 阶段

要承诺一个有 nn 个未知数的 MLE 多项式,

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

首先直接将其在 hypercube 上的取值 (a0,,aN1)(a_0, \ldots, a_{N - 1}) 映射到一元多项式 f^(X)\hat{f}(X)

f^(X)=a0+a1X++aN1XN1\hat{f}(X) = a_0 + a_1 X + \cdots + a_{N-1} X^{N - 1}

对于 FRI 协议,选取 F\mathbb{F} 中的一个大小为 2 的幂次的乘法子群 D=D0D = D_0 ,并且有

DnDn1D0D_n \subseteq D_{n - 1} \subseteq \ldots \subseteq D_0

其中 Di1/Di=2|D_{i - 1}|/|D_{i}| = 2 ,码率 ρ=N/D0\rho = N / |D_0| 。下面的协议中以折叠 nn 次,即最后折叠到常数多项式来描述,实际中也可以折叠到一个次数比较小的多项式,协议流程会有细微差别。那么 FRI 协议对函数 f^\hat{f} 的承诺为承诺 f^(X)\hat{f}(X)DD 上的 Reed-Solomon 编码,即

cm(f^(X))=cm([f^(x)xD])\mathsf{cm}(\hat{f}(X)) = \mathsf{cm}([\hat{f}(x)|_{x \in D}])

实际实现中,一般用 Merkle 树来承诺 [f^(x)xD][\hat{f}(x)|_{x \in D}] ,记为

cm(f^(X))=MT.Commit([f^(x)xD])\mathsf{cm}(\hat{f}(X)) = \mathsf{MT.Commit}([\hat{f}(x)|_{x \in D}])

Prover 发送的是这棵 Merkle 树的根哈希值,来作为 [f^(x)xD][\hat{f}(x)|_{x \in D}] 的承诺。

Evaluation 证明协议

公共输入

Witness

Round 1

Prover 发送余数多项式的承诺

f~(X0,X1,,Xn1)v=k=0n1(Xkuk)q~k(X0,X1,,Xk1)\tilde{f}(X_0,X_1,\ldots, X_{n-1}) - v = \sum_{k=0}^{n-1} (X_k-u_k) \cdot \tilde{q}_k(X_0,X_1,\ldots, X_{k-1})
cm(q^k(X))=cm([q^k(x)xD(k)])=MT.commit([q^k(x)xD(k)])\mathsf{cm}(\hat{q}_k(X)) = \mathsf{cm}([\hat{q}_k(x)|_{x \in D^{(k)}}]) = \mathsf{MT.commit}([\hat{q}_k(x)|_{x \in D^{(k)}}])

其中 D(k)=2k/ρ|D^{(k)}| = 2^k / \rho

Round 2

  1. Verifier 发送随机数 ζ$FD\zeta \stackrel{\$}{\leftarrow} \mathbb{F} \setminus D
  2. Prover 计算并发送 f^(ζ)\hat{f}(\zeta)
  3. Prover 计算并发送 q^k(ζ),0k<n\hat{q}_k(\zeta), \, 0 \le k < n

Round 3

  1. Verifier 发送随机数 λ$F\lambda \stackrel{\$}{\leftarrow} \mathbb{F}
  2. Prover 计算
qfζ(X)=f^(X)f^(ζ)Xζ+λXf^(X)f^(ζ)Xζq_{f_\zeta}(X) = \frac{\hat{f}(X) - \hat{f}(\zeta)}{X - \zeta} + \lambda \cdot X \cdot \frac{\hat{f}(X) - \hat{f}(\zeta)}{X - \zeta}

DD 上的值,即

[qfζ(x)xD]=[f^(x)f^(ζ)xζ+λxf^(x)f^(ζ)xζxD][q_{f_\zeta}(x)|_{x \in D}] = \big[\frac{\hat{f}(x) - \hat{f}(\zeta)}{x - \zeta} + \lambda \cdot x \cdot \frac{\hat{f}(x) - \hat{f}(\zeta)}{x - \zeta}\big|_{x \in D} \big]
  1. 对于 0k<n0 \le k < n ,Prover 计算
qq^k(X)=qk^(X)q^k(ζ)Xζ+λXqk^(X)q^k(ζ)Xζq_{\hat{q}_k}(X) = \frac{\hat{q_k}(X) - \hat{q}_k(\zeta)}{X - \zeta} + \lambda \cdot X \cdot \frac{\hat{q_k}(X) - \hat{q}_k(\zeta)}{X - \zeta}

D(k)D^{(k)} 上的值。

Round 4

Prover 与 Verifier 进行 FRI 协议的 low degree test 交互,证明 qfζ(X)q_{f_\zeta}(X) 的次数小于 2n2^n

πqfζFRI.LDT(qfζ(X),2n)\pi_{q_{f_\zeta}} \leftarrow \mathsf{FRI.LDT}(q_{f_\zeta}(X), 2^n)

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

📝 Notes

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

Round 5

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

重复 ll 次:

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

Round 6

  1. Prover 与 Verifier 进行 FRI 协议的 low degree test 交互,对于 0k<n0 \le k < n ,证明 qq^k(X)q_{\hat{q}_k}(X) 的次数小于 2k2^k
πqq^kFRI.LDT(qq^k(X),2k)\pi_{q_{\hat{q}_k}} \leftarrow \mathsf{FRI.LDT}(q_{\hat{q}_k}(X), 2^k)

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

📝 Notes

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

Round 7

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

对于 k=0,,n1k = 0, \ldots, n - 1, Verifier 重复查询 ll 次:

如果折叠次数 r<kr < k ,那么最后一步就要发送 qq^k(r)(s(r))q_{\hat{q}_k}^{(r)}(s^{(r)}) 的值,并附上 Merkle Path。

Proof

Prover 发送的证明为

π=(cm(q^0(X)),cm(q^n1(X)),f^(ζ),q^0(ζ),,q^n1(ζ),πqfζ,πqq^0,,πqq^n1)\begin{aligned} \pi = \left(\mathsf{cm}(\hat{q}_0(X)), \ldots \mathsf{cm}(\hat{q}_{n - 1}(X)), \hat{f}(\zeta), \hat{q}_0(\zeta), \ldots, \hat{q}_{n - 1}(\zeta), \pi_{q_{f_\zeta}}, \pi_{q_{\hat{q}_0}}, \ldots, \pi_{q_{\hat{q}_{n - 1}}}\right) \end{aligned}

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

πqfζ=(cm(qfζ(1)(X)),,cm(qfζ(n1)(X)),qfζ(n)(x0),{f^(s(0)),πf^(s(0)),f^(s(0)),πf^(s(0)),qfζ(1)(s(1)),πqfζ(1)(s(1)),qfζ(1)(s(1)),πqfζ(1)(s(1)),,qfζ(n1)(s(n1)),πqfζ(n1)(s(n1)),qfζ(n1)(s(n1)),πqfζ(i)(s(n1))}l)\begin{aligned} \pi_{q_{f_\zeta}} = & ( \mathsf{cm}(q_{f_\zeta}^{(1)}(X)), \ldots, \mathsf{cm}(q_{f_\zeta}^{(n - 1)}(X)),q_{f_\zeta}^{(n)}(x_0), \\ & \, \{\hat{f}(s^{(0)}), \pi_{\hat{f}}(s^{(0)}), \hat{f}(- s^{(0)}), \pi_{\hat{f}}(-s^{(0)}), \\ & \quad q_{f_\zeta}^{(1)}(s^{(1)}), \pi_{q_{f_\zeta}^{(1)}}(s^{(1)}),q_{f_\zeta}^{(1)}(-s^{(1)}), \pi_{q_{f_\zeta}^{(1)}}(-s^{(1)}), \ldots, \\ & \quad q_{f_\zeta}^{(n - 1)}(s^{(n - 1)}), \pi_{q_{f_\zeta}^{(n - 1)}}(s^{(n - 1)}),q_{f_\zeta}^{(n - 1)}(-s^{(n - 1)}), \pi_{q_{f_\zeta}^{(i)}}(-s^{(n - 1)})\}^l) \end{aligned}

对于 k=0,,n1k = 0, \ldots, n - 1

πqq^k=(cm(qq^k(1)(X)),,cm(qq^k(k1)(X)),qq^k(k)(y0(k)),{q^k(sk(0)),πq^k(sk(0)),q^k(sk(0)),πq^k(sk(0)),qq^k(1)(sk(1)),πqq^k(1)(sk(1)),qq^k(1)(sk(1)),πqq^k(1)(sk(1)),qq^k(k1)(sk(k1)),πqq^k(k1)(sk(k1)),qq^k(k1)(sk(k1)),πqq^k(k1)(sk(k1))}l)\begin{aligned} \pi_{q_{\hat{q}_k}} = & ( \mathsf{cm}(q_{\hat{q}_k}^{(1)}(X)), \ldots, \mathsf{cm}(q_{\hat{q}_k}^{(k - 1)}(X)),q_{\hat{q}_k}^{(k)}(y_0^{(k)}), \\ & \, \{\hat{q}_k(s_k^{(0)}), \pi_{\hat{q}_k}(s_k^{(0)}), \hat{q}_k(-s_k^{(0)}), \pi_{\hat{q}_k}(-s_k^{(0)}),\\ & \quad q_{\hat{q}_k}^{(1)}(s_k^{(1)}), \pi_{q_{\hat{q}_k}^{(1)}}(s_k^{(1)}), q_{\hat{q}_k}^{(1)}(-s_k^{(1)}), \pi_{q_{\hat{q}_k}^{(1)}}(-s_k^{(1)}) \ldots, \\ & \quad q_{\hat{q}_k}^{(k - 1)}(s_k^{(k-1)}), \pi_{q_{\hat{q}_k}^{(k - 1)}}(s_k^{(k - 1)}), q_{\hat{q}_k}^{(k - 1)}(-s_k^{(k - 1)}), \pi_{q_{\hat{q}_k}^{(k - 1)}}(-s_k^{(k - 1)})\}^l) \end{aligned}

Verification

Verifier

  1. 验证 qfζ(X)q_{f_\zeta}(X) 的 low degree test 证明,
FRI.LDT.verify(πqfζ,2n)=?1\mathsf{FRI.LDT.verify}(\pi_{q_{f_\zeta}}, 2^n) \stackrel{?}{=} 1

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

MT.verify(cm(f^(X)),f^(s(0)),πf^(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(\hat{f}(X)), \hat{f}(s^{(0)}), \pi_{\hat{f}}(s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(f^(X)),f^(s(0)),πf^(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(\hat{f}(X)), \hat{f}(-s^{(0)}), \pi_{\hat{f}}(-s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(qfζ(1)(X)),qfζ(1)(s(1)),πqfζ(1)(s(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q_{f_\zeta}^{(1)}(X)), q_{f_\zeta}^{(1)}(s^{(1)}), \pi_{q_{f_\zeta}^{(1)}}(s^{(1)})) \stackrel{?}{=} 1
MT.verify(cm(qfζ(1)(X)),qfζ(1)(s(1)),πqfζ(1)(s(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q_{f_\zeta}^{(1)}(X)), q_{f_\zeta}^{(1)}(-s^{(1)}), \pi_{q_{f_\zeta}^{(1)}}(-s^{(1)})) \stackrel{?}{=} 1
qfζ(1)(s(1))=?qfζ(0)(s(0))+qfζ(0)(s(0))2+α(1)qfζ(0)(s(0))qfζ(0)(s(0))2s(0)q_{f_\zeta}^{(1)}(s^{(1)}) \stackrel{?}{=} \frac{q_{f_\zeta}^{(0)}(s^{(0)}) + q_{f_\zeta}^{(0)}(- s^{(0)})}{2} + \alpha^{(1)} \cdot \frac{q_{f_\zeta}^{(0)}(s^{(0)}) - q_{f_\zeta}^{(0)}(- s^{(0)})}{2 \cdot s^{(0)}}
  1. 对于 k=0,,n1k = 0, \ldots, n - 1 ,验证 qq^k(X)q_{\hat{q}_k}(X) 的 low degree test 证明,
FRI.LDT.verify(πqq^k,2k)=?1\mathsf{FRI.LDT.verify}(\pi_{q_{\hat{q}_k}}, 2^k) \stackrel{?}{=} 1

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

MT.verify(cm(q^k(X)),q^k(sk(0)),πq^k(sk(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(\hat{q}_k(X)), \hat{q}_k(s_k^{(0)}), \pi_{\hat{q}_k}(s_k^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(q^k(X)),q^k(sk(0)),πq^k(sk(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(\hat{q}_k(X)), \hat{q}_k(-s_k^{(0)}), \pi_{\hat{q}_k}(-s_k^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(qq^k(1)(X)),qq^k(1)(sk(1)),πqq^k(1)(sk(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q_{\hat{q}_k}^{(1)}(X)), q_{\hat{q}_k}^{(1)}(s_k^{(1)}), \pi_{q_{\hat{q}_k}^{(1)}}(s_k^{(1)})) \stackrel{?}{=} 1
MT.verify(cm(qq^k(1)(X)),qq^k(1)(sk(1)),πqq^k(1)(sk(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q_{\hat{q}_k}^{(1)}(X)), q_{\hat{q}_k}^{(1)}(-s_k^{(1)}), \pi_{q_{\hat{q}_k}^{(1)}}(-s_k^{(1)})) \stackrel{?}{=} 1
qq^k(1)(sk(1))=?qq^k(0)(sk(0))+qq^k(0)(sk(0))2+βk(1)qq^k(0)(sk(0))qq^k(0)(sk(0))2sk(0)q_{\hat{q}_k}^{(1)}(s_k^{(1)}) \stackrel{?}{=} \frac{q_{\hat{q}_k}^{(0)}(s_k^{(0)}) + q_{\hat{q}_k}^{(0)}(- s_k^{(0)})}{2} + \beta_k^{(1)} \cdot \frac{q_{\hat{q}_k}^{(0)}(s_k^{(0)}) - q_{\hat{q}_k}^{(0)}(- s_k^{(0)})}{2 \cdot s_k^{(0)}}
  1. 计算 Φn(ζ)\Phi_n(\zeta) 以及 Φnk(ζ2k)(0k<n)\Phi_{n - k}(\zeta^{2^k})(0 \le k < n) ,满足
Φn(ζ)=1+ζ+ζ2++ζ2n1\Phi_n(\zeta) = 1 + \zeta + \zeta^2 + \ldots + \zeta^{2^n-1}
Φnk(ζ2k)=1+ζ2k+ζ22k++ζ(2nk1)2k\Phi_{n-k}(\zeta^{2^k}) = 1 + \zeta^{2^k} + \zeta^{2\cdot 2^k} + \ldots + \zeta^{(2^{n-k}-1)\cdot 2^k}
  1. 验证下述等式的正确性
f^(ζ)vΦn(ζ)=?k=0n1(ζ2kΦnk1(ζ2k+1)ukΦnk(ζ2k))q^k(ζ)\hat{f}(\zeta) - v\cdot\Phi_n(\zeta) \stackrel{?}{=} \sum_{k = 0}^{n - 1} \Big(\zeta^{2^k}\cdot \Phi_{n-k-1}(\zeta^{2^{k+1}}) - u_k\cdot\Phi_{n-k}(\zeta^{2^k})\Big)\cdot \hat{q}_k(\zeta)

Zeromorph 对接 FRI 优化协议

在上述的协议中,会对 nn 个一元多项式 q^k(X)\hat{q}_k(X) 进行承诺以及用 FRI 协议分别进行 low degree test 的证明,实际上,由于要证明的 q^k(X)\hat{q}_{k}(X)q^k1(X)\hat{q}_{k - 1}(X) 之间的 degree bound 刚好相差 2 倍,因此可以用 rolling batch 的技巧对这 nn 个多项式只进行一次 low degree test。另外注意到,f^(X)\hat{f}(X)q^n1(X)\hat{q}_{n-1}(X) 之间的 degree bound 也刚好相差 2 倍,因此还可以用 rolling batch [ZLGSCLD24] 的技巧对 f^(X),q^n1(X),,q^0(X)\hat{f}(X), \hat{q}_{n-1}(X), \ldots, \hat{q}_{0}(X)n+1n + 1 个多项式只进行一次 low degree test。

当对 nn 个一元多项式 q^k(X)\hat{q}_k(X) 进行承诺时,由于 D(k)D^{(k)}D(k1)D^{(k - 1)} 之间的大小也正好相差 2 倍,因此也可以借用 plonky3 中的 mmcs 结构对这 nn 个多项式放在一起只进行一次承诺。

这里先以 3 个多项式 q^2(X),q^1(X),q^0(X)\hat{q}_2(X), \hat{q}_1(X), \hat{q}_0(X) 为例来说明 mmcs 承诺的过程。设 ρ=12\rho = \frac{1}{2} ,Prover 要承诺的值为

cm(q^2(X))=[q^2(x)xD(2)]={q^2(ω20),q^2(ω21),q^2(ω22),,q^2(ω27)}\mathsf{cm}(\hat{q}_2(X)) = [\hat{q}_2(x)|_{x\in D^{(2)}}] = \{\hat{q}_2(\omega_2^0), \hat{q}_2(\omega_2^1), \hat{q}_2(\omega_2^2), \ldots, \hat{q}_2(\omega_2^7)\}
cm(q^1(X))=[q^1(x)xD(1)]={q^1(ω10),q^1(ω11),q^1(ω12),q^1(ω13)}\mathsf{cm}(\hat{q}_1(X)) = [\hat{q}_1(x)|_{x\in D^{(1)}}] = \{\hat{q}_1(\omega_1^0), \hat{q}_1(\omega_1^1), \hat{q}_1(\omega_1^2), \hat{q}_1(\omega_1^3)\}
cm(q^0(X))=[q^0(x)xD(0)]={q^0(ω00),q^0(ω01)}\mathsf{cm}(\hat{q}_0(X)) = [\hat{q}_0(x)|_{x\in D^{(0)}}] = \{\hat{q}_0(\omega_0^0), \hat{q}_0(\omega_0^1)\}

其中 ω2,ω1,ω0\omega_2, \omega_1, \omega_0 分别是 D(2),D(1),D(0)D^{(2)}, D^{(1)}, D^{(0)} 上的生成元,满足

(ω2)8=1,(ω1)4=1,(ω0)2=1(\omega_2)^8 = 1, (\omega_1)^4 = 1, (\omega_0)^2 = 1

在实际实现中,可以选取 Fp\mathbb{F}_p^* 的生成元 gg 来生成 ω2,ω1,ω0\omega_2, \omega_1, \omega_0 ,令

ω2=gp18,ω1=gp14,ω0=gp12\omega_2 = g^{\frac{p - 1}{8}}, \omega_1 = g^{\frac{p - 1}{4}},\omega_0 = g^{\frac{p - 1}{2}}

由费马小定理可以验证 (ω2)8=1,(ω1)4=1,(ω0)2=1(\omega_2)^8 = 1, (\omega_1)^4 = 1, (\omega_0)^2 = 1 是成立的,则它们之间满足关系式 ω2=ω1,ω12=ω0\omega^2 = \omega_1, \omega_1^2 = \omega_0

可以看到 cm(q^2(X))\mathsf{cm}(\hat{q}_2(X)) 要承诺的有 8 个值,cm(q^1(X))\mathsf{cm}(\hat{q}_1(X)) 要承诺的有 4 个值,而 cm(q^0(X))\mathsf{cm}(\hat{q}_0(X)) 要承诺的有 2 个值。如果用 Merkle Tree 来承诺,需要 3 棵树来进行承诺,其高度分别是 3, 2, 1,而现在用 mmcs 结构,可以将这 14 个值放在同一棵树上,其高度为 6。

这种承诺方式记为

cm(q^2(X),q^1(X),q^0(X))=MMCS.commit(q^2(X),q^1(X),q^0(X))\mathsf{cm}(\hat{q}_2(X), \hat{q}_1(X), \hat{q}_0(X)) = \mathsf{MMCS.commit}(\hat{q}_2(X), \hat{q}_1(X), \hat{q}_0(X))

下面依然以 n=3n = 3 为例来说明 rolling batch 的技巧,对于商多项式 qq^2(X),qq^1(X),qq^0(X)q_{\hat{q}_2}(X), q_{\hat{q}_1}(X), q_{\hat{q}_0}(X) ,如果用 FRI 的 low degree test 来证明它们的 degree bound ,需要 3 个相应的证明,而 rolling batch 技巧可以让我们用一次 low degree test 来证明这 3 个多项式的 degree bound,协议过程如下图所示。

将折叠之后的值与下一个 qq^i1q_{\hat{q}_{i - 1}} 的值相加,再进行 FRI 的折叠,直到最后折叠成常数多项式。

Commit 阶段

这里承诺阶段与上述非优化版的承诺协议是一样的,承诺一个有 nn 个变量的 MLE 多项式,

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

先直接映射成一元多项式 f^(X)\hat{f}(X),为

f^(X)=a0+a1X++aN1XN1\hat{f}(X) = a_0 + a_1 X + \cdots + a_{N-1} X^{N - 1}

其承诺为

cm(f^(X))=[f^(x)xD]\mathsf{cm}(\hat{f}(X)) = [\hat{f}(x)|_{x \in D}]

用一般的 Merkle Tree 来承诺,为

cm(f^(X))=MT.Commit([f^(x)xD])\mathsf{cm}(\hat{f}(X)) = \mathsf{MT.Commit}([\hat{f}(x)|_{x \in D}])

Evaluation 证明协议

公共输入

Witness

Round 1

Prover 发送余数多项式的承诺

f~(X0,X1,,Xn1)v=k=0n1(Xkuk)q~k(X0,X1,,Xk1)\tilde{f}(X_0,X_1,\ldots, X_{n-1}) - v = \sum_{k=0}^{n-1} (X_k-u_k) \cdot \tilde{q}_k(X_0,X_1,\ldots, X_{k-1})
{[q^k(x)xD(k)]}k=0n1\{[\hat{q}_k(x)|_{x \in D^{(k)}}]\}_{k = 0}^{n - 1}

其中 D(k)=2k/ρ|D^{(k)}| = 2^k / \rho ,再用 mmcs 对这 (2n1+2n2++20)/ρ(2^{n - 1} + 2^{n - 2} + \ldots + 2^0)/\rho 个值一次进行承诺,记为

cm(q^n1,q^n2,,q^0)=MMCS.commit(q^n1,q^n2,,q^0)\mathsf{cm}(\hat{q}_{n - 1}, \hat{q}_{n - 2}, \ldots, \hat{q}_0) = \mathsf{MMCS.commit}(\hat{q}_{n - 1}, \hat{q}_{n - 2}, \ldots, \hat{q}_0)

Round 2

  1. Verifier 发送随机数 ζ$FD\zeta \stackrel{\$}{\leftarrow} \mathbb{F} \setminus D
  2. Prover 计算并发送 f^(ζ)\hat{f}(\zeta)
  3. Prover 计算并发送 {q^k(ζ)}k=0n1\{\hat{q}_k(\zeta)\}_{k = 0}^{n - 1}

Round 3

  1. Verifier 发送随机数 λ$F\lambda \stackrel{\$}{\leftarrow} \mathbb{F}
  2. Prover 计算
qfζ(X)=f^(X)f^(ζ)Xζ+λXf^(X)f^(ζ)Xζq_{f_\zeta}(X) = \frac{\hat{f}(X) - \hat{f}(\zeta)}{X - \zeta} + \lambda \cdot X \cdot \frac{\hat{f}(X) - \hat{f}(\zeta)}{X - \zeta}

DD 上的值,即

[qfζ(x)xD]=[f^(x)f^(ζ)xζ+λxf^(x)f^(ζ)xζxD][q_{f_\zeta}(x)|_{x \in D}] = \big[\frac{\hat{f}(x) - \hat{f}(\zeta)}{x - \zeta} + \lambda \cdot x \cdot \frac{\hat{f}(x) - \hat{f}(\zeta)}{x - \zeta}\big|_{x \in D} \big]
  1. 对于 0k<n0 \le k < n ,Prover 计算
qq^k(X)=qk^(X)q^k(ζ)Xζ+λXqk^(X)q^k(ζ)Xζq_{\hat{q}_k}(X) = \frac{\hat{q_k}(X) - \hat{q}_k(\zeta)}{X - \zeta} + \lambda \cdot X \cdot \frac{\hat{q_k}(X) - \hat{q}_k(\zeta)}{X - \zeta}

D(k)D^{(k)} 上的值。

Round 4

Prover 与 Verifier 进行 FRI 协议的 low degree test 交互,这里使用 rolling batch 技巧进行优化,对于 k=0,,n1k = 0, \ldots, n - 1 , 一次证明所有 qq^k(X)q_{\hat{q}_k}(X) 的次数小于 2k2^k ,同时证明 qfζ(X)q_{f_\zeta}(X) 的次数小于 2n2^n 。为了方便后续协议的叙述,这里记

qq^n(X):=qfζ(X)q_{\hat{q}_n}(X) := q_{f_\zeta}(X)

因此 low degree test 的证明记为

πqq^n,qq^n1,,qq^0OPFRI.LDT(qq^n,qq^n1,,qq^0,2n)\pi_{q_{\hat{q}_{n}},q_{\hat{q}_{n - 1}}, \ldots, q_{\hat{q}_{0}}} \leftarrow \mathsf{OPFRI.LDT}(q_{\hat{q}_{n}},q_{\hat{q}_{n - 1}}, \ldots, q_{\hat{q}_{0}}, 2^{n})

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

  1. 初始化 i=ni = n ,记 D(n):=DD^{(n)} := D ,对于 xD(n)x \in D^{(n)} ,初始化
fold(i)(x)=qq^n(x)\mathsf{fold}^{(i)}(x) = q_{\hat{q}_{n}}(x)
  1. i=n1,,0i = n - 1, \ldots, 0 时:
fold(i)(y)=fold(i+1)(x)+fold(i+1)(x)2+β(i)fold(i+1)(x)fold(i+1)(x)2x\mathsf{fold}^{(i)}(y) = \frac{\mathsf{fold}^{(i + 1)}(x) + \mathsf{fold}^{(i + 1)}(-x)}{2} + \beta^{(i)} \cdot \frac{\mathsf{fold}^{(i + 1)}(x) - \mathsf{fold}^{(i + 1)}(-x)}{2x}
fold(i)(x)=fold(i)(x)+qq^i(x)\mathsf{fold}^{(i)}(x) = \mathsf{fold}^{(i)}(x) + q_{\hat{q}_{i}}(x)

Round 5

这一轮是接着 Prover 与 Verifier 进行 FRI 协议的 low degree test 交互的查询阶段,Verifier 重复查询 ll 次 :

📝 Notes

例如对 3 个多项式进行 query,query 选取的是 qq^2(X)q_{\hat{q}_2}(X) 中的最后一个元素 ω27\omega_2^7,那么 Prover 需要发送的值及其 Merkle Path 是下图中绿色部分,橙色边框标记的发送的并非商多项式本身的值和对应的 Merkle Path,而是 q^k(X)\hat{q}_k(X) 的 Merkle Path,即 Prover 会发送

>{q2^(ω27),q2^(ω23),q^1(ω13),fold(1)(ω11),q^0(ω01)}>> \{\hat{q_2}(\omega_2^7), \hat{q_2}(\omega_2^3), \hat{q}_1(\omega_1^3), \mathsf{fold}^{(1)}(\omega_1^1), \hat{q}_0(\omega_0^1)\} >

以及这些值对应的 Merkle Path。

Proof

Prover 发送的证明为

π=(cm(q^n1,q^n2,,q^0),f^(ζ),q^0(ζ),,q^n1(ζ),πqq^n,qq^n1,,qq^0)\begin{aligned} \pi = \left(\mathsf{cm}(\hat{q}_{n - 1}, \hat{q}_{n - 2}, \ldots, \hat{q}_0), \hat{f}(\zeta), \hat{q}_0(\zeta), \ldots, \hat{q}_{n - 1}(\zeta), \pi_{q_{\hat{q}_{n}},q_{\hat{q}_{n - 1}}, \ldots, q_{\hat{q}_{0}}}\right) \end{aligned}

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

πqq^n,,qq^0=(cm(fold(n1)(X)),,cm(fold(1)(X)),fold(0)(y0),{f^(t(n)),πf^(t(n)),f^(t(n)),πf^(t(n)),q^n1(t(n1)),πq^n1(t(n1)),fold(n1)(t(n1)),πfold(n1)(t(n1)),,q^1(t(1)),πq^1(t(1)),fold(1)(t(1)),πfold(1)(t(1)),q^0(t(0)),πq^0(t(0))}l)\begin{aligned} \pi_{q_{\hat{q}_{n}}, \ldots, q_{\hat{q}_{0}}} = & ( \mathsf{cm}(\mathsf{fold}^{(n - 1)}(X)), \ldots, \mathsf{cm}(\mathsf{fold}^{(1)}(X)),\mathsf{fold}^{(0)}(y_0), \\ & \, \{\hat{f}(t^{(n)}), \pi_{\hat{f}}(t^{(n)}), \hat{f}(- t^{(n)}), \pi_{\hat{f}}(- t^{(n)}),\\ & \quad \hat{q}_{n - 1}(t^{(n - 1)}), \pi_{\hat{q}_{n - 1}}(t^{(n - 1)}), \mathsf{fold}^{(n - 1)}(-t^{(n - 1)}), \pi_{\mathsf{fold}^{(n - 1)}}(-t^{(n - 1)}), \ldots, \\ & \quad \hat{q}_{1}(t^{(1)}), \pi_{\hat{q}_{1}}(t^{(1)}), \mathsf{fold}^{(1)}(-t^{(1)}), \pi_{\mathsf{fold}^{(1)}}(-t^{(1)}), \hat{q}_0(t^{(0)}), \pi_{\hat{q}_0}(t^{(0)})\}^l) \end{aligned}

Verification

Verifier

  1. qfζ(X)q_{f_{\zeta}}(X) 以及 nn 个商多项式 {qq^k}k=0n1\{q_{\hat{q}_k}\}_{k = 0}^{n - 1} 一次进行 low degree test 的验证,记为
OPFRI.verify(πqq^n,qq^n1,,qq^0,2n)=?1\mathsf{OPFRI.verify}( \pi_{q_{\hat{q}_{n}},q_{\hat{q}_{n-1}}, \ldots, q_{\hat{q}_{0}}}, 2^{n}) \stackrel{?}{=} 1

具体过程为,Verifier 重复 ll 次:

MT.verify(cm(f^(X),f^(t(n)),πf^(t(n)))=?1\mathsf{MT.verify}(\mathsf{cm}(\hat{f}(X), \hat{f}(t^{(n)}), \pi_{\hat{f}}(t^{(n)})) \stackrel{?}{=} 1
MT.verify(cm(f^(X),f^(t(n)),πf^(t(n)))=?1\mathsf{MT.verify}(\mathsf{cm}(\hat{f}(X), \hat{f}(-t^{(n)}), \pi_{\hat{f}}(-t^{(n)})) \stackrel{?}{=} 1
qq^n(t(n))=(1+λt(n))f^(t(n))f^(ζ)t(n)ζq_{\hat{q}_{n}}(t^{(n)}) = (1 + \lambda \cdot t^{(n)}) \cdot \frac{\hat{f}(t^{(n)}) - \hat{f}(\zeta)}{t^{(n)} - \zeta}
qq^n(t(n))=(1λt(n))f^(t(n))f^(ζ)t(n)ζq_{\hat{q}_{n}}(-t^{(n)}) = (1 - \lambda \cdot t^{(n)}) \cdot \frac{\hat{f}(-t^{(n)}) - \hat{f}(\zeta)}{-t^{(n)} - \zeta}

📝 Notes

例如对于前面 Verifier 查询的例子,这里 Verifier 通过 Prover 发送的值,计算图中紫色的值,以及验证 Prover 发送的关于橙色部分的 Merkle Tree 的证明,最后 Verifier 验证自己计算得到的最后一个紫色部分的值是否等于 Prover 之前发送的值。

  1. 计算 Φn(ζ)\Phi_n(\zeta) 以及 Φnk(ζ2k)(0k<n)\Phi_{n - k}(\zeta^{2^k})(0 \le k < n) ,满足
Φn(ζ)=1+ζ+ζ2++ζ2n1\Phi_n(\zeta) = 1 + \zeta + \zeta^2 + \ldots + \zeta^{2^n-1}
Φnk(ζ2k)=1+ζ2k+ζ22k++ζ(2nk1)2k\Phi_{n-k}(\zeta^{2^k}) = 1 + \zeta^{2^k} + \zeta^{2\cdot 2^k} + \ldots + \zeta^{(2^{n-k}-1)\cdot 2^k}
  1. 验证下述等式的正确性
f^(ζ)vΦn(ζ)=?k=0n1(ζ2kΦnk1(ζ2k+1)ukΦnk(ζ2k))q^k(ζ)\hat{f}(\zeta) - v\cdot\Phi_n(\zeta) \stackrel{?}{=} \sum_{k = 0}^{n - 1} \Big(\zeta^{2^k}\cdot \Phi_{n-k-1}(\zeta^{2^{k+1}}) - u_k\cdot\Phi_{n-k}(\zeta^{2^k})\Big)\cdot \hat{q}_k(\zeta)

References