RapidUp: Multi-Domain Permutation Protocol for Lookup Tables学习笔记

1. 引言

前序博客有:


要点:


Polygon zero团队 Daniel Lubarov 和 Polygon zkEVM团队 Jordi Baylina 2022年9月联合发表的论文 《RapidUp: Multi-Domain Permutation Protocol for Lookup Tables》。

某些标准的密码学原语中包含了大量SNARK-unfriendly运算——如XOR运算。Gabizon等人2020年论文《plookup: A simplified polynomial protocol for lookup tables》,为解决这种SNARK-unfriendly运算,设计的协议中引入了lookup arguments——但是该协议仅适合用于相同的电路。本文的RapidUp协议,通过将grand-product多项式展开为2个具有相同size的(等价)多项式,不受限于相同电路。通过引入selectors,也可以让plookup协议更通用化。

2019年 Plonk 论文中包含了一种协议,用于证明,2个多项式基于某evaluation domain形成的evaluation vector,二者互为permutation。该协议后来进一步扩展为多个多项式,在Plonk主协议中用于证明各circuit gates是正确连接的。

通过构建“grand-product”多项式来实现permutation check。从上层来看,grand-product为所涉及的多项式evaluations的quotient的递增乘积。若该多项式的最后一个evaluation可正确cycle back为1,则可证明原始的evaluations之间互为permutation。

上述协议存在的一个主要问题在于,无法对 对不同的(可能相互关联的) domain的evaluate进行实例化。多项式 f f f g g g之间的permutation check仅适合 对相同的domain H H H进行evaluate 的场景。

本文对基于grand-product的协议 以2种不同方式进行了通用化改进:

  • 1)各多项式可基于不同的domain进行evaluate,各domain甚至可具有不同的size。
  • 2)适合原始evaluations之间相互不是permutation,但包含了该permutation的场景——即适合original values不是permute "in its whole"的情况。

如,具有集合 f = { 5 , 4 , 2 , 5 } f=\{5,4,2,5\} f={ 5,4,2,5}(某多项式基于domain size为 m m m的evaluation集合)以及 g = { 9 , 7 , 5 , 8 , 5 , 1 , 6 , 9 , 4 } g=\{9,7,5,8,5,1,6,9,4\} g={ 9,7,5,8,5,1,6,9,4}(某多项式基于domain size为 n n n的evaluation集合),二者当前不存在直接的permutation关系。

本文协议,可证明 f f f的某特定子集 f ′ f' f,与, g g g的某特定子集 g ′ g' g,二者存在permutation关系。本例中, f ′ = { 5 , 4 , 5 } , g ′ = { 5 , 5 , 4 } f'=\{5,4,5\},g'=\{5,5,4\} f={ 5,4,5}g={ 5,5,4},二者permutation关系为 ( 1 , 3 , 2 ) (1,3,2) (1,3,2)。【注意, f , g f,g f,g的长度可不同,但 f ′ , g ′ f',g' f,g的长度是相同的。】

本协议的核心思想是,将grand-product多项式 Z Z Z“切分”为2个多项式 Z f , Z g Z_f,Z_g Zf,Zg——代表 Z Z Z中的2个quotient member。若在某evaluation point,多项式 Z Z Z的值为 A / B A/B A/B,则在某(可能不同的)evaluation point,多项式 Z f , Z g Z_f,Z_g Zf,Zg的值分别为 A , B A,B A,B。根据 Z Z Z的结构,这2个多项式的最后一个evaluation值要求是相等的。

为定义该多项式,需额外引入2个selectors集合 f s e l , g s e l f^{sel},g^{sel} fselgsel

  • 这些selectors可选择每个 f , g f,g f,g中的indexes,以包含在待permutation check的子集 f ′ , g ′ f',g' f,g中。
  • 若某index被选中,相应selector值为1,否则为0。仍以上例为例,有 f s e l = { 1 , 1 , 0 , 1 } , g s e l = { 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 } f^{sel}=\{1,1,0,1\},g^{sel}=\{0,0,1,0,1,0,0,0,1\} fsel={ 1,1,0,1},gsel={ 0,0,1,0,1,0,0,0,1}

