eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(1)

1. 引言

eSTARK:

  • 即extended STARK,为Polygon zkEVM团队在STARK协议的基础之上做了扩展——扩大了所支持的约束类型。
  • 其不仅支持polynomial equality约束,还额外支持:
    • lookup argument
    • permutation argument
    • copy-constraints(又名connection argument)

自1985年Goldwasser等人论文The knowledge complexity of interactive proof-systems (extended abstract) 以来,probabilistic proofs 已影响了一堆协议,如:

  • Interactive Proofs(IPs):见Goldwasser等人1985年论文The knowledge complexity of interactive proof-systems (extended abstract) 。
  • Probabilistic Checkable Proofs(PCPs):见Arora等人1992年论文Probabilistic checking of proofs; A new characterization of NP。

这些协议支持:

  • Prover向Verifier证明,其正确执行了Verifier所请求的某计算。

实际应用时,probabilistic proofs支持算力若的设备,监督某强大但不可信服务器的执行,从而支持将某程序的执行 外包给 该服务器。

当probabilistic proofs拥有名为zero-knowledge的属性时,其用途将更强大:

  • 使得proof不泄露任何东西,但可证明其有效性。

借助zero-knowledge属性,probabilistic proofs支持:

  • Prover可证明其知道满足某特定statement的秘密输入,在不泄露关于该秘密输入的任何信息的情况下,证明该statement的有效性。

如,满足zero-knowledge属性的probabilistic proofs,可用于:

  • Prover可证明其拥有某特定公钥对应的私钥,而不泄露该私钥的任何信息;
  • Prover可证明其知道某特定哈希摘要的preimage,而不泄露该preimage的任何信息。
    • 可用于不输入密码登录网站,只简单发送 其拥有该有效密码 的proof。

本文关注的场景为:

  • Verifier V \mathcal{V} V将某程序 f f f的描述,以及该程序的输入 x x x,发送给Prover P \mathcal{P} P
  • P \mathcal{P} P计算并返回程序 f f f基于 x x x的执行结果 y = f ( x ) y=f(x) y=f(x)的同时,还返回一个proof π \pi π——证明输出 y y y是正确的,且与 f f f程序描述以及输入 x x x一致。
  • proof π \pi π应满足如下属性:
    • 1)完备性:若 P \mathcal{P} P是诚实的,即意味着其知道满足claim f ( x ) = y f(x)=y f(x)=y的pair ( x , y ) (x,y) (x,y),且正确遵循了协议规则,则 P \mathcal{P} P可计算出a proof来让Verifier V \mathcal{V} V信服该claim。

      • 完备性,意味着honest Verifier将总是认可由honest Prover所生成的proof。
    • 2)可靠性:恶意Prover P \mathcal{P} P,为false claim statement(即 f ( x ) ≠ y f(x)\neq y f(x)=y)生成让Verifier V \mathcal{V} V信服的proof,的概率可忽略。

      • 可靠性,关注的是Verifier认可由恶意Prover所生成的false proof的概率。

      完备性和可靠性这2个属性,可保护Verifier不受恶意Prover影响。

    • 3)验证proof π \pi π,要比直接执行 f ( x ) f(x) f(x)计算,要高效得多。

同时,为让probabilistic proofs可保护隐私,Prover P \mathcal{P} P可向该计算提供其私有输入 w w w——可称为witness。从而,可将 f f f表示为具有2个输入 ( x , w ) (x,w) (x,w)的函数,使得 f ( x , w ) = y f(x,w)=y f(x,w)=y。若在协议结束时,Verifier V \mathcal{V} V信服statement y = f ( x , w ) y=f(x,w) y=f(x,w)为true,而不知道任何 w w w的信息,则可称这样的协议方案具备zero-knowledge属性,通常称其为Zero-Knowledge Proof(ZKP)。

即ZKP满足以上完备性和可靠性的同时,还满足零知识性(zero-knowledge):

  • 零知识性:Verifier V \mathcal{V} V,在就claim f ( x , w ) = y f(x,w)=y f(x,w)=y与Prover P \mathcal{P} P交互之后,并不知道witness w w w的任何信息,且仍然信服该claim的有效性。
    • 零知识性,保护了Prover的秘密信息的隐私,从而不受恶意Verifier影响。

1.1 zk-SNARKs

近年来,ZKP家族的zero-knowledge Succinct Non-interactive ARguments of Knowledge (zk-SNARKs) 在理论和工程领域备受关注。
广义来说,zk-SNARKs为ZKP的通用术语,其密码学假设和计算复杂度都更贴近实用。zk-SNARKs缩略语所表示的probabilistic proofs,具有:

  • zk:满足零知识属性,为可选项。
  • Succinct:简洁性,相比于statement size或witness size(即计算本身的size),对应的probabilistic proofs为sublinear的。
  • Non-Interactive:不需要特定Prover与Verifier的多轮交互,且是公开可验证的(publicly verifiable)。
  • Argument:即假定,生成probabilistic proofs的Prover最多具有polynomial计算资源(而不是具有无限计算资源)。特别强调,相应Prover无法破解标准的密码学假设。
  • Of Knowledge:满足knowledge soundness,而不是plain soundness。即该probabilistic proof说明了该Prover owns(拥有) 该statement的witness,而不仅仅是存在相应的witness。

当前的zk-SNARKs方案有很多,如:

  • Groth16
  • Bulletproofs
  • Plonk
  • Marlin等

这些zk-SNARKs方案基于不同的密码学元素,且做了不同的权衡取舍。

zk-SNARKs相关应用案例有:

  • 公链Zcash将zk-SNARKs用作其核心技术:
    • Zcash分叉自bitcoin
    • 在Zcash核心协议中,使用zk-SNARKs proofs来验证私有交易(又名shielded交易)计算正确,但不向外部观察者泄露其它任何信息。
  • zk-img:使用zk-SNARKs来抵抗虚假信息。
  • zkCNN:使用zk-SNARKs来证明卷积神经网络已做了正确的预测,而不泄露模型本身。

1.2 zk-STARKs

尽管zk-SNARKs有很多应用案例,但zk-SNARKs有严重限制:

  • 其需要trusted setup:即需要某可信方来为系统生成随机公共参数,同时删除在trusted setup所用随机值的信息(又名toxic waste)。事实上,若某恶意方获取了该toxic waste,则其很容易伪造false proofs。

为此,开发了无需trusted setup、具有与transparent 特性的系统。transparent ZKPs中最主要的家族为:

  • zero-knowledge Scalable Transparent ARguments of Knowledge (zk-STARKs):见Eli Ben-Sasson等人2019年论文Scalable zero knowledge with no trusted setup。

zk-STARKs除具有zk-SNARKs相同的属性之外,还额外满足如下2个属性:

  • Scalability可扩展性:证明用时最多为statement size的quasilinear,验证用时最多为statement size的logarithmic。
  • Transparency透明性:无需任何trusted setup,即本透明框架中所用的任何随机值都是public coins。

当前的zk-STARKs方案有:

  • Hyrax:Wahby等人2017年论文Doubly-efficient zkSNARKs without trusted setup
  • Fractal:Chiesa等人2019年论文 Fractal: Post-quantum and transparent recursive proofs from holography
  • Spartan:Setty 2019年论文Spartan: Efficient and general-purpose zkSNARKs without trusted setup

1.3 Intermediate Representations

已知某程序 f f f,为计算 f f f执行有效性的proof,通常需就一个适用于probabilistic proof的等价模型 达成一致,然后将 f f f表示为该模型的代数约束满足问题——这种表示步骤,通常称为算术化过程,该过程的输出为某Intermediate Representations

如:

  • (非结构化)算术电路通常编码为基于某有限域的二次方程式系统,又名R1CS(Rank-1 Constraint System)。
  • (结构化)算术电路通常编码为一组重复的多项式计算,又名AIR(Algebraic Intermediate Representation)。
    • 此处的结构化,是指电路被设计为分层化架构,每层包含重复的小电路。
    • 事实上,AIR为STARK(见StarkWare团队2021年论文ethSTARK documentatio)中所使用的标准intermediate representation。

由于本文关注结构化算术电路的处理,因此将重点介绍AIR:

  • 基于某域 F \mathbb{F} F的某AIR A A A,其定义为有一组多变量约束多项式 C i ∈ F [ X 1 , ⋯   , X 2 M ] C_i\in\mathbb{F}[X_1,\cdots,X_{2M}] CiF[X1,,X2M]
  • 其思想为,将 f f f表示为一组单变量多项式 p 1 , ⋯   , p 2 M ∈ F [ X ] p_1,\cdots,p_{2M}\in\mathbb{F}[X] p1,,p2MF[X],其满足 A A A,当且仅当如下多项式约束基于某 F \mathbb{F} F set满足:
    C i ( p 1 ( X ) , ⋯   , p 2 M ( X ) ) = 0 C_i(p_1(X),\cdots,p_{2M}(X))=0 Ci(p1(X),,p2M(X))=0
    从而可将 f f f的计算,转换为,(等价)AIR A A A的每个多项式 C i C_i Ci的satisfaction。而AIR A A A的每个多项式 C i C_i Ci的satisfaction,后续可供合适的STARK使用。

