Lookup Argument简史
1. 引言
主要参考Ingonyama团队2023年4月文章《A Brief History of Lookup Arguments》。
近年来zk-SNARKs的研究热点有:
- 让ZKP proof更succinct
- 降低Prover time和Verifier time
但,大多数SNARKs仍受限于,易于转换为多项式的算术运算。通常将“易于转换为多项式的算术运算” 称为 “SNARK-friendly”的,而其它“SNARK-unfriendly”运算则仍未解决。
直到2018年Jonathan Bootle等人在《BCG+18 Nearly linear-time zero-knowledge proofs for correct program execution》论文中,提出了lookup协议来处理某些SNARK-unfriendly运算。lookup协议用于证明如下statement:
- 已知table T = { t i } i = 0 , ⋯ , N − 1 T=\{t_i\}_{i=0,\cdots,N-1} T={ti}i=0,⋯,N−1具有不同值(“rows”)
- 一组lookups F = { f j } j = 0 , ⋯ , m − 1 F=\{f_j\}_{j=0,\cdots,m-1} F={fj}j=0,⋯,m−1(可能有重复值)
- 证明:所有lookups均包含在table内,即 F ⊆ T F\subseteq T F⊆T。
table T T T通常是public的,而lookups通常为private witness。
可:
- 将table看成是某特定变量的所有合法值
- 而lookups为,某特定程序执行给出的该变量值。
- 则,以上statement即表示,该变量维护了整个执行过程中的合法状态。
- 除非明确指出,可假定 m < N m<N m<N,且大多数情况下 m ≪ N m\ll N m≪N。
本文关注各种不同的lookup argument及其变种演变思路,重点关注:
- plookup:Ariel Gabizon等人2020年论文 plookup: A simplified polynomial protocol for lookup tables
- cq:Liam Eagen等人2022年论文 cq: Cached quotients for fast lookups
2. lookup argument用途
2.1 范围检查
当检查数字 x x x在 { 0 , 1 , ⋯ , N − 1 } \{0,1,\cdots,N-1\} {0,1,⋯,N−1}范围内,其中 N = 2 n N=2^n N=2n。
对应的算术约束方式为:
- 定义 n n n个数字 b 0 , ⋯ , b n − 1 b_0,\cdots,b_{n-1} b0,⋯,bn−1,检查对于每个 i i i,有 b i ∈ { 0 , 1 } b_i\in\{0,1\} bi∈{0,1},且 ∑ i b i 2 i = x \sum_{i}b_i2^i=x ∑ibi2i=x。一共需要 n + 1 n+1 n+1个约束。
- 若需要做 m m m个数字的范围检查,则需要 O ( m n ) = O ( m log N ) O(mn)=O(m\log N) O(mn)=O(mlogN)个约束。
而若借助lookup argument,则仅需要一个lookup约束,就可检查 m m m个数字在 { 0 , 1 , ⋯ , N − 1 } \{0,1,\cdots,N-1\} {0,1,⋯,N−1}范围内。后面将介绍这样一个lookup约束的开销。且当 N N N不是为power of 2时,上面的算术约束方式将是笨重的,而lookup argument无需关注 N N N是否为power of 2。
2.2 有限域函数
lookup argument可用于实现任意(有限域)函数,通过简单将该函数的完整输入输出值来定义table。可用于实现具有任意多个变量的函数。
如哈希计算中广泛使用的 k k k-bit XOR函数。遵循2.1节的逻辑,使用算术约束方式,将需要 6 k 6k 6k个约束。而借助lookup argument,可直接借助table T T T来实现,其中table T T T的rows为:
t i = ( A , B , C ) t_i=(A,B,C) ti=(A,B,C)
其中:
- 对于每个 i i i, A , B ∈ { 0 , 1 , ⋯ , 2 k − 1 } A,B\in\{0,1,\cdots,2^k-1\} A,B∈{0,1,⋯,2k−1}为2个 k k k-bit数字的不同组合,且 C = A ⊕ B C=A\oplus B C=A⊕B。
- 整个table T T T具有 2 2 k 2^{2k} 22k行,且每行需存储 3 k 3k 3k bits。
- 当 k = 32 k=32 k=32时(很多哈希函数的通用取值),则这样的table是完全不实用的。
- 当 k = 16 k=16 k=16时,这样的table需要24GB存储空间,对大多数应用场景来说,也是不实用的。
2.3 更好的XOR
Halo2中的16-bit table chip for SHA-256,通过利用zero-interleaving,借助lookup argument,实现了更好的bit-wise XOR函数。
zero-interleaving,是指以二进制来表示数字:
A = ∑ l = 0 k − 1 a l 2 l A=\sum_{l=0}^{k-1}a_l2^l A=∑l=0k−1al2l
然后在任意2个原始bits之间添加一个‘0’ bit,从而有:
A ′ = ∑ l = 0 k − 1 a l 4 l A'=\sum_{l=0}^{k-1}a_l4^l A′=∑l=0k−1al4l
对XOR的2个输入 A , B A,B A,B均做zero-interleaving之后,有 A ′ , B ′ A',B' A′,B′。计算 C ′ ′ = A ′ + B ′ C''=A'+B' C′′=A′+B′,则 C ′ ′ C'' C′′的偶数位置的bit即为 C = A ⊕ B C=A\oplus B C=A⊕B。为根据 C ′ ′ C'' C′′获得 C C C,需将 C ′ ′ C'' C′′分解为奇数bit和偶数bit:
C ′ ′ = ∑ l = 0 k − 1 c l e v e n 4 l + 2 ∑ l = 0 k − 1 c l o d d 4 l C''=\sum_{l=0}^{k-1}c_l^{even}4^l+2\sum_{l=0}^{k-1}c_{l}^{odd}4^l C′′=∑l=0k−1cleven4l+2∑l=0k−1clodd4l
从而:
- 有 c l e v e n c_l^{even} cleven为 C = A ⊕ B C=A\oplus B C=A⊕B的二进制表示,
- 同时有副产品: c l o d d c_l^{odd} clodd为 D = A ∧ B D=A\land B D=A∧B的二进制表示。 ∧ \land ∧表示bit-wise AND。
- 借助4次zero-interleaving table: A , B , C , D → A ′ , B ′ , C ′ , D ′ A,B,C,D\rightarrow A',B',C',D' A,B,C,D→A′,B′,C′,D′,以及一个算术约束:
A ′ + B ′ = C ′ ′ = C ′ + 2 D ′ A'+B'=C''=C'+2D' A′+B′=C′′=C′+2D′
可同时证明 A , B A,B A,B的bit-wise XOR和bit-wise AND结果。
当 k = 32 k=32 k=32时,以上实现仍是不切实际的大,单个table需要48GB存储空间。
但,对于 k = 16 k=16 k=16的情况,以上实现对应的lookup table仅需要384kB。
可通过slicing以SNARK-friendly的方式来降低bits数,即,引入arithmetic gate——其以2个16-bit数字 x 0 , x 1 x_0,x_1 x0,x1为输入,然后最终获得32-bit的数字 x = x 0 ⋅ 1 + x 1 ⋅ 2 16 x=x_0\cdot 1+x_1\cdot 2^{16} x=x0⋅1+x1⋅216。
2.4 有限状态机
lookup table可用于实现有限状态机。状态机内包含一组状态,以及依赖于输入的状态变化。实现状态机的lookup table内,包含 (current state, input, next state) 的所有合法组合。状态机的execution trace通常表示为:
( s t a t e ( j ) , i n p u t ( j ) , n e x t _ s t a t e ( j ) ) (state(j),input(j),next\_state(j)) (state(j),input(j),next_state(j))
可使用lookup argument来证明该状态机的合法执行,同时证明wiring约束:
n e x t _ s t a t e ( j ) = s t a t e ( j + 1 ) next\_state(j)=state(j+1) next_state(j)=state(j+1)
该wiring 约束是SNARK-friendly的。
3. Plookup
Plookup为早期的lookup协议之一,其为首个lookup协议的简化版。
Plookup的基于的思想为:
- 已知向量 t ∈ F N , f ∈ F m , s ∈ F N + m t\in\mathbb{F}^N,f\in\mathbb{F}^m,s\in\mathbb{F}^{N+m} t∈FN,f∈Fm,s∈FN+m,和双变量多项式:
F ( β , γ ) = ( 1 + β ) m ∏ j = 1 m ( γ + f j ) ∏ i = 1 N − 1 ( γ ( 1 + β ) + t i + β t i + 1 ) F(\beta,\gamma)=(1+\beta)^m\prod_{j=1}^{m}(\gamma+f_j)\prod_{i=1}^{N-1}(\gamma(1+\beta)+t_i+\beta t_{i+1}) F(β,γ)=(1+β)m∏j=1m(γ+fj)∏i=1N−1(γ(1+β)+ti+βti+1)
G ( β , γ ) = ∏ k = 1 m + N − 1 ( γ ( 1 + β ) + s k + β s k + 1 ) G(\beta,\gamma)=\prod_{k=1}^{m+N-1}(\gamma(1+\beta)+s_k+\beta s_{k+1}) G(β,γ)=∏k=1m+N−1(γ(1+β)+sk+βsk+1) - 则有:
F ≡ G ⇔ { { f j } ⊆ { t i } , 且 s = ( f , t ) sorted by t F\equiv G \Leftrightarrow \left\{\begin{matrix} \{f_j\}\subseteq \{t_i\}, & 且 \\ s=(f,t) \text{ sorted by } t & \\ \end{matrix}\right. F≡G⇔{{fj}⊆{ti},s=(f,t) sorted by t且
其中:- s = ( f , t ) sorted by t s=(f,t) \text{ sorted by } t s=(f,t) sorted by t,表示 s s s中值的出现顺序,与 t t t中的出现顺序一样,因为有 { f j } ⊆ { t i } \{f_j\}\subseteq \{t_i\} {fj}⊆{ti}。
若有 s = ( f , t ) sorted by t s=(f,t) \text{ sorted by } t s=(f,t) sorted by t,且, { f j } ⊆ { t i } \{f_j\}\subseteq \{t_i\} {fj}⊆{ti},则对于每个 i = 1 , ⋯ , N − 1 i=1,\cdots,N-1 i=1,⋯,N−1,都有不同的 k ∈ { 1 , ⋯ , m + N − 1 } k\in\{1,\cdots,m+N-1\} k∈{1,⋯,m+N−1},使得:
( γ ( 1 + β ) + t i + β t i + 1 ) = ( γ ( 1 + β ) + s k + β s k + 1 ) (3.4) (\gamma (1+\beta)+t_i+\beta t_{i+1})=(\gamma(1+\beta)+s_k+\beta s_{k+1}) \tag{3.4} (γ(1+β)+ti+βti+1)=(γ(1+β)+sk+βsk+1)(3.4)
而对于其它 s k = s k + 1 s_k=s_{k+1} sk=sk+1的索引值 k k k,存在 j ∈ { 1 , ⋯ , m } j\in\{1,\cdots,m\} j∈{1,⋯,m},使得 f j = s k f_j=s_k fj=sk,且:
( 1 + β ) ( γ + f j ) = ( γ ( 1 + β ) + s k + β s k + 1 ) (3.5) (1+\beta)(\gamma+f_j)=(\gamma(1+\beta)+s_k+\beta s_{k+1}) \tag{3.5} (1+β)(γ+fj)=(γ(1+β)+sk+βsk+1)(3.5)
将 β \beta β看成是系数,则可将 F , G F,G F,G看成是 F [ γ ] \mathbb{F}[\gamma] F[γ]多项式,从而具有唯一分解因子。通过识别以上3.4和3.5方程式中的因子,可发现其因子为关于变量 β \beta β的多项式。
3.1 Plookup定义
Plookup使用如下定义:
- 1)取 m = N − 1 m=N-1 m=N−1,若不满足 N = m + 1 N=m+1 N=m+1,则需重复最后一个元素来填充相应的table,直到其满足 N = m + 1 N=m+1 N=m+1。
- 2) H = { g , ⋯ , g N = 1 } H=\{g,\cdots,g^N=1\} H={g,⋯,gN=1}为 F \mathbb{F} F中order为 N N N的multiplicative subgroup。
- 3)对于向量 p = F N p=\mathbb{F}^N p=FN,定义多项式 p ( x ) ∈ F [ X ] < N p(x)\in\mathbb{F}[X]_{<N} p(x)∈F[X]<N,使得向量值为该多项式的evaluation值,即满足 p i = p ( g i ) p_i=p(g^i) pi=p(gi)。
- 4)令 L i ( x ) ∈ F [ X ] < N L_i(x)\in\mathbb{F}[X]_{<N} Li(x)∈F[X]<N为基于 H H H的第 i i i个Lagrange都像是,满足 L i ( g j ) = δ i j L_i(g^j)=\delta_{ij} Li(gj)=δij(为Kronecker delta)。
- 5) s ∈ F 2 N − 1 s\in \mathbb{F}^{2N-1} s∈F2N−1为 ( f , t ) (f,t) (f,t) sorted by t t t。
3.2 Plookup协议
最终的Plookup协议为:
- 1)Prover计算并对2个多项式 h 1 , h 2 ∈ F [ x ] < N h_1,h_2\in\mathbb{F}[x]_{<N} h1,h2∈F[x]<N进行承诺,使得对于每个 i = 1 , ⋯ , N i=1,\cdots,N i=1,⋯,N,有:
h 1 ( g i ) = s i h_1(g^i)=s_i h1(gi)=si
h 2 ( g i ) = s N + i − 1 h_2(g^i)=s_{N+i-1} h2(gi)=sN+i−1 - 2)Verifier给Prover发送随机值 β , γ \beta,\gamma β,γ。
- 3)Prover计算并对多项式 Z ∈ F [ x ] < N Z\in \mathbb{F}[x]_{<N} Z∈F[x]<N多项式进行承诺, Z Z Z聚合了 F ( β , γ ) / G ( β , γ ) F(\beta,\gamma)/G(\beta,\gamma) F(β,γ)/G(β,γ),有:
Z ( g ) = 1 Z(g)=1 Z(g)=1
对于 i = 2 , ⋯ , N − 1 i=2,\cdots,N-1 i=2,⋯,N−1,有 Z ( g i ) = ( 1 + β ) i − 1 ∏ l = 1 i − 1 ( γ + f l ) ( γ ( 1 + β ) + t l + β t l + 1 ) ∏ l = 1 i − 1 ( γ ( 1 + β ) + s l + β s l + 1 ) ( γ ( 1 + β ) + s N + l + β s N + l + 1 ) (3.9) Z(g^i)=\frac{(1+\beta)^{i-1}\prod_{l=1}^{i-1}(\gamma+f_l)(\gamma(1+\beta)+t_l+\beta t_{l+1})}{\prod_{l=1}^{i-1}(\gamma (1+\beta)+s_l+\beta s_{l+1})(\gamma(1+\beta)+s_{N+l}+\beta s_{N+l+1})}\tag{3.9} Z(gi)=∏l=1i−1(γ(1+β)+sl+βsl+1)(γ(1+β)+sN+l+βsN+l+1)(1+β)i−1∏l=1i−1(γ+fl)(γ(1+β)+tl+βtl+1)(3.9)
Z ( g N ) = 1 Z(g^N)=1 Z(gN)=1 - 4)Verifier对所有 x ∈ H x\in H x∈H,检查如下identities:
L 1 ( x ) ( Z ( x ) − 1 ) = 0 (3.11) L_1(x)(Z(x)-1)=0\tag{3.11} L1(x)(Z(x)−1)=0(3.11)
L N ( x ) ( Z ( x ) − 1 ) = 0 (3.12) L_N(x)(Z(x)-1)=0\tag{3.12} LN(x)(Z(x)−1)=0(3.12)
L N ( x ) ( h 1 ( x ) − h 2 ( g x ) ) = 0 (3.13) L_N(x)(h_1(x)-h_2(gx))=0\tag{3.13} LN(x)(h1(x)−h2(gx))=0(3.13)
( x − g N ) Z ( x ) ( 1 + β ) ( γ + f ( x ) ) ( γ ( 1 + β ) + t ( x ) + β t ( g x ) ) = ( x − g N ) Z ( g x ) ( γ ( 1 + β ) + h 1 ( x ) + β h 1 ( g x ) ) ( γ ( 1 + β ) + h 2 ( x ) + β h 2 ( g x ) ) (3.14) (x-g^N)Z(x)(1+\beta)(\gamma+f(x))(\gamma(1+\beta)+t(x)+\beta t(gx))=(x-g^N)Z(gx)(\gamma(1+\beta)+h_1(x)+\beta h_1(gx))(\gamma(1+\beta)+h_2(x)+\beta h_2(gx))\tag{3.14} (x−gN)Z(x)(1+β)(γ+f(x))(γ(1+β)+t(x)+βt(gx))=(x−gN)Z(gx)(γ(1+β)+h1(x)+βh1(gx))(γ(1+β)+h2(x)+βh2(gx))(3.14)
注意,所构建的 Z ( x ) Z(x) Z(x)多项式,在3.9方程式的基础上,分子分母乘以了相同的乘数项。即意味着,添加了第 N N N项后, F , G F,G F,G的等价性,暗含了所有项可消减,最终获得1。3.11和3.12方程式检查了 Z ( g ) = Z ( g N ) = 1 Z(g)=Z(g^N)=1 Z(g)=Z(gN)=1,而3.14方程式,检查了每个evaluation值确实添加了正确的乘数项——其两边增加的 ( x − g N ) (x-g^N) (x−gN)乘数项,可确保不包含 Z ( g N ) Z(g^N) Z(gN)和 Z ( g N + 1 ) = Z ( g ) Z(g^{N+1})=Z(g) Z(gN+1)=Z(g)之间的关系。
3.3 Plookup开销
Plookup协议不依赖于任何特殊的承诺方案。通常:
- 其Prover runtime为 O ( N log N ) O(N\log N) O(NlogN)个域运算(以根据evaluations值构建多项式),和 O ( N ) O(N) O(N)个group运算(以构建多项式 Z Z Z)。
- 当使用KZG承诺方案时,其proof size为5个group元素和9个域元素,而Verifier runtime为2个pairing函数。
3.4 Plookup泛化与优化
Plookup协议可泛化为多个witness多项式 f 1 , ⋯ , f w ∈ F [ x ] < m f_1,\cdots,f_w\in\mathbb{F}[x]_{<m} f1,⋯,fw∈F[x]<m和多个tables t 1 , ⋯ , t w ∈ F [ x ] < N t_1,\cdots,t_w\in\mathbb{F}[x]_{<N} t1,⋯,tw∈F[x]<N。Verifier选择随机值 α \alpha α,然后这些多项式可聚合为:
t = ∑ l = 1 w α l t l t=\sum_{l=1}^{w}\alpha^lt_l t=∑l=1wαltl
f = ∑ l = 1 w α l f l f=\sum_{l=1}^{w}\alpha^lf_l f=∑l=1wαlfl
然后像之前那样处理 f , t f,t f,t。
若table为一组连续的整数,即有 t l + 1 = t l t_{l+1}=t_l tl+1=tl,则可将Plookup协议中的3.9方式简化为:
Z ( g i ) = ∏ l = 1 i − 1 ( γ + f l ) ( γ + t l ) ∏ l = 1 i − 1 ( γ + s l ) ( γ + s N + l ) Z(g^i)=\frac{\prod_{l=1}^{i-1}(\gamma+f_l)(\gamma+t_l)}{\prod_{l=1}^{i-1}(\gamma+s_l)(\gamma+s_{N+l})} Z(gi)=∏l=1i−1(γ+sl)(γ+sN+l)∏l=1i−1(γ+fl)(γ+tl)
对应的Verifier checks也需做相应调整。
Plookup协议另一个泛化是plonkup协议,见Luke Pearson等人2022年论文 Plonkup: Reconciling plonk with plookup,plonkup协议集成了plonk和plookup,支持引入通用plonk gates的高效lookup table。
4. cq协议
plookup协议的主要问题在于:
- 对于 m ≪ N m\ll N m≪N的常见场景,plookup协议开销大。
自plookup协议问世以来,迭代了多个lookup协议,每个新的lookup协议,相比于之前协议,对 N N N的依赖性都有所减弱,这些新lookup协议背后的核心思想为:
- 将大部分table计算,移到,预计算中。
截止2023年4月,最好的lookup协议为cq,见Liam Eagen等人2022年论文 cq: Cached quotients for fast lookups。
4.1 Logarithmic Derivative对数导数
cq协议基于如下 Logarithmic Derivative trick:
- 2个多项式 p ( x ) = ∏ a ∈ A ( x + a ) p(x)=\prod_{a\in A}(x+a) p(x)=∏a∈A(x+a)和 q ( x ) = ∏ b ∈ B ( x + b ) q(x)=\prod_{b\in B}(x+b) q(x)=∏b∈B(x+b)相等,当且仅当如下有理函数相等:
p ′ ( x ) p ( x ) = ∑ a ∈ A 1 x + a \frac{p'(x)}{p(x)}=\sum_{a\in A}\frac{1}{x+a} p(x)p′(x)=∑a∈Ax+a1
q ′ ( x ) q ( x ) = ∑ b ∈ B 1 x + b \frac{q'(x)}{q(x)}=\sum_{b\in B}\frac{1}{x+b} q(x)q′(x)=∑b∈Bx+b1
即由 p ( x ) = q ( x ) p(x)=q(x) p(x)=q(x),推导出有 p ′ ( x ) / p ( x ) = q ′ ( x ) / q ( x ) p'(x)/p(x)=q'(x)/q(x) p′(x)/p(x)=q′(x)/q(x)是trivial的,而反之,由 p ′ ( x ) / p ( x ) = q ′ ( x ) / q ( x ) p'(x)/p(x)=q'(x)/q(x) p′(x)/p(x)=q′(x)/q(x),有:
( p ( x ) q ( x ) ) ′ = p ′ ( x ) q ( x ) − q ′ ( x ) p ( x ) p 2 ( x ) = 0 (\frac{p(x)}{q(x)})'=\frac{p'(x)q(x)-q'(x)p(x)}{p^2(x)}=0 (q(x)p(x))′=p2(x)p′(x)q(x)−q′(x)p(x)=0
即意味着,有 p ( x ) / q ( x ) = c p(x)/q(x)=c p(x)/q(x)=c,其中 c c c为常数值。但是,由于 p ( x ) , q ( x ) p(x),q(x) p(x),q(x)的leading系数均为1,则有 c = 1 c=1 c=1且 p ( x ) = q ( x ) p(x)=q(x) p(x)=q(x)。从而,lookups f f f包含在table t t t中,当且仅当:
∑ i = 1 N m i x + t i = ∑ j = 1 m 1 x + f j (4.4) \sum_{i=1}^{N}\frac{m_i}{x+t_i}=\sum_{j=1}^{m}\frac{1}{x+f_j}\tag{4.4} i=1∑Nx+timi=j=1∑mx+fj1(4.4)
其中:
- m i m_i mi为lookup f j f_j fj中 t i t_i ti值出现的次数。注意,每个 t i t_i ti是唯一的,而 f j f_j fj值支持重复,且对于许多 t i t_i ti可以有 m i m_i mi值为0。
cq协议的核心思想为,测试4.4方程式,在某随机点 x = β x=\beta x=β的有理函数identity。
4.2 将cq协议identity调整为Sumcheck
可定义多项式 A ( x ) , B ( x ) A(x),B(x) A(x),B(x),使得其evaluations值为:
A i = m i β + t i , i = 1 , ⋯ , N (4.5) A_i=\frac{m_i}{\beta+t_i},i=1,\cdots,N \tag{4.5} Ai=β+timi,i=1,⋯,N(4.5)
B j = 1 β + f j , j = 1 , ⋯ , m B_j=\frac{1}{\beta+f_j},j=1,\cdots,m Bj=β+fj1,j=1,⋯,m
来做4.4方程式的cq协议 identity检查。
此处有:
- A i = A ( g i ) A_i=A(g^i) Ai=A(gi),其中 g g g为order为 N N N的multiplicative subgroup V ⊂ F V\subset \mathbb{F} V⊂F的generator。
- B j = B ( w j ) B_j=B(w^j) Bj=B(wj),其中 w w w为order为 m m m的multiplicative subgroup H ⊂ F H\subset \mathbb{F} H⊂F的generator。
基于随机点 β \beta β,为满足方程式4.4中的关系, A i , B j A_i,B_j Ai,Bj需满足 ∑ i A i = ∑ j B j \sum_i A_i=\sum_j B_j ∑iAi=∑jBj,且基于multiplicative groups的这些多项式evaluations值,遵循:
∑ i = 1 N A i = N ⋅ A ( 0 ) \sum_{i=1}^{N}A_i=N\cdot A(0) ∑i=1NAi=N⋅A(0)
∑ i = j m B j = m ⋅ B ( 0 ) \sum_{i=j}^{m}B_j=m\cdot B(0) ∑i=jmBj=m⋅B(0)
然后,Prover必须证明:
N ⋅ A ( 0 ) = m ⋅ B ( 0 ) (4.9) N\cdot A(0)=m\cdot B(0)\tag{4.9} N⋅A(0)=m⋅B(0)(4.9)
这对应的单变量sumcheck问题。
4.3 cq协议的quotient多项式
多项式:
p ( x ) = A ( x ) ( T ( x ) + β ) − m ( x ) p(x)=A(x)(T(x)+\beta)-m(x) p(x)=A(x)(T(x)+β)−m(x)
q ( x ) = B ( x ) ( F ( x ) + β ) − 1 q(x)=B(x)(F(x)+\beta)-1 q(x)=B(x)(F(x)+β)−1
其中:
- T ( x ) , m ( x ) , F ( x ) T(x), m(x), F(x) T(x),m(x),F(x)多项式的evaluation值分别为 t i , m i , f j t_i,m_i,f_j ti,mi,fj。
- 对于 V V V, p ( x ) p(x) p(x)的evaluation值必须为0。
- 对于 H H H, q ( x ) q(x) q(x)的evaluation值必须为0。
从而可定义quotient多项式 Q A ( x ) , Q B ( x ) Q_A(x),Q_B(x) QA(x),QB(x)为:
Q A ( x ) = A ( x ) ( T ( x ) + β ) − m ( x ) Z V ( x ) (4.12) Q_A(x)=\frac{A(x)(T(x)+\beta)-m(x)}{Z_V(x)}\tag{4.12} QA(x)=ZV(x)A(x)(T(x)+β)−m(x)(4.12)
Q B ( x ) = B ( x ) ( F ( x ) + β ) − 1 Z H ( x ) (4.13) Q_B(x)=\frac{B(x)(F(x)+\beta)-1}{Z_H(x)}\tag{4.13} QB(x)=ZH(x)B(x)(F(x)+β)−1(4.13)
其中:
- Z V ( x ) , Z H ( x ) Z_V(x),Z_H(x) ZV(x),ZH(x)分别为 V , H V,H V,H的vanishing多项式。
Prover需证明2件事:
- 1)其知道多项式 A , B , Q A , Q B , F , m A,B,Q_A,Q_B,F,m A,B,QA,QB,F,m。
- 2)这些多项式满足上面4.9、4.12、4.13方程式关系。
若使用KZG承诺方案,则其只需要使用pairing来检查这些方程式关系。不过,接下来将进一步将这些statements切分。
4.4 cq协议中,证明其知道多项式 A A A及其sum
当使用KZG承诺值 [ ϕ ( x ) ] 1 [\phi(x)]_1 [ϕ(x)]1来证明其知道多项式 ϕ ( x ) \phi(x) ϕ(x)时,Prover会对其在 z z z点进行evaluate以定义新的多项式:
P ϕ = ϕ ( x ) − ϕ ( z ) x − z P_{\phi}=\frac{\phi(x)-\phi(z)}{x-z} Pϕ=x−zϕ(x)−ϕ(z)
并发送承诺值 [ P ϕ ] 1 [P_{\phi}]_1 [Pϕ]1。Verifier会检查pairing方程式:
e ( [ ϕ ( x ) ] 1 − [ ϕ ( z ) ] 1 , [ 1 ] 2 ) = e ( [ P ϕ ] 1 , [ x − z ] 2 ) e([\phi(x)]_1-[\phi(z)]_1,[1]_2)=e([P_{\phi}]_1,[x-z]_2) e([ϕ(x)]1−[ϕ(z)]1,[1]2)=e([Pϕ]1,[x−z]2)
将其重写为:
e ( [ ϕ ( x ) ] 1 − [ ϕ ( z ) ] 1 + z ⋅ [ P ϕ ] 1 , [ 1 ] 2 ) = e ( [ P ϕ ] 1 , [ x ] 2 ) e([\phi(x)]_1-[\phi(z)]_1+z\cdot [P_{\phi}]_1,[1]_2)=e([P_{\phi}]_1,[x]_2) e([ϕ(x)]1−[ϕ(z)]1+z⋅[Pϕ]1,[1]2)=e([Pϕ]1,[x]2)
使得该pairing函数的第二个参数总为 [ 1 ] 2 [1]_2 [1]2或 [ x ] 2 [x]_2 [x]2。
为证明其知道多项式 A A A,对 A A A在 x = 0 x=0 x=0点进行evaluate,有:
P A ( x ) = A ( x ) − A ( 0 ) x P_A(x)=\frac{A(x)-A(0)}{x} PA(x)=xA(x)−A(0)
并承诺 [ P A ] 1 [P_A]_1 [PA]1,然后使用:
e ( [ A ( x ) ] 1 − [ A ( 0 ) ] 1 , [ 1 ] 2 ) = e ( [ P A ( x ) ] 1 , [ x ] 2 ) e([A(x)]_1-[A(0)]_1,[1]_2)=e([P_A(x)]_1,[x]_2) e([A(x)]1−[A(0)]1,[1]2)=e([PA(x)]1,[x]2)
来证明。
4.5 cq协议中, B B B多项式的low degree testing
为证明知道多项式 B B B:
- 首先证明多项式 B B B的degree确实 < m <m <m。
注意,无需证明 A ( x ) A(x) A(x)的degree,因其degree为SRS所支持的最大degree。
在KZG承诺方案中,为证明多项式 B B B的degree确实 < m <m <m,可定义:
P B ( x ) = B ( x ) − B ( 0 ) x P_B(x)=\frac{B(x)-B(0)}{x} PB(x)=xB(x)−B(0)
然后承诺 [ P B ( x ) ⋅ x N − m + 1 ] 1 [P_B(x)\cdot x^{N-m+1}]_1 [PB(x)⋅xN−m+1]1,最后测试:
e ( [ P B ( x ) ] 1 , [ x N − m + 1 ] 2 ) = e ( [ P B ( x ) ⋅ x N − m + 1 ] 1 , [ 1 ] 2 ) e([P_B(x)]_1,[x^{N-m+1}]_2)=e([P_B(x)\cdot x^{N-m+1}]_1,[1]_2) e([PB(x)]1,[xN−m+1]2)=e([PB(x)⋅xN−m+1]1,[1]2)
注意,若 B ( x ) B(x) B(x)中有degree ≥ m \geq m ≥m的项,则将包括在承诺值 [ P B ( x ) ⋅ x N − m + 1 ] 1 [P_B(x)\cdot x^{N-m+1}]_1 [PB(x)⋅xN−m+1]1中,而SRS不支持对degree ≥ N \geq N ≥N的项进行承诺。
4.6 cq协议中,使用Cached Quotients来证明4.12)方程式关系
可通过如下testing:
e ( [ A ( x ) ] 1 , [ T ( x ) ] 2 ) = e ( [ Q A ( x ) ] 1 , [ Z V ( x ) ] 2 ) ⋅ e ( [ m ( x ) ] 1 − β [ A ( x ) ] 1 , [ 1 ] 2 ) e([A(x)]_1,[T(x)]_2)=e([Q_A(x)]_1,[Z_V(x)]_2)\cdot e([m(x)]_1-\beta [A(x)]_1,[1]_2) e([A(x)]1,[T(x)]2)=e([QA(x)]1,[ZV(x)]2)⋅e([m(x)]1−β[A(x)]1,[1]2)
来检查4.12)方程式关系。
其中:
- [ T ] 2 , [ Z V ] 2 , [ 1 ] 2 , [ x ] 2 [T]_2,[Z_V]_2,[1]_2,[x]_2 [T]2,[ZV]2,[1]2,[x]2均独立于lookups,可预计算。
- Prover需计算: [ A ( x ) ] 1 , [ Q A ( x ) ] 1 , [ m ( x ) ] 1 , A ( 0 ) , [ A ( x ) − A ( 0 ) x ] 1 [A(x)]_1,[Q_A(x)]_1,[m(x)]_1,A(0),[\frac{A(x)-A(0)}{x}]_1 [A(x)]1,[QA(x)]1,[m(x)]1,A(0),[xA(x)−A(0)]1。
- 这些计算复杂度为 O ( m ) O(m) O(m),因其仅需要计算lookups。若 t i t_i ti不存在于lookups中,则有 m i = 0 , A i = 0 m_i=0,A_i=0 mi=0,Ai=0。
- 只有 [ Q A ( x ) ] 1 [Q_A(x)]_1 [QA(x)]1的计算为 O ( N ) O(N) O(N)。对应的解决方案为:
- 预计算cached quotients:
Q i ( x ) = L i ( x ) ( T ( x ) − t i ) Z V ( x ) = T ( x ) − t i k i ( x − g i ) (4.22) Q_i(x)=\frac{L_i(x)(T(x)-t_i)}{Z_V(x)}=\frac{T(x)-t_i}{k^i(x-g^i)}\tag{4.22} Qi(x)=ZV(x)Li(x)(T(x)−ti)=ki(x−gi)T(x)−ti(4.22)
其中:- L i ( x ) L_i(x) Li(x)为Lagrange多项式
- L i ( x ) = Z V ( x ) k i ( x − g i ) L_i(x)=\frac{Z_V(x)}{k^i(x-g^i)} Li(x)=ki(x−gi)ZV(x)
- k i = Z V ′ ( g i ) = ( x N − 1 ) ′ ∣ x = g i = N ⋅ g i N − 1 = N g i k^i=Z_V'(g^i)=(x^N-1)'|_{x=g^i}=N\cdot g_i^{N-1}=\frac{N}{g^i} ki=ZV′(gi)=(xN−1)′∣x=gi=N⋅giN−1=giN
- 使用NTT, Q i ( x ) Q_i(x) Qi(x)的计算量为 O ( N log N ) O(N\log N) O(NlogN)。
- 使用 Q i ( x ) Q_i(x) Qi(x), [ Q A ] 1 [Q_A]_1 [QA]1的计算量为 O ( m ) O(m) O(m),有:
[ Q A ( x ) ] 1 = ∑ A i ≠ 0 A i ⋅ [ Q i ( x ) ] 1 [Q_A(x)]_1=\sum_{A_i\neq 0}A_i\cdot [Q_i(x)]_1 [QA(x)]1=∑Ai=0Ai⋅[Qi(x)]1
其中 A i A_i Ai为4.5)方程式中多项式 A ( x ) A(x) A(x)的evaluation值。
- 预计算cached quotients:
4.7 cq协议中,证明4.9)4.13)方程式关系
引入另一随机值 x = γ x=\gamma x=γ:
- 首先对多项式:
P F ( x ) = F ( x ) − F ( γ ) x − γ P_F(x)=\frac{F(x)-F(\gamma)}{x-\gamma} PF(x)=x−γF(x)−F(γ)
P B , γ ( x ) = P B ( x ) − P B ( γ ) x − γ P_{B,\gamma}(x)=\frac{P_B(x)-P_B(\gamma)}{x-\gamma} PB,γ(x)=x−γPB(x)−PB(γ)
承诺来证明知道 F ( γ ) , P B ( γ ) F(\gamma),P_B(\gamma) F(γ),PB(γ)。
可通过验证:
e ( [ F ( x ) ] 1 − [ F ( γ ) ] 1 + γ [ P F ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P F ( x ) ] 1 , [ x ] 2 ) (4.28) e([F(x)]_1-[F(\gamma)]_1+\gamma [P_F(x)]_1,[1]_2)=e([P_F(x)]_1,[x]_2)\tag{4.28} e([F(x)]1−[F(γ)]1+γ[PF(x)]1,[1]2)=e([PF(x)]1,[x]2)(4.28)
e ( [ P B ( x ) ] 1 − [ P B ( γ ) ] 1 + γ [ P B , γ ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P B , γ ( x ) ] 1 , [ x ] 2 ) (4.29) e([P_B(x)]_1-[P_B(\gamma)]_1+\gamma [P_{B,\gamma}(x)]_1,[1]_2)=e([P_{B,\gamma}(x)]_1,[x]_2)\tag{4.29} e([PB(x)]1−[PB(γ)]1+γ[PB,γ(x)]1,[1]2)=e([PB,γ(x)]1,[x]2)(4.29)
来证明 B ( x ) , F ( x ) B(x),F(x) B(x),F(x)确实evaluate到 B ( γ ) , F ( γ ) B(\gamma),F(\gamma) B(γ),F(γ),从而可使用这些evaluations值来证明所需的关系。 - 定义:
Q b , γ = ( B ( γ ) − B ( 0 ) + A ( 0 ) ⋅ N / m ) ( F ( γ ) + β ) − 1 Z H ( γ ) (4.30) Q_{b,\gamma}=\frac{(B(\gamma)-B(0)+A(0)\cdot N/m)(F(\gamma)+\beta)-1}{Z_H(\gamma)}\tag{4.30} Qb,γ=ZH(γ)(B(γ)−B(0)+A(0)⋅N/m)(F(γ)+β)−1(4.30)
P Q B ( x ) = Q B ( x ) − Q b , γ x − γ P_{Q_B}(x)=\frac{Q_B(x)-Q_{b,\gamma}}{x-\gamma} PQB(x)=x−γQB(x)−Qb,γ
然后发送承诺值 [ Q b , γ ] 1 , [ P Q B ( x ) ] 1 [Q_{b,\gamma}]_1,[P_{Q_B}(x)]_1 [Qb,γ]1,[PQB(x)]1,可通过如下pairing等式来验证:
e ( [ Q B ( x ) ] 1 − [ Q b , γ ] 1 + γ [ P Q B ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P Q B ( x ) ] 1 , [ x ] 2 ) (4.32) e([Q_B(x)]_1-[Q_{b,\gamma}]_1+\gamma [P_{Q_B}(x)]_1,[1]_2)=e([P_{Q_B}(x)]_1,[x]_2)\tag{4.32} e([QB(x)]1−[Qb,γ]1+γ[PQB(x)]1,[1]2)=e([PQB(x)]1,[x]2)(4.32)
注意,该构建可同时证明如下statements:
Q B ( γ ) = ( B ( γ ) ) ( F ( γ ) + β ) − 1 Z H ( x ) Q_B(\gamma)=\frac{(B(\gamma))(F(\gamma)+\beta)-1}{Z_H(x)} QB(γ)=ZH(x)(B(γ))(F(γ)+β)−1
B ( 0 ) ⋅ m = A ( 0 ) ⋅ N B(0)\cdot m=A(0)\cdot N B(0)⋅m=A(0)⋅N
这样整个证明结束。
4.8 cq协议的proof batching
最后的3个proofs结构相似,cq协议可将其batch为单个协议——通过引入新的随机变量 η \eta η,并定义:
c ( x ) = P B ( x ) + η F ( x ) + η 2 Q B ( x ) c(x)=P_B(x)+\eta F(x)+\eta^2 Q_B(x) c(x)=PB(x)+ηF(x)+η2QB(x)
v = P B ( γ ) + η F ( γ ) + η 2 Q b , γ v=P_B(\gamma)+\eta F(\gamma)+\eta^2 Q_{b,\gamma} v=PB(γ)+ηF(γ)+η2Qb,γ
P γ ( x ) = P B , γ ( x ) + η P F ( x ) + η 2 P Q B ( x ) P_{\gamma}(x)=P_{B,\gamma}(x)+\eta P_F(x)+\eta^2 P_{Q_B}(x) Pγ(x)=PB,γ(x)+ηPF(x)+η2PQB(x)
然后,将4.28)、4.29)、4.32)聚合为单个check:
e ( [ c ( x ) ] 1 − [ v ] 1 + γ [ P γ ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P γ ( x ) ] 1 , [ x ] 2 ) e([c(x)]_1-[v]_1+\gamma[P_{\gamma}(x)]_1,[1]_2)=e([P_{\gamma}(x)]_1,[x]_2) e([c(x)]1−[v]1+γ[Pγ(x)]1,[1]2)=e([Pγ(x)]1,[x]2)
4.9 cq完整协议
4.9.1 Setup阶段
Prover和Verifier均有公开输入 t i t_i ti, i = 1 , ⋯ , N i=1,\cdots,N i=1,⋯,N。如下流程由某可信方执行:
- 1)选择随机值 x ∈ F x\in \mathbb{F} x∈F,输出 { [ x i ] 1 } i = 0 N − 1 \{[x^i]_1\}_{i=0}^{N-1} {[xi]1}i=0N−1和 { [ x i ] 2 } i = 0 N \{[x^i]_2\}_{i=0}^{N} {[xi]2}i=0N。数字 x x x必须删除。
- 2)计算并输出 [ Z V ( x ) ] 2 [Z_V(x)]_2 [ZV(x)]2。
- 3)计算 T ( x ) = ∑ i t i L i ( x ) T(x)=\sum_i t_iL_i(x) T(x)=∑itiLi(x)。计算并输出 [ T ( x ) ] 2 [T(x)]_2 [T(x)]2。
- 4)对于每个 i = 1 , ⋯ , N i=1,\cdots,N i=1,⋯,N,计算并输出:
- 根据4.22)方程式,计算并输出 [ Q i ( x ) ] 1 [Q_i(x)]_1 [Qi(x)]1
- [ L i ( x ) ] 1 [L_i(x)]_1 [Li(x)]1
- [ L i ( x ) − L i ( 0 ) x ] 1 [\frac{L_i(x)-L_i(0)}{x}]_1 [xLi(x)−Li(0)]1
setup阶段的输出,组成SRS,会同时发送给Prover和Verifier。
4.9.2 Proving阶段
Prover获得private witness值 f j f_j fj, j = 1 , ⋯ , m j=1,\cdots,m j=1,⋯,m,而Verifier获得的为这些输入的承诺值 [ F ( x ) ] 1 [F(x)]_1 [F(x)]1。这些输入需源自同一可信方,以对待证明的问题达成共识。
cq协议证明阶段流程为:
注意,Verifier根据4.30)方程式计算 Q b , γ Q_{b,\gamma} Qb,γ,其需要的 B ( γ ) , B ( 0 ) B(\gamma),B(0) B(γ),B(0)并不是由Prover发送。但Prover发送了 P B ( γ ) = ( B ( γ ) − B ( 0 ) ) / γ P_{B}(\gamma)=(B(\gamma)-B(0))/\gamma PB(γ)=(B(γ)−B(0))/γ,因此,Verifier可计算:
Q b , γ = ( P B ( γ ) ⋅ γ + A ( 0 ) ⋅ N / m ) ( F ( γ ) + β ) − 1 Z H ( γ ) Q_{b,\gamma}=\frac{(P_B(\gamma)\cdot \gamma+A(0)\cdot N/m)(F(\gamma)+\beta)-1}{Z_H(\gamma)} Qb,γ=ZH(γ)(PB(γ)⋅γ+A(0)⋅N/m)(F(γ)+β)−1
4.10 cq协议,进一步batching和聚合
可使用Fiat-Shamir transformation来将以上协议转换为非交互式的。此时,proof内容为:
π c q = { [ m ] 1 , [ A ] 1 , [ Q A ] 1 , [ Q B ] 1 , [ P A ] 1 , [ P B ] 1 , [ P B x N − m + 1 ] 1 , [ P γ ] 1 , P B ( γ ) , F ( γ ) , A ( 0 ) } \pi_{cq}=\{[m]_1,[A]_1,[Q_A]_1,[Q_B]_1,[P_A]_1,[P_B]_1,[P_Bx^{N-m+1}]_1,[P_{\gamma}]_1,P_B(\gamma),F(\gamma),A(0)\} πcq={[m]1,[A]1,[QA]1,[QB]1,[PA]1,[PB]1,[PBxN−m+1]1,[Pγ]1,PB(γ),F(γ),A(0)}
其中:
- 前8个为group元素
- 最后3个为field元素
相应的pairing等式有:
e ( [ P B ( x ) ] 1 , [ x N − m + 1 ] 2 ) = e ( [ P B ( x ) ⋅ x N − m + 1 ] 1 , [ 1 ] 2 ) e([P_B(x)]_1,[x^{N-m+1}]_2)=e([P_B(x)\cdot x^{N-m+1}]_1,[1]_2) e([PB(x)]1,[xN−m+1]2)=e([PB(x)⋅xN−m+1]1,[1]2)
e ( [ A ( x ) ] 1 , [ T ( x ) ] 2 ) = e ( [ Q A ( x ) ] 1 , [ Z V ( x ) ] 2 ) ⋅ e ( [ m ( x ) ] 1 − β [ A ( x ) ] 1 , [ 1 ] 2 ) e([A(x)]_1, [T(x)]_2)=e([Q_A(x)]_1,[Z_V(x)]_2)\cdot e([m(x)]_1-\beta[A(x)]_1,[1]_2) e([A(x)]1,[T(x)]2)=e([QA(x)]1,[ZV(x)]2)⋅e([m(x)]1−β[A(x)]1,[1]2)
e ( [ A ( x ) ] 1 − [ A ( 0 ) ] 1 , [ 1 ] 2 ) = e ( [ P A ( x ) ] 1 , [ x ] 2 ) e([A(x)]_1-[A(0)]_1,[1]_2)=e([P_A(x)]_1,[x]_2) e([A(x)]1−[A(0)]1,[1]2)=e([PA(x)]1,[x]2)
e ( [ c ( x ) ] 1 − [ v ] 1 + γ [ P γ ( x ) ] 1 , [ 1 ] 2 ) = e ( [ P γ ( x ) ] 1 , [ x ] 2 ) e([c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1,[1]_2)=e([P_{\gamma}(x)]_1,[x]_2) e([c(x)]1−[v]1+γ[Pγ(x)]1,[1]2)=e([Pγ(x)]1,[x]2)
引入新的随机值 μ ∈ F \mu\in \mathbb{F} μ∈F,很容易将以上最后2个pairing等式batch为:
e ( [ c ( x ) ] 1 − [ v ] 1 + γ [ P γ ( x ) ] 1 + μ ( [ A ( x ) ] 1 − [ A ( 0 ) ] 1 ) , [ 1 ] 2 ) = e ( [ P γ ( x ) ] 1 + μ [ P A ( x ) ] 1 , [ x ] 2 ) e([c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1+\mu ([A(x)]_1-[A(0)]_1), [1]_2)=e([P_{\gamma}(x)]_1+\mu [P_A(x)]_1,[x]_2) e([c(x)]1−[v]1+γ[Pγ(x)]1+μ([A(x)]1−[A(0)]1),[1]2)=e([Pγ(x)]1+μ[PA(x)]1,[x]2)
再引入 ρ ∈ F \rho\in \mathbb{F} ρ∈F,将其与第一个pairing等式batch,有:
e ( [ P γ ( x ) ] 1 + μ [ P A ( x ) ] 1 , [ x ] 2 ) ⋅ e ( ρ [ P B ( x ) ] 1 , [ x N − m + 1 ] 2 ) = e ( [ c ( x ) ] 1 − [ v ] 1 + γ [ P γ ( x ) ] 1 + μ ( [ A ( x ) ] 1 − [ A ( 0 ) ] 1 ) + ρ [ P B ( x ) ⋅ x N − m + 1 ] 1 , [ 1 ] 2 ) e([P_{\gamma}(x)]_1+\mu [P_A(x)]_1,[x]_2)\cdot e(\rho[P_B(x)]_1,[x^{N-m+1}]_2)=e([c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1+\mu ([A(x)]_1-[A(0)]_1)+\rho [P_B(x)\cdot x^{N-m+1}]_1,[1]_2) e([Pγ(x)]1+μ[PA(x)]1,[x]2)⋅e(ρ[PB(x)]1,[xN−m+1]2)=e([c(x)]1−[v]1+γ[Pγ(x)]1+μ([A(x)]1−[A(0)]1)+ρ[PB(x)⋅xN−m+1]1,[1]2)
再引入 σ ∈ F \sigma\in\mathbb{F} σ∈F,将其与第二个pairing等式batch为单个pairing等式。定义:
L a = [ P γ ( x ) ] 1 + μ [ P A ( x ) ] 1 L_a=[P_{\gamma}(x)]_1+\mu [P_A(x)]_1 La=[Pγ(x)]1+μ[PA(x)]1
L b = ρ [ P B ( x ) ] 1 L_b=\rho [P_B(x)]_1 Lb=ρ[PB(x)]1
L c = σ [ A ( x ) ] 1 L_c=\sigma [A(x)]_1 Lc=σ[A(x)]1
L d = − σ [ Q A ( x ) ] 1 L_d=-\sigma [Q_A(x)]_1 Ld=−σ[QA(x)]1
R = [ c ( x ) ] 1 − [ v ] 1 + γ [ P γ ( x ) ] 1 + μ ( [ A ( x ) ] 1 − [ A ( 0 ) ] 1 ) + ρ [ P B ( x ) ⋅ x N − m + 1 ] 1 + σ ( [ m ( x ) ] 1 − β [ A ( x ) ] 1 ) R=[c(x)]_1-[v]_1+\gamma [P_{\gamma}(x)]_1+\mu ([A(x)]_1-[A(0)]_1)+\rho [P_B(x)\cdot x^{N-m+1}]_1+\sigma ([m(x)]_1-\beta [A(x)]_1) R=[c(x)]1−[v]1+γ[Pγ(x)]1+μ([A(x)]1−[A(0)]1)+ρ[PB(x)⋅xN−m+1]1+σ([m(x)]1−β[A(x)]1)
最终batch的单个pairing等式为:
e ( L a , [ x ] 2 ) ⋅ e ( L b , [ x N − m + 1 ] 2 ) ⋅ e ( L c , [ T ( x ) ] 2 ) ⋅ e ( L d , [ Z V ( x ) ] 2 ) = e ( R , [ 1 ] 2 ) e(L_a,[x]_2)\cdot e(L_b, [x^{N-m+1}]_2)\cdot e(L_c,[T(x)]_2)\cdot e(L_d,[Z_V(x)]_2)=e(R,[1]_2) e(La,[x]2)⋅e(Lb,[xN−m+1]2)⋅e(Lc,[T(x)]2)⋅e(Ld,[ZV(x)]2)=e(R,[1]2)
由于以上每个pairing函数中的第二个参数均只依赖于setup,具有相同setup的不同proofs,通过引入新的随机参数 χ ∈ F \chi \in\mathbb{F} χ∈F,来聚合为单个proof:
e ( ∑ k χ k L a , k , [ x ] 2 ) ⋅ e ( ∑ k χ k L b , k , [ x N − m + 1 ] 2 ) ⋅ e ( ∑ k χ k L c , k , [ T ( x ) ] 2 ) ⋅ e ( ∑ k χ k L d , k , [ Z V ( x ) ] 2 ) = e ( ∑ k χ k R k , [ 1 ] 2 ) e(\sum_k\chi ^kL_{a,k},[x]_2)\cdot e(\sum_k\chi^kL_{b,k},[x^{N-m+1}]_2)\cdot e(\sum_k\chi^kL_{c,k},[T(x)]_2)\cdot e(\sum_k\chi^kL_{d,k},[Z_V(x)]_2)=e(\sum_k\chi^kR_k,[1]_2) e(∑kχkLa,k,[x]2)⋅e(∑kχkLb,k,[xN−m+1]2)⋅e(∑kχkLc,k,[T(x)]2)⋅e(∑kχkLd,k,[ZV(x)]2)=e(∑kχkRk,[1]2)
4.11 cq协议开销
不同于plookup协议,cq协议高度依赖KZG承诺方案。
cq协议的开销为:
- cq协议将plookup协议 O ( N log N ) O(N\log N) O(NlogN)复杂度移到了setup阶段,使得这些计算对同一table只需做一次。
- cq协议证明阶段计算完全依赖于 m m m,而可假设 m ≪ N m\ll N m≪N。【也就是说,若 m ≪ N m\ll N m≪N条件不成立,则没理由使用cq协议,plookup协议的性能会更佳。】
- cq协议Prover工作量为 O ( m log m ) O(m\log m) O(mlogm)。
- cq协议proof size和Verifier工作量均为常量。
5. lookup协议演进
本节将简要介绍由plookup到cq的改进点,并回顾二者之间的其它lookup协议。注意这些lookup协议都明确依赖KZG承诺方案。
5.1 Caulk
Arantxa Zapico等人2022年论文《 Caulk: Lookup arguments in sublinear time》提出了Caulk协议。
Caulk协议背后的核心思想为:
- (以 O ( N log N ) O(N\log N) O(NlogN))预计算table encoding,使得该table searchable in O ( log N ) O(\log N) O(logN)
- lookups也做类似的encoding,使得对其的查找复杂度为 O ( m log N ) O(m\log N) O(mlogN),证明该encoding的额外复杂度为 O ( m 2 ) O(m^2) O(m2)。
Caulk协议:
- 将table预计算为vanishing多项式:
Z T ( x ) = ∏ i = 1 N ( x − t i ) Z_T(x)=\prod_{i=1}^{N}(x-t_i) ZT(x)=∏i=1N(x−ti) - 将lookups类似计算为:
f ( x ) = ∏ j = 1 m ( x − f j ) f(x)=\prod_{j=1}^{m}(x-f_j) f(x)=∏j=1m(x−fj) - Prover发送 Z T , f Z_T,f ZT,f的承诺值。
- 将证明:对于 S ⊆ T S\subseteq T S⊆T,有 f = Z S f=Z_S f=ZS
转换为证明: Z T ∖ S ( x ) = Z T ( x ) / Z S ( x ) Z_{T\setminus S}(x)=Z_T(x)/Z_S(x) ZT∖S(x)=ZT(x)/ZS(x)为一个多项式。 - 对于每个 i = 1 , ⋯ N i=1,\cdots N i=1,⋯N,caulk会预计算多项式:
g i ( x ) = Z T ∖ t i ( x ) g_i(x)=Z_{T\setminus t_i}(x) gi(x)=ZT∖ti(x)
事实上,这些就是cq协议中的cached quotients。 - 若 S ⊆ T S\subseteq T S⊆T,则有某些数字 c j ∈ F c_j\in\mathbb{F} cj∈F,使得 Z T ∖ S ( x ) Z_{T\setminus S}(x) ZT∖S(x)可分解表示为:
Z T ∖ S ( x ) = ∑ j = 1 m c j g i ( j ) ( x ) Z_{T\setminus S}(x)=\sum_{j=1}^{m}c_jg_i(j)(x) ZT∖S(x)=∑j=1mcjgi(j)(x)
Prover仅需要计算 Z T ∖ S ( x ) Z_{T\setminus S}(x) ZT∖S(x)多项式的承诺值,而Verifier仅需使用pairing检查:
e ( [ f ] , [ Z T ∖ S ] ) = e ( [ Z T ] , [ 1 ] ) e([f], [Z_{T\setminus S}])=e([Z_T],[1]) e([f],[ZT∖S])=e([ZT],[1])
5.2 Caulk+ 协议
Jim Posen等人2022年论文《Caulk+: Table-independent lookup arguments》中提出了Caulk+协议:
- Caulk协议中的主要缺点为:其将table看成是通用集合,而不是将其编码为某group。
- Caulk+ 协议:通过预计算table,改进了Caulk协议中的缺点。
- Caulk+ 将table看成是某multiplicative group,其初始值为group generator powers。
- 从而消除了计算中对 N N N的依赖,prover time仅为 O ( m 2 ) O(m^2) O(m2)。
5.3 Flookup 协议
Ariel Gabizon等人2022年论文《flookup: Fractional decompositionbased lookups in quasi-linear time independent of table size》提出了flookup协议:
- 将预处理开销增加到了 O ( N log 2 N ) O(N\log ^2 N) O(Nlog2N)
- 将Prover runtime降低到了 O ( m log 2 m ) O(m\log^2 m) O(mlog2m)
- 同时牺牲了承诺方案的同态属性,从而不支持将多个lookups和tables进行合并。
5.4 Baloo 协议
Arantxa Zapico等人2022年论文《Baloo: Nearly optimal lookup arguments》中提出了Baloo协议,其为Caulk+ 协议的优化版:
- 将lookups替换为a linear variant。
- 然后使用单变量sumcheck来证明其所承诺的多项式。
- 其预处理开销与Caulk+相同,为 O ( N log N ) O(N\log N) O(NlogN)。
- 其Prover开销与flookup相同,为 O ( m log 2 m ) O(m\log^2 m) O(mlog2m)。
- 由于Baloo协议中的constants更大,Baloo协议的实际开销要略高于flookup。但其保留了承诺方案的同态属性,从而支持将多个lookups和tables进行合并。
lookup系列博客
- PLOOKUP
- PLOOKUP代码解析
- Efficient polynomial commitment schemes for multiple points and polynomials学习笔记
- PLONK + PLOOKUP
- PlonKup: Reconciling PlonK with plookup
- PLONK: permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge 学习笔记
- Plonk代码解析
- RapidUp: Multi-Domain Permutation Protocol for Lookup Tables学习笔记
- Lookup argument总览
- Halo2 学习笔记——设计之Proving system之Lookup argument(1)
- logUp-Multivariate lookups based on logarithmic derivatives
- cq:fast lookup argument
- Lookup Argument性能优化——Caulk
- 2023年 ZK Hack以及ZK Summit 亮点记
- Research Day 2023:Succinct ZKP最新进展
- Lasso、Jolt 以及 Lookup Singularity——Part 1
- Lasso、Jolt 以及 Lookup Singularity——Part 2
- 深入了解Lasso+Jolt
- Lookup Singularity
- Halo2、Caulk+、Baloo、Cq Lookup argument细览
相关文章:
Lookup Argument简史
1. 引言 主要参考Ingonyama团队2023年4月文章《A Brief History of Lookup Arguments》。 近年来zk-SNARKs的研究热点有: 让ZKP proof更succinct降低Prover time和Verifier time 但,大多数SNARKs仍受限于,易于转换为多项式的算术运算。通…...
【unity3D】Transform组件(如何访问和获取Transform组件)
💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Transform组件 Transform组件 基础知识介绍三个成员变量常用属性扩展 Transform的相关查找方法静态方法 基础知识 介绍 在Unit…...
单实例应用程序
2023年12月6日,周三凌晨 什么是单实例应用程序 单实例应用程序可以确保在同一时间只有一个应用程序实例在运行。 通常情况下,当用户尝试再次启动一个已经启动过的应用程序时,操作系统会打开一个新的实例。但有些情况下,我们可能…...
Qlik 成为网络犯罪的焦点
研究人员警告说,Cactus 勒索软件组织正在利用 Qlik Sense 数据可视化、探索和监控解决方案中的关键漏洞来获得对企业网络的初始访问权限。 今年八月下旬,Qlik Sense 开发人员 针对影响 Windows 版本平台的两个关键漏洞发布了补丁 。 其中一个漏洞 CVE-…...
1+X Web 前端开发职业技能等级证书模拟题(中级)理论知识
1X Web 前端开发职业技能等级证书模拟题(中级)理论知识 一、单项选择题 在 Bootstrap 中,可以使用 navbar-header 类的情况是() A 为整个页面添加一个标题 B 为导航栏添加一个标题 C 为导航栏 添加头部 D 为整个页面添…...
2023.12.4 关于 Spring Boot 统一异常处理
目录 引言 统一异常处理 异常全部监测 引言 将异常处理逻辑集中到一个地方,可以避免在每个控制器或业务逻辑中都编写相似的异常处理代码,这降低了代码的冗余,提高了代码的可维护性统一的异常处理使得调试和维护变得更加容易,通…...
企业网络安全守护者:EventLog Analyzer日志审计系统
在当今数字时代,企业网络不仅仅是业务运营的核心,也成为各种潜在威胁的目标。为了保障企业的网络安全,日志审计系统成为了不可或缺的一环。其中,ManageEngine的EventLog Analyzer作为一款强大而全面的日志管理与审计解决方案&…...
剪映最新版的4.9,主要更新的功能(于2023年12月2日发布)
新增“多轨道音频”功能:用户可以将多个音频轨道叠加在一起,并对每个音频轨道进行单独的编辑。这使得用户可以更灵活地控制视频的音频效果。新增“音频调音”功能:用户可以使用音频调音功能对视频的音频进行调节,包括音量、音调、…...
IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis核心配置详解
第一章 Mybatis核心配置详解【mybatis-config.xml】 1.1 核心配置文件概述 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 1.2 核心配置文件根标签 没有实际语义,主要作用:所有子标签均需要设置在跟标签内部 1.3 核心配置文件…...
maven-profile
指定profile生效的几种方式 maven中profile的使用详解_maven profile_2021不再有雨的博客-CSDN博客 【Maven】【翻译】3、Profiles文件_maven的profiles文件是什么-CSDN博客 查看当前生效的profile mvn help:active-profiles 比如有些是用activeProfiles在pom中指定的&…...
用python找到音乐数据的位置,并实现音乐下载
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 需求分析: 有什么需求要实现? 这些需求可以用什么技术实现? 找到音乐数据的位置, 分析 不同音乐的链接有何规律?https://lx-sycdn.kuwo.cn/b784688662c82db8…...
MATLAB算法实战应用案例精讲-【图像处理】边缘检测(补充篇)(附MATLAB代码实现)
目录 前言 几个相关概念 知识储备 数字图像处理(Digital Image Processing)...
黑马头条数据管理平台项目总结
今天主要看了该项目的介绍,这个黑马头条数据管理平台项目主要包括登录、用户的权限判断、文章内容列表的筛选和分页、文章的增删查改还有图片和富文本编辑器这几大部分组成,项目配套了素材代码,像资源文件、第三方插件、页面文件夹、工具插件…...
IDEA中,光标移动快捷键(Shift + 滚轮前后滚动:当前文件的横向滚动轴滚动。)
除此之外,其他常用的光标移动快捷键包括: Shift 滚轮前后滚动:当前文件的横向滚动轴滚动。Shiftenter:快速将鼠标移动到下一行。Ctrl ]:移动光标到当前所在代码的花括号结束位置。Ctrl 左方向键:光标跳转…...
对标Gen-2!Meta发布新模型,进军文生视频赛道
随着扩散模型的飞速发展,诞生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生图模型。但在文生视频领域却进步缓慢,因为文生视频多数采用逐帧生成的方式,这类自回归方法运算效率低下、成本高。 即便使用先生成关键帧,再生成中间帧新方法。如…...
zabbix的自动发现机制、代理功能、SNMP监控
一、自动发现(不安全,有时会失效,建议手动添加主机) 1、定义 zabbix主动与服务端联系,将自己的地址和端口发送给服务端,实现自动添加监控主机 客户端是主动的一方 2、缺点 若自定义网段中主机数量太多…...
spring webflux文件上传与下载
1、文件上传: Controller: PostMapping("/import")public void importImage(RequestPart("file") FilePart filePart) {imageService.importImage(filePart);}Service: public void importImage(FilePart filePart) {Fi…...
Android MVVM+coroutine+retrofit+flow+hilt
文章目录 Android MVVMcoroutineretrofitflowhilt概述依赖注入层数据层视图层模型视图层代码下载 Android MVVMcoroutineretrofitflowhilt 概述 代码结构: 依赖注入层 数据库: Module InstallIn(SingletonComponent::class) class DBModule {Singleto…...
elasticsearch副本和分片
1.文档冲突 当我们使用index API更新文档,可以一次性读取 修改索引副本 rootes-node3:~# curl -XPUT http://192.168.1.136:9200/es-syslog-2023.08.26/_settings -H "Content-Type: application/json" -d { > "settings": { > …...
【Python】zip
Python中的zip()函数可以将多个可迭代对象打包成一个元组序列,然后返回这些元组序列组成的迭代器。zip()函数的语法如下: zip(*iterables)其中,iterables是可迭代对象,可以是多个,也可以是一个。zip()函数将返回一个迭…...
西安安泰——ATA-1220E宽带放大器
ATA-1220E宽带放大器简介 ATA-1220E是一款可放大交直流信号的差分通道宽带放大器。其最大输出电压 60Vp-p(30Vp),最大输出电流1Ap(>50Hz)。电压增益数控可调,一键保存设置,提供了方便简洁的操作选择,可…...
数据结构和算法专题---4、限流算法与应用
本章我们会对限流算法做个简单介绍,包括常用的限流算法(计数器、漏桶算法、令牌桶案发、滑动窗口)的概述、实现方式、典型场景做个说明。 什么是限流算法 限流是对系统的一种保护措施。即限制流量请求的频率(每秒处理多少个请求…...
亚信安慧AntDB受邀分享核心业务系统全域数据库替换实践
近日,亚信安慧AntDB数据库凭借丰富的核心业务系统升级替换能力和经验,受邀参与IT168组织的第三期“国产软硬件升级替换之路”的直播沙龙。 亚信安慧AntDB数据库相关负责人发表《基于AntDB的CRM全域数据库替换实践》的精彩演讲,通过通信行业率…...
1.uniapp基础
1.uniapp基础 官方文档:uni-app官网 1.1开发工具 (1)工具: HBuilderX HBuilderX-高效极客技巧 1.2 新建项目 (1) 文件》新建项目 (2)选择相应的配置信息,填写项目根路…...
typescript中的策略模式
typescript中的策略模式 当我们需要以整洁、易于维护和易于调试的方式构建应用程序时,使用设计模式是一种非常好的方式。 在本文中,我们的目标是阐明如何将策略模式无缝地集成到我们的应用程序中。如果我们熟悉依赖性注入,可能会发现策略模…...
Hadoop学习笔记(HDP)-Part.16 安装HBase
目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …...
C语言练习记录(蓝桥杯练习)(小蓝数点)
目录 小蓝数点 第一题程序的输出结果是?: 第二题下面代码的执行结果是什么?: 第三题下面代码的执行结果是什么?: 第四题关于关系操作符说法错误的是?: 第五题对于下面代码段,y的值为? 第六题sum 21 …...
RPG项目01_层级设置
基于“RPG项目01_UI面板Game”, 找到狼人 添加组件,让狼人一定区域自动跟随主角进行攻击 解释:【烘培蓝色】因为如果什么都不做就会被烘培成蓝色对应的功能就是 可修改区域功能 当将区域设置成不可行走状态,则不为蓝色 烘培&…...
相关基础知识
本文引注: https://zhuanlan.zhihu.com/p/447221519 1.方差 2.自协方差矩阵 3.自相关矩阵 4.互协方差矩阵 5.互相关矩阵 6.相关系数 7.自相关函数、自协方差函数与功率谱密度 8.互相关函数、互协方差函数与互功率谱密度...
基于单片机的智能健康监测手环的设计
目 录 1 绪论... 2 1.1 引言... 2 1.2 智能手环的国内外研究现状... 2 1.3 课题的研究意义... 3 1.4 本文的研究内容和章节安排... 4 2 智能手环系统设计方案... 5 2.1 系统总体设计方案... 5 2.2 主芯片选择... 5 2.3 显示方案的选择... 6 2.4 倾角传感器的选择... 6 2.5 心率…...
wordpress esc_url/怎样建网站
编译好的程序的下载链接:百度网盘 请输入提取码(提取码:ocmm) 概述 通常情况下,我们是在电脑里面开一个Linux虚拟机, 在虚拟机里面用交叉编译工具链编译好可执行文件后,将可执行文件拷贝到板子…...
网站开发学习班/要怎么网络做推广
概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目…...
公司的网站如何进行修改布局/南宁seo费用服务
AngularJS的四大特性的思维导图如下: 将AngularJS应用于工作:其思维导图如下: AngularJS服务思维导图: 转载于:https://www.cnblogs.com/PHM64123/p/7660985.html...
qq自动发货平台网站怎么做/谷歌商店app下载
计算机在翻译中作用探析计算机在翻译中作用探析 摘 要:计算机翻译是涉及语言学、数学、计算机科学和人工智能等多种学科和技术的综合性课题,被列为21世纪世界十大科技难题。从上世纪80年代中期开始,基于语料和多引擎机译方法的广泛运用&a…...
自己做装修图网站/免费自己制作网站
2019独角兽企业重金招聘Python工程师标准>>> 之前对于Storm的Acker机制进行了一些数学上的描述。 在这里,对于Storm的Ack机制 在源码实现上进行一些有意的补充。 1: 在Ack框架的设计之中,Storm发射出去的消息都会对应于一个随机…...
什么是网络营销策略?/seo指的是什么意思
(本文发表于《程序员》2010年3月刊) 借鉴丰田方法对大型软件组织进行敏捷改造 (上) 本文以 ThoughtWorks 中国公司与 某大型 电 信 设备 提供商 合作的 咨询项目 案例 为 背景 , 介 绍 如何采用丰…...