揭秘Circle STARKs——含解读

1. 引言

近2年来,STARK协议设计的最重要趋势是转向了小域。详情可参看:STARKs with small finite field:小域带来的迷人性能

  • 最早的STARK生产级实现,采用的是256-bit域大数模运算,如stone 所使用的有限域为 p = 2 251 + 17 ⋅ 2 192 + 1 = 0 x 800000000000011000000000000000000000000000000000000000000000001 = 3618502788666131213697322783095070105623107215331596699973092056135872020481 p=2^{251}+17\cdot 2^{192}+1=0x800000000000011000000000000000000000000000000000000000000000001\\=3618502788666131213697322783095070105623107215331596699973092056135872020481 p=2251+172192+1=0x800000000000011000000000000000000000000000000000000000000000001=3618502788666131213697322783095070105623107215331596699973092056135872020481
    这种基于256-bit大有限域的协议:
    • 可很自然地与“基于椭圆前序的签名验证” 相兼容,也更易于推理理解。
    • 但会导致地笑笑:大多数情况下实际没有好办法来利用这些更大的数字,因此,最终导致的是空间的浪费,甚至是计算的浪费——根据Karatsuba algorithm,若基于4倍大的数字做乘法运算,其所需的计算时长需增加约9倍。
  • 为此,STARKs开始转向小域:
    • Plonky2中引入的Goldilocks域: p = 2 64 − 2 32 + 1 p=2^{64}-2^{32}+1 p=264232+1
    • Risc Zero中引入的BabyBear域: p = 2 31 − 1 p=2^{31}-1 p=2311。目前主要用于RISC0 zkVM中。
    • Plonky3中引入的Mersenne31域: p = 2 31 − 2 27 + 1 = 15 ∗ 2 27 + 1 p=2^{31}-2^{27}+1=15*2^{27}+1 p=231227+1=15227+1。目前主要用于Starknet stwo、Polygon zkEVM以及Polygon Miden、Succinct SP1 zkVM等项目中。

切向了小域的STARK协议,其证明速度得到了大幅提升,如:

本文将介绍:

  • 采用小域背后的技术原理?
  • 如何基于小域来构建,因安全性要求通常需要大数的密码学证明?
  • 基于小域构建的STARK协议,与,Binius等更奇特的结构相比如何?更多Binius信息可参看Irreducible团队2023年11月20日博客:Binius: a Hardware-Optimized SNARK
  • 重点关注一种名为Circle STARKs的构造——具有一些独特的属性,旨在与高效的Mersenne31域兼容。

相关Circle STARKs开源代码实现有:

Circle STARKs与常规STARKs的主要区别在于:

  • 1)小域及其扩域( p = 2 31 − 1 p=2^{31}-1 p=2311) vs. 256-bit域
  • 2)circle group vs. 常规乘法子群
  • 3)Circle FRI vs. 常规FRI
  • 4)Circle FFT vs. 常规FFT
  • 5)Quotienting求商:添加dumy点的 ( a x + b y + c ) (ax+by+c) (ax+by+c) vs. ( X − x ) (X-x) (Xx)
  • 6)vanishing多项式: Z n + 1 ( x , y ) = ( 2 ∗ Z n ( x , y ) 2 ) − 1 Z_{n+1}(x,y)=(2*Z_n(x,y)^2)-1 Zn+1(x,y)=(2Zn(x,y)2)1【其中 Z 1 ( x , y ) = y Z_1(x,y)=y Z1(x,y)=y Z 2 ( x , y ) = x Z_2(x,y)=x Z2(x,y)=x。】 vs. x n − 1 x^n-1 xn1【本质上有 x n − 1 = ( x − 1 ) ⋅ ( x − w ) ⋅ ( x − w 2 ) ⋯ ( x − w n − 1 ) x^n-1=(x-1)\cdot(x-w)\cdot (x-w^2)\cdots (x-w^{n-1}) xn1=(x1)(xw)(xw2)(xwn1),其中 w n = 1 w^n=1 wn=1 { 1 , w , w 2 , ⋯   , w n − 1 } \{1,w,w^2,\cdots,w^{n-1}\} {1,w,w2,,wn1}为原始evaluation domain。】
  • 7)多项式evaluations排布:“folded reverse bit order” vs. “reverse bit order”
  • 8)效率(计算表达所占空间): 2 31 2^{31} 231-bit vs. 2 256 2^{256} 2256-bit 【通常 N N N-step计算中所用数值均 < N <N <N,且实际有 N < = 2 25 N<=2^{25} N<=225
