Skip to article frontmatterSkip to article content

Zeromroph-fri 协议复杂度分析

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)

Prover Cost Round 1

k=0n12kR(k+logR) Fmul\sum_{k = 0}^{n - 1} 2^k \mathcal{R}(k + \log \mathcal{R}) ~ \mathbb{F}_{\mathsf{mul}}

由于

k=0n12k=20++2n1=20(12n)12=2n1\sum_{k = 0}^{n - 1} 2^k = 2^0 + \ldots + 2^{n - 1} = \frac{2^0(1- 2^n)}{1- 2} = 2^n - 1
k=0n1k2k=(n2)2n+2\sum_{k = 0}^{n - 1} k \cdot 2^k = (n - 2) \cdot 2^n + 2

因此

k=0n12kR(k+logR)=Rk=0n1k2k+RlogRk=0n12k=RnN+(RlogR2R)N+2RRlogR\begin{align} \sum_{k = 0}^{n - 1} 2^k \mathcal{R}(k + \log \mathcal{R}) & = \mathcal{R} \cdot\sum_{k = 0}^{n - 1} k \cdot 2^k + \mathcal{R}\log \mathcal{R} \cdot \sum_{k = 0}^{n - 1} 2^k \\ & = \mathcal{R} \cdot nN + (\mathcal{R} \log \mathcal{R} - 2 \mathcal{R}) N + 2\mathcal{R} - \mathcal{R}\log \mathcal{R} \end{align}

因此这一轮的复杂度为 (RnN+(RlogR2R)N+2RRlogR) Fmul(\mathcal{R} \cdot nN + (\mathcal{R} \log \mathcal{R} - 2 \mathcal{R}) N + 2\mathcal{R} - \mathcal{R}\log \mathcal{R}) ~\mathbb{F}_{\mathsf{mul}}

[!summary] 这一步有 nn 个多项式 q^k(X)\hat{q}_k(X) 都需要在 D(k)D^{(k)} 上求值,采用 FFT 的方法,复杂度为 O(NlogN)O(N \log N)

MMCS.commit(2n1R,,R)=((2n1++20)R) H+(2n2R++20R+1) C=(N1)R H+((N/21)R+1) C\begin{aligned} & \mathsf{MMCS.commit}(2^{n-1} \cdot \mathcal{R}, \ldots, \mathcal{R})\\ = & ((2^{n - 1} + \cdots + 2^0) \cdot \mathcal{R}) ~ H + (2^{n - 2} \cdot \mathcal{R} + \ldots + 2^{0} \cdot \mathcal{R} + 1) ~ C \\ = & (N - 1) \cdot \mathcal{R} ~ H + ((N/2 - 1) \cdot \mathcal{R} + 1) ~ C \end{aligned}

总结下这一轮的总复杂度为

(N2) Fmul+(RnN+(RlogR2R)N+2RRlogR) Fmul+MMCS.commit(2n1R,,R)=(RnN+(RlogR2R+1)N+2RRlogR2) Fmul+MMCS.commit(2n1R,,R)\begin{align} & (N - 2) ~ \mathbb{F}_{\mathsf{mul}} + (\mathcal{R} \cdot nN + (\mathcal{R} \log \mathcal{R} - 2 \mathcal{R}) N + 2\mathcal{R} - \mathcal{R}\log \mathcal{R}) ~\mathbb{F}_{\mathsf{mul}} \\ & + \mathsf{MMCS.commit}(2^{n-1} \cdot \mathcal{R}, \ldots, \mathcal{R}) \\ = & (\mathcal{R}\cdot nN + (\mathcal{R} \log \mathcal{R} - 2 \mathcal{R} + 1) N + 2\mathcal{R} - \mathcal{R}\log \mathcal{R} - 2) ~\mathbb{F}_{\mathsf{mul}} \\ & + \mathsf{MMCS.commit}(2^{n-1} \cdot \mathcal{R}, \ldots, \mathcal{R}) \end{align}

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}

Prover Cost Round 2

这一轮的总复杂度为