注意,以上AIR定义,仅覆盖通过polynomial equality所定义的多项式约束。因此,无法将AIR直接用于表达:

  • 基于某指定subset所evaluate的某多项式的evaluation值,低于某预先确定的上限值。

为此,需要将这种inequality(不等性),通过引入新的多项式,以一组equality来表示,从而使得,当且仅当该inequality满足,新约束才满足相应equality。

本文:

  • 扩大了AIR所能覆盖的约束类型,额外支持满足特定需求的non-identity约束类型。因此称本文最终所获得的约束系统为extended AIR(eAIR)。 详情见4.1节。
  • 提供了一种特殊的probabilistic proof,其可直接使用eAIR。且由于这种特殊的probabilistic proof被定义为STARK的通用化,因此也称其为extended STARK(eSTARK)。

1.4 本文基本结构

本文基本结构为:

  • 第2章:
    • 回顾与IOP模式相关的基本定义
    • 介绍用于扩大AIR表达性的non-identity约束
    • 提供了STARKs的深度概览
  • 第3章:
    • 解释了后续eSTARK中需用到的low-degree test FRI
    • 展示了STARK和eSTARK的主要区别
    • 解释了如何在STARK协议中引入新的约束类型
  • 第4章:
    • 完整展示了整个eSTARK协议
    • 并就eSTARK协议的可靠性做了论证
  • 第5章:总结

2. 准备工作

2.1 标识

  • F \mathbb{F} F:标识具有素数order p p p的某有限域 F \mathbb{F} F
  • F ∗ \mathbb{F}^* F:为 F \mathbb{F} F的multiplicative group。
  • k k k:为满足 2 k ∣ ( p − 1 ) 2^k|(p-1) 2k(p1)的最大非负整数值。
  • K \mathbb{K} K:为 F \mathbb{F} F有限域的扩域,其size为 p e p^e pe,其中 e ≥ 2 e\geq 2 e2
  • F [ X ] \mathbb{F}[X] F[X] (resp. K [ X ] \mathbb{K}[X] K[X]):为系数基于 F \mathbb{F} F (resp. K \mathbb{K} K)的多项式ring。
  • F < d [ X ] \mathbb{F}_{F<d[X] (resp. K < d [ X ] \mathbb{K}_{K<d[X]):为degree小于 d d d 的多项式组。
  • G G G:order为 n n n F ∗ \mathbb{F}^* F的cyclic subgroup ,其满足 n ∣ 2 k n|2^k n2k 1 < n < 2 k 11<n<2k
  • g g g:为 G G G的generator。
  • H H H:order为 m m m F ∗ \mathbb{F}^* F的cyclic subgroup的nontrivial coset ,其满足 m ∣ 2 k m|2^k m2k n < m nn<m
  • P \mathcal{P} P:表示本文各协议中的Prover。
  • V \mathcal{V} V: 表示本文各协议中的Verifier。

尽管本文所展示的所有协议适用于任意prime order,本文重点关注包含 size为large power of two的multiplicative subgroup 的域——该限制对于实现实用协议至关重要。

已知 F ∗ \mathbb{F}^* F的某cyclic subgroup S S S

  • L i ∈ F < ∣ S ∣ [ X ] L_i\in\mathbb{F}_{<|S|}[X] LiF<S[X]:为 S S S的第 i i i-th个 Lagrange多项式。即对于所有的 j ≠ i j\neq i j=i L i L_i Li 满足 L i ( g i ) = 1 L_i(g^i)=1 Li(gi)=1 L i ( g j ) = 0 L_i(g^j)=0 Li(gj)=0,其中 g g g S S S的generator。
  • Z S [ X ] = X ∣ S ∣ − 1 ∈ F [ X ] Z_S[X]=X^{|S|}-1\in\mathbb{F}[X] ZS[X]=XS1F[X]:基于 S S S的 vanishing多项式,即该多项式仅基于 S S S消失。

给定多项式组 p 1 , p 2 , ⋯   , p N ∈ K [ X ] p_1,p_2,\cdots, p_N\in \mathbb{K}[X] p1,p2,,pNK[X]

  • MTR ( p 1 , p 2 , ⋯   , p N ) \text{MTR}(p_1,p_2,\cdots, p_N) MTR(p1,p2,,pN):通过计算某Merkle tree所获得的,该 Merkle tree的叶子节点为 p 1 , ⋯   , p N p_1,\cdots, p_N p1,,pN over the domain H H H的evaluations值。

给定元素组 x 1 , x 2 , ⋯   , x N ∈ K x_1,x_2,\cdots,x_N\in \mathbb{K} x1,x2,,xNK:

  • MTP ( x 1 , x 2 , ⋯   , x N ) \text{MTP}(x_1,x_2,\cdots,x_N) MTP(x1,x2,,xN):根据包含这些元素的叶子节点,所计算而来的 Merkle tree path(即相应的 Merkle proof)。
    X = { x 1 , x 2 , ⋯   , x N } X=\{x_1,x_2,\cdots,x_N\} X={x1,x2,,xN},则将 MTP ( X ) \text{MTP}(X) MTP(X) 用作 MTP ( x 1 , x 2 , ⋯   , x N ) \text{MTP}(x_1,x_2,\cdots,x_N) MTP(x1,x2,,xN)的缩略表示。

2.2 Interactive Oracle Proofs和STARKs

本节:

  • 定义了polynomial IOP:参考Eli Ben-Sasson等人2016年论文Interactive oracle proofs。
  • 定义了与polynomial IOP模型相关的标准安全概念。
  • 介绍了当前流行的polynomial IOP协议——STIK:参考Eli Ben-Sasson等人2019年论文Scalable zero knowledge with no trusted setup。
  • 解释了如何将某STIK编译为a STARK。

2.2.1 polynomial IOP基本定义

Polynomial IOP基本定义为:

  • 已知某函数 F F F,针对 F F F的public coin polynomial interactive oracle proof (IOP),为Prover P \mathcal{P} P和Verifier V \mathcal{V} V之间进行 k k k轮交互的交互式协议:
    • 输入 w w w仅对 P \mathcal{P} P已知。
    • 共同输入 x x x P \mathcal{P} P V \mathcal{V} V均已知。
  • 在该交互式协议之初, P \mathcal{P} P V \mathcal{V} V提供值 y y y,并声称(claim)存在相应的 w w w使得满足 y = F ( x , w ) y=F(x,w) y=F(x,w)
  • 在第 i i i轮:
    • V \mathcal{V} V发送均匀分布且独立的随机消息 α i \alpha_i αi P \mathcal{P} P
    • P \mathcal{P} P按如下2种格式之一回复消息:
      • a) V \mathcal{V} V可完整读取的消息 m i m_i mi
      • b)在第 i i i轮交互之后, V \mathcal{V} V可(通过随机access)来query的某多项式 f i f_i fi的oracle。
  • 在协议结束时, V \mathcal{V} V要么输出 a c c e p t accept accept,要么输出 r e j e c t reject reject,以表示 V \mathcal{V} V是否认可 P \mathcal{P} P的claim。

2.2.2 polynomial IOP模型相关的标准安全概念

polynomial IOP的安全概念,与之前的其它模型(如interactive proofs)的安全概念类似。如下定义中,probabilities接管了 V \mathcal{V} V的内部随机性。