维度常规STARKsCircle STARKs
256-bit域小域及其扩域( p = 2 31 − 1 p=2^{31}-1 p=2311
group常规乘法子群circle group
FRI常规FRICircle FRI
FFT常规FFTCircle FFT
Quotienting求商 ( X − x ) (X-x) (Xx)添加dumy点的 ( a x + b y + c ) (ax+by+c) (ax+by+c)
vanishing多项式 x n − 1 x^n-1 xn1【本质上有 x n − 1 = ( x − 1 ) ⋅ ( x − w ) ⋅ ( x − w 2 ) ⋯ ( x − w n − 1 ) x^n-1=(x-1)\cdot(x-w)\cdot (x-w^2)\cdots (x-w^{n-1}) xn1=(x1)(xw)(xw2)(xwn1),其中 w n = 1 w^n=1 wn=1 { 1 , w , w 2 , ⋯   , w n − 1 } \{1,w,w^2,\cdots,w^{n-1}\} {1,w,w2,,wn1}为原始evaluation domain。】 Z n + 1 ( x , y ) = ( 2 ∗ Z n ( x , y ) 2 ) − 1 Z_{n+1}(x,y)=(2*Z_n(x,y)^2)-1 Zn+1(x,y)=(2Zn(x,y)2)1【其中 Z 1 ( x , y ) = y Z_1(x,y)=y Z1(x,y)=y Z 2 ( x , y ) = x Z_2(x,y)=x Z2(x,y)=x。】
多项式evaluations排布“reverse bit order”“folded reverse bit order”
效率(计算表达所占空间) 2 256 2^{256} 2256-bit 【通常 N N N-step计算中所用数值均 < N <N <N,且实际有 N < = 2 25 N<=2^{25} N<=225 2 31 2^{31} 231-bit

2. 小域的常见问题

当在生成hash-based proofs(或任意类型proof)时,最重要的“tricks”之一就是:

  • 将证明,每个被承诺为随机点的多项式的evluations,来代替证明知道这些底层多项式。

如,假设某证明系统要求:

  • 为某多项式 A A A生成一个承诺值,该多项式 A A A必须满足,zkSNARK协议中常证明的claim类型—— A ( x ) + x − A ( w ∗ x ) = x N A(x)+x-A(w*x)=x^N A(x)+xA(wx)=xN

则该协议将要求:

  • 1)step 1:选择随机坐标 r r r,并证明 A ( r ) + r − A ( w ∗ r ) = r N A(r)+r-A(w*r)=r^N A(r)+rA(wr)=rN
  • 2)step 2:为证明 A ( r ) = c A(r)=c A(r)=c,转为证明 Q = A − c X − r Q=\frac{A-c}{X-r} Q=XrAc为一个多项式,而不是一个分数表达式。

若提前知道了 r r r,则可在该协议中作弊:

  • 1)对于step 1:可设置 A ( r ) A(r) A(r)值为0,改造 A ( w ∗ r ) A(w*r) A(wr)满足 A ( r ) + r − A ( w ∗ r ) = r N A(r)+r-A(w*r)=r^N A(r)+rA(wr)=rN方程式,然后令 A A A为穿过 r , w ∗ r r, w*r r,wr 这2个点的直线。
  • 2)对于step 2:可生成任意的 Q Q Q,然后改造 A A A(甚至 A A A可为某分数表达式或其它非多项式表达式),来匹配满足“ Q = A − c X − r Q=\frac{A-c}{X-r} Q=XrAc为一个多项式,而不是一个分数表达式”。

为防止这类攻击:

  • 要求在攻击者提供了 A A A之后,才选择随机值 r r r
  • 有必要从足够大的集合内随机选择 r r r,使得攻击者无法猜测出所选 r 值 r值 r

在基于椭圆曲线的协议,以及2019年代的STARKs协议,对应都为:

  • 所有计算都是基于256-bit数字的,因此选择的 r r r只为256-bit 随机数字,这样问题不大。

但当切换为更小域的STARKs构造时,就存在如下问题:

  • 从中随机选择 r r r的集合不够大——只有约20一个可能值,当攻击者想要为伪造proof时,仅需尝试20亿次——对于有决心的攻击者来说,这是相当可行的。

为此,针对基于小域的STARKs协议,有2种解决办法:

  • 1)做多次random checks
  • 2)扩域:更高效

2.1 解决方案一:做多次random checks

从直觉上看,做多次random checks,看起来更简单且有吸引力:

  • 不对单个坐标 r r r进行检查,而是对4个随机坐标做重复检查。

这在理论上是可行的,但存在效率问题:

  • 若处理的为基于size为 p p p域的,degree < N <N <N的多项式,则攻击者实际可伪造在 N N N个位置“look good”的bad多项式。
    这样攻击者破解一轮该协议的概率为 N p \frac{N}{p} pN
    • 如若 p = 2 31 − 1 , N = 2 24 p=2^{31}-1, N=2^{24} p=2311,N=224,则意味着每轮仅可获得7-bit安全性,为此,需要的就不是4轮random check了,而需要约18轮 random check,才能抵御类似的攻击。
    • 理想情况下,可再重复 k k k次,而仅从安全级别中减去一次 N N N值。(???)

2.2 解决方案二:扩域(更高效)

扩域与复数很像,只不过是基于有限域的:

  • 假设存在一个新值 i i i,满足 i 2 = − 1 i^2=-1 i2=1,则:
    • 乘法运算 ( a + b i ) ∗ ( c + d i ) = ( a c − b d ) + ( a d + b c ) i (a+bi)*(c+di)=(ac-bd)+(ad+bc)i (a+bi)(c+di)=(acbd)+(ad+bc)i
  • 这样就可以基于 ( a , b ) (a,b) (a,b) pairs,而不仅是单个数字来做操作。

