Rescue-Prime hash STARK 代码解析

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rescue-Prime hash STARK 代码解析相关的知识,希望对你有一定的参考价值。

1. 引言

前序博客有:

相关代码见:

Rescue-Prime hash STARK为例。
Rescue-Prime STARK 针对的场景为:

  • public info: h , H h,H h,H
  • private info: x x x
  • 待证明relation: h = H ( x ) h=H(x) h=H(x)

其中 H ( ∗ ) H(*) H() 为Rescue-Prime hash函数。

Rescue-Prime hash运算中涉及:

  • trace:witness信息,Rescue-Prime hash算法中每一轮的输入输出;
  • boundary constraints:公开信息,Rescue-Prime hash函数算法中第一轮的补0,以及最后的hash结果;
  • transition constraints(又称为AIR constraints):公开信息,Rescue-Prime hash算法中每一轮的函数运算。

2. Rescue-Prime hash函数

根据Alan Szepieniec等人2020年论文《Rescue-Prime: a Standard Specification (SoK)》可知,Rescue-Prime哈希函数主要参数有 ( p , m , c p , s ) (p,m,c_p,s) (p,m,cp,s)

  • p p p:定义了素数域 F p \\mathbbF_p Fp p p p为素数且具有a binary expansion of at least 32 bits。
  • m m m:定义了哈希函数的state width。状态由 m > 1 m>1 m>1个field elements确定。
  • c p c_p cp:为arithmetic sponge的capacity。
    r p = m − c p r_p=m-c_p rp=mcp
    r p r_p rp:为该arithmetic sponge的rate,决定了Recue-XLIX permutation之间absorb的field elements数量。
  • 80 ≤ s ≤ 512 80\\leq s\\leq 512 80s512:为 target security level,以bits为单位。

此外,还有如下参数:

  • α 和 α − 1 \\alpha和\\alpha^-1 αα1:为S-boxes的幂乘系数。对于所有的 x ∈ F p x\\in\\mathbbF_p xFp,有 ( x α ) α − 1 = x (x^\\alpha)^\\alpha^-1=x (xα)α1=x成立。
  • M ∈ F p m × m M\\in\\mathbbF_p^m\\times m MFpm×m:为 m × m m\\times m m×m MDS矩阵。
  • N ∈ N N\\in\\mathbbN NN为round数,一个单一的Rescue-XLIX permutation中包含了 N N N个simpler base permutation迭代,这种simpler base permutation称为a round。
  • 2 m N 2mN 2mN个field elements C i i = 0 2 m N − 1 \\C_i\\_i=0^2mN-1 Cii=02mN1:round constants。

2.1 sponge函数

Rescue-Prime hash函数本质是将任意长的field elements序列 映射为 r p r_p rp个field elements:
f R ′ : F p ∗ → F p r p f_R':\\mathbbF_p^*\\rightarrow \\mathbbF_p^r_p fR:FpFprp
其在sponge构造中使用了Rescue-XLIX permutation。最终sponge函数会将任意长的序列 映射为 任意长的field elements序列:
f R ′ − s p o n g e : F p ∗ → F ⋆ f_R'-sponge:\\mathbbF_p^*\\rightarrow \\mathbbF^\\star fRsponge:FpF
然后对该sponge函数裁剪,仅获取其前 r p r_p rp个elements作为结果。

在sponge函数的evaluation过程中,包含了:

  • 1)a permutation f R X L I X : F p m → F p m f_R^XLIX:\\mathbbF_p^m\\rightarrow \\mathbbF_p^m fRXLIX:FpmFpm
  • 2)具有 m m m个field elements的register,称为state。state的初始状态为全零序列 0 ∈ F p m \\mathbf0\\in\\mathbbF_p^m 0Fpm
  • 3)two phases:absorbing phase以及squeezing phase。
    • 3.1)absorbing阶段:会重复以下流程,直到所有的input elements都吸收完毕:

      • 3.1.1)将input序列中的next r p r_p rp个elements 与 state的前 r p r_p rp个elements相加;
      • 3.1.2)以与 r p r_p rp个input elements相加后的state为输入,运用permutation f R X L I X f_R^XLIX fRXLIX,获得新的state。
    • 3.2)squeezing阶段:state的前 r p r_p rp个elements即为输出。理论上,可对state递归调用 f R X L I X f_R^XLIX fRXLIX获得任意长的output elements序列,不过本文限制为output elements数量最多为 r p r_p rp个。

以input elements长度为 2 ∗ r p 2*r_p 2rp为例,相应的absorbing阶段具有2次迭代,示意为:

填充Padding:当inputs为任意长度时,sponge函数需要进行填充操作——在inputs之后附加一个 1 ∈ F p 1\\in\\mathbbF_p 1Fp以及一堆 0 ∈ F p 0\\in\\mathbbF_p 0Fp,使得填充后的inputs长度为 r p r_p rp的整数倍。
相应的SageMath算法示例为:

2.2 Rescue-XLIX Permutation

Rescue-XLIX Permutation f R X L I X f_R^XLIX fRXLIX中包含了 N N N次Rescue-XLIX round函数迭代,单个round中包含了以下6步: