Skip to article frontmatterSkip to article content

缺失的协议 PH23-PCS(五)

在上篇文章 缺失的协议 PH23-PCS(四) 中的 对接 FRI 这一小节回顾了 PH23 协议的证明分为两部分:

  1. 证明 c\vec{c} 是 Well-Formedness。
  2. 证明内积 a,c=v\langle \vec{a}, \vec{c} \rangle = v

为了证明 1 的正确性,需要证明下面 n+1n + 1 个多项式在一个乘法子群 H={ω0,ω1,,ωN1}H = \{\omega^0, \omega^1, \ldots, \omega^{N - 1}\} 上的值都为 0

p0(X)=s0(X)(c(X)(1u0)(1u1)(1un1))p1(X)=s0(X)(c(X)un1c(ω2n1X)(1un1))p2(X)=s1(X)(c(X)un2c(ω2n2X)(1un2))pn(X)=sn1(X)(c(X)u0c(ωX)(1u0))\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}

在文章 缺失的协议 PH23-PCS(四) 介绍的协议中为了证明 2 的正确性,采用的是 Grand Sum 方法来证明。这里我们使用 Univariate Sumcheck 协议来证明内积。对 a(X)c(X)a(X) \cdot c(X) 进行分解

a(X)c(X)=qac(X)vH(X)+Xg(X)+(v/N),deg(g)<N1a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N), \quad \deg(g)<N-1

如果证明了上面的等式成立以及 deg(g)<N1\deg (g) < N - 1 ,也就证明了内积正确 a,c=v\langle \vec{a}, \vec{c} \rangle = v

下面看看 Verifier 如何验证上面的多项式成立以及 deg(g)<N1\deg (g) < N - 1

  1. 证明 c\vec{c} 是 Well-Formedness。

    先用 Verifier 给出的随机数 αn+1n + 1 个多项式 pi(X)p_i(X) 聚合成一个多项式 p(X)p(X)

    p(X)=p0(X)+αp1(X)+α2p2(X)++αnpn(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(X)HH 上的取值都为 0 ,那么取 vH(X)v_H(X)HH 上的 Vanishing 多项式,那么存在一个商多项式 t(X)t(X) ,满足

    p(X)=t(X)vH(X)p(X) = t(X) \cdot v_H(X)

    为了验证商多项式的存在性,Verifier 选取随机点 ζ ,Prover 发送

    (c(ζ),c(ζω),c(ζω2),,c(ζω2n1),t(ζ))\big(c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), \ldots, c(\zeta\cdot\omega^{2^{n-1}}), t(\zeta)\big)

    Verifier 可以计算出 p(ζ)p(\zeta) ,自行计算出 vH(ζ)v_H(\zeta) ,来验证

    p(ζ)=?t(ζ)vH(ζ)p(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta)
  2. 证明内积 a,c=v\langle \vec{a}, \vec{c} \rangle = v

    为了证明

    a(X)c(X)=qac(X)vH(X)+Xg(X)+(v/N),deg(g)<N1a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N), \quad \deg(g)<N-1

    可以采用同一个随机数 ζ ,Prover 再发送

    (a(ζ),qac(ζ),g(ζ))\big(a(\zeta), q_{ac}(\zeta), g(\zeta)\big)

    Verifier 验证

    a(ζ)c(ζ)=?qac(ζ)vH(ζ)+ζg(ζ)+(v/N)a(\zeta)\cdot c(\zeta) \overset{?}{=} q_{ac}(\zeta)\cdot v_H(\zeta) + \zeta\cdot g(\zeta) + (v/N)

    同时需要证明 deg(g)<N1\deg(g)<N-1 ,这可以用 FRI 的 low degree test 来证明。

为了说明上面 Prover 发送的值正确,需要借助 FRI-PCS 来进行证明。为了结合 FRI 协议,这里先分析这些多项式的次数,由于 a(X)a(X)c(X)c(X) 分别是通过 a\vec{a}c\vec{c} 得到的,因此

deg(a(X))=N1,deg(c(X))=N1\deg(a(X)) = N - 1, \quad \deg(c(X)) = N - 1

si(X)=vH(X)vHi(X)=XN1X2i1s_i(X) = \frac{v_H(X)}{v_{H_i}(X)} = \frac{X^N-1}{X^{2^i}-1}