假设基于类似Mersenne或BabyBear这样的size约为 2 31 2^{31} 231的域:

  • 基于其复数扩域,可从约 2 62 2^{62} 262个值集合中来随机选择 r r r

可再次运用相同技术,不用 i i i而是重新定义一个不同的新值 w w w

  • 如对于Mersenne31,取 w w w满足 w 2 = − 2 i − 1 w^2=-2i-1 w2=2i1
  • 对应乘法 ( a + b i + c w + d i w ) ∗ ( e + f i + g w + h i w ) = (a+bi+cw+diw)*(e+fi+gw+hiw)= (a+bi+cw+diw)(e+fi+gw+hiw)=为:
    在这里插入图片描述

注意,以上代码实现未优化,但展示了基本原则,可使用Karatsuba algorithm算法进一步优化。

这样重复一次后:

  • 就可实现从约 2 124 2^{124} 2124个值集合中来随机选择 r r r

这样就足以满足所需的安全性:

  • 若处理degree < 2 20 <2^{20} <220的多项式,则每轮可获得104-bit 安全性。
  • 若想变得多疑,并达到更广泛接受的128-bit 安全级别,可在协议中添加一些proof of work(即eth-stark论文中的grinding技术)。

( a + b i + c w + d i w ) (a+bi+cw+diw) (a+bi+cw+diw)二次复数扩域,实际上仅用于:

  • 1)FRI协议中
  • 2)以及其他需要随机线性组合的情况。

而大量的数学运算:

  • 是仅基于“base field”来操作的。所谓base field,即 p = 2 31 − 1 p=2^{31}-1 p=2311 p = 15 ∗ 2 27 + 1 p=15*2^{27}+1 p=15227+1之类的。
  • 且,几乎所有的被哈希数据,都是基于base field的。——即每个被哈希的值仅为4字节。

这样,就:

  • 既能受益于小域的效率,
  • 又能在需要时出于安全考虑进入更大的域。

3. 常规FRI协议

当构建SNARK或STARK时,第一步通常是:

  • 算术化:将任意计算问题,reduce为,一个方程式——其某些变量和系数为多项式。

算术化后的方程式通常如:
C ( T ( x ) , T ( n e x t ( x ) ) ) = Z ( x ) ∗ H ( x ) C(T(x),T(next(x)))=Z(x)*H(x) C(T(x),T(next(x)))=Z(x)H(x)
其中:

  • C , n e x t , Z C, next, Z C,next,Z是公开已知的, T T T H H H是需prover提供的。

一旦有类似这样的方程式,对该方程式的解,即对应为对其底层计算问题的解。

prover为证明其知道该方程式的解,需证明:

  • 其提供的值为real polynomials,而不是分数,或在某处看起来像某多项式而在另一处看起来是另一不同多项式 的数据集,
  • 且,这些多项式具有特定的最大degree。

为此,需迭代地应用随机线性组合技巧:

  • 假设prover已知某多项式 A A A的evaluations,且想要证明该多项式的degree 为 < 2 20 <2^{20} <220
  • 针对2个多项式: B ( x 2 ) = A ( x ) + A ( − x ) 2 B(x^2)=\frac{A(x)+A(-x)}{2} B(x2)=2A(x)+A(x) C ( x 2 ) = A ( x ) − A ( − x ) x C(x^2)=\frac{A(x)-A(-x)}{x} C(x2)=xA(x)A(x)
  • D D D为随机线性组合多项式 B + r C B+rC B+rC

本质上:

  • B B B过滤掉了 A A A的奇数项系数,即只包含了偶数项系数。
  • C C C过滤掉了 A A A的偶数项系数,即只包含了奇数项系数。

若已知多项式 B , C B,C B,C,则可恢复出多项式 A A A,因为有:

  • A ( x ) = B ( x 2 ) + x C ( x 2 ) A(x)=B(x^2)+xC(x^2) A(x)=B(x2)+xC(x2)

且若 A A A真的具有degree < 2 20 <2^{20} <220,则有:

  • 1) B 和 C B和C BC的degree < 2 19 <2^{19} <219
  • 2)且 B 和 C B和C BC的随机线性组合 D D D,也必须满足degree < 2 19 <2^{19} <219

这样,就将:

  • “prove degree < 2 20 <2^{20} <220” 问题,reduce为了,“prove degree < 2 19 <2^{19} <219” 问题。

重复以上流程20次,本质对应的即为名为“FRI”技术(详情见2018年论文Fast Reed-Solomon Interactive Oracle Proofs of Proximity)。

若有人试图在FRI协议中插入一个degree 不是 < 2 20 <2^{20} <220的多项式,则:

  • 第二轮输出将为:degree不是 < 2 19 <2^{19} <219的多项式(概率高达 ≈ 1 − 1 2 124 \approx 1-\frac{1}{2^{124}} 121241
  • 第三轮输出将为:degree不是 < 2 18 <2^{18} <218的多项式
  • ……
  • 最终,final check将失败。

对于,在大多数位置 与某degree < 2 20 <2^{20} <220多项式相等的某数据集,其有一定概率能通过以上FRI流程,但为构建类似的数据集,需要知道对应底层的多项式,因此,即使是这样一个有轻微缺陷的proof,也是一个令人信服的argument,prover如果愿意,也可以生成“real” proof。证明其适用于所有可能的输入还有更多的技术复杂性;在过去的五年里,理解这一细节一直是STARK学术研究的主要焦点。

具体为,在每一轮中:

  • 1)将degree减半(即除以2):为FRI协议可行的关键。
  • 2)同时也将domian(所对应的点集合size)减半(即除以2):即让FRI协议高效的关键:每一轮的点集size都比前一轮减半,总开销为 O ( N ) O(N) O(N)而不是 O ( N ∗ log ⁡ ( N ) ) O(N*\log(N)) O(Nlog(N))