N Fmul+(N1) Fmul=(2N1) Fmul\begin{align} N ~ \mathbb{F}_{\mathsf{mul}} + (N - 1) ~ \mathbb{F}_{\mathsf{mul}} = (2N - 1) ~ \mathbb{F}_{\mathsf{mul}} \end{align}

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)} 上的值。

Prover Cost Round 3

(RnN+RlogRN) Fmul+3RN Fmul+RN Finv=(RnN+(RlogR+3R)N) Fmul+RN Finv\begin{align} & (\mathcal{R} \cdot nN + \mathcal{R}\log\mathcal{R} \cdot N) ~ \mathbb{F}_{\mathsf{mul}} + 3\mathcal{R} \cdot N ~ \mathbb{F}_{\mathsf{mul}} + \mathcal{R} \cdot N ~\mathbb{F}_{\mathsf{inv}} \\ = & (\mathcal{R} \cdot nN + (\mathcal{R}\log\mathcal{R} + 3 \mathcal{R}) \cdot N) ~ \mathbb{F}_{\mathsf{mul}} + \mathcal{R} \cdot N ~ \mathbb{F}_{\mathsf{inv}} \end{align}

[!summary] 计算 [f(x)xD][f(x)|_{x \in D}] 复杂度为 O(NlogN)O(N \log N)

k=0n12kR(3 Fmul+Finv)=(3R Fmul+R Finv)k=0n12k=(3R Fmul+R Finv)(N1)=(3RN3R) Fmul+(RNR) Finv\begin{align} \sum_{k = 0}^{n-1} 2^k \cdot \mathcal{R} \cdot (3 ~ \mathbb{F}_{\mathsf{mul}} + \mathbb{F}_{\mathsf{inv}}) & = (3 \mathcal{R}~ \mathbb{F}_{\mathsf{mul}} + \mathcal{R} ~\mathbb{F}_{\mathsf{inv}}) \cdot \sum_{k = 0}^{n-1} 2^k = (3 \mathcal{R}~ \mathbb{F}_{\mathsf{mul}} + \mathcal{R} ~\mathbb{F}_{\mathsf{inv}}) \cdot (N-1) \\ & = (3 \mathcal{R} \cdot N - 3 \mathcal{R} )~ \mathbb{F}_{\mathsf{mul}} + (\mathcal{R} \cdot N - \mathcal{R}) ~\mathbb{F}_{\mathsf{inv}} \end{align}

整理汇总 Round 3 的计算复杂度为

(RnN+(RlogR+3R)N) Fmul+RN Finv+(3RN3R) Fmul+(RNR) Finv=(RnN+(RlogR+6R)N3R) Fmul+(2RNR) Finv\begin{aligned} & (\mathcal{R} \cdot nN + (\mathcal{R}\log\mathcal{R} + 3 \mathcal{R}) \cdot N) ~ \mathbb{F}_{\mathsf{mul}} + \mathcal{R} \cdot N ~ \mathbb{F}_{\mathsf{inv}} + (3 \mathcal{R} \cdot N - 3 \mathcal{R} )~ \mathbb{F}_{\mathsf{mul}} + (\mathcal{R} \cdot N - \mathcal{R}) ~\mathbb{F}_{\mathsf{inv}} \\ = & (\mathcal{R} \cdot nN + (\mathcal{R}\log\mathcal{R} + 6 \mathcal{R}) \cdot N - 3 \mathcal{R} ) ~ \mathbb{F}_{\mathsf{mul}} + (2\mathcal{R} \cdot N - \mathcal{R}) ~ \mathbb{F}_{\mathsf{inv}} \end{aligned}

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)

Prover Cost Round 4

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)(y)=(12+β(i)2x)fold(i+1)(x)+(12β(i)2x)fold(i+1)(x)\mathsf{fold}^{(i)}(y) = (\frac{1}{2} + \frac{\beta^{(i)}}{2x}) \cdot \mathsf{fold}^{(i + 1)}(x) + (\frac{1}{2} - \frac{\beta^{(i)}}{2x}) \cdot \mathsf{fold}^{(i + 1)}(-x)

plonky3 中采用了 fold_even_odd.rs 下面这种计算方式。

