1. 引言
前序博客见:
- Reed-Solomon Codes及其与RISC Zero zkVM的关系
- RISC Zero ZKP协议中的商多项式
FRI用途:
- 用于证明某vector commitment是(接近)某Reed-Solomon codeword。即证明某low-degree多项式。
FRI工作原理:
- 将vector commitment迭代“folding”为越来越小的commitments。
- Queries用于确保以上迭代“folding”正确。
Reed-Solomon Codes及其与RISC Zero zkVM的关系博客中指出:RISC Zero中的Reed-Solomon Codes处理流程为:
- 1)Step 1 生成trace columns:在RISC Zero zkVM中执行某二进制文件,并记录其execution trace。
- 2)Step 2 将trace columns转换为trace blocks:采用Reed-Solomon Encoding对execution trace中的每列进行编码。
- 3)Step 3 对trace blocks之上的constraints进行evaluate,然后计算quotients:对trace blocks做STARK数学运算。
- 4)Step 4 应用FRI Protocol:让Verifier信服该结果是a valid Reed-Solomon codeword。
本文重点关注Step 4中的FRI协议。
本文内容框架为:
- Merkle tree即vector commitment
- 证明Merkle commitment,等价为证明多项式承诺:
- 直观角度
- FRI动机
- FRI机制:
- Commit阶段:FRI Folding等价为"Split & Mix"。
- Query阶段
2. 证明Merkle commitment,等价为证明多项式承诺
对vector [Z, K, S, U, M, M, I, T]的承诺,可 以Merkle tree表示为:
其中:
- 该Merkle tree各叶子节点为待承诺向量中的各元素。
- 该Merkel tree的Merkle root即为该向量的承诺值。
也可从多项式承诺的角度来看:
其中:
- 该Merkle tree可叶子节点可看成是 f f f的evaluations值,其中 f f f为某多项式,满足 f ( g 0 ) = Z , f ( g 1 ) = K , f ( g 2 ) = S , f ( g 3 ) = U , f ( g 4 ) = M , f ( g 5 ) = M , f ( g 6 ) = I , f ( g 7 ) = T f(g^0)=Z,f(g^1)=K, f(g^2)=S,f(g^3)=U,f(g^4)=M,f(g^5)=M,f(g^6)=I,f(g^7)=T f(g0)=Z,f(g1)=K,f(g2)=S,f(g3)=U,f(g4)=M,f(g5)=M,f(g6)=I,f(g7)=T。
如何让持怀疑态度的Verifier信服以上承诺在的正确性呢?有2种方案:
- 1)直观方案:
- 1.1)Prover将所有数据直接都发送给Verifier:Prover所需发送给Verifier数据量太大了。
- 1.2)Verifier接收到所有数据后,自己插值来验证:对Verifier来说,插值运算太昂贵了。
- 2)高效方案为:使用FRI协议。
3. FRI机制
FRI基本结构示意为:
FRI基本流程为:
- 1)首先:Prover发送 f 0 f_0 f0的Merkle root。
- 2)Commit Round 1:
- Verifier发送随机值 r 1 r_1 r1
- Prover split f 0 f_0 f0,然后使用 r 1 r_1 r1 mix 获得 f 1 f_1 f1
- Prover发送 f 1 f_1 f1的Merkle root。
- 3)Commi Round 2:
- Verifier发送随机值 r 2 r_2 r2
- Prover split f 1 f_1 f1,然后使用 r 2 r_2 r2 mix 获得 f 2 f_2 f2
- Prover发送 f 2 f_2 f2的Merkle root。
其中:
- 每轮多项式 f i f_i fi的系数个数,均为前一轮 f i − 1 f_{i-1} fi−1多项式系数个数的一半。
- 每轮的Merkle tree的叶子节点个数,均为前一轮Merkle tree叶子节点个数的一半。
3.1 FRI机制之Split
3.2 FRI机制之Mix
3.3 FRI机制之commitment
除最后一轮为plaintext commitment之外,之前所有轮均为Merkle tree commitments。
假设28为所选域的32-th root of unity,则有:
3.4 FRI机制之Query
FRI机制中的queries用作随机挑战值。
blow-up factor为4,则意味着query有约3/4的概率可抓到作弊的Prover。
粗略来看:
- 可认为:1次query对应约2 bit security。【实际安全性分析要复杂得多。】
4. FRI Batching机制
当需对多个多项式应用FRI协议时,可使用FRI Batching。
FRI Batching时,使用上面的mix操作,来将多个多项式压缩为单个多项式。
当前FRI Batching主要有2种方式:
- 1)Affine batching: g b a t c h e d = g 0 + r 1 ⋅ g 1 + ⋯ + r n ⋅ g n g_{batched}=g_0+r_1\cdot g_1+\cdots +r_n\cdot g_n gbatched=g0+r1⋅g1+⋯+rn⋅gn。即选择多个不同的随机值来压缩。【StarkWare的ethSTARK采用的是Affine batching方式。】
- 2)Parametric batching: g b a t c h e d = g 0 + r 1 ⋅ g 1 + ⋯ + r n ⋅ g n g_{batched}=g_0+r^1\cdot g_1+\cdots +r^n\cdot g_n gbatched=g0+r1⋅g1+⋯+rn⋅gn。即选择单个随机值,但使用该随机值的不同powers来压缩。【RISC Zero和Polygon Hermez均采用的是Parametric batching方式。】
参考资料
[1] 2023年4月 ZK Summit 9上分享视频 FRI Mechanics: Folding, Committing, and Batching
RISC Zero系列博客
- RISC0:Towards a Unified Compilation Framework for Zero Knowledge
- Risc Zero ZKVM:zk-STARKs + RISC-V
- 2023年 ZK Hack以及ZK Summit 亮点记
- RISC Zero zkVM 白皮书
- Risc0:使用Continunations来证明任意EVM交易
- Zeth:首个Type 0 zkEVM
- RISC Zero项目简介
- RISC Zero zkVM性能指标
- Continuations:扩展RISC Zero zkVM支持(无限)大计算
- A summary on the FRI low degree test前2页导读
- Reed-Solomon Codes及其与RISC Zero zkVM的关系
- RISC Zero zkVM架构
- RISC-V与RISC Zero zkVM的关系
- 有限域的Fast Multiplication和Modular Reduction算法实现
- RISC Zero的Bonsai证明服务
- RISC Zero ZKP协议中的商多项式