为实现domain减半,需要two-to-one映射:

  • { x , − x } → x 2 \{x,-x\}\rightarrow x^2 {x,x}x2

该映射的优点在于其是可重复的, 如对于某乘法子群(即 { 1 , w , w 2 , ⋯   , w n − 1 } \{1,w,w^2,\cdots,w^{n-1}\} {1,w,w2,,wn1}集合):

  • 1)具有属性:对于任意的 x x x,若 x x x在该集合内,则 − x -x x也在该集合内,因为 x = w k , − x = w k ± n 2 x=w^k,-x=w^{k\pm \frac{n}{2}} x=wk,x=wk±2n
  • 2)若对该集合内每个元素内每个元素square求平方后,可获得 { ( 1 ) 2 , ( w ) 2 , ( w 2 ) 2 , ⋯   , ( w n − 1 ) 2 } = { 1 , ( w 2 ) , ( w 2 ) 2 , ⋯   , ( w 2 ) n 2 − 1 } \{(1)^2,(w)^2,(w^2)^2,\cdots,(w^{n-1})^2\}=\{1,(w^2),(w^2)^2,\cdots,(w^2)^{\frac{n}{2}-1}\} {(1)2,(w)2,(w2)2,,(wn1)2}={1,(w2),(w2)2,,(w2)2n1}新集合,也具有相同的属性——对于任意的 x x x,若 x x x在该新集合内,则 − x -x x也在该新集合内,因为 x = ( w 2 ) k , − x = ( w 2 ) k ± n 4 x=(w^2)^k,-x=(w^2)^{k\pm \frac{n}{4}} x=(w2)k,x=(w2)k±4n
    • 因此,重复以上square流程,可将集合reduce为仅有单个值——尽管实际应用时,可适当减少重复次数,reduce为size足够小的集合即可。
      在这里插入图片描述
    • 可将其想象为绕圆,每次square,会将绕圆圈数double。
      • square前,某点在圆中所处角度为x°,则square之后,该点在圆中所处角度就变为了2x°。
      • 每个在 0 ⋯ 179 0\cdots 179 0179°位置的点,其在 180 ⋯ 359 180\cdots359 180359°有一个对应点,square之后,每组对应点会重叠。
      • 因此,可不断重复该流程。

为具有以上two-to-one映射重复性,要求原始的乘法子群size具有大的2次幂因子:

  • 如BabyBear模为 p = 15 ∗ 2 27 + 1 p=15*2^{27}+1 p=15227+1,其非零值组成的最大可能乘法子群size为 p − 1 = 15 ∗ 2 27 p-1=15*2^{27} p1=15227,其中 2 27 2^{27} 227为大的2次幂因子,因此对以上two-to-one映射技术友好,可实现domain减半,提升FRI效率。
    • 如可取size为 2 27 2^{27} 227的子群,或者直接取整个集合,运行FRI协议将多项式degree降低至15,然后直接检查该多项式的degree即可。

但是,Mersenne31模为 p 2 31 − 1 p2^{31}-1 p2311,其乘法子群size为 p − 1 = 2 31 − 2 p-1=2^{31}-2 p1=2312,其仅能被2整除一次,即其最大2次幂因子仅为2,因此无法做FFT运算——至少无法采用上述FRI技术——这是个悲剧。

不过对于使用现有32-bit CPU/GPU操作来做运算的话,Mersenne31域是个超级方便的域。

  • 2个数求和结果 x x x可能超过 p = 2 31 − 1 p=2^{31}-1 p=2311,但 x m o d    p x\mod p xmodp可直接简化为: x → x + ( x > > 31 ) x\rightarrow x+(x>>31) xx+(x>>31),其中 > > >> >>表示位右移。
  • 2个数的乘积也类似,但需要一种特殊(但通常可用)的opcode,来返回乘积结果的“high-order bits”——即 f l o o r ( x y 2 32 ) floor(\frac{xy}{2^{32}}) floor(232xy)

Mersenne31域的运算,要比BabyBear域运算,快约1.3倍。要是能基于Mersenne31域运行FRI协议,就能基于Mersenne31域构建STARKs。

3. Circle FRI协议

Circle STARKs所用的聪明技巧在于:

  • 已知某素数 p p p,可很容易某具有类似two-to-one属性的group(称为circle group),该group size为 p + 1 p+1 p+1,该group为由 ( x , y ) (x,y) (x,y) point所组成的集合,其中 x 2 + y 2 = 1 x^2+y^2=1 x2+y2=1。如取 p = 31 p=31 p=31,则相应circle group为:【 ( 30 , 0 ) (30,0) (30,0) ( 1 , 0 ) (1,0) (1,0)构成x轴
    在这里插入图片描述