#[instrument(skip_all, level = "debug")]
pub fn fold_even_odd<F: TwoAdicField>(poly: Vec<F>, beta: F) -> Vec<F> {
    // We use the fact that
    //     p_e(x^2) = (p(x) + p(-x)) / 2
    //     p_o(x^2) = (p(x) - p(-x)) / (2 x)
    // that is,
    //     p_e(g^(2i)) = (p(g^i) + p(g^(n/2 + i))) / 2
    //     p_o(g^(2i)) = (p(g^i) - p(g^(n/2 + i))) / (2 g^i)
    // so
    //     result(g^(2i)) = p_e(g^(2i)) + beta p_o(g^(2i))
    //                    = (1/2 + beta/2 g_inv^i) p(g^i)
    //                    + (1/2 - beta/2 g_inv^i) p(g^(n/2 + i))
    let m = RowMajorMatrix::new(poly, 2);
    let g_inv = F::two_adic_generator(log2_strict_usize(m.height()) + 1).inverse();
    let one_half = F::TWO.inverse();
    let half_beta = beta * one_half;

    // TODO: vectorize this (after we have packed extension fields)

    // beta/2 times successive powers of g_inv
    let mut powers = g_inv
        .shifted_powers(half_beta)
        .take(m.height())
        .collect_vec();
    reverse_slice_index_bits(&mut powers);

    m.par_rows()
        .zip(powers)
        .map(|(mut row, power)| {
            let (r0, r1) = row.next_tuple().unwrap();
            (one_half + power) * r0 + (one_half - power) * r1
        })
        .collect()
}

可以先计算出 2-1 复杂度为 Finv\mathbb{F}_{\mathsf{inv}}

在第 ii 轮,计算 β(i)2=β(i)21\frac{\beta^{(i)}}{2} = \beta^{(i)} \cdot 2^{-1} ,复杂度为 Fmul\mathbb{F}_{\mathsf{mul}}

对于每一个 yDiy \in D_i ,计算 fold(i)(y)\mathsf{fold}^{(i)}(y) ,计算 x1x^{-1} ,再相乘,复杂度为 Finv+3 Fmul\mathbb{F}_{\mathsf{inv}} + 3 ~\mathbb{F}_{\mathsf{mul}} ,而 Di=2iR|D_i| = 2^{i} \cdot \mathcal{R} ,这一步的复杂度为 2iR Finv+32iR Fmul2^{i} \cdot \mathcal{R} ~\mathbb{F}_{\mathsf{inv}} + 3 \cdot 2^{i} \cdot \mathcal{R} ~\mathbb{F}_{\mathsf{mul}}

对于每一个 ii ,计算的总复杂度为

(2iR) Finv+(32iR+1) Fmul(2^{i} \cdot \mathcal{R}) ~\mathbb{F}_{\mathsf{inv}} + (3 \cdot 2^{i} \cdot \mathcal{R}+ 1) ~\mathbb{F}_{\mathsf{mul}}

因此总复杂度为

Finv+i=0n1((2iR) Finv+(32iR+1) Fmul)=(RNR+1) Finv+(3RN+n3R) Fmul\mathbb{F}_{\mathsf{inv}} + \sum_{i = 0}^{n - 1}((2^{i} \cdot \mathcal{R}) ~\mathbb{F}_{\mathsf{inv}} + (3 \cdot 2^{i} \cdot \mathcal{R}+ 1) ~\mathbb{F}_{\mathsf{mul}}) = (\mathcal{R}N - \mathcal{R} + 1) ~\mathbb{F}_{\mathsf{inv}} + (3\mathcal{R}N + n - 3\mathcal{R}) ~\mathbb{F}_{\mathsf{mul}}

总结上述所有的计算,对于折叠,总共要折叠 nn 次,复杂度为 (RNR+1) Finv+(3RN+n3R) Fmul(\mathcal{R}N - \mathcal{R} + 1) ~\mathbb{F}_{\mathsf{inv}} + (3\mathcal{R}N + n - 3\mathcal{R}) ~\mathbb{F}_{\mathsf{mul}} 。对于 Merkle Tree 承诺,复杂度为