polynomial IOP的完备性和(Knowledge)可靠性定义为:

  • 当以下2个条件成立时,则某polynomial IOP具有perfect completenss,且soundness error最多为 ε s \varepsilon_s εs
    • 1)Perfect completeness:对于在协议之初每个Prover P \mathcal{P} P,对每个 x x x发送的满足 y = F ( x , w ) y=F(x,w) y=F(x,w) y y y值,有:
      Pr ⁡ [ V ( x , P ( x , w ) ) = accept ] = 1 \Pr [\mathcal{V}(x,\mathcal{P}(x,w))=\text{accept}]=1 Pr[V(x,P(x,w))=accept]=1
      其中, V ( x , P ( x , w ) ) \mathcal{V}(x,\mathcal{P}(x,w)) V(x,P(x,w))为, V \mathcal{V} V就输入 x x x与Prover P \mathcal{P} P交互之后的结论。
    • 2)Soundness:对于在协议之初每个Prover P ∗ \mathcal{P}^* P,对每个 x x x发送的 y y y值,有:
      Pr ⁡ [ V ( x , P ∗ ( x , w ) ) = accept ] ≥ ε s \Pr [\mathcal{V}(x,\mathcal{P}^*(x,w))=\text{accept}]\geq \varepsilon_s Pr[V(x,P(x,w))=accept]εs
      y y y满足 y = F ( x , w ) y=F(x,w) y=F(x,w)
  • 若如下条件成立,则称该polynomial IOP具有的knowledge soundness error最多为 ε k s \varepsilon_{ks} εks
    • Knowledge Soundness:存在某probabilistic polynomial-time算法 ε \large\varepsilon ε(又名knowledge extractor),使得对协议之初每个 x x x,以及每个Prover P ∗ \mathcal{P}^* P所发送的 y y y值,有:
      Pr ⁡ [ V ( x , P ∗ ( x , w ) ) = accept ] ≥ ε k s \Pr [\mathcal{V}(x,\mathcal{P}^*(x,w))=\text{accept}]\geq \varepsilon_{ks} Pr[V(x,P(x,w))=accept]εks
      则有 ε ( x , P ∗ ( x , w ) ) = w \large\varepsilon(x,\mathcal{P}^*(x,w))=w ε(x,P(x,w))=w y y y满足 y = F ( x , w ) y=F(x,w) y=F(x,w)

换句话说:

  • soundness可确保恶意Prover无法以超过 ε s \varepsilon_s εs的概率来成功骗过Verifier the “existence” claim of w w w
  • knowledge soundness可确保恶意Prover无法以超过 ε k s \varepsilon_{ks} εks的概率来成功骗过Verifier the “possession” claim of w w w

满足knowledge soundness的polynomial IOP,也称为polynomial IOP of knowledge

自然地,knowledge soundness 暗含了 soundness。对polynomial IOPs来说,反之亦然——如见Binyi Chen等人2022年论文HyperPlonk: Plonk with linear-time prover and high-degree custom gates的Lemma 2.3。这即意味着,证明某polynomial IOP的soundness,即足以实现相应的knowledge soundness。【即soundness和knowledge soundness二者等价。】

2.2.3 当前流行的polynomial IOP协议——STIK

当前流行的polynomial IOP协议——STIK的定义为:

  • Scalable Transparent polynomial IOP of Knowledge (STIK) 为流行的polynomial IOP协议,其除满足以上polynomial IOP定义中的属性之外,还额外满足如下属性:
    • Transparent属性:在协议执行之前无需trusted setup。trusted setup会造成单点故障,且可被强大的一方用于伪造false proofs。
    • Doubly Scalable属性:Verifier用时为 O ( log ⁡ ( n ) ) \mathcal{O}(\log(n)) O(log(n)),Verifier用时为 O ( n log ⁡ ( n ) ) \mathcal{O}(n\log(n)) O(nlog(n)),其中 n n n F F F computation size的非正式表示。

当将STIK实例化后用于实际部署时,所生成的协议中的Prover被认为是具有算力上限的。这种Prover具有算力上限的系统,称为argument system(而不是proof system)。因此,这样对STIKs实例化所生成的协议,其satisfy的soundness仅支持对抗 polynomial time的对手。

2.2.4 如何将某STIK编译为a STARK

将某STIK编译为a STARK,其中:

  • scalable transparent argument of knowledge (STARK) 是:通过抗碰撞哈希函数而实现的STIK。
  • 更准确来说,底层polynomial IOP协议中:
    • 将,由Prover发送给Verifier的polynomial oracles,替换为,(基于某set的polynomial evaluations计算而来的)Merkle roots。
    • 无论Verifier何时查询多项式 f f f v v v点的值,Prover在回复 f ( v ) f(v) f(v)的同时,还回复关联的Merkle path。

最后,将简要解释如何将协议中特定Prover与Veriifer的交互移除,同时使其可公开验证(publicly verifiable)。
答案就是:

使用Fiat-Shamir heuristic来将STIK,编译为,a non-interactive argument of knowledge in the random oracle model。
其中在random oracle model中,会将Verifier查询的消息,替换为,以 直到该时间点之前的Prover的消息 为输入的random oracle。
实际情况下,会将该random oracle模型化为某密码学哈希函数。

将某STIK编译为a STARK的详细细节见4.4节。因此,所实现的非交互式STIK被称为非交互式STARK(为方便,后面会将两者都称为STARK)。

2.3 FRI

Fast Reed-Solomon Interactive Oracle Proof of Proximity (FRI) 协议:

  • 用于证明某函数 f : H → F f:H\rightarrow \mathbb{F} f:HF接近于某low degree d d d多项式。
  • 此处的low degree,是指 d ≪ ∣ H ∣ d\ll |H| dH

FRI协议包含2个阶段:

  • 1)commit阶段:Prover(通过Merkle tree)对由 f f f生成的一系列函数进行commit,且每轮源自 K \mathbb{K} K的随机元素 v 0 , v 1 , ⋯ v_0,v_1,\cdots v0,v1, 由Verifier提供。
  • 2)query阶段:对于Verifier所选中的随机点,Prover提供之前所承诺的函数在该随机点的一组evaluation值。

2.3.1 FRI的commit阶段

p 0 p_0 p0来表示所感兴趣的 f f f函数,为简化阐述,认为Prover是诚实的(即, p 0 p_0 p0为low degree多项式)。

在FRI的commit阶段:

  • 1)Prover将多项式 p 0 p_0 p0切分为2个degree小于 d / 2 d/2 d/2的多项式 g 0 , 1 , g 0 , 2 : H 2 → K g_{0,1},g_{0,2}:H^2\rightarrow \mathbb{K} g0,1,g0,2:H2K,且三者满足如下关系:
    p 0 ( X ) = g 0 , 1 ( X 2 ) + X ⋅ g 0 , 2 ( X 2 ) (1) p_0(X)=g_{0,1}(X^2)+X\cdot g_{0,2}(X^2) \tag{1} p0(X)=g0,1(X2)+Xg0,2(X2)(1)
  • 2)Verifier发送某均匀采样的 v 0 ∈ K v_0\in\mathbb{K} v0K给Prover,并要求Prover对如下多项式进行承诺:
    p 1 ( X ) : = g 0 , 1 ( X 2 ) + v 0 ⋅ g 0 , 2 ( X 2 ) p_1(X):=g_{0,1}(X^2)+v_0\cdot g_{0,2}(X^2) p1(X):=g0,1(X2)+v0g0,2(X2)
    注意, p 1 p_1 p1多项式的degree小于 d / 2 d/2 d/2,且 p 1 p_1 p1的承诺值不是基于 H H H,而是基于 H 2 = { x 2 : x ∈ H } H^2=\{x^2:x\in H\} H2={x2:xH}的,其size为 ∣ H ∣ / 2 |H|/2 H∣/2
  • 3)Prover继续将多项式 p 1 p_1 p1切分为2个degree小于 d / 4 d/4 d/4的多项式 g 1 , 1 , g 1 , 2 : H 2 → K g_{1,1},g_{1,2}:H^2\rightarrow \mathbb{K} g1,1,g1,2:H2K,然后根据Verifier发来的均匀采样值 v 1 ∈ K v_1\in\mathbb{K} v1K,构建多项式 p 2 p_2 p2
    p 2 p_2 p2多项式的degree小于 d / 2 2 d/2^2 d/22,且基于 H 2 2 = { x 2 : x ∈ H 2 } H^{2^2}=\{x^2:x\in H^2\} H22={x2:xH2}(size为 ∣ H ∣ / 2 2 |H|/2^2 H∣/22)进行承诺。
    整个根据 p i p_i pi派生 p i + 1 p_{i+1} pi+1的过程称为split-and-fold,因Prover会将初始多项式切分为2个多项式,然后借助某随机值,又将这2个多项式fold为一个多项式。
  • 4)重复以上流程 k = log ⁡ 2 ( d ) k=\log_2(d) k=log2(d)次,直到 deg ⁡ ( p k ) = 0 \deg(p_k)=0 deg(pk)=0,然后Prover发送常量值 p k p_k pk——其代表了degree小于1的多项式,给Verifier。
    eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(1)_第1张图片

2.3.2 FRI的query阶段