该circle group遵循加法定律,与Trigonometric Addition FormulasAlgebra of complex numbers multiplication 非常像:
( x 1 , y 1 ) + ( x 2 , y 2 ) = ( x 1 x 2 − y 1 y 2 , x 1 y 2 + x 2 y 1 ) (x_1,y_1)+(x_2,y_2)=(x_1x_2-y_1y_2,x_1y_2+x_2y_1) (x1,y1)+(x2,y2)=(x1x2y1y2,x1y2+x2y1)
有:
( x , y ) + ( x , − y ) = ( 2 x 2 − 1 , 0 ) (x,y)+(x,-y)=(2x^2-1,0) (x,y)+(x,y)=(2x21,0)

倍加公式为:
2 ∗ ( x , y ) = ( 2 x 2 − 1 , 2 x y ) 2*(x,y)=(2x^2-1,2xy) 2(x,y)=(2x21,2xy)

接下来,仅考虑circle group内“odd奇数”位置的points,见下图:
在这里插入图片描述
接下来就是做Circle FRI:

  • 1)第一轮:将以上奇数位置points压缩到单条线(x轴),与“常规FRI协议”中的 B ( x 2 ) , C ( x 2 ) B(x^2),C(x^2) B(x2),C(x2)公式类似,在此有map:取偶数项系数 f 0 ( x ) = F ( x , y ) + F ( x , − y ) 2 f_0(x)=\frac{F(x,y)+F(x,-y)}{2} f0(x)=2F(x,y)+F(x,y),和,取奇数项系数 f 1 ( x ) = F ( x , y ) − F ( x , − y ) 2 y f_1(x)=\frac{F(x,y)-F(x,-y)}{2y} f1(x)=2yF(x,y)F(x,y)
    • 然后对 f 0 ( x ) f_0(x) f0(x) f 1 ( x ) f_1(x) f1(x)做随机线性组合,可获得一个基于x轴子集的one-dimensional(一维) F F F
      在这里插入图片描述
  • 2)第二轮及以后:相应map修改为:取偶数项系数 f 0 ( 2 x 2 − 1 ) = F ( x ) + F ( − x ) 2 f_0(2x^2-1)=\frac{F(x)+F(-x)}{2} f0(2x21)=2F(x)+F(x),和,取奇数项系数 f 1 ( 2 x 2 − 1 ) = F ( x ) − F ( − x ) 2 x f_1(2x^2-1)=\frac{F(x)-F(-x)}{2x} f1(2x21)=2xF(x)F(x)
    • 该map以以上集合为输入,每次运行该map,会将集合size减半。
    • 不过在此 x x x所“代表”的是2个points: ( x , y ) (x,y) (x,y) ( x , − y ) (x,-y) (x,y),且根据上面的加法定律有 x → 2 x 2 − 1 x\rightarrow 2x^2-1 x2x21——即取circle group上2个相反点的x坐标,并将其转换为这2个相反点求和后的x坐标。
      • 如取最右侧倒数第二个值 2 2 2,应用该map,有 2 ( 2 2 ) − 1 = 7 2(2^2)-1=7 2(22)1=7
      • 若回到原始circle group,则 ( 2 , 11 ) (2,11) (2,11)为从右逆时针第3个point,对其倍加运算 2 ∗ ( 2 , 11 ) = ( 7 , 13 ) 2*(2,11)=(7,13) 2(2,11)=(7,13),为从右逆时针第6个point。

从第二轮往后,都是基于1维来计算的,也可基于二维来计算,但1维运算效率会更高。

4. Circle FFTs算法

与FRI接近的算法为Fast Fourier Transforms(FFT)算法,FFT算法:

  • 取某degree < n <n <n多项式的 n n n个evaluation集合,将其转换为,该多项式的 n n n个系数。

除了不在每轮对 f 0 , f 1 f_0,f_1 f0,f1做随机线性组合之外,FFT遵循与FRI相同的策略:

  • FFT仅对 f 0 , f 1 f_0,f_1 f0,f1递归应用half-sized FFT,然后取 F F T ( f 0 ) FFT(f_0) FFT(f0)的输出为偶数项系数,取 F F T ( f 1 ) FFT(f_1) FFT(f1)的输出为奇数项系数。

circle group也支持FFT——也构建自FRI类似的方式。关键的区别在于:

  • circle FFTs(和circle FRI)所基于的不是技术意义上的多项式。 而是数学意义上所谓的 Riemann-Roch space
    • 即为多项式"modulo" 该circle—— x 2 + y 2 − 1 = 0 x^2+y^2-1=0 x2+y21=0
    • 可将任意与 x 2 + y 2 − 1 x^2+y^2-1 x2+y21的乘积结果,等价为 0 0 0
    • 另一个维度来考虑即为:
      • 仅允许degree-1 powers of y y y,一旦有 y 2 y^2 y2项,则将其替换为 1 − x 2 1-x^2 1x2