可知 deg(si)=N2i\deg(s_i) = N - 2^i ,因此

deg(p(X))=deg(p0(X))=deg(s0(X))+deg(c(X))=N1+N1=2N2\deg(p(X)) = \deg(p_0(X)) = \deg(s_0(X)) + \deg(c(X)) = N - 1+ N - 1 = 2N - 2
deg(t(X))=deg(p(X))deg(vH(X))=2N2N=N2\deg(t(X)) = \deg(p(X)) - \deg(v_H(X)) = 2N - 2 - N = N - 2

根据 a(X)c(X)a(X) \cdot c(X) 的分解,可以得出

deg(qac(X))=deg(a(X)c(X))deg(vH(X))=2N2N=N2\deg(q_{ac}(X)) = \deg(a(X) \cdot c(X)) - \deg(v_H(X)) = 2N - 2 - N = N - 2
deg(g(X))=N11=N2\deg(g(X)) = N - 1 - 1 = N - 2

为了只调用一次 FRI 的 low degree test ,先进行 degree correction,向 Verifier 要一个随机数 r$Fr \stackrel{\$}{\leftarrow} \mathbb{F}

t(X)=t(X)+rXt(X)t'(X) = t(X) + r \cdot X \cdot t(X)
qac(X)=qac(X)+rXqac(X)q'_{ac}(X) = q_{ac}(X) + r \cdot X \cdot q_{ac}(X)
g(X)=g(X)+rXg(X)g'(X) = g(X) + r \cdot X \cdot g(X)

现在多项式 a(X),c(X),t(X),qac(X),g(X)a(X), c(X), t'(X), q'_{ac}(X), g'(X) 的次数都为 N1N - 1 。Prover 发送的值有

(c(ζ),c(ζω),c(ζω2),,c(ζω2n1),t(ζ),a(ζ),qac(ζ),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)

为了证明上面发送的值是正确的,一个函数可能在多个点同时打开,依然采用与本文对接 FRI 小节介绍的构造商多项式的相同方法。

接着用随机数 rr 的幂次将上面 5 个 low degree test batch 成一个 low degree test 证明。令

q(X)=qa(X)+rqc(X)+r2qt(X)+r4qqac(X)+r6qg(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)

注意,由于 t(X),qac(X),g(X)t'(X), q_{ac}'(X) , g'(X) 多项式进行 degree correction 时已经用了随机数 rr ,为了能用一个随机数的幂次达到多个随机数的效果,因此上面 batch 的幂次不是按自然数递增的,不是 (1,r,r2,r3,r4)(1, r, r^2, r^3, r^4) 而是 (1,r,r2,r4,r6)(1, r, r^2, r^4, r^6)

下面只需要用 FRI 的 low degree test 来证明 deg(q(X))<N1\deg(q'(X)) < N - 1 就大功告成了。最后为了对接 FRI low degree test 协议,需要将 q(X)q'(X) 的次数对齐到 2 的幂次,即向 Verifier 要一个随机数 λ ,证明

q(X)=(1+λX)q(X)q(X) = (1 + \lambda \cdot X) q'(X)

的次数小于 NN

PH23 + FRI 协议

Commit 阶段

对于 FRI 协议,对多项式的承诺就是计算其 Reed-Solomon 编码,并对编码进行承诺。在 PCS 的 Commit 阶段需要对原 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}))

a\vec{a} 就唯一确定了一个 nn 元 MLE 多项式,要对 MLE 多项式 f~\tilde{f} 承诺其实就是对 a\vec{a} 进行承诺,若用 FRI 协议,那么就先要将 a\vec{a} 转换成多项式 a(X)a(X) ,再对其在 DD 上的 Reed-Solomon 编码进行承诺。

  1. Prover 构造一元多项式 a(X)a(X) ,使其在 HH 上的求值为 a=(a0,a1,,aN1)\vec{a} = (a_{0,}a_{1},\ldots, a_{N-1})

    a(X)=a0L0(X)+a1L1(X)++aN1LN1(X)a(X) = a_0 \cdot L_0(X) + a_1 \cdot L_1(X) + \ldots + a_{N-1} \cdot L_{N-1}(X)
  2. Prover 计算多项式 a(X)a(X) 的承诺 CaC_a ,并将 CaC_a 发送给 Verifier

    Ca=cm([a(x)xD])=MT.commit([a(x)xD])C_a = \mathsf{cm}([a(x)|_{x \in D}]) = \mathsf{MT.commit}([a(x)|_{x \in D}])