至此,基于不同的evaluation domain, Z f , Z g Z_f,Z_g Zf,Zg的evaluation值定义为:

  • Z f → { 1 , ( 5 + γ ) , ( 5 + γ ) ( 4 + γ ) , ( 5 + γ ) ( 4 + γ ) , ( 5 + γ ) ( 4 + γ ) ( 5 + γ ) } Z_f\rightarrow \{1,(5+\gamma),(5+\gamma)(4+\gamma), (5+\gamma)(4+\gamma),(5+\gamma)(4+\gamma)(5+\gamma)\} Zf{ 1,(5+γ),(5+γ)(4+γ),(5+γ)(4+γ),(5+γ)(4+γ)(5+γ)}
  • Z g → { 1 , 1 , 1 , ( 5 + γ ) , ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) , ( 5 + γ ) ( 5 + γ ) ( 4 + γ ) } Z_g\rightarrow \{1,1,1,(5+\gamma),(5+\gamma),(5+\gamma)(5+\gamma), (5+\gamma)(5+\gamma), (5+\gamma)(5+\gamma), (5+\gamma)(5+\gamma),(5+\gamma)(5+\gamma)(4+\gamma)\} Zg{ 1,1,1,(5+γ),(5+γ),(5+γ)(5+γ),(5+γ)(5+γ),(5+γ)(5+γ),(5+γ)(5+γ),(5+γ)(5+γ)(4+γ)}

其中 γ \gamma γ为基于底层域的随机值。

以上2个多项式的最后一个值为相同的product value。相应的思想为:当且仅当 Z f , Z g Z_f,Z_g Zf,Zg 最后一个evaluate值相同时,subset { 5 , 4 , 5 } ⊂ { f i } \{5,4,5\}\subset \{f_i\} { 5,4,5}{ fi} 也为subset in { g i } \{g_i\} { gi}

1.1 用例:Lookup Tables

本协议可用于lookup tables场景。
lookup技术可用于reduce某些标准密码学原语的原生SNARK表示(如Keccak-256)。从上层来看,该技术是通过将某特定“SNARK-unfriendly”运算的所有可能输入/输出组合 预计算出 一个lookup table。不同于以某SNARK语言来表示这些运算,Prover只需声称相应的witness在相应的查找表中。

plookup 协议提供了一种简单高效的实现方案。存在的主要的问题在于在lookup中包含了vectors——witness-related的 f f f 与 table-related t t t 之间需具有相近的length——如,可用于满足 ∣ t ∣ = ∣ f ∣ + 1 |t|=|f|+1 t=f+1的2个向量 f , t f,t f,t之间。在2022年论文《PlonKup: Reconciling PlonK with plookup》中,以不同的方法(即填充)来调整该限制。同时,当 f , t f,t f,t具有相同的length时,在PlonKup论文中可构建具有更少约束的更简单的lookup协议。

但是,仍然存在某些场景, f , t f,t f,t并不具有相近的长度。某传统场景中, ∣ f ∣ |f| f可为small power of two,而 t t t可为big power of two。之前的协议就存在瓶颈了——需对 f f f的长度进行调整,如对 f f f填充其最后一个元素,使其填充后的长度适于PlonKup协议。但是 ,该调整将影响Prover和Verifier双方的效率,主要是影响Prover端的效率。

在本文中,提供了一种length问题的解决方案。

2. 相关约定

已知 n ∈ N n\in\mathbb{N} nN,以 [ n ] [n] [n]来表示集合 { 1 , 2 , ⋯   , n } \{1,2,\cdots,n\} { 1,2,,n}
已知合适的 n , m ∈ Z 0 + n,m\in \mathbb{Z}_0^{+} n,mZ0+,以 [ n , m ] [n,m] [n,m]来表示集合 { n , n + 1 , n + 2 , ⋯ m } \{n,n+1,n+2,\cdots m\} { n,n+1n+2,m}