在FRI的query阶段:

  • 1)Verifier发送均匀采样的 r ∈ H r\in H rH给Prover,并向Prover查询 p 0 ( r ) , p 0 ( − r ) 和 p 1 ( r 2 ) p_0(r),p_0(-r)和p_1(r^2) p0(r),p0(r)p1(r2) evaluations值。
  • 2)Verifier根据 p 0 ( r ) , p 0 ( − r ) p_0(r),p_0(-r) p0(r),p0(r)可计算出 p 1 ( r 2 ) p_1(r^2) p1(r2),将该计算值与Prover所提供的 p 1 ( r 2 ) p_1(r^2) p1(r2)值进行对比。
    为计算 p 1 ( r 2 ) p_1(r^2) p1(r2),Verifier需求解如下线性方程组来获得 g 0 , 1 ( r 2 ) , g 0 , 2 ( r 2 ) g_{0,1}(r^2),g_{0,2}(r^2) g0,1(r2),g0,2(r2)
    p 0 ( r ) = g 0 , 1 ( r 2 ) + r ⋅ g 0 , 2 ( r 2 ) p_0(r)=g_{0,1}(r^2)+r\cdot g_{0,2}(r^2) p0(r)=g0,1(r2)+rg0,2(r2)
    p 0 ( − r ) = g 0 , 1 ( r 2 ) − r ⋅ g 0 , 2 ( r 2 ) p_0(-r)=g_{0,1}(r^2)-r\cdot g_{0,2}(r^2) p0(r)=g0,1(r2)rg0,2(r2)
    然后计算:
    p 1 ( r 2 ) = g 0 , 1 ( r 2 ) + v 0 ⋅ g 0 , 2 ( r 2 ) p_1(r^2)=g_{0,1}(r^2)+v_0\cdot g_{0,2}(r^2) p1(r2)=g0,1(r2)+v0g0,2(r2)
  • 3)Verifier可持续向Prover查询 p 1 ( − r 2 ) , p 2 ( r 4 ) p_1(-r^2),p_2(r^4) p1(r2),p2(r4)
    跟之前类似,可根据 p 1 ( r 2 ) , p 1 ( − r 2 ) p_1(r^2),p_1(-r^2) p1(r2),p1(r2)计算出 p 2 ( r 4 ) p_2(r^4) p2(r4),然后检查所计算出的 p 2 ( r 4 ) p_2(r^4) p2(r4)值与Prover给的值是否一致。每个step,Verifier都会检查每组pair ( p i , p i + 1 ) (p_i,p_{i+1}) (pi,pi+1)之间的一致性。
  • 4)重复以上流程,直到其获得常量值 p k p_k pk。Verifier会检查该值,与其根据 p k − 1 p_{k-1} pk1查询计算而来的值,是否一致。
    为确保正确性,Prover在提供evaluation值的同时,必须同时(通过Merkle tree paths)发送"这些evaluation值存在的claim"。

eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(1)_第2张图片
通过以上流程,Verifier首先可确认,在commit阶段所承诺的多项式 p 0 , p 1 , ⋯   , p k p_0,p_1,\cdots,p_k p0,p1,,pk相互间是consistent一致的。

最后,为达到协议所需的soundness上限,query阶段会重复多次。会在Theorem 1中给出更通用版本FRI的具体soundness上限。详细的FRI框架描述见下图:
eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(1)_第3张图片

2.3.3 Batched FRI协议

不同于上面FRI协议对单个函数的证明,batched FRI协议中:

  • Prover想要一次性,证明一组函数 f 0 , f 1 , ⋯   , f N : H → F f_0,f_1,\cdots,f_N:H\rightarrow \mathbb{F} f0,f1,,fN:HF接近于low-degree多项式。

可为每个函数 f i f_i fi并行运行FRI协议,但在Eli Ben-Sasson等人2020年论文Proximity gaps for reed-solomon codes 8.2节中提供了更高效的处理方式——batched FRI协议。

在batched FRI协议中:

  • Prover,对函数 f i f_i fi的随机线性组合后的函数,运行FRI协议。
  • 即,假设Prover已对函数 f 0 , f 1 , f N f_0,f_1,f_N f0,f1,fN进行了承诺,然后Verifier发送某均匀采样值 ε ∈ K \varepsilon \in\mathbb{K} εK,然后Prover计算函数:
    f ( X ) : = f 0 ( X ) + ∑ i = 1 N ε i f i ( X ) (2) f(X):=f_0(X)+\sum_{i=1}^{N}\varepsilon^if_i(X) \tag{2} f(X):=f0(X)+i=1Nεifi(X)(2)
    然后对 f ( X ) f(X) f(X)运行FRI协议。

Remark 1

  • 在Eli Ben-Sasson等人2020年论文Proximity gaps for reed-solomon codes 中,其计算为 f ( X ) : = f 0 ( X ) + ∑ i = 1 N ε i f i ( X ) f(X):=f_0(X)+\sum_{i=1}^{N}\varepsilon_if_i(X) f(X):=f0(X)+i=1Nεifi(X),即对每个函数 f i f_i fi采用一个随机值 ε i ∈ K \varepsilon_i\in\mathbb{K} εiK,而不是单个随机值 ε \varepsilon ε的powers。即使是安全的,这个替代版本的soundness上限也由函数数量 N N N而线性增加,因此可从现在起假设 N N N为sublinear in KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: |\mathbb{K{|,以确保协议的安全性。
2.3.3.1 batched consistency check

在batched FRI协议中,Verifier还需额外再做一个检查:

  • 以确保函数 f 0 , ⋯   , f N f_0,\cdots,f_N f0,,fN,与首个FRI多项式 p 0 = f p_0=f p0=f之间的关系正确。
  • Verifier将利用在每次FRI query阶段Prover所返回的 p 0 p_0 p0 evaluation值,同时,Prover还需额外返回函数 f 0 , f 1 , ⋯   , f N f_0,f_1,\cdots,f_N f0,f1,,fN r 和 − r r和-r rr点的evaluation值,及其相应的Merkle tree path,使得Verifier可检查:
    p 0 ( r ) = f 0 ( r ) + ∑ i = 1 N ε i f i ( r ) p_0(r)=f_0(r)+\sum_{i=1}^{N}\varepsilon^if_i(r) p0(r)=f0(r)+i=1Nεifi(r)
    p 0 ( − r ) = f 0 ( − r ) + ∑ i = 1 N ε i f i ( − r ) p_0(-r)=f_0(-r)+\sum_{i=1}^{N}\varepsilon^if_i(-r) p0(r)=f0(r)+i=1Nεifi(r)
    即,对 f 0 , ⋯   , f N f_0,\cdots,f_N f0,,fN p 0 p_0 p0做local consistency check。

详细的batched FRI框架描述见下图:
eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(1)_第4张图片
与non-batched FRI协议类似,batched FRI协议中的query阶段以及batched consistency check需重复多次,以确保该协议是可靠的。更准确来说,其soundness error见如下定理,该定理是Eli Ben-Sasson等人2020年论文Proximity gaps for reed-solomon codes 中Theorem 7.2和Theorem 8.3的非正式改编:

  • Theorem 1(Batched FRI Soundness):
    f 0 , f 1 , ⋯   , f N f_0,f_1,\cdots,f_N f0,f1,,fN为基于 H H H定义的函数,且 m m m为大于等于3的整数。假设某batched FRI Prover与某batched FRI Verifier交互,使该Verifier信服的概率大于:
    ε F R I = ε C + ε Q s = ( N ⋅ ( m + 1 2 ) 7 3 ρ 3 / 2 ⋅ ∣ H ∣ 2 ∣ K ∣ + N ⋅ ( 2 m + 1 ) ⋅ ( ∣ H ∣ + 1 ) ρ ⋅ ∑ i = 0 k − 1 a i ∣ K ∣ ) + ( ρ ( 1 + 1 2 m ) ) s \varepsilon_{FRI}=\varepsilon_{C}+\varepsilon_{Q}^s=(N\cdot\frac{(m+\frac{1}{2})^7}{3\rho^{3/2}}\cdot \frac{|H|^2}{|\mathbb{K}|}+N\cdot \frac{(2m+1)\cdot (|H|+1)}{\sqrt{\rho}}\cdot \frac{\sum_{i=0}^{k-1}a_i}{|\mathbb{K}|})+(\sqrt{\rho}(1+\frac{1}{2m}))^s εFRI=εC+εQs=(N3ρ3/2(m+21)7KH2+Nρ (2m+1)(H+1)Ki=0k1ai)+(ρ (1+2m1))s
    其中:

    • a i = ∣ H 2 i ∣ / ∣ H 2 i + 1 ∣ a_i=|H^{2^i}|/|H^{2^{i+1}}| ai=H2i∣/∣H2i+1:为commit阶段相邻Prover消息之间的ratio。【在本文中,对所有的 i i i都有 a i = 2 a_i=2 ai=2。不过有的FRI版本中,可commit阶段的某些层是可跳过的。】
    • ρ = ∣ G ∣ / ∣ H ∣ \rho=|G|/|H| ρ=G∣/∣H为code rate【即为blowup factor或expansion factor的倒数】。
    • ε C \varepsilon_C εC为commit阶段的soundness error。
    • ε Q \varepsilon_Q εQ为query阶段的soundness error。
    • s s s为query阶段重复的次数。

    则函数 f 0 , f 1 , ⋯   , f N f_0,f_1,\cdots,f_N f0,f1,,fN接近于degree小于 n n n的多项式。【上面 ε F R I \varepsilon_{FRI} εFRI公式中的 k = log ⁡ 2 ( n ) k=\log_2(n) k=log2(n)。】

在Eli Ben-Sasson等人2018年论文fast reed-solomon interactive oracle proofs of proximity中指出:

  • 若想让FRI协议达到security parameter λ \lambda λ(即 ε F R I ≤ 2 − λ \varepsilon_{FRI}\leq 2^{-\lambda} εFRI2λ),则要求query次数至少为 s ≥ λ / log ⁡ 2 ρ − 1 s\geq \lambda/\log_2{\rho^{-1}} sλ/log2ρ1
  • 根据上面的Theorem 1可知,若 ∣ K ∣ ≫ ∣ H ∣ 2 |\mathbb{K}|\gg |H|^2 KH2,则所需的query次数为 s ≈ 2 λ / log ⁡ 2 ρ − 1 s\approx 2\lambda/\log_2{\rho^{-1}} s2λ/log2ρ1

2.3.4 将FRI用作多项式承诺方案

尽管FRI有不同的设置,但可在不增加很多开销的情况下,将FRI转换为Polynomial Commitment Scheme(PCS)(具体PCS定义见[KZG10])。

多项式承诺方案基于如下claim:

  • f ∈ F [ X ] f\in\mathbb{F}[X] fF[X]为degree小于 d d d的多项式,则,当且仅当 f ( X ) − f ( z ) = ( X − z ) ⋅ q ( X ) f(X)-f(z)=(X-z)\cdot q(X) f(X)f(z)=(Xz)q(X) f ( z ) f(z) f(z) f f f在点 z z z的evaluation值,其中 q ∈ F [ X ] q\in\mathbb{F}[X] qF[X]为degree小于 d − 1 d-1 d1的某多项式。

以 Prover拥有某函数 f : H → F f:H\rightarrow \mathbb{F} f:HF,而Verifier知道 f f f的degree上限为 d d d,为前提条件,将FRI转换为多项式承诺方案,即构建FRI-based PCS的协议流程为:

  • 1)与FRI协议类似,Prover的首个消息为对 f f f的承诺值。
  • 2)Verifier均匀采样挑战点 z ∈ K ∖ H z\in\mathbb{K}\setminus H zKH,请求Prover计算并返回 f f f z z z点的evaluation值。
  • 3)Prover输出 f ( z ) f(z) f(z)的同时,还会输出一个关于:
    q ( X ) : = f ( X ) − f ( z ) X − z q(X):=\frac{f(X)-f(z)}{X-z} q(X):=Xzf(X)f(z)
    接近某degree小于 d − 1 d-1 d1多项式 的FRI proof π F R I \pi_{FRI} πFRI
  • 4)若该FRI proof验证通过,则Verifier可 以较高概率,信服Prover在第一步所承诺的多项式 f f f为degree小于 d d d的多项式,且 f ( z ) f(z) f(z) f f f z z z点的evaluation值。