在常规FRI协议中,若输出为 [ 6 , 2 , 8 , 3 ] [6,2,8,3] [6,2,8,3],即对应多项式 P ( x ) = 3 x 3 + 8 x 2 + 2 x + 6 P(x)=3x^3+8x^2+2x+6 P(x)=3x3+8x2+2x+6。而circle FFT输出的“系数”,与常规FRI协议中的单项式不同,circle FFT所输出的系数具有奇怪的basis,如:
{ 1 , y , x , x y , 2 x 2 − 1 , 2 x 2 y − y , 2 x 3 − x , 2 x 3 y − x y , 8 x 4 − 8 x 2 + 1 , ⋯   } \{1,y,x,xy,2x^2-1,2x^2y-y,2x^3-x,2x^3y-xy,8x^4-8x^2+1,\cdots\} {1,y,x,xy,2x21,2x2yy,2x3x,2x3yxy,8x48x2+1,}

不过对于开发者来说,好消息在于,可几乎完全忽略这种奇怪的basis:

  • STARKs无需让开发者知道这些系数,而总是将“多项式”存储为:某特定域内evaluations集合。
  • STARKs中,开发者唯一需要使用FFT的地方在于:做(Riemann-Roch space类似的)low-degree extension:
    • 已知 N N N个值,基于相同多项式生成 k ∗ N k*N kN个值。
    • 这样可做一次FFT来生成该多项式的系数,并在系数之后附加 ( k − 1 ) N (k-1)N (k1)N个零值,然后再做一次iFFT来获得更大的evaluation集合。

Circle FFTs不是唯一的奇特FFT类型。Elliptic Curve Fast Fourier Transform (ECFFT) 甚至更强大,因:

  • ECFFT可基于任意有限域构建(如素数域、binary域等),而不要求具有大的2次幂因子。
  • 但ECFFT理解起来更复杂,且更低效。

至此,借助circle group,可对Mersenne31域 p = 2 31 − 1 p=2^{31}-1 p=2311,实现circle FFT运算。

5. Quotienting求商

STARK协议中,通常需在特定点求商,这些点:

  • 要么是故意选择的
  • 要么是随机选择的

如:

  • 若想证明 P ( x = y ) P(x=y) P(x=y),则可提供 Q = P − y X − x Q=\frac{P-y}{X-x} Q=XxPy,并证明 Q Q Q为一个多项式,而不是一个分数值。

DEEP-FRI协议中,采用随机选择的evaluation points,从而使得FRI是安全的——而具有更少的Merkle branches。

在此,面临一个微妙的挑战:

  • 在circle group内,没有“类似常规FRI中只通过一个点的线性函数 X − x X-x Xx
    从几何角度来看很直观:
    在这里插入图片描述

可构建某点 ( P x , P y ) (P_x,P_y) (Px,Py)的切线线性函数,该线性函数穿过该点但具有“multiplicity重数2”,即:

  • 若某多项式为该线性函数的倍数,则对该多项式仅要求其在该点值为0是不够的,将还需要有更严格的条件。—— 即,不能仅在单个点 ( P x , P y ) (P_x,P_y) (Px,Py)就证明该多项式的某evaluation。

  • 为此,必须通过2个点来证明该多项式的evaluation——即需要该circle group内的2个点,来唯一确定该线性函数。 这2个点:

    • 其中一个为点 ( P x , P y ) (P_x,P_y) (Px,Py)
    • 另一个为不关心其evaluation的某dummy点

    P 1 , P 2 P_1,P_2 P1,P2这2个点的线性函数定义为:
    在这里插入图片描述

其中,线性函数standard form表示为: a x + b y + c ax+by+c ax+by+c,若将以上line_function()的线性函数转换为方程式 a x + b y + c = 0 ax+by+c=0 ax+by+c=0,即对应为穿过P1和P2的一条直线。
在这里插入图片描述
若有某多项式 P P P,其在 P 1 P_1 P1处值为 v 1 v_1 v1,在 P 2 P_2 P2处值为 v 2 v_2 v2

  • 可选择插值项 I I I:插值项 I I I为线性函数,其在 P 1 P_1 P1处值为 v 1 v_1 v1,在 P 2 P_2 P2处值为 v 2 v_2 v2
    • 可将插值项 I I I简单表示为: v 1 + ( v 2 − v 1 ) ∗ y − ( P 1 ) y ( P 2 ) y − ( P 1 ) y v_1+(v_2-v_1)*\frac{y-(P_1)_y}{(P_2)_y-(P_1)_y} v1+(v2v1)(P2)y(P1)yy(P1)y,其中 y y y为变量,当 y = ( P 2 ) y y=(P_2)_y y=(P2)y时其值为 v 2 v_2 v2;当 y = ( P 1 ) y y=(P_1)_y y=(P1)y时,其值为 v 1 v_1 v1
  • 然后通过将 P P P减去 I I I(因 P − I P-I PI P 1 , P 2 P_1,P_2 P1,P2点处的值均为0),然后除以 L L L L L L P 1 , P 2 P_1,P_2 P1,P2这2个点间的线性函数),然后证明商 P − I L \frac{P-I}{L} LPI为一个多项式,即可证明“多项式式 P P P P 1 P_1 P1处值为 v 1 v_1 v1且在 P 2 P_2 P2处值为 v 2 v_2 v2”。

