STARK介绍01
前面介绍了基于SNARK的零知识证明应用zcash,现在介绍一下区块链网络中另一个主流应用的零知识证明技术路线STARK。STARK全称Scalable Transparent Arguments of Knowledge。
STARK技术在证明系统中可以用来确保计算完整性和知识匿名化。典型的计算外包场景中,计算完整性是为了确保计算过程和最终输出是符合预期的。计算方作为证明方需要提供证据,证明其计算结果是按照用户(验证方)所约定的要求进行计算。具体来说:用户作为验证方公开一个函数fff给证明方,并提供函数输入xxx,证明方计算出函数运行结果yyy发送给用户,并且提供证据证明y=f(x)y = f(x)y=f(x)。外包计算中,验证方当然可以自己根据函数进行验算一遍以确认y=f(x)y = f(x)y=f(x)是否成立。但在实际应用中,用户进行完整验算要么在资源上不可行,例如算力不够。要么在逻辑上不可行,如果自己完整计算一遍就能获得函数结果也就无需外包计算了。因此需要通过对证据进行较为简单的检验即可得到验证结论。这就需要一个有效的证明系统所产生的证据的验证工作量远小于完整计算过程。有效的证据系统性能包括3方面:一个是证据的生成开销,一个是证据大小,一个是证据验证开销。具体的数据对比后面详细说明。
STARK技术相对之前的SNARK技术在证据生成方面开销相对较小,证据生成复杂度和函数规模线性关系,但是证据尺寸和验证开销方面相对较大。对STARK的介绍包括:1)基本原理;2)基于hash函数的python代码实现;3)工程实现中的性能优化;4)STARK技术在区块链中的应用。
一、基本原理
1、AET定义
假定函数计算过共计TTT个步骤,每个步骤www个状态,则可以用一个T×wT \times wT×w矩阵来记录计算过程的每一步状态,这个矩阵称为algebraic execution trace。对于一个计算过程的AET,需要2个约束条件可以确保计算完整性:边界约束条件(boundary constrain)和状态转换约束条件(transition constrain)。边界约束是指每一步计算过程中的状态值,其中包括最终输出结果。状态转换约束是指每一步状态值到下一步状态值的转换关系。在证明系统中,计算函数对双方公开,因此状态转换约束对双方是已知的,边界约束的最后一步结果输出对双方也是公开的,至于输入状态约束是否需要公开取决于证明过程中是否需要实现零知识。
2、AET的数学表示
存在Fp\mathbb{F}_{p}Fp的子群G\mathbb{G}G为乘法循环群,AET矩阵中的元素在G\mathbb{G}G中取值,记οοο为G\mathbb{G}G的生成元,群G\mathbb{G}G阶为kkk,则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]。可以将计算步骤中的每一个状态视为一个寄存器,对于W=T×W = T \timesW=T×的AET矩阵意味着共计www个状态寄存器(简称寄存器)。
对于矩阵WWW的第iii行记为W[i,:]W_{[ i,: ]}W[i,:],WWW的第ω\omegaω列记为WωW_{\omega}Wω, W[i,ω]\ W_{[ i,\omega ]} W[i,ω]表示第iii行的寄存器ω\omegaω,其中i∈[0,T−1]i \in \lbrack 0,T - 1\rbracki∈[0,T−1], ω∈[0,w−1]\ \omega \in \lbrack 0,w - 1\rbrack ω∈[0,w−1]。因此对于一个特定计算函数fff的计算过程可以用矩阵WWW作为证据进行证明,其满足的约束条件如下:
-
边界约束:对任意步骤中的状态值e[i,ω]e_{[ i,\omega ]}e[i,ω]需要满足W[i,ω]=e[i,ω]W_{[ i,\omega ]} = e_{[ i,\omega ]}W[i,ω]=e[i,ω];
-
转换约束:对任意两个步骤的状态值W[i,:]W_{[ i,: ]}W[i,:]、W[i+1,:]W_{[ i + 1,: ]}W[i+1,:]满足状态转换约束函数fi+1(W[i,:])=W[i+1,:]f_{i + 1}( W_{[ i,: ]} ) = W_{[ i + 1,: ]}fi+1(W[i,:])=W[i+1,:]。
状态转换函数仅与计算函数fff有关,边界约束条件e[i,ω]e_{[ \mathbf{i}\mathbf{,}\omega ]}e[i,ω]跟计算函数fff及其输入有关。
假设计算如下函数:
yi= { yi, i∈{ 0,1},yi−1×yi−2,i>1. y_i = \mathbf{\ }\{ \begin{matrix} y_i,\ \mathrm{\text{\ \ \ \ \ \ \ \ }}i \in \{ 0,1\}, \\ y_{i - 1} \times y_{i - 2},i > 1 \\ \end{matrix} .\ \ yi= { yi, i∈{ 0,1},yi−1×yi−2,i>1.
计算步骤T=5T = 5T=5,输入为$y_0 =1和1和1和y_1 =$2,则状态寄存器如下:

转换约束函数如下:
fi+1(W[i,:]): W[i+1,0]=W[i,1], W[i+1,1]=W[i,0]×W[i,1] , i>1 f_{i + 1}( W_{[ i,: ]} ):\ \ \ W_{[ i + 1,0 ]} = W_{[ i,1 ]},\ W_{[ i + 1,1 ]} = W_{[ i,0 ]} \times W_{[ i,1 ]}\ ,\ i > 1 fi+1(W[i,:]): W[i+1,0]=W


3661

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



