STARK介绍02
下面介绍一个基于Hash函数的STARK工程实现。
一、STARK证明过程
1、AET证明
假定计算函数 f f f计算过共计 T T T个步骤,每个步骤 w w w个状态,证明方根据计算过程得到trace polynomial P ω ( x ) P_{\omega}\left( x \right) Pω(x), P ω ( x ) P_{\omega}\left( x \right) Pω(x)对验证方不公开。证明方需要证明其拥有的 P ω ( x ) P_{\omega}\left( x \right) Pω(x)满足边界约束条件(即最终输出符合要求)和转换约束条件函数(每个计算步骤的状态转换符合要求)。其中边界约束条件 e [ t , ω ] e_{\left\lbrack t,\omega \right\rbrack} e[t,ω]和转换约束函数 C i C_{i} Ci是公开的。
假设证明方需要实现零知识证明,不泄漏计算函数 f f f的输入信息,那么边界约束条件只需要包含最终步骤的输出即可,同时尽可能减少中间计算过程的信息泄漏。后面详细介绍STARK方式实现零知识证明时的安全目标设定及参数选择。
证明方的边界约束条件证明过程如下:
-
根据计算过程各个步骤的状态值插值得到trace 多项式 P ω ( x ) P_{\omega}\left( x \right) Pω(x);
-
根据边界约束条件计算其对应的插值多项式 P t r a c e _ i n t e r p o l a n t P_{trace\_ interpolant} Ptrace_interpolant和消元多项式 P t r a c e _ z e r o f i e r P_{trace\_ zerofier} Ptrace_zerofier;
-
计算得到trace quotient polynomial(称为边界商值多项式)
P t r a c e _ q u o t i e n t = P ω ( x ) − P t r a c e _ i n t e r p o l a n t P t r a c e _ z e r o f i e r = ( quo , rem ) … … . ( 1 ) P_{trace\_ quotient} = \frac{P_{\omega}\left( x \right) - P_{trace\_ interpolant}}{P_{trace\_ zerofier}} = \left( \mathrm{\text{quo}},\mathrm{\text{rem}} \right)\ \ \ \ \ \ \ \ldots\ldots.\ \ \ \ \ \ \ (1) Ptrace_quotient=Ptrace_zerofierPω(x)−Ptrace_interpolant=(quo,rem) ……. (1)
- 证明方需要证明边界证明多项式的余数为0,且 P t r a c e _ q u o t i e n t P_{trace\_ quotient} Ptrace_quotient次数小于 def ( P ω ( x ) ) − def ( P t r a c e _ z e r o f i e r ) \mathrm{\text{def}}\left( P_{\omega}\left( x \right) \right) - \mathrm{\text{def}}(P_{trace\_ zerofier}) def(Pω(x))−def(Ptrace_zerofier);
证明方的转换约束条件证明过程如下:
-
根据计算函数得到 转换约束条件函数 C i C_{i} Ci;
-
将trace多项式 P ω ( x ) P_{\omega}\left( x \right) Pω(x)代入 C i C_{i} Ci, C i C_{i} Ci是含多个状态寄存器的多变量多项式;
-
证明方生成转换消元多项式 P t r a n s i t i o n _ z e r o f i e r P_{transition\_ zerofier} Ptransition_zerofier,
-
得到transition quotient polynomial(称为转换商值多项式)。
P t r a n s i t i o n _ q u o t i e n t = C i ( x ) P t r a n s i t i o n _ _ z e r o f i e r = ( quo , rem ) … … . ( 2 ) P_{transition\_ quotient} = \frac{C_{i}\left( x \right)}{P_{transition\_\_ zerofier}} = \left( \mathrm{\text{quo}},\mathrm{\text{rem}} \right)\ \ \ \ \ \ \ \ldots\ldots.\ \ \ \ \ \ \ (2) Ptransition_quotient=Ptransition__zerofierCi(x)=(quo,rem) ……. (2)
- 证明方需要根据验证方随机选择的步骤证明上式整除;且 P t r a n s i t i o n _ q u o t i e n t P_{transition\_ quotient} Ptransition_quotient次数小于 def ( C i ( x ) ) − def ( P t r a n s i t i o n _ _ z e r o f i e r ) \mathrm{\text{def}}\left( C_{i}\left( x \right) \right) - \mathrm{\text{def}}(P_{transition\_\_ zerofier}) def(Ci(x))−def(Ptransition__zerofier);
2、商值多项式的具体证明
由于商值多项式通过除法运算获得,因此在证明过程中需要一些特殊处理,确保分母不为0。给定域 F p \mathbb{F}_{p} Fp,选择其中一个乘法循环群的子群 G \mathbb{G} G,记 ο ο ο为 G \mathbb{G} G的生成元,群 G \mathbb{G} G阶为 k k k,则 G \mathbb{G} G的元素可表示为 ο i , i ∈ [ 0 , k − 1 ] ο^{\mathbf{i}}\mathbf{,}\mathbf{\ }\ i \in \lbrack 0,k - 1\rbrack οi, i∈[0,k−1]。将子群 G \mathbb{G} G视为定义域 D D D,插值得到的 P ω ( x ) P_{\omega}\left( x \right) Pω(x)和 C i ( x ) C_{i}\left( x \right) Ci(x)均是在上 D D D取值作为输入,但是在进行商值多项式验证时,其定义域需要确保分母不为0,因此要寻找一个与 D D D交集为空的陪集作为定义域。根据群论可知, D D D作为 F p \mathbb{F}_{p} Fp的子群, D D D的陪集个数为 ∣ F p ∣ / ∣ D ∣ \left| \mathbb{F}_{p} \right|/\left| D \right| ∣Fp∣/∣D∣,任取 F p \mathbb{F}_{p} Fp中一个元素 m m m得到的 D D D陪集 mD \mathrm{\text{mD}} mD要么相等要么交集为空。
1)商值多项式的次数证明。
多项式次数证明时,采用FRI协议。以trace quotient polynomial为例,对 P t r a c e _ q u o t i e n t P_{trace\_ quotient} Ptrace_quotient在定义域 D ′ D^{\prime} D′上的全部元素进行求值,假设 P t r a c e _ q u o t i e n t P_{trace\_ quotient} Ptrace_quotient的最高次数为 n n n, D ′ D^{\prime} D′的阶为 s s s,则得到 s s s个值,并发送给验证方。验证方从 s s s个值中随机选择 n + 1 n + 1 n+1个值进行插值恢复出多项式 P t r a c e _ q u o t i e n t ′ {P_{trace\_ quotient}}^{\prime} Ptrace_quotient′,然后任意选择剩余的一个值验证是否在该多项式上,如果在则证明验证通过。
FRI协议中为了提高效率,采用了类似于NTT算法思想将多项式次数进行对半折叠,使得多项式计算过程尽量简单,减少计算量以及证明方与验证方之间的网络通信数量,后面再详细介绍FRI协议。另外需要注意 P t r a c e _ q u o t i e n t P_{trace\_ quotient} Ptrace_quotient求值的输入是从定义域 D ′ D^{\prime} D′中选取,但值域是 F p \mathbb{F}_{p} Fp,即其输出值属于域 F p \mathbb{F}_{p} Fp,可能在定义域 D ′ D^{\prime} D′之外。
2)商值多项式的整除性证明。
对于商值多项式的整除性证明以trace quotient polynomial为例说明:
-
证明方对 P trac e quotient ( x ) P_{\mathrm{\text{trac}}e_{\mathrm{\text{quotient}}}}(x) Ptracequotient(x)在定义域 D ′ D^{\prime} D′上的全部元素进行求值得到 s s s个值,并进行承诺,将承诺值发送给验证方;
-
同时将 P ω ( x ) P_{\omega}\left( x \right) Pω(x)在定义域 D ′ D^{\prime} D′上的全部元素进行求值得到 s s s个值并进行承诺,将承诺值发送给验证方;
-
验证方从 s s s个值中随机选择1个点,假设对应 ο l ο^{l} οl,要求证明方打开 P t r a c e _ q u o t i e n t P_{trace\_ quotient} Ptrace_quotient(x)和 P ω ( x ) P_{\omega}\left( x \right) Pω(x)在 ο l ο^{l} οl上的值;
-
验证方自行生成 P t r a c e _ i n t e r p o l a n t P_{trace\_ interpolant} Ptrace_interpolant和 P t r a c e _ z e r o f i e r P_{trace\_ zerofier} Ptrace_zerofier,并在 ο l ο^{l} οl处求值,然后验证下式是否成立:
P t r a c e _ q u o t i e n t ( ο l ) = P ω ( ο l ) − P trac e interpolant ( ο l ) P t r a c e _ z e r o f i e r ( ο l ) P_{trace\_ quotient}(ο^{l}) = \frac{P_{\omega}\left( ο^{l} \right) - P_{\mathrm{\text{trac}}e_{\mathrm{\text{interpolant}}}}(ο^{l})}{P_{trace\_ zerofier}(ο^{l})} Ptrace_quotient(οl)=Ptrace_zerofier(οl)Pω

974

被折叠的 条评论
为什么被折叠?