令field F \mathbb{F} F具有prime order,以 F ∗ \mathbb{F}^{*} F来表示相应的multiplicative group。
F < n [ X ] \mathbb{F}_{<n}[X] F<n[X]为基于 F \mathbb{F} F的单变量多项式集合,其degree均小于 n n n
对于某多项式 f ∈ F < n [ X ] f\in \mathbb{F}_{<n}[X] fF<n[X],对某 i ∈ [ n ] i\in [n] i[n],定义: f i = f ( w i ) f_i=f(w^i) fi=f(wi)

F \mathbb{F} F的某multiplicative subgroup H H H,其order为 N N N,generator为 w w w H 2 H^2 H2表示该集合内的每个元素为 H H H中每个元素的平方。 H 2 h H^{2^h} H2h表示该集合内的每个元素为 H H H中每个元素的 2 h 2^h 2h次方。

对于某子集 H ⊂ F ∗ H\subset \mathbb{F}^* HF,vanishing多项式定义为:
Z H ( X ) = ∏ x ∈ H ( X − x ) Z_H(X)=\prod_{x\in H}(X-x) ZH(X)=xH(Xx)

2.1 Lagrange多项式

对于degree小于 n n n的多项式 f ( X ) = a 0 + a 1 X + a 2 X 2 + ⋯ + a n − 1 X n − 1 f(X)=a_0+a_1X+a_2X^2+\cdots +a_{n-1}X^{n-1} f(X)=a0+a1X+a2X2++an1Xn1,选 n n n个不同的插值点—— ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) , ⋯   , ( x n − 1 , f ( x n − 1 ) ) ) (x_0,f(x_0)),(x_1,f(x_1),\cdots,(x_{n-1},f(x_{n-1}))) (x0,f(x0)),(x1,f(x1),,(xn1,f(xn1))),可唯一确定该多项式:
f ( X ) = ∑ i = 0 n ( ∏ j = 0 , j ≠ i n X − x j x i − x j ) ⋅ f ( x i ) = ∑ i = 0 n L i ( X ) ⋅ f ( x i ) f(X)=\sum_{i=0}^n (\prod_{j=0,j\neq i}^{n}\frac{X-x_j}{x_i-x_j})\cdot f(x_i)=\sum_{i=0}^{n}L_i(X)\cdot f(x_i) f(X)=i=0n(j=0,j=inxixjXxj)f(xi)=i=0nLi(X)f(xi)

当采样点为 ( w 0 , w 1 , w 2 , ⋯   , w n − 1 ) (w^0,w^1,w^2,\cdots,w^{n-1}) (w0,w1,w2,,wn1)(构成domain H H H),其中 w w w为generator,满足 w n = 1 w^n=1 wn=1时,Lagrange插值多项式 L i ( X ) L_i(X) Li(X)表示为:
L i ( X ) = ∏ j = 0 , j ≠ i n X − x j x i − x j = ( X − w 0 ) ⋅ ( X − w 1 ) ⋯ ( X − w i − 1 ) ⋅ ( X − w i + 1 ) ⋯ ( X − w n − 1 ) ( x i − w 0 ) ⋅ ( x i − w 1 ) ⋯ ( x i − w i − 1 ) ⋅ ( x i − w i + 1 ) ⋯ ( x i − w n − 1 ) = w i ( X n − 1 ) n ( X − w i ) L_i(X)=\prod_{j=0,j\neq i}^{n}\frac{X-x_j}{x_i-x_j}=\frac{(X-w^0)\cdot (X-w^1)\cdots (X-w^{i-1})\cdot (X-w^{i+1})\cdots (X-w^{n-1})}{(x_i-w^0)\cdot (x_i-w^1)\cdots (x_i-w^{i-1})\cdot (x_i-w^{i+1})\cdots (x_i-w^{n-1})}=\frac{w^i(X^n-1)}{n(X-w^i)} Li(X)=j=0,j=inxixjXxj=(xiw0)(xiw1)(xiwi1)(xiwi+1)(xiwn1)(Xw0)(Xw1)(Xwi1)(Xwi+1)(Xwn1)=n(Xwi)wi(Xn1)

满足:

  • L i ( w i ) = 1 L_i(w^i)=1 Li(wi)=1
  • L i ( w j ) = 0 L_i(w^j)=0 Li(wj)=0 for j ≠ i j\neq i j=i