6. Vanishing多项式

在STARK中,通常带证明的多项式方程式形如:

  • C ( T ( x ) , T ( n e x t ( x ) ) ) = Z ( x ) ∗ H ( x ) C(T(x),T(next(x)))=Z(x)*H(x) C(T(x),T(next(x)))=Z(x)H(x)

其中:

  • Z ( x ) Z(x) Z(x)多项式在整个原始evaluation domain { 1 , w , w 2 , ⋯   , w n − 1 } \{1,w,w^2,\cdots,w^{n-1}\} {1,w,w2,,wn1}值均为 0 0 0。其中 w n = 1 w^n=1 wn=1
    • 在“常规”STARK中, Z ( x ) = ( x − 1 ) ⋅ ( x − w ) ⋅ ( x − w 2 ) ⋯ ( x − w n − 1 ) = x n − 1 Z(x)=(x-1)\cdot(x-w)\cdot (x-w^2)\cdots (x-w^{n-1})=x^n-1 Z(x)=(x1)(xw)(xw2)(xwn1)=xn1
    • 而在circle STARKs中,等价为:
      Z n + 1 ( x , y ) = ( 2 ∗ Z n ( x , y ) 2 ) − 1 Z_{n+1}(x,y)=(2*Z_n(x,y)^2)-1 Zn+1(x,y)=(2Zn(x,y)2)1【其中 Z 1 ( x , y ) = y Z_1(x,y)=y Z1(x,y)=y Z 2 ( x , y ) = x Z_2(x,y)=x Z2(x,y)=x。】

注意,可从folding函数派生vanishing多项式:

  • 在“常规”STARK中,重复 x → x 2 x\rightarrow x^2 xx2 map
  • 在circle STARKs中,重复 x → 2 x 2 − 1 x\rightarrow 2x^2-1 x2x21 map。
    • 不过如上面“3. Circle FRI协议”中所示,第一轮处理会有所不同,因第一轮是特殊的。

7. 多项式evaluations排布:Reverse bit order

STARKs中,多项式的evaluations:

  • 通常不是以“自然”顺序排布的,所谓自然顺序,是指: ( P ( 1 ) , P ( w ) , P ( w 2 ) , ⋯   , P ( w n − 1 ) ) (P(1),P(w),P(w^2),\cdots,P(w^{n-1})) (P(1),P(w),P(w2),,P(wn1))
  • 而是以“reverse bit order”排布的: P ( 1 ) , P ( w n 2 ) , P ( w n 4 ) , P ( w 3 n 4 ) , P ( w n 8 ) , P ( w 5 n 8 ) , P ( w 3 n 8 ) , P ( w 7 n 8 ) , P ( w n 16 ) , ⋯ P(1),P(w^{\frac{n}{2}}),P(w^{\frac{n}{4}}),P(w^{\frac{3n}{4}}),P(w^{\frac{n}{8}}),P(w^{\frac{5n}{8}}),P(w^{\frac{3n}{8}}),P(w^{\frac{7n}{8}}),P(w^{\frac{n}{16}}),\cdots P(1),P(w2n),P(w4n),P(w43n),P(w8n),P(w85n),P(w83n),P(w87n),P(w16n),

所谓“reverse bit order”:即以bit表示,然后从右到左逆序表示:

  • 0011 0011 0011,对应“reverse bit order”为 1100 1100 1100
  • 1010 1010 1010,对应“reverse bit order”为 0101 0101 0101

若令 n = 16 n=16 n=16,则可仅关注对 w w w如下幂乘值进行evaluate:
{ 0 , 8 , 4 , 12 , 2 , 10 , 6 , 14 , 1 , 9 , 5 , 13 , 3 , 11 , 7 , 15 } \{0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15\} {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}

其顺序具有如下关键特性:

  • 在FRI evaluation中,早期分组在一起的值在排序中会并排放置。如:
    • FRI第一轮将 x x x − x -x x分组在一起。当 n = 16 n=16 n=16时,有 w 8 = − 1 w^8=-1 w8=1,即意味着按 P ( w i ) P(w^i) P(wi) P ( − w i ) = P ( w i + 8 ) P(-w^i)=P(w^{i+8}) P(wi)=P(wi+8)分组。如上排序所示,正好为并排的pairs—— ( 0 , 8 ) , ( 4 , 12 ) , ( 2 , 10 ) , ⋯   , ( 7 , 15 ) (0,8), (4,12), (2,10),\cdots, (7,15) (0,8),(4,12),(2,10),,(7,15)
    • FRI第二轮将 P ( w i ) P(w^i) P(wi) P ( w i + 4 ) P(w^{i+4}) P(wi+4) P ( w i + 8 ) P(w^{i+8}) P(wi+8) P ( w i + 12 ) P(w^{i+12}) P(wi+12)分组。如上排序所示,正好为并排的4个值—— ( 0 , 8 , 4 , 12 ) , ( 2 , 10 , 6 , 14 ) , ⋯   , ( 3 , 11 , 7 , 15 ) (0,8,4,12), (2,10, 6, 14),\cdots, (3, 11, 7,15) (0,8,4,12),(2,10,6,14),,(3,11,7,15)
    • 以此类推。

