零知识证明——STARK介绍02

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方式实现零知识证明时的安全目标设定及参数选择。

证明方的边界约束条件证明过程如下:

  1. 根据计算过程各个步骤的状态值插值得到trace 多项式 P ω ( x ) P_{\omega}\left( x \right) Pω(x)

  2. 根据边界约束条件计算其对应的插值多项式 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

  3. 计算得到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)

  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)

证明方的转换约束条件证明过程如下:

  1. 根据计算函数得到 转换约束条件函数 C i C_{i} Ci

  2. 将trace多项式 P ω ( x ) P_{\omega}\left( x \right) Pω(x)代入 C i C_{i} Ci C i C_{i} Ci是含多个状态寄存器的多变量多项式;

  3. 证明方生成转换消元多项式 P t r a n s i t i o n _ z e r o f i e r P_{transition\_ zerofier} Ptransition_zerofier

  4. 得到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)

  1. 证明方需要根据验证方随机选择的步骤证明上式整除;且 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,k1]。将子群 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为例说明:

  1. 证明方对 P trac e quotient ( x ) P_{\mathrm{\text{trac}}e_{\mathrm{\text{quotient}}}}(x) Ptracequotient(x)在定义域 D ′ D^{\prime} D上的全部元素进行求值得到 s s s个值,并进行承诺,将承诺值发送给验证方;

  2. 同时将 P ω ( x ) P_{\omega}\left( x \right) Pω(x)在定义域 D ′ D^{\prime} D上的全部元素进行求值得到 s s s个值并进行承诺,将承诺值发送给验证方;

  3. 验证方从 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上的值;

  4. 验证方自行生成 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ω

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

faye2one

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值