i=1n1MT.commit(2iR)\sum_{i = 1}^{n - 1}\mathsf{MT.commit}(2^{i} \cdot \mathcal{R})

因此这一轮的总复杂度为

(3RN+n3R) Fmul+(RNR+1) Finv+i=1n1MT.commit(2iR)\begin{aligned} & (3\mathcal{R}N + n - 3\mathcal{R}) ~\mathbb{F}_{\mathsf{mul}}+ (\mathcal{R}N - \mathcal{R} + 1) ~\mathbb{F}_{\mathsf{inv}} +\sum_{i = 1}^{n - 1}\mathsf{MT.commit}(2^{i} \cdot \mathcal{R}) \\ \end{aligned}

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。

Prover Cost Round 5

在查询阶段,Prover 的计算复杂度主要来自计算 s(i+1)=(s(i))2s^{(i + 1)} = (s^{(i)})^2 ,但这些数都是来自 DiD_i 中的元素,不需要再额外计算,可以通过索引值得到。

Prover Cost

汇总 Prover Cost,

(RnN+(RlogR2R+1)N+2RRlogR2) Fmul+MMCS.commit(2n1R,,R)+(2N1) Fmul+(RnN+(RlogR+6R)N3R) Fmul+(2RNR) Finv+(3RN+n3R) Fmul+(RNR+1) Finv+i=1n1MT.commit(2iR)+(32RN+n3R1) Fmul+(12RNR) Finv+i=1n2MT.commit(2iR)=(2RnN+(2RlogR+7R+3)N+nRlogR4R3) Fmul+(3RN2R+1) Finv+MMCS.commit(2n1R,,R)+i=1n1MT.commit(2iR)\begin{aligned} & (\mathcal{R}\cdot nN + (\mathcal{R} \log \mathcal{R} - 2 \mathcal{R} + 1) N + 2\mathcal{R} - \mathcal{R}\log \mathcal{R} - 2) ~\mathbb{F}_{\mathsf{mul}} + \mathsf{MMCS.commit}(2^{n-1} \cdot \mathcal{R}, \ldots, \mathcal{R}) \\ & + (2N - 1) ~ \mathbb{F}_{\mathsf{mul}} \\ & + (\mathcal{R} \cdot nN + (\mathcal{R}\log\mathcal{R} + 6 \mathcal{R}) \cdot N - 3 \mathcal{R} ) ~ \mathbb{F}_{\mathsf{mul}} + (2\mathcal{R} \cdot N - \mathcal{R}) ~ \mathbb{F}_{\mathsf{inv}} \\ & + (3\mathcal{R}N + n - 3\mathcal{R}) ~\mathbb{F}_{\mathsf{mul}}+ (\mathcal{R}N - \mathcal{R} + 1) ~\mathbb{F}_{\mathsf{inv}} +\sum_{i = 1}^{n - 1}\mathsf{MT.commit}(2^{i} \cdot \mathcal{R}) \\ & + (\frac{3}{2} \mathcal{R} \cdot N + n - 3 \mathcal{R} - 1) ~\mathbb{F}_{\mathsf{mul}} + (\frac{1}{2} \mathcal{R} \cdot N - \mathcal{R}) ~\mathbb{F}_{\mathsf{inv}} + \sum_{i = 1}^{n - 2}\mathsf{MT.commit}(2^{i} \cdot \mathcal{R}) \\ = & (2\mathcal{R}\cdot nN + (2\mathcal{R} \log \mathcal{R} + 7 \mathcal{R} + 3) \cdot N + n - \mathcal{R}\log \mathcal{R} - 4 \mathcal{R} - 3) ~\mathbb{F}_{\mathsf{mul}} + (3 \mathcal{R} \cdot N - 2 \mathcal{R} + 1) ~\mathbb{F}_{\mathsf{inv}} \\ & + \mathsf{MMCS.commit}(2^{n-1} \cdot \mathcal{R}, \ldots, \mathcal{R}) + \sum_{i = 1}^{n - 1}\mathsf{MT.commit}(2^{i} \cdot \mathcal{R})\\ \end{aligned}

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}