从而有Claim 1:

  • 已知 i ∈ [ n ] i\in [n] i[n] f , g ∈ F [ X ] f,g\in \mathbb{F}[X] f,gF[X],当且仅当 f ( w i ) = g ( w i ) f(w^i)=g(w^i) f(wi)=g(wi)时,对所有的 x ∈ H x\in H xH,有 L i ( x ) ( f ( x ) − g ( x ) ) = 0 L_i(x)(f(x)-g(x))=0 Li(x)(f(x)g(x))=0成立。

generator w w w还很适合用于表示“相邻值”的约束,即:

  • 约束 f ( X ⋅ w 2 ) = f ( X ⋅ w ) + f ( X ) f(X\cdot w^2)=f(X\cdot w)+f(X) f(Xw2)=f(Xw)+f(X),表示 f f f的相邻三个值遵循Fibonacci序列要求。

2.2 多项式承诺方案

本文的多项式承诺方案定义与 2020年论文Efficient polynomial commitment schemes for multiple points and polynomials中类似(详细可参看博客Efficient polynomial commitment schemes for multiple points and polynomials学习笔记),定义的为支持batched设置的多项式承诺方案,支持query多个多项式at多个points。

Definition 1:
在这里插入图片描述
其中的open协议满足如下属性:

  • 完备性
  • knowledge soundness in the algebraic group model
    在这里插入图片描述

3. 多项式协议

本文采用的多项式协议为PLONK中多项式协议的变种。多项式协议核心思想在于对底层多项式承诺方案(如KZG10或BulletProofs)的抽象。
本文,在多项式协议中引入了一个可信第三方 I \mathcal{I} I,Verifier可向可信第三方 I \mathcal{I} I询问"Prover多项式的特定identities是否成立" 以及 “Verifier已知的额外预定义的多项式”。

PLONK不同之处在于,本文:

  • Prover与Verifier无法用Fiat-Shamir实现非交互式,Prover必须与Verifier交互,且其交互的某个值依赖于 Prover与可信第三方 I \mathcal{I} I的至少某一个消息。
  • Verifier向可信第三方$\mathcal{I}查询的每个identity可基于不同的domain。