在Matter Labs团队2019年论文Transparent polynomial commitment scheme with polylogarithmic communication complexity中,已证明FRI-based PCS方案满足多项式承诺方案的相关安全标准概念:

  • correctness正确性
  • polynomial binding多项式绑定性
  • evaluation binding

2.4 Vanilla STARK

本节,针对特定statement,将回顾 StarkWare团队2021年论文ethSTARK documentatio中的STARK生成流程。

2.4.1 约束和trace

以 为如下statement 生成STARK为例:

“I know some a i , b i , c i , d i , e i ∈ F a_i,b_i,c_i,d_i,e_i\in\mathbb{F} ai,bi,ci,di,eiF such that:
a i b i c i = a i + b i + c i d i 2 + 2 a i + 1 = e i (3) a_ib_ic_i=a_i+b_i+c_i\\d_i^2+2a_{i+1}=e_i \tag{3} aibici=ai+bi+cidi2+2ai+1=ei(3)
for all i ∈ [ n ] i\in[n] i[n].”

其中:

  • 向量 a , b , c , d , e ∈ F n a,b,c,d,e\in\mathbb{F}^n a,b,c,d,eFn
  • 对于 i ∈ [ n ] i\in [n] i[n] a , b , c , d , e a,b,c,d,e a,b,c,d,e中的元素表示为 a i , b i , c i , d i , e i a_i,b_i,c_i,d_i,e_i ai,bi,ci,di,ei
  • tr 1 , tr 2 , tr 3 , tr 4 , tr 5 ∈ F < n [ X ] \text{tr}_1,\text{tr}_2,\text{tr}_3,\text{tr}_4,\text{tr}_5\in\mathbb{F}_{tr1,tr2,tr3,tr4,tr5F<n[X] 来分别表示 对 a i , b i , c i , d i , e i a_i,b_i,c_i,d_i,e_i ai,bi,ci,di,ei基于domain G G G插值后的多项式。即 tr 1 ( g i ) = a i , tr 2 ( g i ) = b i , tr 3 ( g i ) = c i , tr 4 ( g i ) = d i , tr 5 ( g i ) = e i \text{tr}_1(g^i)=a_i, \text{tr}_2(g^i)=b_i, \text{tr}_3(g^i)=c_i,\text{tr}_4(g^i)=d_i,\text{tr}_5(g^i)=e_i tr1(gi)=ai,tr2(gi)=bi,tr3(gi)=ci,tr4(gi)=di,tr5(gi)=ei for i ∈ [ n ] i\in [n] i[n]
    自此,称 G G G为trace evaluation domain,称 tr 1 , tr 2 , tr 3 , tr 4 , tr 5 \text{tr}_1,\text{tr}_2,\text{tr}_3,\text{tr}_4,\text{tr}_5 tr1,tr2,tr3,tr4,tr5为 trace column 多项式。
    从而可将以上(size 为 2 n 2n 2n)的约束系统,“压缩”为,2个基于trace column多项式的多项式约束。即对于所有的 x ∈ G x\in G xG若如下多项式约束成立:
    tr 1 ( x ) ⋅ tr 2 ( x ) ⋅ tr 3 ( x ) = tr 1 ( x ) + tr 2 ( x ) + tr 3 ( x ) , tr 4 ( x ) 2 + 2 ⋅ tr 1 ( g x ) = tr 5 ( x ) , (4) \text{tr}_1(x)\cdot \text{tr}_2(x)\cdot \text{tr}_3(x)=\text{tr}_1(x)+\text{tr}_2(x)+\text{tr}_3(x),\\\text{tr}_4(x)^2+2\cdot \text{tr}_1(gx)=\text{tr}_5(x), \tag{4} tr1(x)tr2(x)tr3(x)=tr1(x)+tr2(x)+tr3(x),tr4(x)2+2tr1(gx)=tr5(x),(4)
    则原始的约束系统必须成立。Prover发送 tr 1 , tr 2 , tr 3 , tr 4 , tr 5 \text{tr}_1,\text{tr}_2,\text{tr}_3,\text{tr}_4,\text{tr}_5 tr1,tr2,tr3,tr4,tr5的承诺值给Verifier。

接下来,以 为knowledge of some polynomials tr 1 , ⋯   , tr N : G → F \text{tr}_1,\cdots,\text{tr}_N:G \rightarrow \mathbb{F} tr1,,trN:GF that satisfy a system of polynomial constraints C = { C 1 , ⋯   , C l } \mathcal{C}=\{C_1,\cdots,C_l\} C={C1,,Cl}场景,来生成STARK,其中:

  • (a) C i ∈ F [ X 1 , ⋯   , X N , X 1 ′ , ⋯   , X N ′ ] C_i\in\mathbb{F}[X_1,\cdots,X_N,X_1',\cdots,X_N'] CiF[X1,,XN,X1,,XN] for all i ∈ [ l ] i\in [l] i[l]
  • (b) 对所有的 x ∈ G x\in G xG 和所有的 i ∈ [ l ] i\in [l] i[l],有:
    C i ( tr 1 ( x ) , ⋯   , tr N ( x ) , tr 1 ( g x ) , ⋯   , tr N ( g x ) ) = 0 , (5) C_i(\text{tr}_1(x),\cdots,\text{tr}_N(x),\text{tr}_1(gx),\cdots,\text{tr}_N(gx))=0, \tag{5} Ci(tr1(x),,trN(x),tr1(gx),,trN(gx))=0,(5)
    其中每个 C i C_i Ci中的变量 X j X_j Xj 被替换为多项式 tr j ( X ) \text{tr}_j(X) trj(X),且变量 X j ′ X_j' Xj被替换为多项式 tr j ( g X ) \text{tr}_j(gX) trj(gX)

2.4.2 由多项式约束到有理函数

与每个约束 C i C_i Ci相关的有理函数为:
q i ( X ) = C i ( tr 1 ( X ) , ⋯   , tr N ( X ) , tr 1 ( g X ) , ⋯   , tr N ( g X ) ) Z G ( X ) , (6) q_i(X)=\frac{C_i(\text{tr}_1(X),\cdots,\text{tr}_N(X),\text{tr}_1(gX),\cdots,\text{tr}_N(gX))}{Z_G(X)}, \tag{6} qi(X)=ZG(X)Ci(tr1(X),,trN(X),tr1(gX),,trN(gX)),(6)
其中:

  • 由于 deg ⁡ ( tr i ) ≤ n − 1 \deg{(\text{tr}_i})\leq n-1 deg(tri)n1,因此每个 q i q_i qi多项式的degree最多为 deg ⁡ ( C i ) ⋅ ( n − 1 ) − n \deg{(C_i)}\cdot (n-1)-n deg(Ci)(n1)n,当且仅当多项式 Z G Z_G ZG可整除 C i C_i Ci(即 C i C_i Ci is satisfied over G G G)。

仍以上面例子为例,有:
q 1 ( X ) : = tr 1 ( X ) ⋅ tr 2 ( X ) ⋅ tr 3 ( X ) − tr 1 ( X ) − tr 2 ( X ) − tr 3 ( X ) Z G ( X ) q_1(X):=\frac{\text{tr}_1(X)\cdot \text{tr}_2(X)\cdot \text{tr}_3(X)-\text{tr}_1(X)- \text{tr}_2(X)- \text{tr}_3(X)}{Z_G(X)} q1(X):=ZG(X)tr1(X)tr2(X)tr3(X)tr1(X)tr2(X)tr3(X)

q 2 ( X ) : = tr 4 ( X ) 2 + 2 ⋅ tr 1 ( X ) − tr 5 ( X ) Z G ( X ) q_2(X):=\frac{\text{tr}_4(X)^2+2\cdot \text{tr}_1(X)-\text{tr}_5(X)}{Z_G(X)} q2(X):=ZG(X)tr4(X)2+2tr1(X)tr5(X)
其中:

  • deg ⁡ ( C 1 ) = 3 , deg ⁡ ( C 2 ) = 2 \deg{(C_1)}=3,\deg{(C_2)}=2 deg(C1)=3,deg(C2)=2,且 q 1 ( X ) , q 2 ( X ) q_1(X),q_2(X) q1(X),q2(X)的degree最多分别为 2 n − 3 2n-3 2n3 n − 2 n-2 n2。事实上,(4)中所表达的约束满足,当且仅当 deg ⁡ ( q 1 ) ≤ 2 n − 3 \deg{(q_1)}\leq 2n-3 deg(q1)2n3 deg ⁡ ( q 2 ) ≤ n − 2 \deg{(q_2)}\leq n-2 deg(q2)n2

2.4.3 Quotient商多项式

接下来,会将多个 q i q_i qi多项式,组合为单个多项式 Q Q Q,并将 Q Q Q称为商多项式。
ethSTARK中的STARK,为生成 Q Q Q,会将每个 q i q_i qi的degree调整为足够大的power of two。即定义 D i : = deg ⁡ ( C i ) ⋅ ( n − 1 ) − ∣ G ∣ D_i:=\deg{(C_i)}\cdot (n-1)-|G| Di:=deg(Ci)(n1)G,对于所有的 i ∈ [ l ] i\in [l] i[l],找到首个满足 D > D i D>D_i D>Di 的 power of two的 D D D值。然后计算调整版本的有理函数:
q ^ i ( X ) : = ( a i X D − D i − 1 + b i ) ⋅ q i ( X ) (7) \hat{q}_i(X):=(\mathfrak{a}_iX^{D-D_i-1}+\mathfrak{b}_i)\cdot q_i(X) \tag{7} q^i(X):=(aiXDDi1+bi)qi(X)(7)
其中对于所有的 i ∈ [ l ] i\in [l] i[l] a i , b i ∈ K \mathfrak{a}_i,\mathfrak{b}_i\in\mathbb{K} ai,biK

在本例中有 D 1 = 2 n − 3 , D 2 = n − 2 D_1=2n-3,D_2=n-2 D1=2n3,D2=n2,从而取 D = 2 n D=2n D=2n(注意 n n n 是 a power of 2 2 2),然后有:
q ^ 1 ( X ) : = ( a 1 X 2 + b 1 ) ⋅ q 1 ( X ) \hat{q}_1(X):=(\mathfrak{a}_1X^{2}+\mathfrak{b}_1)\cdot q_1(X) q^1(X):=(a1X2+b1)q1(X)

q ^ 2 ( X ) : = ( a 2 X n + 1 + b 2 ) ⋅ q 2 ( X ) \hat{q}_2(X):=(\mathfrak{a}_2X^{n+1}+\mathfrak{b}_2)\cdot q_2(X) q^2(X):=(a2Xn+1+b2)q2(X)

从而有 deg ⁡ ( q 1 ) ≤ 2 n − 3 \deg{(q_1)}\leq 2n-3 deg(q1)2n3 deg ⁡ ( q 2 ) ≤ n − 2 \deg{(q_2)}\leq n-2 deg(q2)n2,当且仅当 deg ⁡ ( q ^ 1 ) , deg ⁡ ( q ^ 2 ) < 2 n \deg{(\hat{q}_1)},\deg{(\hat{q}_2)}<2n deg(q^1),deg(q^2)<2n

已知多项式 q ^ i \hat{q}_i q^i,可计算相应的商多项式:
Q ( X ) : = ∑ i = 1 l q ^ i ( X ) = ∑ i = 1 l ( a i X D − D i − 1 + b i ) C i ( tr 1 ( X ) , ⋯   , tr N ( X ) , tr 1 ( g X ) , ⋯   , tr N ( g X ) ) Z G ( X ) , (8) Q(X):=\sum_{i=1}^{l}\hat{q}_i(X)=\sum_{i=1}^{l}(\mathfrak{a}_iX^{D-D_i-1}+\mathfrak{b}_i)\frac{C_i(\text{tr}_1(X),\cdots,\text{tr}_N(X),\text{tr}_1(gX),\cdots,\text{tr}_N(gX))}{Z_G(X)}, \tag{8} Q(X):=i=1lq^i(X)=i=1l(aiXDDi1+bi)ZG(X)Ci(tr1(X),,trN(X),tr1(gX),,trN(gX)),(8)
其满足 deg ⁡ Q < D \deg{Q}degQ<D

然后将 Q Q Q商多项式切分为 S : = D / n S:=D/n S:=D/n 个 degree小于 n n n的多项式 Q 1 , ⋯   , Q S ∈ K [ X ] Q_1,\cdots,Q_S\in\mathbb{K}[X] Q1,,QSK[X],其满足:
Q ( X ) = ∑ i = 1 S X i − 1 Q i ( X S ) (9) Q(X)=\sum_{i=1}^{S}X^{i-1}Q_i(X^S)\tag{9} Q(X)=i=1SXi1Qi(XS)(9)
注意, Q i Q_i Qi多项式,具有与trace column多项式相同的degree上限,因此可将 Q i Q_i Qi多项式称为trace quotient多项式

仍以上面的例子为例,其商多项式为 Q ( X ) : = q ^ 1 ( X ) + q ^ 2 ( X ) Q(X):=\hat{q}_1(X)+\hat{q}_2(X) Q(X):=q^1(X)+q^2(X),其满足 deg ⁡ ( Q ) < 2 n \deg{(Q)}<2n deg(Q)<2n。此时,将商多项式 Q ( X ) Q(X) Q(X)表示为2个多项式 Q 1 , Q 2 ∈ F < n [ X ] Q_1,Q_2\in\mathbb{F}_{Q1,Q2F<n[X],使得 Q ( X ) = Q 1 ( X 2 ) + X ⋅ Q 2 ( X 2 ) Q(X)=Q_1(X^2)+X\cdot Q_2(X^2) Q(X)=Q1(X2)+XQ2(X2)

2.4.4 Trace Low Degree Extension

由于商多项式 Q Q Q是基于,将evaluate的有理函数 q i q_i qi定义而来的,为确保约束(6)中的定义正确,需确保这些有理函数中的分子永远不为0。因此,从此时开始,这些多项式不再基于trace evaluation domain来evaluate了,而是基于更大的、不相交的domain来进行evaluate,将这个更大的、不相交的domain称为evaluation domain(或low degree extension domain)。

更准确来说,所引入的更大的、不相交的evaluation domain,应满足:

  • 1)比 G G G更大,从而使得trace column多项式有足够冗余度,以确保FRI协议的soundness。
  • 2)与 G G G不相交,使得以上约束(6)定义正确。