Proof Size

  1. cm(q^n1,q^n2,,q^0)\mathsf{cm}(\hat{q}_{n - 1}, \hat{q}_{n - 2}, \ldots, \hat{q}_0) ,这里承诺是用 mmcs 结构进行承诺的,发送的是一个 Hash 值,记为 HH
  2. f^(ζ),q^0(ζ),,q^n1(ζ)\hat{f}(\zeta), \hat{q}_0(\zeta), \ldots, \hat{q}_{n - 1}(\zeta) ,都是有限域中的值,大小为 (n+1) F(n + 1) ~ \mathbb{F}

计算 πqq^n,qq^n1,,qq^0\pi_{q_{\hat{q}_{n}},q_{\hat{q}_{n - 1}}, \ldots, q_{\hat{q}_{0}}} 的大小

重复 ll 次:

其中 MT.open(x)\mathsf{MT.open}(x) 表示在 Merkle Tree 中承诺 xx 个叶子节点时,其需要发送的 Merkle Path 中的哈希值的个数,那么

MT.open(x)=logx\mathsf{MT.open}(x) = \log x

因此这一步发送的证明大小为

2 F+(MT.open(2nR)1) H=2 F+(n+logR1) H2 ~ \mathbb{F} + (\mathsf{MT.open}(2^n \cdot \mathcal{R}) - 1) ~ H = 2 ~ \mathbb{F} + (n + \log \mathcal{R} - 1) ~ H

对于 q^i(t(i)),πq^i(t(i))\hat{q}_{i}(t^{(i)}), \pi_{\hat{q}_{i}}(t^{(i)}) ,这里需要发送 mmcs 结构中的 merkle path 。

例如要打开 q^1(ω10)\hat{q}_{1}(\omega_1^0) ,那么图中紫色的哈希值是 Prover 发送的证明。在 Verifier 进行验证阶段,其可以计算出图中绿色部分的值,最后比较树中最上端的绿色方块的值是否和 Prover 之前承诺时发送的根节点值相等。

q^i(t(i))\hat{q}_{i}(t^{(i)}) 所对应的 q^i(X)\hat{q}_i(X) 承诺时有 2iR2^i \cdot \mathcal{R} 个值。那么 πq^i(t(i))\pi_{\hat{q}_{i}}(t^{(i)}) 要发送的哈希值有 2(log(2iR))=2i+2logR2 (\log(2^{i} \cdot \mathcal{R})) =2i + 2 \log \mathcal{R} 个。

fold(i)(x)\mathsf{fold}^{(i)}(x) 所在的 Merkle Tree 的树的高度为 i+logRi + \log \mathcal{R} 。对于 fold(i)(t(i)),πfold(i)(t(i))\mathsf{fold}^{(i)}(-t^{(i)}), \pi_{\mathsf{fold}^{(i)}}(-t^{(i)}) ,用的是 Merkle 树承诺,树的高度为 i+logRi + \log \mathcal{R} ,那么发送的哈希值有 i+logRi + \log \mathcal{R} 个。

因此对于每一轮 ii ,其大小为 2 F+(3i+3logR) H2 ~ \mathbb{F} +(3i + 3\log \mathcal{R}) ~ H 。总复杂度为

i=1n1(2 F+(3i+3logR) H)=(2n2) F+(3(n1)n2+3(n1)logR) H=(2n2) F+(32n2+(3logR32)n3logR) H\begin{aligned} & \sum_{i = 1}^{n - 1} (2 ~ \mathbb{F} +(3i + 3\log \mathcal{R}) ~ H) \\ = & (2n - 2) ~ \mathbb{F} + (\frac{3(n - 1)n}{2} + 3(n - 1) \log \mathcal{R}) ~ H \\ = & (2n - 2) ~ \mathbb{F} + (\frac{3}{2} n^2 + (3\log \mathcal{R} - \frac{3}{2}) n - 3 \log \mathcal{R}) ~ H \end{aligned}
F+2logR H\mathbb{F} + 2 \log \mathcal{R} ~H

因此 πqq^n,,qq^0\pi_{q_{\hat{q}_{n}}, \ldots, q_{\hat{q}_{0}}} 的大小为

