Skip to article frontmatterSkip to article content

Gemini :对接 FRI

Gemini 协议 [BCH+22] 为我们提供了一种将 multilinear polynomial PCS 转换为一元多项式承诺方案的思路。简单回顾下,即为了证明一个 MLE 多项式在某个点的打开值为 vv ,可以转换为一个内积证明,该内积证明是对一个一元多项式不断进行类似 sumcheck 或者 FRI 协议中的 split-and-fold 得到的,这样又把内积证明转换为了要证明一些一元多项式在某些随机点处的值是正确的。在 Gemini 原论文中采用 KZG10 的一元多项式 PCS 实现了该证明。其实,一元多项式 PCS 也可以采用 FRI PCS 的方案。FRI PCS 有一个好处是对于不同次数的多项式在多个点的打开,可以用随机数合并成一个多项式,只需要再调用一次 FRI 的 low degree test 就能一次完成这些证明。

下面借鉴HyperPlonk 论文 [BBBZ23] 附录 B 中的描述,给出 Gemini 对接 FRI PCS 的详细协议。

协议描述

证明目标:对于一个有 nn 个变量的 MLE 多项式 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n - 1}) ,其表示为系数形式:

f~(X0,X1,,Xn1)=i=02n1ciX0i0X1i1Xn1in1\tilde{f}(X_0, X_1, \ldots, 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}}

其中 (i0,i1,,in1)(i_0, i_1,\ldots,i_{n - 1})ii 的二进制表示,i0i_0 是二进制表示的最低位,满足 i=j=0n1ij2ji = \sum_{j=0}^{n-1}i_j 2^{j}

证明的目标是证明 f~(X0,X1,,Xn1)\tilde{f}(X_0, X_1, \ldots, X_{n - 1}) 在点 u=(u0,u1,,un1)\vec{u} = (u_0,u_1, \ldots, u_{n - 1}) 处的值为 v=f~(u0,u1,,un1)v = \tilde{f}(u_0,u_1, \ldots, u_{n - 1})

公共输入

  1. FRI 协议参数:Reed Solomon 编码选取的区域 DnDn1D0=DD_n \subset D_{n-1} \subset \cdots \subset D_0 = D ,码率 ρ ,查询阶段的次数 ll
  2. 多项式 f(X)f(X) 的承诺 CfC_f
Cf=cm([f(x)xD])=MT.commit([f(x)xD])C_f = \mathsf{cm}([f(x)|_{x \in D}]) = \mathsf{MT.commit}([f(x)|_{x \in D}])

其中 f(X)f(X) 是一个次数为 2n12^n - 1 的多项式,其和 f~\tilde{f} 有相同的系数 c\vec{c}

f(X)=i=02n1ciXif(X) = \sum_{i = 0}^{2^n - 1} c_i \cdot X^i
  1. 求值点 u=(u0,u1,,un1)\vec{u} = (u_0,u_1, \ldots, u_{n - 1})
  2. v=f~(u0,u1,,un1)v = \tilde{f}(u_0,u_1, \ldots, u_{n - 1})

Witness

Round 1

  1. Prover 记 h0(X)=f(X)h_0(X) = f(X) ,计算折叠多项式 h1(X),h2(X),,hn1(X)h_1(X), h_2(X), \ldots, h_{n-1}(X) ,使得对于 i=1,,n1i = 1, \ldots, n-1
hi(X2)=hi1(X)+hi1(X)2+ui1hi1(X)hi1(X)2Xh_{i}(X^{2}) = \frac{h_{i - 1}(X) + h_{i - 1}(-X)}{2} + u_{i - 1} \cdot \frac{h_{i - 1}(X) - h_{i - 1}(-X)}{2X}
  1. Prover 计算承诺 (Ch1,Ch2,,Chn1)(C_{h_{1}},C_{h_{2}}, \ldots, C_{h_{n-1}}) ,其中对于 i=1,,n1i = 1, \ldots, n-1