公共输入

  1. FRI 协议参数:Reed Solomon 编码选取的区域 DnDn1D0=DD_n \subset D_{n-1} \subset \cdots \subset D_0 = D ,码率 ρ ,查询阶段的次数 ll

  2. 承诺 CaC_a

    Ca=cm([a(x)xD])=MT.commit([a(x)xD])C_a = \mathsf{cm}([a(x)|_{x \in D}]) = \mathsf{MT.commit}([a(x)|_{x \in D}])
  3. 求值点 u=(u0,u1,,un1)\vec{u} = (u_0,u_1, \ldots, u_{n - 1})

  4. v=f~(u0,u1,,un1)v = \tilde{f}(u_0,u_1, \ldots, u_{n - 1})

Witness

Evaluation 证明协议

Round 1

Prover:

  1. 计算向量 c\vec{c},其中每个元素 ci=eq(bits(i),u)c_i=\overset{\sim}{eq}(\mathsf{bits}(i), \vec{u})

  2. 构造多项式 c(X)c(X),其在 HH 上的运算结果恰好是 c\vec{c}

    c(X)=i=0N1ciLi(X)c(X) = \sum_{i=0}^{N-1} c_i \cdot L_i(X)
  3. 计算 c(X)c(X) 的承诺 CcC_c,并发送 CcC_c

    Cc=cm([c(x)xD])=MT.commit([c(x)xD])C_c = \mathsf{cm}([c(x)|_{x \in D}]) = \mathsf{MT.commit}([c(x)|_{x \in D}])
  4. 分解 a(X)c(X)a(X) \cdot c(X) ,计算得到 qac(X)q_{ac}(X)g(X)g(X) ,满足

    a(X)c(X)=qac(X)vH(X)+Xg(X)+(v/N)a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N)
  5. 计算 qac(X)q_{ac}(X) 的承诺 CqacC_{q_{ac}} ,并发送 CqacC_{q_{ac}}

    Cqac=cm([qac(x)xD])=MT.commit([qac(x)xD])C_{q_{ac}} = \mathsf{cm}([q_{ac}(x)|_{x \in D}]) = \mathsf{MT.commit}([q_{ac}(x)|_{x \in D}])
  6. 计算 g(X)g(X) 的承诺 CgC_g ,并发送 CgC_{g}

    Cg=cm([g(x)xD])=MT.commit([g(x)xD])C_{g} = \mathsf{cm}([g(x)|_{x \in D}]) = \mathsf{MT.commit}([g(x)|_{x \in D}])

Round 2

Verifier: 发送挑战数 α$Fp\alpha \stackrel{\$}{\leftarrow} \mathbb{F}_p

Prover:

  1. 构造关于 c\vec{c} 的约束多项式 p0(X),,pn(X)p_0(X),\ldots, p_{n}(X)

    p0(X)=s0(X)(c(X)(1u0)(1u1)...(1un1))pk(X)=sk1(X)(unkc(X)(1unk)c(ω2nkX)),k=1n\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}
  2. {pi(X)}\{p_i(X)\} 聚合为一个多项式 p(X)p(X)

    p(X)=p0(X)+αp1(X)+α2p2(X)++αnpn(X)p(X) = p_0(X) + \alpha\cdot p_1(X) + \alpha^2\cdot p_2(X) + \cdots + \alpha^{n}\cdot p_{n}(X)
  3. 计算 Quotient 多项式 t(X)t(X),满足

    p(X)=t(X)vH(X)p(X) =t(X)\cdot v_H(X)
  4. 计算 t(X)t(X) 的承诺 CtC_t ,并发送给 Verifier

    Ct=cm([t(x)xD])=MT.commit([t(x)xD])\begin{split} C_t &= \mathsf{cm}([t(x)|_{x \in D}]) = \mathsf{MT.commit}([t(x)|_{x \in D}]) \end{split}

Round 3

Verifier: 发送随机求值点 ζ$FpD\zeta \stackrel{\$}{\leftarrow} \mathbb{F}_p^* \setminus D

