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}] Ci∈F[X1,⋯,X2M]。
- 其思想为,将
f
f
f表示为一组单变量多项式
p
1
,
⋯
,
p
2
M
∈
F
[
X
]
p_1,\cdots,p_{2M}\in\mathbb{F}[X]
p1,⋯,p2M∈F[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∣(p−1)的最大非负整数值。
- K \mathbb{K} K:为 F \mathbb{F} F有限域的扩域,其size为 p e p^e pe,其中 e ≥ 2 e\geq 2 e≥2。
- 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}_{<d}[X] F<d[X] (resp. K < d [ X ] \mathbb{K}_{<d}[X] 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 n∣2k 且 1 < n < 2 k 1<n<2^k 1<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 m∣2k 且 n < m n<m n<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] Li∈F<∣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]=X∣S∣−1∈F[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,⋯,pN∈K[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,⋯,xN∈K:
-
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)。
- 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值,有:
- 若如下条件成立,则称该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)。
- Knowledge Soundness:存在某probabilistic polynomial-time算法
ε
\large\varepsilon
ε(又名knowledge extractor),使得对协议之初每个
x
x
x,以及每个Prover
P
∗
\mathcal{P}^*
P∗所发送的
y
y
y值,有:
换句话说:
- 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:H→F接近于某low degree d d d多项式。
- 此处的low degree,是指 d ≪ ∣ H ∣ d\ll |H| d≪∣H∣。
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:H2→K,且三者满足如下关系:
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)+X⋅g0,2(X2)(1) - 2)Verifier发送某均匀采样的
v
0
∈
K
v_0\in\mathbb{K}
v0∈K给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)+v0⋅g0,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:x∈H}的,其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:H2→K,然后根据Verifier发来的均匀采样值
v
1
∈
K
v_1\in\mathbb{K}
v1∈K,构建多项式
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:x∈H2}(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。
2.3.2 FRI的query阶段
在FRI的query阶段:
- 1)Verifier发送均匀采样的 r ∈ H r\in H r∈H给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)+r⋅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)−r⋅g0,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)+v0⋅g0,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}
pk−1查询计算而来的值,是否一致。
为确保正确性,Prover在提供evaluation值的同时,必须同时(通过Merkle tree paths)发送"这些evaluation值存在的claim"。
通过以上流程,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框架描述见下图:
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:H→F接近于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=1∑Nε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} εi∈K,而不是单个随机值 ε \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
r和−r点的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框架描述见下图:
与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=(N⋅3ρ3/2(m+21)7⋅∣K∣∣H∣2+N⋅ρ(2m+1)⋅(∣H∣+1)⋅∣K∣∑i=0k−1ai)+(ρ(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} εFRI≤2−λ),则要求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 ∣K∣≫∣H∣2,则所需的query次数为 s ≈ 2 λ / log 2 ρ − 1 s\approx 2\lambda/\log_2{\rho^{-1}} s≈2λ/log2ρ−1。
2.3.4 将FRI用作多项式承诺方案
尽管FRI有不同的设置,但可在不增加很多开销的情况下,将FRI转换为Polynomial Commitment Scheme(PCS)(具体PCS定义见[KZG10])。
多项式承诺方案基于如下claim:
- 若 f ∈ F [ X ] f\in\mathbb{F}[X] f∈F[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)=(X−z)⋅q(X), f ( z ) f(z) f(z)为 f f f在点 z z z的evaluation值,其中 q ∈ F [ X ] q\in\mathbb{F}[X] q∈F[X]为degree小于 d − 1 d-1 d−1的某多项式。
以 Prover拥有某函数 f : H → F f:H\rightarrow \mathbb{F} f:H→F,而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 z∈K∖H,请求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):=X−zf(X)−f(z)
接近某degree小于 d − 1 d-1 d−1多项式 的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,ei∈F 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,e∈Fn
- 对于 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}_{<n}[X]
tr1,tr2,tr3,tr4,tr5∈F<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 x∈G若如下多项式约束成立:
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+2⋅tr1(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:G→F 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'] Ci∈F[X1,⋯,XN,X1′,⋯,XN′] for all i ∈ [ l ] i\in [l] i∈[l]。
- (b) 对所有的
x
∈
G
x\in G
x∈G 和所有的
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)≤n−1,因此每个 q i q_i qi多项式的degree最多为 deg ( C i ) ⋅ ( n − 1 ) − n \deg{(C_i)}\cdot (n-1)-n deg(Ci)⋅(n−1)−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+2⋅tr1(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 2n−3 和 n − 2 n-2 n−2。事实上,(4)中所表达的约束满足,当且仅当 deg ( q 1 ) ≤ 2 n − 3 \deg{(q_1)}\leq 2n-3 deg(q1)≤2n−3 且 deg ( q 2 ) ≤ n − 2 \deg{(q_2)}\leq n-2 deg(q2)≤n−2。
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)⋅(n−1)−∣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):=(aiXD−Di−1+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,bi∈K。
在本例中有
D
1
=
2
n
−
3
,
D
2
=
n
−
2
D_1=2n-3,D_2=n-2
D1=2n−3,D2=n−2,从而取
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)≤2n−3 且 deg ( q 2 ) ≤ n − 2 \deg{(q_2)}\leq n-2 deg(q2)≤n−2,当且仅当 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=1∑lq^i(X)=i=1∑l(aiXD−Di−1+bi)ZG(X)Ci(tr1(X),⋯,trN(X),tr1(gX),⋯,trN(gX)),(8)
其满足
deg
Q
<
D
\deg{Q}<D
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,⋯,QS∈K[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=1∑SXi−1Qi(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}_{<n}[X] Q1,Q2∈F<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)+X⋅Q2(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∣=2k⋅n, with
k
≥
1
k\geq 1
k≥1。将其中的
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
z或gz点的所需多项式的evaluation值。
更具体来说,对于某由Verifier均匀采样的 z ∈ K ∖ ( G ∪ H ˉ ) z\in\mathbb{K}\setminus (G\cup \bar{H}) z∈K∖(G∪Hˉ) (此时 H ˉ = { x ∈ K ∣ x S ∈ H } \bar{H}=\{x\in\mathbb{K}|x^S\in H\} Hˉ={x∈K∣xS∈H} ),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,j∈N 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=1∑Szi−1Qi(zS)=i=1∑l(aizD−Di−1+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)+z⋅Q2(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+2⋅tr1(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):=i∈I1∑εi(1)⋅X−ztri(X)−tri(z)+i∈I2∑εi(2)⋅X−gztri(X)−tri(gz)+i=1∑Sεi(3)⋅X−zSQi(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]
i∈I1,j∈I2,k∈[S],
所获得的 F F F多项式的degree 小于 n − 1 n-1 n−1,当且仅当:
- 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)⋅X−ztr1(X)−tr1(z)+ε2(1)⋅X−ztr2(X)−tr2(z)+ε3(1)⋅X−ztr3(X)−tr3(z)+ε4(1)⋅X−ztr4(X)−tr4(z)+ε5(1)⋅X−ztr5(X)−tr5(z)+ε1(2)⋅X−gztr1(X)−tr1(gz)+ε1(3)⋅X−z2Q1(X)−Q1(z2)+ε2(3)⋅X−z2Q2(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,总体交互流程见下图:
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
m≥3。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(∣K∣1+∣K∣−S∣H∣−∣G∣(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}) z∈K∖(G∪Hˉ),使得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