算术化
许多零知识证明系统都使用算术化的方法,将计算类问题简化成涉及有限域F
上的多项式的代数问题。zk-STARK对计算完整性( Computational Integrity, CI)声明,“输出结果α
是程序C
根据输入x
经过T
步执行所得”,进行证明的第一步是算术化。
zk-STARK算术化的方法包括2个重要方法,首先,构建程序C
的代数中间表达(Algebraic Intermediate Representation, AIR),用s
个多项式描述当前执行状态与下一步状态的转化约束;其次,为降低证明者的时间复杂度和空间复杂度,将上述多项式进行链接合并形成1个多项式,该方法称为ALI(Algebraic Linking Interactive Oracle Proof)。 详细说明如下。
AIR
对计算完整性进一步深入理解下,实际上需要通过AIR将这一约束表达出来,即从输入x
到输出α
的程序执行过程中的中间计算状态转换,中间计算状态则是一堆寄存器数值。因此,给出AIR的定义,是一个低度多项式的集合
- 低度多项式的系数在域 内
- 代表当前计算状态
- 代表下一步计算状态
- 是证明系统所中某一个计算状态的变量数量
- 代表转换关系的多项式
- 有一对解使得转换关系成立,当且仅当 是的共同的解,即
- AIR的多项式的度是 所有中的最大值
- s 是所有约束的数量
通过上述定义,可以看出,AIR将程序C
执行过程中寄存器数值前后变化关系转化成了约束多项式,以便验证者能信任输入x
到输出y
的完整过程,而不是随便得出的结果或者是伪造的输出结果。
那么,上述的计算状态具体包括什么,如何组织,请查看执行轨迹
ALI协议
由于多项式的插值计算及验证计算需要耗费大量的计算资源,因此,ALI协议将s
个多项式约束化简为单一约束,例如,可以使用随机线性组合。
实际上,采用ALI协议后,具有更好的可靠性(soundness)。如果对证明过程感兴趣,可以参考 Eli Ben Sasson 的文章Scalable, transparent, and post-quantum secure computational integrity附录D