Prover:

  1. 计算 si(X)s_i(X)ζ 处的取值:

    s0(ζ),s1(ζ),,sn1(ζ)s_0(\zeta), s_1(\zeta), \ldots, s_{n-1}(\zeta)

    这里 Prover 可以高效计算 si(ζ)s_i(\zeta) ,由 si(X)s_i(X) 的公式得

    si(ζ)=ζN1ζ2i1=(ζN1)(ζ2i+1)(ζ2i1)(ζ2i+1)=ζN1ζ2i+11(ζ2i+1)=si+1(ζ)(ζ2i+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}

    因此 si(ζ)s_i(\zeta) 的值可以通过 si+1(ζ)s_{i + 1}(\zeta) 计算得到,而

    sn1(ζ)=ζN1ζ2n11=ζ2n1+1s_{n-1}(\zeta) = \frac{\zeta^N - 1}{\zeta^{2^{n-1}} - 1} = \zeta^{2^{n-1}} + 1

    因此可以得到一个 O(n)O(n) 的算法来计算 si(ζ)s_i(\zeta) ,并且这里不含除法运算。计算过程是:sn1(ζ)sn2(ζ)s0(ζ)s_{n-1}(\zeta) \rightarrow s_{n-2}(\zeta) \rightarrow \cdots \rightarrow s_0(\zeta)

  2. 定义求值 Domain HζH_\zeta',包含 n+1n+1 个元素:

    Hζ=ζH={ζ,ωζ,ω2ζ,ω4ζ,,ω2n1ζ}H_\zeta'=\zeta H = \{\zeta, \omega\zeta, \omega^2\zeta,\omega^4\zeta, \ldots, \omega^{2^{n-1}}\zeta\}
  3. 计算并发送 c(X)c(X)HζH_\zeta' 上的取值

    c(ζ),c(ζω),c(ζω2),c(ζω4),,c(ζω2n1)c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}})
  4. 计算并发送 t(ζ)t(\zeta)

  5. 计算并发送 a(ζ)a(\zeta)

  6. 计算并发送 qac(ζ)q_{ac}(\zeta)

  7. 计算并发送 g(ζ)g(\zeta)

Round 4

Verifier: 发送随机数 r$Fpr \stackrel{\$}{\leftarrow} \mathbb{F}_p