n H+F+l(2 F+(n+logR1) H)+l((2n2) F+(32n2+(3logR32)n3logR) H)+l(F+2logR H)=(2ln+3l1) F+(32ln2+(3logRl12l+1)nl) H\begin{align} & n ~ H + \mathbb{F} \\ & + l \cdot (2 ~ \mathbb{F} + (n + \log \mathcal{R} - 1) ~ H) \\ & + l \cdot ((2n - 2) ~ \mathbb{F} + (\frac{3}{2} n^2 + (3\log \mathcal{R} - \frac{3}{2}) n - 3 \log \mathcal{R}) ~ H )\\ & + l \cdot (\mathbb{F} + 2 \log \mathcal{R} ~H) \\ & = (2l \cdot n + 3l - 1) ~ \mathbb{F} + (\frac{3}{2} l \cdot n^2 + (3\log \mathcal{R}l - \frac{1}{2}l + 1) n - l) ~ H \end{align}

因此 proof size 总大小为

H+(n+1) F+(2ln+3l1) F+(32ln2+(3logRl12l+1)nl) H=((2l+1)n+3l) F+(32ln2+(3logRl12l+1)nl+1) H\begin{align} & H + (n + 1) ~ \mathbb{F} + (2l \cdot n + 3l - 1) ~ \mathbb{F} + (\frac{3}{2} l \cdot n^2 + (3\log \mathcal{R}l - \frac{1}{2}l + 1) n - l) ~ H \\ = & ((2l + 1) \cdot n + 3l) ~ \mathbb{F} + (\frac{3}{2} l \cdot n^2 + (3\log \mathcal{R}l - \frac{1}{2}l + 1) n - l + 1) ~ H \end{align}

Verification

Verifier:

Step 1

  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

f^\hat{f} Merkle 数的高度为 2nR2^n \cdot \mathcal{R} 。Merkle Path 中发送了 n+logR1n + \log \mathcal{R} - 1 个哈希值,这里按 bit reverse 方式将相差一个符号的两个点的值放在相邻的两个叶子节点上,因此这里要验证计算时复杂度为

MTV(2nR)=(n+logR1) H\mathsf{MTV}(2^n \cdot \mathcal{R}) = (n + \log \mathcal{R} - 1) ~ H
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}

复杂度为 5 Fmul+2 Finv5 ~ \mathbb{F}_{\mathsf{mul}} + 2 ~ \mathbb{F}_{\mathsf{inv}}

复杂度为 2 Finv+4 Fmul2 ~ \mathbb{F}_{\mathsf{inv}} + 4 ~ \mathbb{F}_{\mathsf{mul}}

MMCS.verify(cm(q^n1,q^n2,,q^0),q^i(t(i)),πq^i(t(i)))=?1\mathsf{MMCS.verify}(\mathsf{cm}(\hat{q}_{n - 1}, \hat{q}_{n - 2}, \ldots, \hat{q}_0), \hat{q}_{i}(t^{(i)}), \pi_{\hat{q}_{i}}(t^{(i)})) \stackrel{?}{=} 1