为满足这2个要求,以coset H H H作为evaluation domain,注意有 ∣ H ∣ = 2 k ⋅ n |H|=2^k\cdot n H=2kn, with k ≥ 1 k\geq 1 k1。将其中的 2 k 2^k 2k称为blowup factor。
为此,许多所有trace column多项式,基于evaluation domain重新进行evaluate,将所获得多项式evaluations值集合称为trace Low Degree Extension (LDE)

对应trace LDE的计算分为2步:

  • 1)采用Inverse Fast Fourier Transform (IFFT),计算每个trace column多项式基于trace evaluation domain的插值多项式。
  • 2)对所计算的插值多项式,运用Fast Fourier Transform (FFT),基于evaluation domain进行evaluate。

2.4.5 Trace Consistency Check

此时,Verifier可,对trace column多项式 和 trace quotient多项式 做local consistency check,即做trace consistency check
为此,当Prover对trace quotient多项式 进行承诺之后,Verifier均匀采样随机值 z z z,并请求Prover发送在 z 或 g z z或gz zgz点的所需多项式的evaluation值。

更具体来说,对于某由Verifier均匀采样的 z ∈ K ∖ ( G ∪ H ˉ ) z\in\mathbb{K}\setminus (G\cup \bar{H}) zK(GHˉ) (此时 H ˉ = { x ∈ K ∣ x S ∈ H } \bar{H}=\{x\in\mathbb{K}|x^S\in H\} Hˉ={xKxSH} ),Prover返回相应的trace column 多项式 evaluations值 tr i ( z ) , tr j ( g z ) \text{tr}_i(z),\text{tr}_j(gz) tri(z),trj(gz),以及 trace quotient多项式 evaluations 值 Q k ( z S ) Q_k(z^S) Qk(zS) for i , j ∈ N i,j\in N i,jN and k ∈ [ S ] k\in [S] k[S]。注意,所需的trace column多项式evaluations值严格依赖于(5)中所表达的特定多项式:

  • Evals ( z ) \text{Evals}(z) Evals(z):基于 z z z的多项式evaluations值集合。
  • Evals ( g z ) \text{Evals}(gz) Evals(gz):基于 g z gz gz的多项式evaluations值集合。