Prover:

  1. 进行 degree correction ,计算多项式 t(X),qac(X),g(X)t'(X), q'_{ac}(X), g'(X)

    t(X)=t(X)+rXt(X)t'(X) = t(X) + r \cdot X \cdot t(X)
    qac(X)=qac(X)+rXqac(X)q'_{ac}(X) = q_{ac}(X) + r \cdot X \cdot q_{ac}(X)
    g(X)=g(X)+rXg(X)g'(X) = g(X) + r \cdot X \cdot g(X)
  2. 计算商多项式 qa(X)q_a(X)

    qa(X)=a(X)a(ζ)Xζq_a(X) = \frac{a(X) - a(\zeta)}{X - \zeta}
  3. 计算商多项式 qc(X)q_c(X)

    qc(X)=xHζc(X)c(x)Xx=c(X)c(ζ)Xζ+c(X)c(ζω)Xζω++c(X)c(ζω2n1)Xζω2n1q_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}}}
  4. 计算商多项式 qt(X)q_{t'}(X)

    qt(X)=t(X)t(ζ)Xζq_{t'}(X) = \frac{t'(X) - t'(\zeta)}{X - \zeta}
  5. 计算商多项式 qqac(X)q_{q_{ac}'}(X)

    qqac(X)=qac(X)qac(ζ)Xζq_{q_{ac}'}(X) = \frac{q_{ac}'(X) - q_{ac}'(\zeta)}{X - \zeta}
  6. 计算商多项式 qg(X)q_{g'}(X)

    qg(X)=g(X)g(ζ)Xζq_{g'}(X) = \frac{g'(X) - g'(\zeta)}{X - \zeta}
  7. 将上面的 5 个商多项式用随机数 rr 的幂次 batch 成一个多项式

    q(X)=qa(X)+rqc(X)+r2qt(X)+r4qqac(X)+r6qg(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)

Round 5

这一轮将商多项式 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 6

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 7

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

重复 ll 次:

(a(s(0)),πa(s(0)))MT.open([a(x)xD0],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)xD0],s(0))(a(-s^{(0)}), \pi_{a}(-s^{(0)})) \leftarrow \mathsf{MT.open}([a(x)|_{x \in D_0}], -s^{(0)})
(c(s(0)),πc(s(0)))MT.open([c(x)xD0],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)xD0],s(0))(c(-s^{(0)}), \pi_{c}(-s^{(0)})) \leftarrow \mathsf{MT.open}([c(x)|_{x \in D_0}], -s^{(0)})
(t(s(0)),πt(s(0)))MT.open([t(x)xD0],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)xD0],s(0))(t(-s^{(0)}), \pi_{t}(-s^{(0)})) \leftarrow \mathsf{MT.open}([t(x)|_{x \in D_0}], -s^{(0)})
(qac(s(0)),πqac(s(0)))MT.open([qac(x)xD0],s(0))(q_{ac}(s^{(0)}), \pi_{q_{ac}}(s^{(0)})) \leftarrow \mathsf{MT.open}([q_{ac}(x)|_{x \in D_0}], s^{(0)})
(qac(s(0)),πqac(s(0)))MT.open([qac(x)xD0],s(0))(q_{ac}(-s^{(0)}), \pi_{q_{ac}}(-s^{(0)})) \leftarrow \mathsf{MT.open}([q_{ac}(x)|_{x \in D_0}], -s^{(0)})
(g(s(0)),πg(s(0)))MT.open([g(x)xD0],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)xD0],s(0))(g(-s^{(0)}), \pi_{g}(-s^{(0)})) \leftarrow \mathsf{MT.open}([g(x)|_{x \in D_0}], -s^{(0)})
{(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 发送的证明为

π=(Cc,Cqac,Cg,Ct,c(ζ),c(ζω),c(ζω2),c(ζω4),,c(ζω2n1),t(ζ),a(ζ),qac(ζ),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})

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

πq=(cm(q(1)(X)),,cm(q(n1)(X)),q(n)(x0),{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)),qac(s(0)),πqac(s(0)),qac(s(0)),πqac(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(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), \\ & \, \{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}

Verification

  1. Verifier 计算 s0(ζ),,sn1(ζ)s_0(\zeta), \ldots, s_{n-1}(\zeta) ,其计算方法可以采用前文提到的递推方式进行计算。

  2. Verifier 计算 p0(ζ),,pn(ζ)p_0(\zeta), \ldots, p_n(\zeta)

    p0(ζ)=s0(ζ)(c(ζ)(1u0)(1u1)...(1un1))pk(ζ)=sk1(ζ)(unkc(ζ)(1unk)c(ω2nkζ)),k=1n\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}
  3. Verifier 计算 p(ζ)p(\zeta)

    p(ζ)=p0(ζ)+αp1(ζ)+α2p2(ζ)++αnpn(ζ)p(\zeta) = p_0(\zeta) + \alpha\cdot p_1(\zeta) + \alpha^2\cdot p_2(\zeta) + \cdots + \alpha^{n}\cdot p_{n}(\zeta)
  4. Verifier 计算 vH(ζ)v_H(\zeta)

    vH(ζ)=ζN1v_H(\zeta) = \zeta^N - 1
  5. Verifier 验证商多项式的正确性

    p(ζ)=?t(ζ)vH(ζ)p(\zeta) \stackrel{?}{=} t(\zeta) \cdot v_H(\zeta)
  6. Verifier 验证内积的正确性

    a(ζ)c(ζ)=?qac(ζ)vH(ζ)+ζg(ζ)+(v/N)a(\zeta)\cdot c(\zeta) \overset{?}{=} q_{ac}(\zeta)\cdot v_H(\zeta) + \zeta\cdot g(\zeta) + (v/N)
  7. Verifier 验证 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(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\mathsf{MT.verify}(\mathsf{cm}(a(X)), a(-s^{(0)}), \pi_{a}(-s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(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\mathsf{MT.verify}(\mathsf{cm}(c(X)), c(-s^{(0)}), \pi_{c}(-s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(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\mathsf{MT.verify}(\mathsf{cm}(t(X)), t(-s^{(0)}), \pi_{t}(-s^{(0)})) \stackrel{?}{=} 1
MT.verify(cm(qac(X)),qac(s(0)),πqac(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(qac(X)),qac(s(0)),πqac(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(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\mathsf{MT.verify}(\mathsf{cm}(g(X)), g(-s^{(0)}), \pi_{g}(-s^{(0)})) \stackrel{?}{=} 1
t(s(0))=t(s(0))+rs(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)})
qac(s(0))=qac(s(0))+rs(0)qac(s(0)),qac(s(0))=qac(s(0))+r(s(0))qac(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)})
g(s(0))=g(s(0))+rs(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)})
t(ζ)=t(ζ)+rζt(ζ)t'(\zeta) = t(\zeta) + r \cdot \zeta \cdot t(\zeta)
qac(ζ)=qac(ζ)+rζqac(ζ)q_{ac}'(\zeta) = q_{ac}(\zeta) + r \cdot \zeta \cdot q_{ac}(\zeta)
g(ζ)=g(ζ)+rζg(ζ)g'(\zeta) = g(\zeta) + r \cdot \zeta \cdot g(\zeta)
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(ζω2n1)s(0)ζω2n1)+r2t(s(0))t(ζ)s(0)ζ+r4qac(s(0))qac(ζ)s(0)ζ+r6g(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))=a(s(0))a(ζ)s(0)ζ+r(c(s(0))c(ζ)s(0)ζ+c(s(0))c(ζω)s(0)ζω++c(s(0))c(ζω2n1)s(0)ζω2n1)+r2t(s(0))t(ζ)s(0)ζ+r4qac(s(0))qac(ζ)s(0)ζ+r6g(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(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)}}

两种对接 FRI 协议的比较

对比 缺失的协议 PH23-PCS(四) 和本文的协议,两种协议的不同点是由证明内积的方式不同导致的,用协议 1 表示文章 缺失的协议 PH23-PCS(四) 中的协议,证明内积使用的是 Grand Sum 方法,需要计算类和的多项式 z(X)z(X) ,并用三个多项式在 HH 上都需要为 0 来约束 z(X)z(X) 构造的正确性,即

h0(X)=L0(X)(z(X)a0c0)h1(X)=(X1)(z(X)z(ω1X)a(X)c(X))h2(X)=LN1(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}

用协议 2 表示本文的协议,协议 2 证明内积使用的是 Univariate Sumcheck 方法,需要对 a(X)c(X)a(X) \cdot c(X) 进行分解,得到 qac(X)q_{ac}(X)g(X)g(X)

a(X)c(X)=qac(X)vH(X)+Xg(X)+(v/N),deg(g)<N1a(X)\cdot c(X) = q_{ac}(X)\cdot v_H(X) + X\cdot g(X) + (v/N), \quad \deg(g)<N-1

下面根据这两个协议的不同之处对比下它们之间的计算复杂度。

Prover 计算量:

通过对比可以发现,复杂度涉及多项式的计算方法,但整体上两个协议在 Prover 计算量上差别不是特别大。

Proof 大小:

通过对比可以发现协议 2 的 proof size 更大,需要额外发送一些哈希值和有限域上的值,且该数量是和重复次数 ll 相关的。

Verifier 计算量:

通过对比可以发现协议 1 的 Verifier 计算量要优于协议 2。

综合来看,由于协议 2 中对接 FRI 协议时,需要处理的多项式有 5 个,分别是 a(X),c(X),t(X),qac(X),g(X)a(X),c(X),t(X),q_{ac}(X),g(X) ,这相比协议 1 多了 1 个多项式,同时这 5 个多项式中的次数不统一,需要将 t(X),qac(X),g(X)t(X),q_{ac}(X),g(X) 这几个多项式进行 degree correction 提升到 N1N - 1 次。由于协议开始承诺的是原多项式 a(X),c(X),t(X),qac(X),g(X)a(X),c(X),t(X),q_{ac}(X),g(X) ,相比协议 1 多承诺的 1 个多项式以及进行 degree correction 的操作,就会导致在后续在进行 FRI low degree test 时增加复杂度。

在 query 阶段,协议 2 就需要多发送一个多项式对应查询点的证明,而这需要重复 ll 次,这就导致了 proof size 的增加,另一方面,在 verifier 验证阶段,verifier 不仅要多对发过来的查询点的证明进行验证,同时需要自己计算 degree correction 之后的函数在查询点的值,这也是和 ll 相关的,导致了 verifier 计算复杂度的增加。

通过上述分析能发现,对接 FRI 协议的复杂度是和需要处理的多项式的个数以及打开点的个数相关的。协议 2 中要处理的多项式更多,因此整体证明大小和 Verifier 计算复杂度也会比协议 1 高。

References