Verifier 会根据 Prover 发送的证明来计算哈希值进行验证,Prover 发送的哈希值有 2i+2logR2i + 2 \log \mathcal{R} 个,由于 Verifier 还会计算 q^i(t(i)\hat{q}_{i}(t^{(i)} 的哈希值,因此复杂度为 (2i+2logR) C+H(2i + 2 \log \mathcal{R}) ~ C + H

计算复杂度为 Finv+3 Fmul\mathbb{F}_{\mathsf{inv}} + 3~ \mathbb{F}_{\mathsf{mul}}

fold=fold+qq^i(t(i))\mathsf{fold} = \mathsf{fold} + q_{\hat{q}_{i}}(t^{(i)})

Verifier 的计算取决于 Merkle 树的高度,Merkle 树的高度为 i+logRi + \log \mathcal{R} 。要进行的 Hash 计算为树的高度,即 (i+logR) H(i + \log \mathcal{R}) ~ H

这里 verifier 的计算复杂度为 2 Finv+4 Fmul2 ~ \mathbb{F}_{\mathsf{inv}} + 4 ~ \mathbb{F}_{\mathsf{mul}}

计算复杂度为 Finv+3 Fmul\mathbb{F}_{\mathsf{inv}} + 3~ \mathbb{F}_{\mathsf{mul}}

📝 Notes

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

Verifier Cost 1

汇总上面 Verifier 的复杂度

(n+logR1) H+5 Fmul+2 Finv+2 Finv+4 Fmul+i=1n1((2i+2logR) C+H+Finv+3 Fmul+(i+logR) H+2 Finv+4 Fmul)+H+C+Finv+3 Fmul=(7n+5) Fmul+(3n+2) Finv+(12n2+(32+logR)n1) H+(n2+(2logR1)n+12logR) C\begin{align} & (n + \log \mathcal{R} - 1) ~ H + 5 ~ \mathbb{F}_{\mathsf{mul}} + 2 ~ \mathbb{F}_{\mathsf{inv}} + 2 ~ \mathbb{F}_{\mathsf{inv}} + 4 ~ \mathbb{F}_{\mathsf{mul}} \\ & + \sum_{i = 1}^{n - 1} \left( (2i + 2 \log \mathcal{R}) ~ C + H + \mathbb{F}_{\mathsf{inv}} + 3~ \mathbb{F}_{\mathsf{mul}} + (i + \log \mathcal{R}) ~ H + 2 ~ \mathbb{F}_{\mathsf{inv}} + 4 ~ \mathbb{F}_{\mathsf{mul}} \right) \\ & + H + C + \mathbb{F}_{\mathsf{inv}} + 3~ \mathbb{F}_{\mathsf{mul}} \\ = & (7n + 5) ~ \mathbb{F}_{\mathsf{mul}} + (3n + 2) ~ \mathbb{F}_{\mathsf{inv}} \\ & + (\frac{1}{2} n^2 + (\frac{3}{2} + \log \mathcal{R})n - 1) ~H + (n^2 + (2 \log \mathcal{R} - 1) n + 1 - 2\log \mathcal{R}) ~C \end{align}

由于要重复 ll 次,因此还要乘上 ll ,复杂度为

(ln2+(2logRll)n+l2logRl) C+(l2n2+(3l2+logRl)nl) H+(7ln+5l) Fmul+(3ln+2l) Finv(ln^2 + (2 \log \mathcal{R}l - l) n + l - 2 \log \mathcal{R}l) ~C + (\frac{l}{2} n^2 + (\frac{3l}{2} + \log \mathcal{R}l)n - l) ~H + (7ln + 5l) ~ \mathbb{F}_{\mathsf{mul}} + (3ln + 2l) ~ \mathbb{F}_{\mathsf{inv}}

Step 2

  1. 计算 Φn(ζ)\Phi_n(\zeta) 以及 Φnk(ζ2k)(0k<n)\Phi_{n - k}(\zeta^{2^k})(0 \le k < n) ,由于
Φk(Xh)=1+Xh+X2h++X(2k1)h\Phi_k(X^h) = 1 + X^h + X^{2h} + \ldots + X^{(2^{k}-1)h}

因此

Φ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}
Verifier Cost 2

Verifier 计算

Φk(Xh)=1+Xh+X2h++X(2k1)h=1(Xh)2k1Xh\begin{align} \Phi_k(X^h) & = 1 + X^h + X^{2h} + \ldots + X^{(2^{k}-1)h} \\ & = \frac{1 - (X^h)^{2^k}}{1 - X^h} \end{align}

因此

Φn(ζ)=1ζ2n1ζ\Phi_n(\zeta) = \frac{1 - \zeta^{2^n}}{1 - \zeta}
Φnk(ζ2k)=1(ζ2k)2nk1ζ2k=1ζ2n1ζ2k\begin{align} \Phi_{n - k}(\zeta^{2^k}) & = \frac{1 - (\zeta^{2^k})^{2^{n - k}}}{1 - \zeta^{2^k}} \\ & = \frac{1 - \zeta^{2^n}}{1 - \zeta^{2^k}} \end{align}

因此这一步的总复杂度为

2n Fmul+n Finv2n ~ \mathbb{F}_{\mathsf{mul}} + n ~ \mathbb{F}_{\mathsf{inv}}

Step 3

验证下述等式的正确性

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)
Verifier Cost 3
k=0n13 Fmul=3n Fmul\sum_{k = 0}^{n - 1} 3 ~ \mathbb{F}_{\mathsf{mul}} = 3n ~ \mathbb{F}_{\mathsf{mul}}

