FRI的Commit、Query以及FRI Batching内部机制

1. 引言

前序博客见:

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} fi1多项式系数个数的一半。
  • 每轮的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+r1g1++rngn。即选择多个不同的随机值来压缩。【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+r1g1++rngn。即选择单个随机值,但使用该随机值的不同powers来压缩。【RISC Zero和Polygon Hermez均采用的是Parametric batching方式。】

参考资料

[1] 2023年4月 ZK Summit 9上分享视频 FRI Mechanics: Folding, Committing, and Batching

RISC Zero系列博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值