自然,可能存在同一多项式在2个集合中都有evaluation值。
借助这些evaluation值,Verifier可检查:
∑ i = 1 S z i − 1 Q i ( z S ) = ∑ i = 1 l ( a i z D − D i − 1 + b i ) C i ( tr 1 ( z ) , ⋯   , tr N ( z ) , tr 1 ( g z ) , ⋯   , tr N ( g z ) ) Z G ( z ) . (10) \sum_{i=1}^{S}z^{i-1}Q_i(z^S)=\sum_{i=1}^{l}(\mathfrak{a}_iz^{D-D_i-1}+\mathfrak{b}_i)\frac{C_i(\text{tr}_1(z),\cdots,\text{tr}_N(z),\text{tr}_1(gz),\cdots,\text{tr}_N(gz))}{Z_G(z)}. \tag{10} i=1Szi1Qi(zS)=i=1l(aizDDi1+bi)ZG(z)Ci(tr1(z),,trN(z),tr1(gz),,trN(gz)).(10)
本例中,Prover会发送 tr 1 ( z ) , tr 1 ( g z ) , tr 2 ( z ) , tr 3 ( z ) , tr 4 ( z ) , tr 5 ( z ) \text{tr}_1(z),\text{tr}_1(gz),\text{tr}_2(z),\text{tr}_3(z),\text{tr}_4(z),\text{tr}_5(z) tr1(z),tr1(gz),tr2(z),tr3(z),tr4(z),tr5(z)(从而有 Evals ( z ) = { tr 1 ( z ) , tr 2 ( z ) , tr 3 ( z ) , tr 4 ( z ) , tr 5 ( z ) } \text{Evals}(z)=\{\text{tr}_1(z),\text{tr}_2(z),\text{tr}_3(z),\text{tr}_4(z),\text{tr}_5(z)\} Evals(z)={tr1(z),tr2(z),tr3(z),tr4(z),tr5(z)} Evals ( g z ) = { tr 1 ( g z ) } \text{Evals}(gz)=\{\text{tr}_1(gz)\} Evals(gz)={tr1(gz)}),以及 Q 1 ( z 2 ) , Q 2 ( z 2 ) Q_1(z^2),Q_2(z^2) Q1(z2),Q2(z2),然后Verifier可检查:
Q 1 ( z 2 ) + z ⋅ Q 2 ( z 2 ) = ( a 1 z 2 + b 1 ) ⋅ tr 1 ( z ) ⋅ tr 2 ( z ) ⋅ tr 3 ( z ) − tr 1 ( z ) − tr 2 ( z ) − tr 3 ( z ) Z G ( z ) + ( a 2 z n + 1 + b 2 ) ⋅ tr 4 ( z ) 2 + 2 ⋅ tr 1 ( z ) − tr 5 ( z ) Z G ( z ) . (11) Q_1(z^2)+z\cdot Q_2(z^2)=(\mathfrak{a}_1z^{2}+\mathfrak{b}_1)\cdot\frac{\text{tr}_1(z)\cdot \text{tr}_2(z)\cdot \text{tr}_3(z)-\text{tr}_1(z)- \text{tr}_2(z)- \text{tr}_3(z)}{Z_G(z)} \\+(\mathfrak{a}_2z^{n+1}+\mathfrak{b}_2)\cdot \frac{\text{tr}_4(z)^2+2\cdot \text{tr}_1(z)-\text{tr}_5(z)}{Z_G(z)}. \tag{11} Q1(z2)+zQ2(z2)=(a1z2+b1)ZG(z)tr1(z)tr2(z)tr3(z)tr1(z)tr2(z)tr3(z)+(a2zn+1+b2)ZG(z)tr4(z)2+2tr1(z)tr5(z).(11)
现在的问题是,Verifier无法确定其所收到的值,确实为之前所承诺多项式的evaluation值。因为,很容易从 K \mathbb{K} K中获取满足(10)方程式,而又不是源自所期望多项式的值。
为此,在Prover将这些evaluation值发送给Verifier之后,Prover和Verifier需运行某(FRI)协议,以确保所发送的evaluation值,确实为相应多项式的实际evaluation值。

2.4.6 FRI多项式

为确保Prover发送给Verifier值的有效性,Prover需继续创建另一组约束,然后将这组约束转换为某low-degree testing问题,最后,通过使用随机域元素将其组合。最终Prover计算的 F F F多项式为:
F ( X ) : = ∑ i ∈ I 1 ε i ( 1 ) ⋅ tr i ( X ) − tr i ( z ) X − z + ∑ i ∈ I 2 ε i ( 2 ) ⋅ tr i ( X ) − tr i ( g z ) X − g z + ∑ i = 1 S ε i ( 3 ) ⋅ Q i ( X ) − Q i ( z S ) X − z S , (12) F(X):=\sum_{i\in I_1}\varepsilon_i^{(1)}\cdot \frac{\text{tr}_i(X)-\text{tr}_i(z)}{X-z}+\sum_{i\in I_2}\varepsilon_i^{(2)}\cdot \frac{\text{tr}_i(X)-\text{tr}_i(gz)}{X-gz}\\+\sum_{i=1}^{S}\varepsilon_i^{(3)}\cdot \frac{Q_i(X)-Q_i(z^S)}{X-z^S}, \tag{12} F(X):=iI1εi(1)Xztri(X)tri(z)+iI2εi(2)Xgztri(X)tri(gz)+i=1Sεi(3)XzSQi(X)Qi(zS),(12)
其中: I 1 = { i ∈ [ N ] : tr i ( z ) ∈ Evals ( z ) } , I 2 = { i ∈ [ N ] : tr i ( g z ) ∈ Evals ( g z ) } I_1=\{i\in [N]: \text{tr}_i(z)\in\text{Evals}(z)\},I_2=\{i\in [N]: \text{tr}_i(gz)\in\text{Evals}(gz)\} I1={i[N]:tri(z)Evals(z)},I2={i[N]:tri(gz)Evals(gz)} ε i ( 1 ) , ε j ( 2 ) , ε k ( 3 ) ∈ K \varepsilon_i^{(1)},\varepsilon_j^{(2)},\varepsilon_k^{(3)}\in \mathbb{K} εi(1),εj(2),εk(3)K for all i ∈ I 1 , j ∈ I 2 , k ∈ [ S ] i\in I_1, j\in I_2, k\in [S] iI1,jI2,k[S]

所获得的 F F F多项式的degree 小于 n − 1 n-1 n1,当且仅当:

  • 1)trace column多项式 tr i \text{tr}_i tri 和 trace quotient 多项式 Q i Q_i Qi的degree均小于 n n n
  • 2)之前步骤中,Prover所发送的所有值,均为相应多项式的evaluation值。

