本文给出 PH23-KZG10 的完整的优化协议。
1. 协议框架与优化 ¶ 首先回顾下 PH23+KZG10 协议的 Evaluation Argument 的简单流程,然后我们看看有哪些可以优化的地方。
P: 发送 c ( X ) c(X) c ( X ) 的承诺 C c C_c C c
V: 发送随机数 α 用来聚合多个多项式的约束等式
P: 计算公开的多项式集合 { s i ( X ) } \{s_i(X)\} { s i ( X )}
P: 计算聚合的约束多项式 h ( X ) h(X) h ( X )
h ( X ) = G ( c ( X ) , s 0 ( X ) , s 1 ( X ) , … , s n − 1 ( X ) , z ( X ) , z ( ω − 1 X ) , X ) h(X) = G(c(X), s_0(X), s_1(X),\ldots, s_{n-1}(X), z(X), z(\omega^{-1}X), X) h ( X ) = G ( c ( X ) , s 0 ( X ) , s 1 ( X ) , … , s n − 1 ( X ) , z ( X ) , z ( ω − 1 X ) , X ) P: 计算商多项式 t ( X ) t(X) t ( X ) 的承诺 C t C_t C t , z ( X ) z(X) z ( X ) 的承诺 C z C_z C z
t ( X ) = h ( X ) v H ( X ) t(X) = \frac{h(X)}{v_H(X)} t ( X ) = v H ( X ) h ( X ) V: 发送随机的求值点 ζ
P: 计算 c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}}) c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) , c ( ζ ) c(\zeta) c ( ζ ) ,还有 z ( ζ ) , z ( ω − 1 ⋅ ζ ) z(\zeta), z(\omega^{-1}\cdot\zeta) z ( ζ ) , z ( ω − 1 ⋅ ζ ) ,t ( ζ ) , a ( ζ ) t(\zeta), a(\zeta) t ( ζ ) , a ( ζ ) ;发送上述多项式求值的 KZG10 Evaluation Arguments
V: 验证所有的 KZG10 Evaluation Arguments,然后验证下面的等式:
h ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) \begin{split}
h(\zeta) \overset{?}{=} t(\zeta)\cdot v_H(\zeta) \\
\end{split} h ( ζ ) = ? t ( ζ ) ⋅ v H ( ζ ) c ∗ ( X ) c^*(X) c ∗ ( X ) 在多点求值的证明优化¶ 在证明中,Prover 需要证明 c ( X ) c(X) c ( X ) 多项式在 n + 1 n+1 n + 1 个点上的 Evaluation,即
c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , c ( ζ ) c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), c(\zeta) c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , c ( ζ ) 利用 [BDFG20] 论文中的技术,如果一个 f ( X ) f(X) f ( X ) 在 m m m 个点 D = ( z 0 , z 1 , … , z m − 1 ) D=(z_0,z_1,\ldots,z_{m-1}) D = ( z 0 , z 1 , … , z m − 1 ) 上的 Evaluation 为 v ⃗ = ( v 0 , v 1 , … , v m − 1 ) \vec{v}=(v_0, v_1, \ldots, v_{m-1}) v = ( v 0 , v 1 , … , v m − 1 ) ,定义 f ∗ ( X ) f^*(X) f ∗ ( X ) 是 v ⃗ \vec{v} v 在 D D D 上的插值多项式,即 deg ( f ∗ ( X ) ) = m − 1 \deg(f^*(X)) = m-1 deg ( f ∗ ( X )) = m − 1 ,并且有 f ∗ ( z i ) = f ( z i ) , ∀ i ∈ [ 0 , m ) f^*(z_i) = f(z_i), \forall i\in[0,m) f ∗ ( z i ) = f ( z i ) , ∀ i ∈ [ 0 , m )
v D ( X ) = ∏ i = 0 m − 1 ( X − z i ) v_D(X) = \prod_{i=0}^{m-1} (X-z_i) v D ( X ) = i = 0 ∏ m − 1 ( X − z i ) 那么 f ( X ) f(X) f ( X ) 满足下面的等式:
f ( X ) − f ∗ ( X ) = q ( X ) ⋅ ( X − z 0 ) ( X − z 1 ) ⋯ ( X − z m − 1 ) f(X) - f^*(X) = q(X)\cdot (X-z_0)(X-z_1)\cdots(X-z_{m-1}) f ( X ) − f ∗ ( X ) = q ( X ) ⋅ ( X − z 0 ) ( X − z 1 ) ⋯ ( X − z m − 1 ) 上面等式这个很容易验证,因为当 X = z i X=z_i X = z i 的时候,等式左边等于零,那么 f ( X ) − f ∗ ( X ) f(X)-f^*(X) f ( X ) − f ∗ ( X ) 可以被 ( X − z i ) (X-z_i) ( X − z i ) 整除。那么对于所有的 i = 0 , 1 , … , m − 1 i=0,1,\ldots,m-1 i = 0 , 1 , … , m − 1 ,f ( X ) − f ∗ ( X ) f(X)-f^*(X) f ( X ) − f ∗ ( X ) 可以被 v D ( X ) v_D(X) v D ( X ) 整除,
v D ( X ) = ∏ i = 0 m − 1 ( X − z i ) v_D(X) = \prod_{i=0}^{m-1} (X-z_i) v D ( X ) = i = 0 ∏ m − 1 ( X − z i ) 这样一来,Prover 只要向 Verifier 证明存在 q ( X ) q(X) q ( X ) ,使得 f ( X ) − f ∗ ( X ) = q ( X ) ⋅ v D ( X ) f(X) - f^*(X) = q(X)\cdot v_D(X) f ( X ) − f ∗ ( X ) = q ( X ) ⋅ v D ( X ) ,那么 f ( X ) f(X) f ( X ) 在 D D D 上的 Evaluation 就等于 v ⃗ \vec{v} v 。而这个等式又可以通过 Verifier 提供一个随机挑战点 X = ξ X=\xi X = ξ 来验证,其中 v D ( ξ ) v_D(\xi) v D ( ξ ) 与 f ∗ ( ξ ) f^*(\xi) f ∗ ( ξ ) 可以由 Verifier 自行计算,而 f ( ξ ) f(\xi) f ( ξ ) 与 q ( ξ ) q(\xi) q ( ξ ) 可以通过 KZG10 的 Evaluation Argument 来证明。
c ∗ ( X ) c^*(X) c ∗ ( X ) 多项式计算的优化¶ Prover 可以构造多项式 c ∗ ( X ) c^*(X) c ∗ ( X ) ,它是下面向量在 ζ D \zeta D ζ D 上的插值多项式。这样做的优势是可以让 Prover 一次证明 c ( X ) c(X) c ( X ) 的多个不同点的 Evaluation,记为 c ∗ ⃗ \vec{c^*} c ∗ :
c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , c ( ζ ) c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), c(\zeta) c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , c ( ζ ) 我们引入 D D D 满足 ∣ D ∣ = n + 1 |D|=n+1 ∣ D ∣ = n + 1 ,其定义为
D = ( ω , ω 2 , ω 4 , … , ω 2 n − 1 , ω 2 n = 1 ) D = \big(\omega,\ \omega^2,\ \omega^4,\ \ldots,\ \omega^{2^{n-1}}, \omega^{2^n}=1\big) D = ( ω , ω 2 , ω 4 , … , ω 2 n − 1 , ω 2 n = 1 ) 那么 c ∗ ( X ) c^*(X) c ∗ ( X ) 的 Evaluation 的 Domain 就可以表示为 ζ D \zeta D ζ D ,
D ′ = D ζ = ( ω ⋅ ζ , ω 2 ⋅ ζ , ω 4 ⋅ ζ , … , ω 2 n − 1 ⋅ ζ , ζ ) D'=D\zeta = \big(\omega\cdot\zeta,\ \omega^2\cdot\zeta,\ \omega^4\cdot\zeta,\ \ldots,\ \omega^{2^{n-1}}\cdot\zeta,\ \zeta\big) D ′ = D ζ = ( ω ⋅ ζ , ω 2 ⋅ ζ , ω 4 ⋅ ζ , … , ω 2 n − 1 ⋅ ζ , ζ ) 其 Vanishing 多项式 v D ′ ( X ) v_{D'}(X) v D ′ ( X ) 定义如下:
v D ′ ( X ) = ( X − ω ζ ) ( X − ω 2 ζ ) ( X − ω 4 ζ ) ⋯ ( X − ω 2 n ζ ) v_{D'}(X) = (X-\omega\zeta)(X-\omega^2\zeta)(X-\omega^4\zeta)\cdots(X-\omega^{2^n}\zeta) v D ′ ( X ) = ( X − ω ζ ) ( X − ω 2 ζ ) ( X − ω 4 ζ ) ⋯ ( X − ω 2 n ζ ) 对于 D ′ D' D ′ 上的 Lagrange 多项式 可以定义如下:
L j D ′ ( X ) = d ^ j ⋅ v D ′ ( X ) X − ω 2 j ζ , j = 0 , 1 , … , n L^{D'}_j(X) = \hat{d}_j\cdot\frac{v_{D'}(X)}{X-\omega^{2^j}\zeta}, \qquad j=0,1,\ldots, n L j D ′ ( X ) = d ^ j ⋅ X − ω 2 j ζ v D ′ ( X ) , j = 0 , 1 , … , n 其中 d ^ j \hat{d}_j d ^ j 是 D ′ D' D ′ 上的 Bary-Centric Weights,定义为
d ^ j = ∏ l ≠ j 1 ζ ⋅ ω 2 j − ζ ⋅ ω 2 l = 1 ζ n ⋅ ∏ l ≠ j 1 ω 2 j − ω 2 l = 1 ζ n ⋅ w ^ j \hat{d}_j = \prod_{l\neq j} \frac{1}{\zeta\cdot\omega^{2^j} - \zeta\cdot\omega^{2^l}} = \frac{1}{\zeta^n}\cdot\prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}} = \frac{1}{\zeta^n}\cdot\hat{w}_j d ^ j = l = j ∏ ζ ⋅ ω 2 j − ζ ⋅ ω 2 l 1 = ζ n 1 ⋅ l = j ∏ ω 2 j − ω 2 l 1 = ζ n 1 ⋅ w ^ j 这里 w ^ j \hat{w}_j w ^ j 是 D D D 上的 Bary-Centric Weights,并且它的定义只与 D D D 相关,和 ζ 无关。因此,我们可以事先预计算 w ^ j \hat{w}_j w ^ j ,然后利用 w ^ j \hat{w}_j w ^ j 来计算 c ∗ ( X ) c^*(X) c ∗ ( X ) :
c ∗ ( X ) = c 0 ∗ ⋅ L 0 D ′ ( X ) + c 1 ∗ ⋅ L 1 D ′ ( X ) + ⋯ + c n ∗ ⋅ L n D ′ ( X ) c^*(X) = c^*_0 \cdot L^{D'}_0(X) + c^*_1 \cdot L^{D'}_1(X) + \cdots + c^*_n \cdot L^{D'}_n(X) c ∗ ( X ) = c 0 ∗ ⋅ L 0 D ′ ( X ) + c 1 ∗ ⋅ L 1 D ′ ( X ) + ⋯ + c n ∗ ⋅ L n D ′ ( X ) 上面的等式可以进一步优化,等式右边除以一个常数项多项式 g ( X ) = 1 g(X)=1 g ( X ) = 1
g ( X ) = 1 ⋅ L 0 D ′ ( X ) + 1 ⋅ L 1 D ′ ( X ) + ⋯ + 1 ⋅ L n D ′ ( X ) g(X) = 1 \cdot L^{D'}_0(X) + 1 \cdot L^{D'}_1(X) + \cdots + 1 \cdot L^{D'}_n(X) g ( X ) = 1 ⋅ L 0 D ′ ( X ) + 1 ⋅ L 1 D ′ ( X ) + ⋯ + 1 ⋅ L n D ′ ( X ) 可以得到:
c ∗ ( X ) = c ∗ ( X ) g ( X ) = c 0 ∗ ⋅ L 0 D ′ ( X ) + c 1 ∗ ⋅ L 1 D ′ ( X ) + ⋯ + c n ∗ ⋅ L n D ′ ( X ) g ( X ) c^*(X) = \frac{c^*(X)}{g(X)} = \frac{c^*_0 \cdot L^{D'}_0(X) + c^*_1 \cdot L^{D'}_1(X) + \cdots + c^*_n \cdot L^{D'}_n(X)}{g(X)} \\ c ∗ ( X ) = g ( X ) c ∗ ( X ) = g ( X ) c 0 ∗ ⋅ L 0 D ′ ( X ) + c 1 ∗ ⋅ L 1 D ′ ( X ) + ⋯ + c n ∗ ⋅ L n D ′ ( X ) 展开 g ( X ) g(X) g ( X ) 与 L i D ′ ( X ) L^{D'}_i(X) L i D ′ ( X ) ,可以得到:
c ∗ ( X ) = c 0 ∗ ⋅ d ^ 0 ⋅ z D ′ ( X ) X − ω ζ + c 1 ∗ ⋅ d ^ 1 ⋅ z D ′ ( X ) X − ω 2 ζ + ⋯ + c n ∗ ⋅ d ^ n ⋅ z D ′ ( X ) X − ω 2 n ζ 1 ⋅ d ^ 0 ⋅ z D ′ ( X ) X − ω ζ + 1 ⋅ d ^ 1 ⋅ z D ′ ( X ) X − ω 2 ζ + ⋯ + 1 ⋅ d ^ n ⋅ z D ′ ( X ) X − ω 2 n ζ c^*(X) = \frac{c^*_0 \cdot \hat{d}_0 \cdot \frac{z_{D'}(X)}{X-\omega\zeta} + c^*_1 \cdot \hat{d}_1 \cdot \frac{z_{D'}(X)}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \hat{d}_n \cdot \frac{z_{D'}(X)}{X-\omega^{2^n}\zeta}}{
1 \cdot \hat{d}_0 \cdot \frac{z_{D'}(X)}{X-\omega\zeta} + 1 \cdot \hat{d}_1 \cdot \frac{z_{D'}(X)}{X-\omega^2\zeta} + \cdots + 1 \cdot \hat{d}_n \cdot \frac{z_{D'}(X)}{X-\omega^{2^n}\zeta}
} c ∗ ( X ) = 1 ⋅ d ^ 0 ⋅ X − ω ζ z D ′ ( X ) + 1 ⋅ d ^ 1 ⋅ X − ω 2 ζ z D ′ ( X ) + ⋯ + 1 ⋅ d ^ n ⋅ X − ω 2 n ζ z D ′ ( X ) c 0 ∗ ⋅ d ^ 0 ⋅ X − ω ζ z D ′ ( X ) + c 1 ∗ ⋅ d ^ 1 ⋅ X − ω 2 ζ z D ′ ( X ) + ⋯ + c n ∗ ⋅ d ^ n ⋅ X − ω 2 n ζ z D ′ ( X ) 分子分母同时消去 z D ′ ( X ) z_{D'}(X) z D ′ ( X ) ,可以得到
c ∗ ( X ) = c 0 ∗ ⋅ d ^ 0 ⋅ 1 X − ω ζ + c 1 ∗ ⋅ d ^ 1 ⋅ 1 X − ω 2 ζ + ⋯ + c n ∗ ⋅ d ^ n ⋅ 1 X − ω 2 n ζ 1 ⋅ d ^ 0 ⋅ 1 X − ω ζ + 1 ⋅ d ^ 1 ⋅ 1 X − ω 2 ζ + ⋯ + 1 ⋅ d ^ n ⋅ 1 X − ω 2 n ζ c^*(X) = \frac{c^*_0 \cdot \hat{d}_0 \cdot \frac{1}{X-\omega\zeta} + c^*_1 \cdot \hat{d}_1 \cdot \frac{1}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \hat{d}_n \cdot \frac{1}{X-\omega^{2^n}\zeta}}{
1 \cdot \hat{d}_0 \cdot \frac{1}{X-\omega\zeta} + 1 \cdot \hat{d}_1 \cdot \frac{1}{X-\omega^2\zeta} + \cdots + 1 \cdot \hat{d}_n \cdot \frac{1}{X-\omega^{2^n}\zeta}
} c ∗ ( X ) = 1 ⋅ d ^ 0 ⋅ X − ω ζ 1 + 1 ⋅ d ^ 1 ⋅ X − ω 2 ζ 1 + ⋯ + 1 ⋅ d ^ n ⋅ X − ω 2 n ζ 1 c 0 ∗ ⋅ d ^ 0 ⋅ X − ω ζ 1 + c 1 ∗ ⋅ d ^ 1 ⋅ X − ω 2 ζ 1 + ⋯ + c n ∗ ⋅ d ^ n ⋅ X − ω 2 n ζ 1 再展开 d ^ i \hat{d}_i d ^ i 的定义,并且分子分母同时消去 1 ζ n \frac{1}{\zeta^n} ζ n 1 ,可以得到
c ∗ ( X ) = c 0 ∗ ⋅ w ^ 0 X − ω ζ + c 1 ∗ ⋅ w ^ 1 X − ω 2 ζ + ⋯ + c n ∗ ⋅ w ^ n X − ω 2 n ζ w ^ 0 X − ω ζ + w ^ 1 X − ω 2 ζ + ⋯ + w ^ n X − ω 2 n ζ c^*(X) = \frac{c^*_0 \cdot \frac{\hat{w}_0}{X-\omega\zeta} + c^*_1 \cdot \frac{\hat{w}_1}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \frac{\hat{w}_n}{X-\omega^{2^n}\zeta}}{
\frac{\hat{w}_0}{X-\omega\zeta} + \frac{\hat{w}_1}{X-\omega^2\zeta} + \cdots + \frac{\hat{w}_n}{X-\omega^{2^n}\zeta}
} c ∗ ( X ) = X − ω ζ w ^ 0 + X − ω 2 ζ w ^ 1 + ⋯ + X − ω 2 n ζ w ^ n c 0 ∗ ⋅ X − ω ζ w ^ 0 + c 1 ∗ ⋅ X − ω 2 ζ w ^ 1 + ⋯ + c n ∗ ⋅ X − ω 2 n ζ w ^ n Prover 可以利用事先预计算的 D D D 上的Bary-Centric Weights { w ^ i } \{\hat{w}_i\} { w ^ i } 来快速计算 c ∗ ( X ) c^*(X) c ∗ ( X ) ,如果 n n n 是固定的。 尽管如此,c ∗ ( X ) c^*(X) c ∗ ( X ) 的计算复杂度仍为 O ( n log 2 ( n ) ) O(n\log^2(n)) O ( n log 2 ( n )) 。不过考虑到 n = log ( N ) n=\log(N) n = log ( N ) ,所以 c ∗ ( X ) c^*(X) c ∗ ( X ) 的计算复杂度是对数级别的。
c ∗ ( X ) = ∑ j = 0 n − 1 w ^ j ζ n ⋅ z D ζ ( X ) X − ζ ⋅ ω 2 j c^*(X) = \sum_{j=0}^{n-1} \frac{{\hat{w}}_j}{\zeta^n} \cdot \frac{z_{D_\zeta}(X)}{X-\zeta\cdot\omega^{2^j}} c ∗ ( X ) = j = 0 ∑ n − 1 ζ n w ^ j ⋅ X − ζ ⋅ ω 2 j z D ζ ( X ) 预计算的 w ^ j \hat{w}_j w ^ j 的定义为
w ^ j = ∏ l ≠ j 1 ω 2 j − ω 2 l \hat{w}_j = \prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}} w ^ j = l = j ∏ ω 2 j − ω 2 l 1 不仅如此,Verifier 需要计算 c ∗ ( X ) c^*(X) c ∗ ( X ) 在某个挑战点上的取值 ,比如 X = ξ X=\xi X = ξ , Verifier 可以通过上面的等式,以 O ( log N ) O(\log{N}) O ( log N ) 时间复杂度根据 Prover 提供的 c ∗ ⃗ \vec{c^*} c ∗ 来计算 c ∗ ( ξ ) c^*(\xi) c ∗ ( ξ ) 。
2. PH23+KZG10 协议(优化版) ¶ 对于 KZG10 协议,因为其 Commitment 具有加法同态性。
Precomputation ¶ 预计算 s 0 ( X ) , … , s n − 1 ( X ) s_0(X),\ldots, s_{n-1}(X) s 0 ( X ) , … , s n − 1 ( X ) and v H ( X ) v_H(X) v H ( X ) v H ( X ) = X N − 1 v_H(X) = X^N -1 v H ( X ) = X N − 1 s i ( X ) = v H ( X ) v H i ( X ) = X N − 1 X 2 i − 1 s_i(X) = \frac{v_H(X)}{v_{H_i}(X)} = \frac{X^N-1}{X^{2^i}-1} s i ( X ) = v H i ( X ) v H ( X ) = X 2 i − 1 X N − 1 预计算 D = ( 1 , ω , ω 2 , … , ω 2 n − 1 ) D=(1, \omega, \omega^2, \ldots, \omega^{2^{n-1}}) D = ( 1 , ω , ω 2 , … , ω 2 n − 1 ) 上的 Bary-Centric Weights { w ^ i } \{\hat{w}_i\} { w ^ i } 。这个可以加速 w ^ j = ∏ l ≠ j 1 ω 2 j − ω 2 l \hat{w}_j = \prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}} w ^ j = l = j ∏ ω 2 j − ω 2 l 1 预计算 Lagrange Basis 的 KZG10 SRS A 0 = [ L 0 ( τ ) ] 1 , A 1 = [ L 1 ( τ ) ] 1 , A 2 = [ L 2 ( τ ) ] 1 , … , A N − 1 = [ L 2 n − 1 ( τ ) ] 1 A_0 =[L_0(\tau)]_1, A_1= [L_1(\tau)]_1, A_2=[L_2(\tau)]_1, \ldots, A_{N-1} = [L_{2^{n-1}}(\tau)]_1 A 0 = [ L 0 ( τ ) ] 1 , A 1 = [ L 1 ( τ ) ] 1 , A 2 = [ L 2 ( τ ) ] 1 , … , A N − 1 = [ L 2 n − 1 ( τ ) ] 1 C a = [ f ^ ( τ ) ] 1 C_a=[\hat{f}(\tau)]_1 C a = [ f ^ ( τ ) ] 1 : the (uni-variate) commitment of f ~ ( X 0 , X 1 , … , X n − 1 ) \tilde{f}(X_0, X_1, \ldots, X_{n-1}) f ~ ( X 0 , X 1 , … , X n − 1 ) u ⃗ = ( u 0 , u 1 , … , u n − 1 ) \vec{u}=(u_0, u_1, \ldots, u_{n-1}) u = ( u 0 , u 1 , … , u n − 1 ) : 求值点v = f ~ ( u 0 , u 1 , … , u n − 1 ) v=\tilde{f}(u_0,u_1,\ldots, u_{n-1}) v = f ~ ( u 0 , u 1 , … , u n − 1 ) : MLE 多项式 f ~ \tilde{f} f ~ 在 X ⃗ = u ⃗ \vec{X}=\vec{u} X = u 处的运算值Commit 计算过程 ¶ Prover 构造一元多项式 a ( X ) a(X) a ( X ) ,使其 Evaluation form 等于 a ⃗ = ( a 0 , a 1 , … , a N − 1 ) \vec{a}=(a_0, a_1, \ldots, a_{N-1}) a = ( a 0 , a 1 , … , a N − 1 ) ,其中 a i = f ~ ( b i t s ( i ) ) a_i = \tilde{f}(\mathsf{bits}(i)) a i = f ~ ( bits ( i )) , 为 f ~ \tilde{f} f ~ 在 Boolean Hypercube { 0 , 1 } n \{0,1\}^n { 0 , 1 } n 上的取值。 a ( X ) = a 0 ⋅ L 0 ( X ) + a 1 ⋅ L 1 ( X ) + a 2 ⋅ L 2 ( X ) + ⋯ + a N − 1 ⋅ L N − 1 ( X ) a(X) = a_0\cdot L_0(X) + a_1\cdot L_1(X) + a_2\cdot L_2(X)
+ \cdots + a_{N-1}\cdot L_{N-1}(X) a ( X ) = a 0 ⋅ L 0 ( X ) + a 1 ⋅ L 1 ( X ) + a 2 ⋅ L 2 ( X ) + ⋯ + a N − 1 ⋅ L N − 1 ( X ) Prover 计算 f ^ ( X ) \hat{f}(X) f ^ ( X ) 的承诺 C a C_a C a ,并发送 C a C_a C a C a = a 0 ⋅ A 0 + a 1 ⋅ A 1 + a 2 ⋅ A 2 + ⋯ + a N − 1 ⋅ A N − 1 = [ f ^ ( τ ) ] 1 C_{a} = a_0\cdot A_0 + a_1\cdot A_1 + a_2\cdot A_2 + \cdots + a_{N-1}\cdot A_{N-1} = [\hat{f}(\tau)]_1 C a = a 0 ⋅ A 0 + a 1 ⋅ A 1 + a 2 ⋅ A 2 + ⋯ + a N − 1 ⋅ A N − 1 = [ f ^ ( τ ) ] 1 其中 A 0 = [ L 0 ( τ ) ] 1 , A 1 = [ L 1 ( τ ) ] 1 , A 2 = [ L 2 ( τ ) ] 1 , … , A N − 1 = [ L 2 n − 1 ( τ ) ] 1 A_0 =[L_0(\tau)]_1, A_1= [L_1(\tau)]_1, A_2=[L_2(\tau)]_1, \ldots, A_{N-1} = [L_{2^{n-1}}(\tau)]_1 A 0 = [ L 0 ( τ ) ] 1 , A 1 = [ L 1 ( τ ) ] 1 , A 2 = [ L 2 ( τ ) ] 1 , … , A N − 1 = [ L 2 n − 1 ( τ ) ] 1 ,在预计算过程中已经得到。
Evaluation 证明协议 ¶ 回忆下证明的多项式运算的约束:
f ~ ( u 0 , u 1 , u 2 , … , u n − 1 ) = v \tilde{f}(u_0, u_1, u_2, \ldots, u_{n-1}) = v f ~ ( u 0 , u 1 , u 2 , … , u n − 1 ) = v 这里 u ⃗ = ( u 0 , u 1 , u 2 , … , u n − 1 ) \vec{u}=(u_0, u_1, u_2, \ldots, u_{n-1}) u = ( u 0 , u 1 , u 2 , … , u n − 1 ) 是一个公开的挑战点。
Round 1. ¶ Prover:
计算向量 c ⃗ \vec{c} c ,其中每个元素 c i = e q ∼ ( b i t s ( i ) , u ⃗ ) c_i=\overset{\sim}{eq}(\mathsf{bits}(i), \vec{u}) c i = e q ∼ ( bits ( i ) , u )
构造多项式 c ( X ) c(X) c ( X ) ,其在 H H H 上的运算结果恰好是 c ⃗ \vec{c} c 。
c ( X ) = ∑ i = 0 N − 1 c i ⋅ L i ( X ) c(X) = \sum_{i=0}^{N-1} c_i \cdot L_i(X) c ( X ) = i = 0 ∑ N − 1 c i ⋅ L i ( X ) 计算 c ( X ) c(X) c ( X ) 的承诺 C c = [ c ( τ ) ] 1 C_c= [c(\tau)]_1 C c = [ c ( τ ) ] 1 ,并发送 C c C_c C c C c = K Z G 10. C o m m i t ( c ⃗ ) = [ c ( τ ) ] 1 C_c = \mathsf{KZG10.Commit}(\vec{c}) = [c(\tau)]_1 C c = KZG10.Commit ( c ) = [ c ( τ ) ] 1 Round 2. ¶ Verifier: 发送挑战数 α ← $ F p \alpha\leftarrow_{\$}\mathbb{F}_p α ← $ F p
Prover:
构造关于 c ⃗ \vec{c} c 的约束多项式 p 0 ( X ) , … , p n ( X ) p_0(X),\ldots, p_{n}(X) p 0 ( X ) , … , p n ( X ) p 0 ( X ) = s 0 ( X ) ⋅ ( c ( X ) − ( 1 − u 0 ) ( 1 − u 1 ) . . . ( 1 − u n − 1 ) ) p k ( X ) = s k − 1 ( X ) ⋅ ( u n − k ⋅ c ( X ) − ( 1 − u n − k ) ⋅ c ( ω 2 n − k ⋅ X ) ) , k = 1 … n \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} p 0 ( X ) p k ( X ) = s 0 ( X ) ⋅ ( c ( X ) − ( 1 − u 0 ) ( 1 − u 1 ) ... ( 1 − u n − 1 ) ) = s k − 1 ( X ) ⋅ ( u n − k ⋅ c ( X ) − ( 1 − u n − k ) ⋅ c ( ω 2 n − k ⋅ X ) ) , k = 1 … n 把 { p i ( X ) } \{p_i(X)\} { p i ( X )} 聚合为一个多项式 p ( X ) p(X) p ( X ) p ( X ) = p 0 ( X ) + α ⋅ p 1 ( X ) + α 2 ⋅ p 2 ( X ) + ⋯ + α n ⋅ p n ( 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 0 ( X ) + α ⋅ p 1 ( X ) + α 2 ⋅ p 2 ( X ) + ⋯ + α n ⋅ p n ( X ) 构造累加多项式 z ( X ) z(X) z ( X ) ,满足 z ( 1 ) = a 0 ⋅ c 0 z ( ω i ) − z ( ω i − 1 ) = a ( ω i ) ⋅ c ( ω i ) , i = 1 , … , N − 1 z ( ω N − 1 ) = v \begin{split}
z(1) &= a_0\cdot c_0 \\
z(\omega_{i}) - z(\omega_{i-1}) &= a(\omega_{i})\cdot c(\omega_{i}), \quad i=1,\ldots, N-1 \\
z(\omega^{N-1}) &= v \\
\end{split} z ( 1 ) z ( ω i ) − z ( ω i − 1 ) z ( ω N − 1 ) = a 0 ⋅ c 0 = a ( ω i ) ⋅ c ( ω i ) , i = 1 , … , N − 1 = v 构造约束多项式 h 0 ( X ) , h 1 ( X ) , h 2 ( X ) h_0(X), h_1(X), h_2(X) h 0 ( X ) , h 1 ( X ) , h 2 ( X ) ,满足 h 0 ( X ) = L 0 ( X ) ⋅ ( z ( X ) − c 0 ⋅ a ( X ) ) h 1 ( X ) = ( X − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ X ) − a ( X ) ⋅ c ( X ) ) h 2 ( X ) = L N − 1 ( X ) ⋅ ( z ( X ) − v ) \begin{split}
h_0(X) &= L_0(X)\cdot\big(z(X) - c_0\cdot a(X) \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{split} h 0 ( X ) h 1 ( X ) h 2 ( X ) = L 0 ( X ) ⋅ ( z ( X ) − c 0 ⋅ a ( X ) ) = ( X − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ X ) − a ( X ) ⋅ c ( X )) = L N − 1 ( X ) ⋅ ( z ( X ) − v ) 把 p ( X ) p(X) p ( X ) 和 h 0 ( X ) , h 1 ( X ) , h 2 ( X ) h_0(X), h_1(X), h_2(X) h 0 ( X ) , h 1 ( X ) , h 2 ( X ) 聚合为一个多项式 h ( X ) h(X) h ( X ) ,满足 h ( X ) = p ( X ) + α n + 1 ⋅ h 0 ( X ) + α n + 2 ⋅ h 1 ( X ) + α n + 3 ⋅ h 2 ( X ) \begin{split}
h(X) &= p(X) + \alpha^{n+1} \cdot h_0(X) + \alpha^{n+2} \cdot h_1(X) + \alpha^{n+3} \cdot h_2(X)
\end{split} h ( X ) = p ( X ) + α n + 1 ⋅ h 0 ( X ) + α n + 2 ⋅ h 1 ( X ) + α n + 3 ⋅ h 2 ( X ) 计算 Quotient 多项式 t ( X ) t(X) t ( X ) ,满足 h ( X ) = t ( X ) ⋅ v H ( X ) h(X) =t(X)\cdot v_H(X) h ( X ) = t ( X ) ⋅ v H ( X ) 计算 C t = [ t ( τ ) ] 1 C_t=[t(\tau)]_1 C t = [ t ( τ ) ] 1 , C z = [ z ( τ ) ] 1 C_z=[z(\tau)]_1 C z = [ z ( τ ) ] 1 ,并发送 C t C_t C t 和 C z C_z C z C t = K Z G 10. C o m m i t ( t ( X ) ) = [ t ( τ ) ] 1 C z = K Z G 10. C o m m i t ( z ( X ) ) = [ z ( τ ) ] 1 \begin{split}
C_t &= \mathsf{KZG10.Commit}(t(X)) = [t(\tau)]_1 \\
C_z &= \mathsf{KZG10.Commit}(z(X)) = [z(\tau)]_1
\end{split} C t C z = KZG10.Commit ( t ( X )) = [ t ( τ ) ] 1 = KZG10.Commit ( z ( X )) = [ z ( τ ) ] 1 Round 3. ¶ Verifier: 发送随机求值点 ζ ← $ F p \zeta\leftarrow_{\$}\mathbb{F}_p ζ ← $ F p
Prover:
计算 s i ( X ) s_i(X) s i ( X ) 在 ζ 处的取值: s 0 ( ζ ) , s 1 ( ζ ) , … , s n − 1 ( ζ ) s_0(\zeta), s_1(\zeta), \ldots, s_{n-1}(\zeta) s 0 ( ζ ) , s 1 ( ζ ) , … , s n − 1 ( ζ ) 这里 Prover 可以高效计算 s i ( ζ ) s_i(\zeta) s i ( ζ ) ,由 s i ( X ) s_i(X) s i ( X ) 的公式得
s i ( ζ ) = ζ N − 1 ζ 2 i − 1 = ( ζ N − 1 ) ( ζ 2 i + 1 ) ( ζ 2 i − 1 ) ( ζ 2 i + 1 ) = ζ N − 1 ζ 2 i + 1 − 1 ⋅ ( ζ 2 i + 1 ) = s i + 1 ( ζ ) ⋅ ( ζ 2 i + 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} s i ( ζ ) = ζ 2 i − 1 ζ N − 1 = ( ζ 2 i − 1 ) ( ζ 2 i + 1 ) ( ζ N − 1 ) ( ζ 2 i + 1 ) = ζ 2 i + 1 − 1 ζ N − 1 ⋅ ( ζ 2 i + 1 ) = s i + 1 ( ζ ) ⋅ ( ζ 2 i + 1 ) 因此 s i ( ζ ) s_i(\zeta) s i ( ζ ) 的值可以通过 s i + 1 ( ζ ) s_{i + 1}(\zeta) s i + 1 ( ζ ) 计算得到,而
s n − 1 ( ζ ) = ζ N − 1 ζ 2 n − 1 − 1 = ζ 2 n − 1 + 1 s_{n-1}(\zeta) = \frac{\zeta^N - 1}{\zeta^{2^{n-1}} - 1} = \zeta^{2^{n-1}} + 1 s n − 1 ( ζ ) = ζ 2 n − 1 − 1 ζ N − 1 = ζ 2 n − 1 + 1 因此可以得到一个 O ( n ) O(n) O ( n ) 的算法来计算 s i ( ζ ) s_i(\zeta) s i ( ζ ) ,并且这里不含除法运算。计算过程是:s n − 1 ( ζ ) → s n − 2 ( ζ ) → ⋯ → s 0 ( ζ ) s_{n-1}(\zeta) \rightarrow s_{n-2}(\zeta) \rightarrow \cdots \rightarrow s_0(\zeta) s n − 1 ( ζ ) → s n − 2 ( ζ ) → ⋯ → s 0 ( ζ ) 。
定义求值 Domain D ′ D' D ′ ,包含 n + 1 n+1 n + 1 个元素: D ′ = D ζ = { ζ , ω ζ , ω 2 ζ , ω 4 ζ , … , ω 2 n − 1 ζ } D'=D\zeta = \{\zeta, \omega\zeta, \omega^2\zeta,\omega^4\zeta, \ldots, \omega^{2^{n-1}}\zeta\} D ′ = D ζ = { ζ , ω ζ , ω 2 ζ , ω 4 ζ , … , ω 2 n − 1 ζ } 计算并发送 c ( X ) c(X) c ( X ) 在 D ′ D' D ′ 上的取值 c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) c(\zeta), c(\zeta\cdot\omega), c(\zeta\cdot\omega^2), c(\zeta\cdot\omega^4), \ldots, c(\zeta\cdot\omega^{2^{n-1}}) c ( ζ ) , c ( ζ ⋅ ω ) , c ( ζ ⋅ ω 2 ) , c ( ζ ⋅ ω 4 ) , … , c ( ζ ⋅ ω 2 n − 1 ) 计算并发送 z ( ω − 1 ⋅ ζ ) z(\omega^{-1}\cdot\zeta) z ( ω − 1 ⋅ ζ )
计算 Linearized Polynomial l ζ ( X ) l_\zeta(X) l ζ ( X )
l ζ ( X ) = ( s 0 ( ζ ) ⋅ ( c ( ζ ) − c 0 ) + α ⋅ s 0 ( ζ ) ⋅ ( u n − 1 ⋅ c ( ζ ) − ( 1 − u n − 1 ) ⋅ c ( ω 2 n − 1 ⋅ ζ ) ) + α 2 ⋅ s 1 ( ζ ) ⋅ ( u n − 2 ⋅ c ( ζ ) − ( 1 − u n − 2 ) ⋅ c ( ω 2 n − 2 ⋅ ζ ) ) + ⋯ + α n − 1 ⋅ s n − 2 ( ζ ) ⋅ ( u 1 ⋅ c ( ζ ) − ( 1 − u 1 ) ⋅ c ( ω 2 ⋅ ζ ) ) + α n ⋅ s n − 1 ( ζ ) ⋅ ( u 0 ⋅ c ( ζ ) − ( 1 − u 0 ) ⋅ c ( ω ⋅ ζ ) ) + α n + 1 ⋅ ( L 0 ( ζ ) ⋅ ( z ( X ) − c 0 ⋅ a ( X ) ) + α n + 2 ⋅ ( ζ − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ ζ ) − c ( ζ ) ⋅ a ( X ) ) + α n + 3 ⋅ L N − 1 ( ζ ) ⋅ ( z ( X ) − v ) − v H ( ζ ) ⋅ t ( X ) ) \begin{split}
l_\zeta(X) =& \Big(s_0(\zeta) \cdot (c(\zeta) - c_0) \\
& + \alpha\cdot s_0(\zeta) \cdot (u_{n-1}\cdot c(\zeta) - (1-u_{n-1})\cdot c(\omega^{2^{n-1}}\cdot\zeta))\\
& + \alpha^2\cdot s_1(\zeta) \cdot (u_{n-2}\cdot c(\zeta) - (1-u_{n-2})\cdot c(\omega^{2^{n-2}}\cdot\zeta)) \\
& + \cdots \\
& + \alpha^{n-1}\cdot s_{n-2}(\zeta)\cdot (u_{1}\cdot c(\zeta) - (1-u_{1})\cdot c(\omega^2\cdot\zeta))\\
& + \alpha^n\cdot s_{n-1}(\zeta)\cdot (u_{0}\cdot c(\zeta) - (1-u_{0})\cdot c(\omega\cdot\zeta)) \\
& + \alpha^{n+1}\cdot (L_0(\zeta)\cdot\big(z(X) - c_0\cdot a(X))\\
& + \alpha^{n+2}\cdot (\zeta - 1)\cdot\big(z(X)-z(\omega^{-1}\cdot\zeta)-c(\zeta)\cdot a(X) ) \\
& + \alpha^{n+3}\cdot L_{N-1}(\zeta)\cdot(z(X) - v) \\
& - v_H(\zeta)\cdot t(X)\ \Big)
\end{split} l ζ ( X ) = ( s 0 ( ζ ) ⋅ ( c ( ζ ) − c 0 ) + α ⋅ s 0 ( ζ ) ⋅ ( u n − 1 ⋅ c ( ζ ) − ( 1 − u n − 1 ) ⋅ c ( ω 2 n − 1 ⋅ ζ )) + α 2 ⋅ s 1 ( ζ ) ⋅ ( u n − 2 ⋅ c ( ζ ) − ( 1 − u n − 2 ) ⋅ c ( ω 2 n − 2 ⋅ ζ )) + ⋯ + α n − 1 ⋅ s n − 2 ( ζ ) ⋅ ( u 1 ⋅ c ( ζ ) − ( 1 − u 1 ) ⋅ c ( ω 2 ⋅ ζ )) + α n ⋅ s n − 1 ( ζ ) ⋅ ( u 0 ⋅ c ( ζ ) − ( 1 − u 0 ) ⋅ c ( ω ⋅ ζ )) + α n + 1 ⋅ ( L 0 ( ζ ) ⋅ ( z ( X ) − c 0 ⋅ a ( X )) + α n + 2 ⋅ ( ζ − 1 ) ⋅ ( z ( X ) − z ( ω − 1 ⋅ ζ ) − c ( ζ ) ⋅ a ( X )) + α n + 3 ⋅ L N − 1 ( ζ ) ⋅ ( z ( X ) − v ) − v H ( ζ ) ⋅ t ( X ) ) 显然,l ζ ( ζ ) = 0 l_\zeta(\zeta)= 0 l ζ ( ζ ) = 0 ,因此这个运算值不需要发给 Verifier,并且 [ l ζ ( τ ) ] 1 [l_\zeta(\tau)]_1 [ l ζ ( τ ) ] 1 可以由 Verifier 自行构造。
构造多项式 c ∗ ( X ) c^*(X) c ∗ ( X ) ,它是下面向量在 D ζ D\zeta D ζ 上的插值多项式 c ∗ ⃗ = ( c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , c ( ζ ) ) \vec{c^*}= \Big(c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), c(\zeta)\Big) c ∗ = ( c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , c ( ζ ) ) Prover 可以利用事先预计算的 D D D 上的Bary-Centric Weights { w ^ i } \{\hat{w}_i\} { w ^ i } 来快速计算 c ∗ ( X ) c^*(X) c ∗ ( X ) ,
c ∗ ( X ) = c 0 ∗ ⋅ w ^ 0 X − ω ζ + c 1 ∗ ⋅ w ^ 1 X − ω 2 ζ + ⋯ + c n ∗ ⋅ w ^ n X − ω 2 n ζ w ^ 0 X − ω ζ + w ^ 1 X − ω 2 ζ + ⋯ + w ^ n X − ω 2 n ζ c^*(X) = \frac{c^*_0 \cdot \frac{\hat{w}_0}{X-\omega\zeta} + c^*_1 \cdot \frac{\hat{w}_1}{X-\omega^{2}\zeta} + \cdots + c^*_n \cdot \frac{\hat{w}_n}{X-\omega^{2^n}\zeta}}{
\frac{\hat{w}_0}{X-\omega\zeta} + \frac{\hat{w}_1}{X-\omega^2\zeta} + \cdots + \frac{\hat{w}_n}{X-\omega^{2^n}\zeta}
} c ∗ ( X ) = X − ω ζ w ^ 0 + X − ω 2 ζ w ^ 1 + ⋯ + X − ω 2 n ζ w ^ n c 0 ∗ ⋅ X − ω ζ w ^ 0 + c 1 ∗ ⋅ X − ω 2 ζ w ^ 1 + ⋯ + c n ∗ ⋅ X − ω 2 n ζ w ^ n 这里 w ^ j \hat{w}_j w ^ j 为预计算的值:
w ^ j = ∏ l ≠ j 1 ω 2 j − ω 2 l \hat{w}_j = \prod_{l\neq j} \frac{1}{\omega^{2^j} - \omega^{2^l}} w ^ j = l = j ∏ ω 2 j − ω 2 l 1 因为 l ζ ( ζ ) = 0 l_\zeta(\zeta)= 0 l ζ ( ζ ) = 0 ,所以存在 Quotient 多项式 q ζ ( X ) q_\zeta(X) q ζ ( X ) 满足 q ζ ( X ) = 1 X − ζ ⋅ l ζ ( X ) q_\zeta(X) = \frac{1}{X-\zeta}\cdot l_\zeta(X) q ζ ( X ) = X − ζ 1 ⋅ l ζ ( X ) 构造 D ζ D\zeta D ζ 上的消失多项式 z D ζ ( X ) z_{D_{\zeta}}(X) z D ζ ( X ) z D ζ ( X ) = ( X − ζ ω ) ⋯ ( X − ζ ω 2 n − 1 ) ( X − ζ ) z_{D_{\zeta}}(X) = (X-\zeta\omega)\cdots (X-\zeta\omega^{2^{n-1}})(X-\zeta) z D ζ ( X ) = ( X − ζ ω ) ⋯ ( X − ζ ω 2 n − 1 ) ( X − ζ ) 构造 Quotient 多项式 q c ( X ) q_c(X) q c ( X ) : q c ( X ) = ( c ( X ) − c ∗ ( X ) ) ( X − ζ ) ( X − ω ζ ) ( X − ω 2 ζ ) ⋯ ( X − ω 2 n − 1 ζ ) q_c(X) = \frac{(c(X) - c^*(X))}{(X-\zeta)(X-\omega\zeta)(X-\omega^2\zeta)\cdots(X-\omega^{2^{n-1}}\zeta)} q c ( X ) = ( X − ζ ) ( X − ω ζ ) ( X − ω 2 ζ ) ⋯ ( X − ω 2 n − 1 ζ ) ( c ( X ) − c ∗ ( X )) 构造 Quotient 多项式 q ω ζ ( X ) q_{\omega\zeta}(X) q ω ζ ( X ) q ω ζ ( X ) = z ( X ) − z ( ω − 1 ⋅ ζ ) X − ω − 1 ⋅ ζ q_{\omega\zeta}(X) = \frac{z(X) - z(\omega^{-1}\cdot\zeta)}{X - \omega^{-1}\cdot\zeta} q ω ζ ( X ) = X − ω − 1 ⋅ ζ z ( X ) − z ( ω − 1 ⋅ ζ ) 发送 ( Q c = [ q c ( τ ) ] 1 , Q ζ = [ q ζ ( τ ) ] 1 , Q ω ζ = [ q ω ζ ( τ ) ] 1 , ) \big(Q_c = [q_c(\tau)]_1, Q_\zeta=[q_\zeta(\tau)]_1, Q_{\omega\zeta}=[q_{\omega\zeta}(\tau)]_1, \big) ( Q c = [ q c ( τ ) ] 1 , Q ζ = [ q ζ ( τ ) ] 1 , Q ω ζ = [ q ω ζ ( τ ) ] 1 , ) Round 4. ¶ Verifier 发送第二个随机挑战点 ξ ← $ F p \xi\leftarrow_{\$}\mathbb{F}_p ξ ← $ F p
Prover 构造第三个 Quotient 多项式 q ξ ( X ) q_\xi(X) q ξ ( X )
q ξ ( X ) = c ( X ) − c ∗ ( ξ ) − z D ζ ( ξ ) ⋅ q c ( X ) X − ξ q_\xi(X) = \frac{c(X) - c^*(\xi) - z_{D_\zeta}(\xi)\cdot q_c(X)}{X-\xi} q ξ ( X ) = X − ξ c ( X ) − c ∗ ( ξ ) − z D ζ ( ξ ) ⋅ q c ( X ) Prover 计算并发送 Q ξ Q_\xi Q ξ Q ξ = K Z G 10. C o m m i t ( q ξ ( X ) ) = [ q ξ ( τ ) ] 1 Q_\xi = \mathsf{KZG10.Commit}(q_\xi(X)) = [q_\xi(\tau)]_1 Q ξ = KZG10.Commit ( q ξ ( X )) = [ q ξ ( τ ) ] 1 证明表示 ¶ 7 ⋅ G 1 7\cdot\mathbb{G}_1 7 ⋅ G 1 , ( n + 1 ) ⋅ F (n+1)\cdot\mathbb{F} ( n + 1 ) ⋅ F
π e v a l = ( z ( ω − 1 ⋅ ζ ) , c ( ζ ) , c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , C c , C t , C z , Q c , Q ζ , Q ξ , Q ω ζ ) \begin{aligned}
\pi_{eval} &= \big(z(\omega^{-1}\cdot\zeta), c(\zeta), c(\omega\cdot\zeta), c(\omega^2\cdot\zeta), c(\omega^4\cdot\zeta), \ldots, c(\omega^{2^{n-1}}\cdot\zeta), \\
& \qquad C_{c}, C_{t}, C_{z}, Q_c, Q_\zeta, Q_\xi, Q_{\omega\zeta}\big)
\end{aligned} π e v a l = ( z ( ω − 1 ⋅ ζ ) , c ( ζ ) , c ( ω ⋅ ζ ) , c ( ω 2 ⋅ ζ ) , c ( ω 4 ⋅ ζ ) , … , c ( ω 2 n − 1 ⋅ ζ ) , C c , C t , C z , Q c , Q ζ , Q ξ , Q ω ζ ) 验证过程 ¶ Verifier 计算 c ∗ ( ξ ) c^*(\xi) c ∗ ( ξ ) 使用预计算的 Barycentric Weights { w ^ i } \{\hat{w}_i\} { w ^ i } c ∗ ( ξ ) = ∑ i c i ∗ w ^ i ξ − x i ∑ i w ^ i ξ − x i c^*(\xi)=\frac{\sum_i c_i^*\frac{\hat{w}_i}{\xi-x_i}}{\sum_i \frac{\hat{w}_i}{\xi-x_i}} c ∗ ( ξ ) = ∑ i ξ − x i w ^ i ∑ i c i ∗ ξ − x i w ^ i 再计算对应的承诺 C ∗ ( ξ ) = [ c ∗ ( ξ ) ] 1 C^*(\xi)=[c^*(\xi)]_1 C ∗ ( ξ ) = [ c ∗ ( ξ ) ] 1 。
Verifier 计算 v H ( ζ ) , L 0 ( ζ ) , L N − 1 ( ζ ) v_H(\zeta), L_0(\zeta), L_{N-1}(\zeta) v H ( ζ ) , L 0 ( ζ ) , L N − 1 ( ζ ) v H ( ζ ) = ζ N − 1 v_H(\zeta) = \zeta^N - 1 v H ( ζ ) = ζ N − 1 L 0 ( ζ ) = 1 N ⋅ v H ( ζ ) ζ − 1 L_0(\zeta) = \frac{1}{N}\cdot \frac{v_{H}(\zeta)}{\zeta-1} L 0 ( ζ ) = N 1 ⋅ ζ − 1 v H ( ζ ) L N − 1 ( ζ ) = ω N − 1 N ⋅ v H ( ζ ) ζ − ω N − 1 L_{N-1}(\zeta) = \frac{\omega^{N-1}}{N}\cdot \frac{v_{H}(\zeta)}{\zeta-\omega^{N-1}} L N − 1 ( ζ ) = N ω N − 1 ⋅ ζ − ω N − 1 v H ( ζ ) Verifier 计算 s 0 ( ζ ) , … , s n − 1 ( ζ ) s_0(\zeta), \ldots, s_{n-1}(\zeta) s 0 ( ζ ) , … , s n − 1 ( ζ ) ,其计算方法可以采用前文提到的递推方式进行计算。
Verifier 计算 z D ζ ( ξ ) z_{D_\zeta}(\xi) z D ζ ( ξ ) ,
z D ζ ( ξ ) = ( ξ − ζ ω ) ⋯ ( ξ − ζ ω 2 n − 1 ) ( ξ − ζ ) z_{D_{\zeta}}(\xi) = (\xi-\zeta\omega)\cdots (\xi-\zeta\omega^{2^{n-1}})(\xi-\zeta) z D ζ ( ξ ) = ( ξ − ζ ω ) ⋯ ( ξ − ζ ω 2 n − 1 ) ( ξ − ζ ) Verifier 计算线性化多项式的承诺 C l C_l C l C l = ( ( ( c ( ζ ) − c 0 ) s 0 ( ζ ) + α ⋅ ( u n − 1 ⋅ c ( ζ ) − ( 1 − u n − 1 ) ⋅ c ( ω 2 n − 1 ⋅ ζ ) ) ⋅ s 0 ( ζ ) + α 2 ⋅ ( u n − 2 ⋅ c ( ζ ) − ( 1 − u n − 2 ) ⋅ c ( ω 2 n − 2 ⋅ ζ ) ) ⋅ s 1 ( ζ ) + ⋯ + α n − 1 ⋅ ( u 1 ⋅ c ( ζ ) − ( 1 − u 1 ) ⋅ c ( ω 2 ⋅ ζ ) ) ⋅ s n − 2 ( ζ ) + α n ⋅ ( u 0 ⋅ c ( ζ ) − ( 1 − u 0 ) ⋅ c ( ω ⋅ ζ ) ) ⋅ s n − 1 ( ζ ) ) ⋅ [ 1 ] 1 + α n + 1 ⋅ L 0 ( ζ ) ⋅ ( C z − c 0 ⋅ C a ) + α n + 2 ⋅ ( ζ − 1 ) ⋅ ( C z − z ( ω − 1 ⋅ ζ ) ⋅ [ 1 ] 1 − c ( ζ ) ⋅ C a ) + α n + 3 ⋅ L N − 1 ( ζ ) ⋅ ( C z − v ⋅ [ 1 ] 1 ) − v H ( ζ ) ⋅ C t ) \begin{split}
C_l & =
\Big( \Big((c(\zeta) - c_0)s_0(\zeta) \\
& + \alpha \cdot (u_{n-1}\cdot c(\zeta) - (1-u_{n-1})\cdot c(\omega^{2^{n-1}}\cdot\zeta))\cdot s_0(\zeta)\\
& + \alpha^2\cdot (u_{n-2}\cdot c(\zeta) - (1-u_{n-2})\cdot c(\omega^{2^{n-2}}\cdot\zeta))\cdot s_1(\zeta) \\
& + \cdots \\
& + \alpha^{n-1}\cdot (u_{1}\cdot c(\zeta) - (1-u_{1})\cdot c(\omega^2\cdot\zeta))\cdot s_{n-2}(\zeta)\\
& + \alpha^n\cdot (u_{0}\cdot c(\zeta) - (1-u_{0})\cdot c(\omega\cdot\zeta))\cdot s_{n-1}(\zeta) \Big) \cdot [1]_1 \\
& + \alpha^{n+1}\cdot L_0(\zeta)\cdot(C_z - c_0\cdot C_a)\\
& + \alpha^{n+2}\cdot (\zeta-1)\cdot\big(C_z - z(\omega^{-1}\cdot \zeta) \cdot [1]_1 -c(\zeta)\cdot C_{a} ) \\
& + \alpha^{n+3}\cdot L_{N-1}(\zeta)\cdot(C_z - v \cdot [1]_1) \\
& - v_H(\zeta)\cdot C_t \Big)
\end{split} C l = ( ( ( c ( ζ ) − c 0 ) s 0 ( ζ ) + α ⋅ ( u n − 1 ⋅ c ( ζ ) − ( 1 − u n − 1 ) ⋅ c ( ω 2 n − 1 ⋅ ζ )) ⋅ s 0 ( ζ ) + α 2 ⋅ ( u n − 2 ⋅ c ( ζ ) − ( 1 − u n − 2 ) ⋅ c ( ω 2 n − 2 ⋅ ζ )) ⋅ s 1 ( ζ ) + ⋯ + α n − 1 ⋅ ( u 1 ⋅ c ( ζ ) − ( 1 − u 1 ) ⋅ c ( ω 2 ⋅ ζ )) ⋅ s n − 2 ( ζ ) + α n ⋅ ( u 0 ⋅ c ( ζ ) − ( 1 − u 0 ) ⋅ c ( ω ⋅ ζ )) ⋅ s n − 1 ( ζ ) ) ⋅ [ 1 ] 1 + α n + 1 ⋅ L 0 ( ζ ) ⋅ ( C z − c 0 ⋅ C a ) + α n + 2 ⋅ ( ζ − 1 ) ⋅ ( C z − z ( ω − 1 ⋅ ζ ) ⋅ [ 1 ] 1 − c ( ζ ) ⋅ C a ) + α n + 3 ⋅ L N − 1 ( ζ ) ⋅ ( C z − v ⋅ [ 1 ] 1 ) − v H ( ζ ) ⋅ C t ) Verifier 产生随机数 η 来合并下面的 Pairing 验证: e ( C l + ζ ⋅ Q ζ , [ 1 ] 2 ) = ? e ( Q ζ , [ τ ] 2 ) e ( C c − C ∗ ( ξ ) − z D ζ ( ξ ) ⋅ Q c + ξ ⋅ Q ξ , [ 1 ] 2 ) = ? e ( Q ξ , [ τ ] 2 ) e ( C z + ζ ⋅ Q ω ζ − z ( ω − 1 ⋅ ζ ) ⋅ [ 1 ] 1 , [ 1 ] 2 ) = ? e ( Q ω ζ , [ τ ] 2 ) \begin{split}
e(C_l + \zeta\cdot Q_\zeta, [1]_2)\overset{?}{=}e(Q_\zeta, [\tau]_2)\\
e(C_c - C^*(\xi) - z_{D_\zeta}(\xi)\cdot Q_c + \xi\cdot Q_\xi, [1]_2) \overset{?}{=} e(Q_\xi, [\tau]_2)\\
e(C_z + \zeta\cdot Q_{\omega\zeta} - z(\omega^{-1}\cdot\zeta)\cdot[1]_1, [1]_2) \overset{?}{=} e(Q_{\omega\zeta}, [\tau]_2)\\
\end{split} e ( C l + ζ ⋅ Q ζ , [ 1 ] 2 ) = ? e ( Q ζ , [ τ ] 2 ) e ( C c − C ∗ ( ξ ) − z D ζ ( ξ ) ⋅ Q c + ξ ⋅ Q ξ , [ 1 ] 2 ) = ? e ( Q ξ , [ τ ] 2 ) e ( C z + ζ ⋅ Q ω ζ − z ( ω − 1 ⋅ ζ ) ⋅ [ 1 ] 1 , [ 1 ] 2 ) = ? e ( Q ω ζ , [ τ ] 2 ) 合并后的验证只需要两个 Pairing 运算。
P = ( C l + ζ ⋅ Q ζ ) + η ⋅ ( C c − C ∗ ( ξ ) − z D ζ ( ξ ) ⋅ Q c + ξ ⋅ Q ξ ) + η 2 ⋅ ( C z + ζ ⋅ Q ω ζ − z ( ω − 1 ⋅ ζ ) ⋅ [ 1 ] 1 ) \begin{split}
P &= \Big(C_l + \zeta\cdot Q_\zeta\Big) \\
& + \eta\cdot \Big(C_c - C^*(\xi) - z_{D_\zeta}(\xi)\cdot Q_c + \xi\cdot Q_\xi\Big) \\
& + \eta^2\cdot\Big(C_z + \zeta\cdot Q_{\omega\zeta} - z(\omega^{-1}\cdot\zeta)\cdot[1]_1\Big)
\end{split} P = ( C l + ζ ⋅ Q ζ ) + η ⋅ ( C c − C ∗ ( ξ ) − z D ζ ( ξ ) ⋅ Q c + ξ ⋅ Q ξ ) + η 2 ⋅ ( C z + ζ ⋅ Q ω ζ − z ( ω − 1 ⋅ ζ ) ⋅ [ 1 ] 1 ) e ( P , [ 1 ] 2 ) = ? e ( Q ζ + η ⋅ Q ξ + η 2 ⋅ Q ω ζ , [ τ ] 2 ) e\Big(P, [1]_2\Big) \overset{?}{=} e\Big(Q_\zeta + \eta\cdot Q_\xi + \eta^2\cdot Q_{\omega\zeta}, [\tau]_2\Big) e ( P , [ 1 ] 2 ) = ? e ( Q ζ + η ⋅ Q ξ + η 2 ⋅ Q ω ζ , [ τ ] 2 ) 3. 优化性能分析 ¶ Proof size: 7 G 1 + ( n + 1 ) F 7~\mathbb{G}_1 + (n+1)~\mathbb{F} 7 G 1 + ( n + 1 ) F
Prover’s cost
Commit 阶段:O ( N log N ) F O(N\log N)~\mathbb{F} O ( N log N ) F + G 1 \mathbb{G}_1 G 1 Evaluation 阶段:O ( N log N ) F O(N\log N)~\mathbb{F} O ( N log N ) F + 7 G 1 7~\mathbb{G}_1 7 G 1 Verifier’s cost: 4 F + O ( n ) F + 3 G 1 + 2 P 4~\mathbb{F} + O(n)~\mathbb{F}+ 3~\mathbb{G}_1 + 2~P 4 F + O ( n ) F + 3 G 1 + 2 P
References ¶ [BDFG20] Dan Boneh, Justin Drake, Ben Fisch, and Ariel Gabizon. “Efficient polynomial commitment schemes for multiple points and polynomials”. Cryptology {ePrint} Archive, Paper 2020/081. https:// eprint .iacr .org /2020 /081 .