这种“reverse bit order”排布,使得FRI更具space-efficient,因:

  • 可同时为folded在一起的2个值提供1个Merkle proof。若一次fold了 k k k轮,则可同时为 2 k 2^k 2k个值提供1个Merkle proof。

在circle STARKs中,其folding结构会有所不同:【详情见上面“3. Circle FRI协议”】

  • 第一轮是将 ( x , y ) (x,y) (x,y) ( x , − y ) (x,-y) (x,y)分组
  • 第二轮是将 x x x − x -x x分组
  • 第二轮之后的各轮,将 p p p q q q分组,所选 p , q p,q p,q满足 Q i ( p ) = − Q i ( q ) Q^{i}(p)=-Q^i(q) Qi(p)=Qi(q),其中 Q i Q^i Qi为重复 x → 2 x 2 − 1 x\rightarrow 2x^2-1 x2x21 map i i i次的map。

若将这些点与其在circle中的位置向结合,每一轮分组,即是将第一个点与最后一个点组合,第二个点与倒数第二个点组合,等等依此类推。

为调整reverse bit order来反映该folding结构:

  • 除最后一个bit之后,reverse每个bit。
  • 若最后一个bit值为1,则反转所有其它每个bit;若最后一个bit值为0,则保持不变。
    在这里插入图片描述

如仍取 n = 16 n=16 n=16,则相应的folded reverse bit order形如:
{ 0 , 15 , 8 , 7 , 4 , 11 , 12 , 3 , 2 , 13 , 10 , 5 , 6 , 9 , 14 , 1 } \{0, 15, 8, 7, 4, 11, 12, 3, 2, 13, 10, 5, 6, 9, 14, 1\} {0,15,8,7,4,11,12,3,2,13,10,5,6,9,14,1}

在这里插入图片描述
对应如上图所示,所谓的“folded reverse bit order”为:

  • 从右逆时针开始,第0个点 ( 10 , 5 ) (10,5) (10,5),第15个点 ( 10 , 26 ) (10,26) (10,26),第8个点 ( 21 , 26 ) (21, 26) (21,26),第7个点 ( 21 , 5 ) (21,5) (21,5),其满足 ( x , y ) (x,y) (x,y) ( x , − y ) (x,-y) (x,y) ( − x , − y ) (-x,-y) (x,y) ( − x , y ) (-x,y) (x,y)格式,正是所期望的。

8. 效率(计算表达所占空间)

circle STARKs(和通常的31-bit-prime STARKs)是非常高效的。
在circle STARK中所证明的实际计算,大多包含如下类型计算:

  • 1)用于“业务逻辑”的原生运算,如计数。
  • 2)用于密码学的原生运算,如类似Poseidon2的哈希函数。
  • 3)lookup arguments:通过从查找表中读取值来实现高效执行多种计算的通用方法

衡量效率的关键标准是:

  • 是否使用计算trace中的整个空间来做有用的工作,还是留下了大量浪费的空间?
    • 在大域SNARKs中,存在大量浪费的空间:
      • 业务逻辑和查找表大多涉及对小数字的计算(在N步计算中,数值通常小于N,实践中有 N < 2 25 N<2^{25} N<225),但必须支付使用 2 256 2^{256} 2256-bit域的开销。
    • 而在circle STARK中,所用域size为 2 31 2^{31} 231,因此浪费的空间不大。

“专为SNARKs设计”的低算术复杂度哈希(如Poseidon)会使用基于任何域的trace中每个数值的每一个bit。

因此,circle STARKs实际上非常接近最优!

Binius更强大,因为:

  • Binius允许混合和匹配不同大小域,从而为所有内容提供更高效的bit packing。
  • Binius还提供了进行32位加法的选项,而不会产生查找表的开销。
  • 然而,这些收益是以(在Vitalik看来)更高的理论复杂性为代价的,而circle STARK(尤其是基于BabyBear的常规STARK)在概念上非常简单。

9. 结论:Vitalik对circle STARKs的看法

与常规STARK相比,Circle STARK不会给开发人员带来太多额外的复杂性。在实现过程中,circle FRI与常规FRI有少量差异,详情见上面“3. Circle FRI协议”。

  • Circle FRI所操作的“多项式”背后的底层数学非常违反直觉,需要一段时间才能理解和欣赏。但碰巧的是,这种复杂性被隐藏起来,开发人员看不见。循环数学的复杂性是封装的,而不是系统的

理解Circle FRI和Circle FFT也可成为理解其他“奇特FFT”的良好智力门户:

Vitalik感觉,通过Mersenne31、BabyBear和类似Binius的binary-field技术的结合:

  • 正在接近STARK“基础层”效率的极限。

Vitalik预计STARK优化的前沿将转向:

  • 1)对哈希函数和签名等原语进行最有效的算术运算(并为此目的优化这些原语本身),
  • 2)进行递归构造以实现更多的并行化,
  • 3)对VM进行算术运算以改善开发者体验,以及其他更高级别的任务。

参考资料

[1] Vitalik 2024年7月23日博客 Exploring circle STARKs

Circle STARK系列博客

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值