定义2:【基于单个domain】
已知正整数 d , D , l , t , h d,D,l,t,h d,D,l,t,h。基于 F \mathbb{F} F ( d , D , l , t , h ) − (d,D,l,t,h)- (d,D,l,t,h)多项式协议为 Prover P p o l y \mathcal{P}_{poly} Ppoly、Verifier V p o l y \mathcal{V}_{poly} Vpoly、理想(可信)第三方 I \mathcal{I} I之间的多轮协议,具体为:

  • 1)包含了一组预处理多项式 g 1 , ⋯   , g l ∈ F < d [ X ] g_1,\cdots,g_l\in\mathbb{F}_{<d}[X] g1,,glF<d[X]
  • 2)Prover P p o l y \mathcal{P}_{poly} Ppoly 发送给 理想(可信)第三方 I \mathcal{I} I 的消息格式为 f f f f ∈ F < d [ X ] f\in\mathbb{F}_{<d}[X] fF<d[X]。若 Prover P p o l y \mathcal{P}_{poly} Ppoly 发送的消息不满足该格式要求,则协议终止。
  • 3)Prover P p o l y \mathcal{P}_{poly} Ppoly 发送给 Verifier V p o l y \mathcal{V}_{poly} Vpoly 的消息格式为 K K K K ∈ F K\in \mathbb{F} KF。若 Prover P p o l y \mathcal{P}_{poly} Ppoly 发送的消息不满足该格式要求,则协议终止。
  • 4)Verifier V p o l y \mathcal{V}_{poly} Vpoly 发送给 Prover P p o l y \mathcal{P}_{poly} Ppoly 的为random coins。
  • 5)最终,假设 f 1 , ⋯   , f t f_1,\cdots,f_t f1,,ft为Prover P p o l y \mathcal{P}_{poly} Ppoly 发送给 理想(可信)第三方 I \mathcal{I} I 的多项式;假设 K 1 , ⋯   , K h K_1,\cdots,K_h K1,,Kh为Prover P p o l y \mathcal{P}_{poly} Ppoly 发送给 Verifier V p o l y \mathcal{V}_{poly} Vpoly F \mathbb{F} F域元素。
    Verifier V p o l y \mathcal{V}_{poly} Vpoly 向 理想(可信)第三方 I \mathcal{I} I 查询 { g 1 , ⋯   , g l , f 1 , ⋯   , f t } \{g_1,\cdots,g_l,f_1,\cdots,f_t\} { g1,,gl,f1,,ft} { K 1 , ⋯   , K h } \{K_1,\cdots,K_h\} { K1,,Kh}之间的特定多项式identities是否成立。每个多项式identity的格式为:
    F ( X ) = G ( X , h 1 ( v 1 ( X ) ) , ⋯   , h M ( v M ( X ) ) , K 1 , ⋯   , K h ) ≡ 0 F(X)=G(X,h_1(v_1(X)),\cdots,h_M(v_M(X)),K_1,\cdots,K_h)\equiv 0 F(X)=G(X,h1(v1(X)),,hM(vM(X)),K1,,Kh)0
    其中 h i ∈ { g 1 , ⋯   , g l , f 1 , ⋯   , f t } , G ∈ F [ X , X 1 , ⋯   , X M ] , v 1 , ⋯   , v M ∈ F < d [ X ] h_i\in\{g_1,\cdots,g_l,f_1,\cdots,f_t\},G\in\mathbb{F}[X,X_1,\cdots,X_M],v_1,\cdots,v_M\in\mathbb{F}_{<d}[X] hi{ g1,,gl,f1,,ft},GF[X,X1,,XM],v1,,vMF<d[X],使得对于Prover P p o l y \mathcal{P}_{poly} Ppoly选择每个 f 1 , ⋯   , f t f_1,\cdots,f_t f1,,ft对应的 F ∈ F < D [ X ] F\in\mathbb{F}_{<D}[X] FF<D[X]均成立。
  • 6)当获得 理想(可信)第三方 I \mathcal{I} I的答复之后,若所有identities均成立,则Verifier V p o l y \mathcal{V}_{poly} Vpoly 输出Accept,否则输出Reject。

将以上定义2扩展为对relation的多项式协议定义:
在这里插入图片描述

3.1 基于多个domain的多项式协议

本文协议中, V p l o y \mathcal{V}_{ploy} Vploy实际需要检查:

  • if certain polynomial identities hold on certain subsets of values from F \mathbb{F} F

基于subsets H 1 , ⋯   , H k ⊂ F H_1,\cdots,H_k\subset \mathbb{F} H1,,HkF的multi-ranged ( d , D , l , t , h , k ) − (d,D,l,t,h,k)- (d,D,l,t,h,k)多项式协议,当满足如下条件时,其与 ( d , D , l , t , h ) − (d,D,l,t,h)- (d,D,l,t,h)多项式协议类似:

  • 1)整数 k k k满足 k ≤ t k\leq t kt
  • 2)在协议最后一步,Verifier向 I \mathcal{I} I询问的identities需基于 H 1 , ⋯   , H k H_1,\cdots,H_k H1,,Hk之一,而不是基于整个 F \mathbb{F} F

具体可参看PLONK论文第4章——如何将 H − H- Hranged多项式协议 转换为 基于 F \mathbb{F} F的多项式协议,仅会引入一个额外的预处理多项式,以及增加由 P p o l y \mathcal{P}_{poly} Ppoly发送个 I \mathcal{I} I的多项式:
在这里插入图片描述

3.2 将多项式转换为抗Algebraic Adversaries协议

将多项式协议 编译为 Algebraic Group Model(AGM)下的协议 的方式,与
Aztec团队2021年11月论文《fflonK: a Fast-Fourier inspired verifier efficient version of PlonK》中的编译方案类似,只是Verifier不仅值check one polynomial identity——根据上面的Lemma 1,本文的协议中Verifier会为每个range询问一个identity。