以上面的例子为例,Prover所计算的 F F F多项式为:
F ( X ) : = ε 1 ( 1 ) ⋅ tr 1 ( X ) − tr 1 ( z ) X − z + ε 2 ( 1 ) ⋅ tr 2 ( X ) − tr 2 ( z ) X − z + ε 3 ( 1 ) ⋅ tr 3 ( X ) − tr 3 ( z ) X − z + ε 4 ( 1 ) ⋅ tr 4 ( X ) − tr 4 ( z ) X − z + ε 5 ( 1 ) ⋅ tr 5 ( X ) − tr 5 ( z ) X − z + ε 1 ( 2 ) ⋅ tr 1 ( X ) − tr 1 ( g z ) X − g z + ε 1 ( 3 ) ⋅ Q 1 ( X ) − Q 1 ( z 2 ) X − z 2 + ε 2 ( 3 ) ⋅ Q 2 ( X ) − Q 2 ( z 2 ) X − z 2 . F(X):=\varepsilon_1^{(1)}\cdot \frac{\text{tr}_1(X)-\text{tr}_1(z)}{X-z}+\varepsilon_2^{(1)}\cdot \frac{\text{tr}_2(X)-\text{tr}_2(z)}{X-z}+\varepsilon_3^{(1)}\cdot \frac{\text{tr}_3(X)-\text{tr}_3(z)}{X-z}\\+\varepsilon_4^{(1)}\cdot \frac{\text{tr}_4(X)-\text{tr}_4(z)}{X-z}+\varepsilon_5^{(1)}\cdot \frac{\text{tr}_5(X)-\text{tr}_5(z)}{X-z}+\varepsilon_1^{(2)}\cdot \frac{\text{tr}_1(X)-\text{tr}_1(gz)}{X-gz}\\+\varepsilon_1^{(3)}\cdot \frac{Q_1(X)-Q_1(z^2)}{X-z^2}+\varepsilon_2^{(3)}\cdot \frac{Q_2(X)-Q_2(z^2)}{X-z^2}. F(X):=ε1(1)Xztr1(X)tr1(z)+ε2(1)Xztr2(X)tr2(z)+ε3(1)Xztr3(X)tr3(z)+ε4(1)Xztr4(X)tr4(z)+ε5(1)Xztr5(X)tr5(z)+ε1(2)Xgztr1(X)tr1(gz)+ε1(3)Xz2Q1(X)Q1(z2)+ε2(3)Xz2Q2(X)Q2(z2).

2.4.7 Proof Verification

为验证该STARK,Verifier需做如下验证:

  • a)Trace consistency check:通过这些多项式在 z , g z z,gz z,gz z S z^S zS处的evaluation值,检查 trace quotient 多项式 Q 1 , ⋯   , Q S Q_1,\cdots, Q_S Q1,,QS 与trace column 多项式 tr 1 , ⋯   , tr N \text{tr}_1,\cdots,\text{tr}_N tr1,,trN 之间一致。即,Verifier检查方程式(10)成立。
  • b)Batched FRI verification:Verifier基于多项式 F F F运行 batched FRI verification流程。

无论以上a)和b)哪个失败,Verifier都将中断并拒绝。否则,Verifier接受。
完整的Vanilla STARK协议描述见附录A,总体交互流程见下图:
eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(1)_第5张图片

2.4.8 Soundness

最终回顾下ethSTARK 的Theorem 4中vanilla STARK协议的soundness error。注意 ρ = ∣ G ∣ / ∣ H ∣ \rho=|G|/|H| ρ=G∣/∣H为code rate。

Theorem 2 (Soundness):

  • 固定整数 m ≥ 3 m\geq 3 m3。vanilla STARK协议中,假设Prover与Verifier交互,使Verifier接受的概率大于如下概率的2倍:
    ε S T A R K : = l ( 1 ∣ K ∣ + ( D + ∣ G ∣ + S ) ⋅ l ∣ K ∣ − S ∣ H ∣ − ∣ G ∣ ) + ε F R I (13) \varepsilon_{STARK}:=l(\frac{1}{|\mathbb{K}|}+\frac{(D+|G|+S)\cdot l}{|\mathbb{K}|-S|H|-|G|})+\varepsilon_{FRI} \tag{13} εSTARK:=l(K1+KSHG(D+G+S)l)+εFRI(13)
    则方程式(5)将满足(即,原始statement为true)。
    其中:
    • l = m / ρ l=m/\rho l=m/ρ
    • ε F R I \varepsilon_{FRI} εFRI在Theorem 1中定义。

接下来将展示该soundness error上限的直觉:

  • 方程式(13)中的第一项,对应为,对dishonest Prover来说,集合 { a 1 , b 1 , ⋯   , a T , b T } \{\mathfrak{a}_1,\mathfrak{b}_1,\cdots,\mathfrak{a}_T,\mathfrak{b}_T\} {a1,b1,,aT,bT}是“good”的概率。
    即意味着所有的 a i , b i \mathfrak{a}_i,\mathfrak{b}_i ai,bi都是均匀独立随机采样的,然后商多项式 Q Q Q为多项式的概率最多为 l / ∣ K ∣ l/|\mathbb{K}| l/∣K
  • 方程式(13)中的第二项,对应为,采样某 z ∈ K ∖ ( G ∪ H ˉ ) z\in\mathbb{K}\setminus(G\cup\bar{H}) zK(GHˉ),使得FRI协议通过的概率大于 ε F R I \varepsilon_{FRI} εFRI 的概率。

参考资料

[1] Polygon zkEVM技术文档 eSTARK: Extending the STARK Protocol with Arguments v.1.2

附录:Polygon Hermez 2.0 zkEVM系列博客

  • ZK-Rollups工作原理
  • Polygon zkEVM——Hermez 2.0简介
  • Polygon zkEVM网络节点
  • Polygon zkEVM 基本概念
  • Polygon zkEVM Prover
  • Polygon zkEVM工具——PIL和CIRCOM
  • Polygon zkEVM节点代码解析
  • Polygon zkEVM的pil-stark Fibonacci状态机初体验
  • Polygon zkEVM的pil-stark Fibonacci状态机代码解析
  • Polygon zkEVM PIL编译器——pilcom 代码解析
  • Polygon zkEVM Arithmetic状态机
  • Polygon zkEVM中的常量多项式
  • Polygon zkEVM Binary状态机
  • Polygon zkEVM Memory状态机
  • Polygon zkEVM Memory Align状态机
  • Polygon zkEVM zkASM编译器——zkasmcom
  • Polygon zkEVM哈希状态机——Keccak-256和Poseidon
  • Polygon zkEVM zkASM语法
  • Polygon zkEVM可验证计算简单状态机示例
  • Polygon zkEVM zkASM 与 以太坊虚拟机opcode 对应集合
  • Polygon zkEVM zkROM代码解析(1)
  • Polygon zkEVM zkASM中的函数集合
  • Polygon zkEVM zkROM代码解析(2)
  • Polygon zkEVM zkROM代码解析(3)
  • Polygon zkEVM公式梳理
  • Polygon zkEVM中的Merkle tree
  • Polygon zkEVM中Goldilocks域元素circom约束
  • Polygon zkEVM Merkle tree的circom约束
  • Polygon zkEVM FFT和多项式evaluate计算的circom约束
  • Polygon zkEVM R1CS与Plonk电路转换
  • Polygon zkEVM中的子约束系统
  • Polygon zkEVM交易解析
  • Polygon zkEVM 审计及递归证明
  • Polygon zkEVM发布公开测试网2.0
  • Polygon zkEVM测试集——创建合约交易
  • Polygon zkEVM中的Recursive STARKs
  • Polygon zkEVM的gas定价
  • Polygon zkEVM zkProver基本设计原则 以及 Storage状态机
  • Polygon zkEVM bridge技术文档
  • Polygon zkEVM Trustless L2 State Management 技术文档
  • Polygon zkEVM中的自定义errors
  • Polygon zkEVM RPC服务
  • Polygon zkEVM Prover的 RPC功能
  • Polygon zkEVM PIL技术文档
  • Polygon zkEVM递归证明技术文档(1)【主要描述了相关工具 和 证明的组合、递归以及聚合】
  • Polygon zkEVM递归证明技术文档(2)—— Polygon zkEVM架构设计
  • Polygon zkEVM递归证明技术文档(3)——代码编译及运行
  • Polygon zkEVM递归证明技术文档(4)—— C12 PIL Description
  • Polygon zkEVM递归证明技术文档(5)——附录:借助SNARKjs和PIL-STARK实现proof composition

你可能感兴趣的:(零知识证明,零知识证明)