Chi=cm([hi(x)xD])=MT.commit([hi(x)xD)C_{h_{i}} = \mathsf{cm}([h_{i}(x)|_{x \in D}]) = \mathsf{MT.commit}([h_{i}(x)|_{x \in D})

Round 2

  1. Verifier 发送随机数 β$FD\beta \stackrel{\$}{\leftarrow} \mathbb{F}^* \setminus D
  2. Prover 计算 {hi(β),hi(β),hi(β2)}i=0n1\{h_i(\beta), h_{i}(- \beta), h_i(\beta^2)\}_{i = 0}^{n-1} ,并发送给 Verifier。

Round 3

  1. Verifier 发送随机数 r$Fr \stackrel{\$}{\leftarrow} \mathbb{F}
  2. 先对每一个多项式 hi(X)(i=1,,n)h_{i}(X)(i = 1, \ldots, n) 进行 degree correction ,使得次数都对齐到 2n12^{n}- 1 。每个多项式的次数为 deg(hi)=2ni1\deg(h_i)=2^{n-i}-1 。对于 i=1,,n1i = 1, \ldots, n - 1 ,分别计算 hi(X)h'_i(X)

方法一:

hi(X)=hi(X)+rX2n2nihi(X)h'_i(X)=h_i(X)+r\cdot X^{2^{n} - 2^{n-i}} \cdot h_i(X)

方法二:若采用 STIR 论文 [ACFY24] 中的 degree correction 方法,则

hi(X)=j=02n2nirjXjhi(X)=hi(X)+rXhi(X)+r2X2hi(X)++r2n2niX2n2nihi(X)h'_i(X)=\sum_{j = 0}^{2^{n}- 2^{n - i}} r^{j} \cdot X^{j} \cdot h_i(X)=h_i(X)+r\cdot X \cdot h_i(X)+r^{2} \cdot X^2 \cdot h_i(X) + \ldots + r^{2^n - 2^{n-i}} \cdot X^{2^n - 2^{n-i}} \cdot h_i(X)

注:方法二会比方法一有更高的安全性。([ACFY24, 2.3])

  1. h0(X)h_0(X)h1(X),,hn1(X)h_1'(X), \ldots, h_{n-1}'(X) 用随机数 rr 的幂次 batch 成一个多项式,

方法一:计算

h(X)=h0(X)+r1+(0)h1(X)+r2+(0+1)h2(X)+r3+(0+1+1)h3(X)++rn1+(0+1(n2))hn1(X)=h0(X)+rh1(X)+r3h2(X)+r5h3(X)++r2n3hn1(X)(1)\begin{align*} h^*(X) & = h_0(X) + r^{1 + (0)} \cdot h_1'(X) + r^{2 + (0 + 1)} \cdot h_2'(X) + r^{3 + (0 + 1 + 1)} \cdot h_3'(X)+ \ldots + r^{n - 1 + (0 + 1 \cdot (n - 2))} \cdot h_{n-1}'(X) \\ & = h_0(X) + r \cdot h_1'(X) + r^{3} \cdot h_2'(X) + r^{5} \cdot h_3'(X)+ \ldots + r^{2n-3} \cdot h_{n-1}'(X) \end{align*} \tag{1}

方法二:若采用 STIR 论文中的 degree correction 方法,则此时 batch 的多项式计算为

h(X)=h0(X)+r1+(0)h1(X)+r2+(0+e1)h2(X)+r3+(0+e1+e2)h3(X)++rn1+(0+e1+e2++en2)hn1(X)=h0(X)+rh1(X)+r2+2n2n1h2(X)+r2+i=12(2n2i)h3(X)++rn1+i=1n2(2n2i)hn1(X)(2)\begin{align*} h^*(X) & = h_0(X) + r^{1 + (0)} \cdot h_1'(X) + r^{2 + (0 + e_1)} \cdot h_2'(X) + r^{3 + (0 + e_1 + e_2)} \cdot h_3'(X)\\ & \quad + \ldots + r^{n - 1 + (0 + e_1 + e_2 + \ldots + e_{n-2})} \cdot h_{n-1}'(X) \\ & = h_0(X) + r \cdot h_1'(X) + r^{2 + 2^n - 2^{n -1}} \cdot h_2'(X) + r^{2 + \sum_{i=1}^{2}(2^n-2^i)} \cdot h_3'(X) \\ & \quad + \ldots + r^{n - 1+\sum_{i=1}^{n-2}(2^n-2^i)} \cdot h_{n-1}'(X) \end{align*} \tag{2}
  1. 计算商多项式 q(X)q'(X) ,能验证 h(X)h^*(X) 同时在点 (β,β,β2)(\beta,-\beta,\beta^2) 打开是否正确,
q(X)=h(X)h(β)Xβ+h(X)h(β)X+β+h(X)h(β2)Xβ2q'(X) = \frac{h^*(X)-h^*(\beta)}{X-\beta} + \frac{h^*(X)-h^*(-\beta)}{X+\beta} + \frac{h^*(X)-h^*(\beta^2)}{X-\beta^2}

上述商多项式的构造参考论文 [H22] Multi-point queries 小节。

Round 4

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

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

DD 上的值。

Round 5

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

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

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

📝 Notes

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

Round 6

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

重复 ll 次:

{(hi(s(0)),πhi(s(0)))}i=0n1{MT.open([hi(x)xD0],s(0))}i=0n1\{(h_i(-s^{(0)}), \pi_{h_i}(-s^{(0)}))\}_{i = 0}^{n-1} \leftarrow \{\mathsf{MT.open}([h_i(x)|_{x \in D_0}], -s^{(0)})\}_{i = 0}^{n-1}
{(q(i)(s(i)),πq(i)(s(i)))}MT.open([q(i)(x)xDi],s(i))\{(q^{(i)}(-s^{(i)}), \pi_{q}^{(i)}(-s^{(i)}))\} \leftarrow \mathsf{MT.open}([q^{(i)}(x)|_{x \in D_i}], -s^{(i)})

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

Proof

Prover 发送的证明为

π=(Ch1,Ch2,,Chn1,{hi(β),hi(β),hi(β2)}i=0n1,πq)\pi = (C_{h_{1}},C_{h_{2}}, \ldots, C_{h_{n-1}}, \{h_i(\beta), h_{i}(- \beta), h_i(\beta^2)\}_{i = 0}^{n-1}, \pi_{q})

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

πq=(cm(q(1)(X)),,cm(q(n1)(X)),q(n)(x0),{h0(s(0)),πh0(s(0)),h0(s(0)),πh0(s(0)),,hn1(s(0)),πhn1(s(0)),hn1(s(0)),πhn1(s(0)),q(1)(s(1)),πq(1)(s(1)),q(1)(s(1)),πq(1)(s(1)),,q(n1)(s(n1)),πq(n1)(s(n1)),q(n1)(s(n1)),πq(i)(s(n1))}l)\begin{aligned} \pi_{q} = & ( \mathsf{cm}(q^{(1)}(X)), \ldots, \mathsf{cm}(q^{(n - 1)}(X)),q^{(n)}(x_0), \\ & \, \{h_0(s^{(0)}), \pi_{h_0}(s^{(0)}), h_0(- s^{(0)}), \pi_{h_0}(-s^{(0)}), \cdots ,\\ & \quad h_{n-1}(s^{(0)}), \pi_{h_{n-1}}(s^{(0)}), h_{n-1}(- s^{(0)}), \pi_{h_{n-1}}(-s^{(0)}), \\ & \quad q^{(1)}(s^{(1)}), \pi_{q^{(1)}}(s^{(1)}),q^{(1)}(-s^{(1)}), \pi_{q^{(1)}}(-s^{(1)}), \ldots, \\ & \quad q^{(n - 1)}(s^{(n - 1)}), \pi_{q^{(n - 1)}}(s^{(n - 1)}),q^{(n - 1)}(-s^{(n - 1)}), \pi_{q^{(i)}}(-s^{(n - 1)})\}^l) \end{aligned}

Verification

  1. Verifier 验证折叠过程是否正确,对于 i=1,,n1i = 1, \ldots, n - 1 ,根据 Prover 发送过来的值计算并验证
hi(β2)=?hi1(β)+hi1(β)2+ui1hi1(β)hi1(β)2βh_{i}(\beta^{2}) \stackrel{?}{=} \frac{h_{i - 1}(\beta) + h_{i - 1}(-\beta)}{2} + u_{i - 1} \cdot \frac{h_{i - 1}(\beta) - h_{i - 1}(-\beta)}{2\beta}
  1. Verifier 验证最后是否折叠为常数 vv ,验证
hn1(β)+hn1(β)2+un1hn1(β)hn1(β)2β=?v\frac{h_{n - 1}(\beta) + h_{n - 1}(-\beta)}{2} + u_{n - 1} \cdot \frac{h_{n - 1}(\beta) - h_{n - 1}(-\beta)}{2\beta} \stackrel{?}{=} v
  1. 验证 q(X)q(X) 的 low degree test 证明,
FRI.LDT.verify(πq,2n)=?1\mathsf{FRI.LDT.verify}(\pi_{q}, 2^n) \stackrel{?}{=} 1

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

MT.verify(cm(hi(X)),hi(s(0)),πhi(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(h_i(X)), h_i(s^{(0)}), \pi_{h_i}(s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(hi(X)),hi(s(0)),πhi(s(0)))=?1\mathsf{MT.verify}(\mathsf{cm}(h_i(X)), h_i(-s^{(0)}), \pi_{h_i}(-s^{(0)})) \stackrel{?}{=} 1

方法一:对于 i=1,,n1i = 1, \ldots, n - 1 ,计算出

hi(x)=hi(x)+r(x)2n2nihi(x)h'_i(x)=h_i(x)+r\cdot (x)^{2^{n} - 2^{n-i}} \cdot h_i(x)

接着计算

h(x)=h0(x)+rh1(x)+r3h2(x)+r5h3(x)++r2n3hn1(x)\begin{align*} h^*(x) & = h_0(x) + r \cdot h_1'(x) + r^{3} \cdot h_2'(x) + r^{5} \cdot h_3'(x)+ \ldots + r^{2n-3} \cdot h_{n-1}'(x) \end{align*}

方法二:若采用 STIR 论文 [ACFY24] 中的 degree correction 方法,对于 i=1,,n1i = 1, \ldots, n - 1 ,计算出

hi(x)=j=02n2nirj(x)jhi(x)={hi(x)1(rx)2n2ni+11rxif rx0hi(x)(2n2ni+1)if rx=0h'_i(x)=\sum_{j = 0}^{2^{n}- 2^{n - i}} r^{j} \cdot (x)^{j} \cdot h_i(x) = \begin{cases} h_i(x) \cdot \frac{1 - (r \cdot x)^{2^n - 2^{n-i} + 1}}{1 - r \cdot x} & \text{if } r \cdot x \neq 0\\ h_i(x) \cdot (2^n - 2^{n-i} + 1) & \text{if } r \cdot x = 0 \end{cases}

接着计算得到

h(x)=h0(x)+rh1(x)+r2+2n2n1h2(x)+r2+i=12(2n2i)h3(x)++rn1+i=1n2(2n2i)hn1(x)\begin{align*} h^*(x) & = h_0(x) + r \cdot h_1'(x) + r^{2 + 2^n - 2^{n -1}} \cdot h_2'(x) + r^{2 + \sum_{i=1}^{2}(2^n-2^i)} \cdot h_3'(x) \\ & \quad + \ldots + r^{n - 1+\sum_{i=1}^{n-2}(2^n-2^i)} \cdot h_{n-1}'(x) \end{align*}
q(s(0))=h(s(0))h(β)s(0)β+h(s(0))h(β)s(0)+β+h(s(0))h(β2)s(0)β2q'(-s^{(0)}) = \frac{h^*(-s^{(0)})-h^*(\beta)}{-s^{(0)}-\beta} + \frac{h^*(-s^{(0)})-h^*(-\beta)}{-s^{(0)}+\beta} + \frac{h^*(-s^{(0)})-h^*(\beta^2)}{-s^{(0)}-\beta^2}
q(0)(s(0))=(1+λs(0))q(s(0))q^{(0)}(s^{(0)}) = (1 + \lambda \cdot s^{(0)}) q'(s^{(0)})
q(0)(s(0))=(1λs(0))q(s(0))q^{(0)}(-s^{(0)}) = (1 - \lambda \cdot s^{(0)}) q'(-s^{(0)})
MT.verify(cm(q(1)(X)),q(1)(s(1)),πq(1)(s(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q^{(1)}(X)), q^{(1)}(s^{(1)}), \pi_{q^{(1)}}(s^{(1)})) \stackrel{?}{=} 1
MT.verify(cm(q(1)(X)),q(1)(s(1)),πq(1)(s(1)))=?1\mathsf{MT.verify}(\mathsf{cm}(q^{(1)}(X)), q^{(1)}(-s^{(1)}), \pi_{q^{(1)}}(-s^{(1)})) \stackrel{?}{=} 1
q(1)(s(1))=?q(0)(s(0))+q(0)(s(0))2+α(1)q(0)(s(0))q(0)(s(0))2s(0)q^{(1)}(s^{(1)}) \stackrel{?}{=} \frac{q^{(0)}(s^{(0)}) + q^{(0)}(- s^{(0)})}{2} + \alpha^{(1)} \cdot \frac{q^{(0)}(s^{(0)}) - q^{(0)}(- s^{(0)})}{2 \cdot s^{(0)}}

Reference