P \mathscr{P} P为某 ( d , D , l , t , h ) − (d,D,l,t,h)- (d,D,l,t,h)多项式协议构建具有knowledge soundness in the AGM的协议 P ∗ \mathscr{P}^* P。定义 P ∗ \mathscr{P}^* P的extractor E E E,令 E P E_{\mathscr{P}} EP P \mathscr{P} P协议的extractor, E P C S E_{PCS} EPCS为上面定义1的knowledge soundness extractor。
假设某algebraic adversary A \mathcal{A} A取代 P ∗ \mathscr{P}^* P中的 P \mathcal{P} P角色:

  • 1) E E E将承诺值 c m 1 , ⋯   , c m t cm_1,\cdots,cm_t cm1,,cmt以及 t t t值发送给 E P C S E_{PCS} EPCS,收到多项式 f 1 , ⋯   , f t ∈ F < d [ X ] f_1,\cdots,f_t\in\mathbb{F}_{<d}[X] f1,,ftF<d[X]
  • 2) E E E承担 I \mathcal{I} I的角色与 E P E_{\mathscr{P}} EP互动,将其收到的多项式 f 1 , ⋯   , f t ∈ F < d [ X ] f_1,\cdots,f_t\in\mathbb{F}_{<d}[X] f1,,ftF<d[X]发送给 E P E_{\mathscr{P}} EP
  • 3)当 E P E_{\mathscr{P}} EP输出 w \mathbf{w} w时, E E E也输出 w \mathbf{w} w

定义2个events:

  • 1)想象某adversary A P \mathcal{A}_{\mathscr{P}} AP参与到 P \mathscr{P} P多项式协议中,将多项式 f 1 , ⋯   , f t f_1,\cdots,f_t f1,,ft作为消息发送给 I \mathcal{I} I。定义 A \mathbf{A} A为the event that one of the identities F i F_i Fi held,但是 ( x , w ) ∉ R (\mathbf{x},\mathbf{w})\notin \mathcal{R} (x,w)/R,根据 P \mathscr{P} P的knowledge soundness可知,相应的概率 Pr ( A ) = negl ( λ ) \text{Pr}(\mathbf{A})=\text{negl}(\lambda) Pr(A)=negl(λ)
  • 2)定义 B \mathbf{B} B为the event that for some i ∈ [ k ] , j ∈ [ M ] , h i , j ( v i , j ( x ) ) ≠ s i , j i\in [k],j\in [M],h_{i,j}(v_{i,j}(x))\neq s_{i,j} i[k],j[M],hi,j(vi,j(x))=si,j,与此同时,open子程序中 V \mathcal{V} V输出Accept,根据 P \mathscr{P} P的knowledge soundness可知,相应的概率 Pr ( B ) = negl ( λ ) \text{Pr}(\mathbf{B})=\text{negl}(\lambda) Pr(B)=negl(λ)

然后定义 V \mathcal{V} V输出Accept的event C \mathbf{C} C,此时 E E E对应 ( x , w ) ∉ R (\mathbf{x},\mathbf{w})\notin \mathcal{R} (x,w)/R,此时,可将 C C C切分为2种情况:

  • 1) A \mathbf{A} A B \mathbf{B} B发生的概率为 negl ( λ ) \text{negl}(\lambda) negl(λ)
  • 2) C \mathbf{C} C发生,而 A \mathbf{A} A B \mathbf{B} B不发生。意味着,存在某些 i ∈ [ k ] i\in [k] i[k] F i F_i Fi为非zero 多项式,但 F i ( x ) = 0 F_i(x)=0 Fi(x)=0的概率为 negl ( λ ) \text{negl}(\lambda) negl(λ)

注意, E E E还可访问由 P p o l y \mathcal{P}_{poly} Ppoly直接发送 V p o l y \mathcal{V}_{poly} Vpoly的消息,但是并不需要这些消息来获取“incorrect” witness w \mathbf{w} w

4. 主协议

本文的协议描述与Gabizon等人2020年论文《plookup: A simplified polynomial protocol for lookup tables》中的类似。

4.1 Grand-Product多项式

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/128513585
今日推荐