因此总复杂度为 (3n+1) Fmul(3n + 1) ~ \mathbb{F}_{\mathsf{mul}}

Verifier Cost

汇总 Verifier 的复杂度

(ln2+(2logRll)n+l2logRl) C+(l2n2+(3l2+logRl)nl) H+(7ln+5l) Fmul+(3ln+2l) Finv+2n Fmul+n Finv+(3n+1) Fmul=(ln2+(2logRll)n+l2logRl) C+(l2n2+(3l2+logRl)nl) H+((7l+5)n+5l+1) Fmul+((3l+1)n+2l) Finv\begin{align} & (ln^2 + (2 \log \mathcal{R}l - l) n + l - 2 \log \mathcal{R}l) ~C + (\frac{l}{2} n^2 + (\frac{3l}{2} + \log \mathcal{R}l)n - l) ~H + (7ln + 5l) ~ \mathbb{F}_{\mathsf{mul}} + (3ln + 2l) ~ \mathbb{F}_{\mathsf{inv}} \\ & + 2n ~ \mathbb{F}_{\mathsf{mul}} + n ~ \mathbb{F}_{\mathsf{inv}} + (3n + 1) ~ \mathbb{F}_{\mathsf{mul}} \\ = & (ln^2 + (2 \log \mathcal{R}l - l) n + l - 2 \log \mathcal{R}l) ~C + (\frac{l}{2} n^2 + (\frac{3l}{2} + \log \mathcal{R}l)n - l) ~H \\ & + ((7l + 5)n + 5l + 1) ~ \mathbb{F}_{\mathsf{mul}} + ((3l + 1)n + 2l) ~ \mathbb{F}_{\mathsf{inv}} \end{align}

复杂度汇总

Prover’s Cost:

(2RnN+(2RlogR+7R+3)N+nRlogR4R3) Fmul+(3RN2R+1) Finv+MMCS.commit(2n1R,,R)+i=1n1MT.commit(2iR)\begin{align} & (2\mathcal{R}\cdot nN + (2\mathcal{R} \log \mathcal{R} + 7 \mathcal{R} + 3) \cdot N + n - \mathcal{R}\log \mathcal{R} - 4 \mathcal{R} - 3) ~\mathbb{F}_{\mathsf{mul}} + (3 \mathcal{R} \cdot N - 2 \mathcal{R} + 1) ~\mathbb{F}_{\mathsf{inv}} \\ & + \mathsf{MMCS.commit}(2^{n-1} \cdot \mathcal{R}, \ldots, \mathcal{R}) + \sum_{i = 1}^{n - 1}\mathsf{MT.commit}(2^{i} \cdot \mathcal{R}) \end{align}

Proof size:

((2l+1)n+3l) F+(32ln2+(3logRl12l+1)nl+1) H\begin{align} ((2l + 1) \cdot n + 3l) ~ \mathbb{F} + (\frac{3}{2} l \cdot n^2 + (3\log \mathcal{R}l - \frac{1}{2}l + 1) n - l + 1) ~ H \end{align}

Verifier’s Cost:

(ln2+(2logRll)n+l2logRl) C+(l2n2+(3l2+logRl)nl) H+((7l+5)n+5l+1) Fmul+((3l+1)n+2l) Finv\begin{aligned} & (ln^2 + (2 \log \mathcal{R}l - l) n + l - 2 \log \mathcal{R}l) ~C + (\frac{l}{2} n^2 + (\frac{3l}{2} + \log \mathcal{R}l)n - l) ~H \\ & + ((7l + 5)n + 5l + 1) ~ \mathbb{F}_{\mathsf{mul}} + ((3l + 1)n + 2l) ~ \mathbb{F}_{\mathsf{inv}} \end{aligned}