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

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} 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系列博客

  • 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协议中的商多项式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/134475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果

官方论文地址->官方论文地址 官方代码地址->官方代码地址 个人修改代码->个人修改的代码已经上传CSDN免费下载 一、本文介绍 本文给大家带来是DLinear模型,DLinear是一种用于时间序列预测(TSF)的简单架构,DLinear的核…

uni-app点击按钮弹出提示框-uni.showModal(OBJECT),选择确定和取消

参考文档: https://uniapp.dcloud.io/api/ui/prompt?idshowmodal 显示模态弹窗,可以只有一个确定按钮,也可以同时有确定和取消按钮。类似于一个API整合了 html 中:alert、confirm。 uni.showModal({title: 提示,content: 这是一…

【计算机网络笔记】IP分片

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

openssl研发之base64编解码实例

一、base64编码介绍 Base64编码是一种将二进制数据转换成ASCII字符的编码方式。它主要用于在文本协议中传输二进制数据,例如电子邮件的附件、XML文档、JSON数据等。 Base64编码的特点如下: 字符集: Base64编码使用64个字符来表示二进制数据…

Leetcode刷题详解—— 目标和

1. 题目链接:494. 目标和 2. 题目描述: 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可…

出电子书了!

熟悉小灰的小伙伴们都知道,小灰曾经创作了三本算法有关的图书,分别是《漫画算法》、《漫画算法Python篇》、《漫画算法2》。 如今,这三本书在全网的销量超过10W册,可以说是IT领域最畅销的图书之一。 小灰的这三本算法书&#xff0…

Linux系统编程,Linux中的文件读写文件描述符

文章目录 Linux系统编程,Linux中的文件读写操作1.open函数,打开文件 Linux系统编程,Linux中的文件读写操作 1.open函数,打开文件 我们来看下常用的open函数 这个函数最终返回一个文件描述符struct file 我们查看一下它的Ubuntu…

数据结构之双向链表

目录 引言 链表的分类 双向链表的结构 双向链表的实现 定义 创建新节点 初始化 打印 尾插 头插 判断链表是否为空 尾删 头删 查找与修改 指定插入 指定删除 销毁 顺序表和双向链表的优缺点分析 源代码 dlist.h dlist.c test.c 引言 数据结构…

LeetCode【923】三数之和的多种可能性

题目&#xff1a; 思路&#xff1a; https://www.jianshu.com/p/544cbb422300 代码&#xff1a; int threeSumMulti(vector<int>& A, int target) {//Leetcode923:三数之和的多钟可能//initialize some constint kMod 1e9 7;int kMax 100;//calculate frequenc…

图论12-无向带权图及实现

文章目录 带权图1.1带权图的实现1.2 完整代码 带权图 1.1带权图的实现 在无向无权图的基础上&#xff0c;增加边的权。 使用TreeMap存储边的权重。 遍历输入文件&#xff0c;创建TreeMap adj存储每个节点。每个输入的adj节点链接新的TreeMap&#xff0c;存储相邻的边和权重 …

138.随机链表的复制(LeetCode)

深拷贝&#xff0c;是指将该链表除了正常单链表的数值和next指针拷贝&#xff0c;再将random指针进行拷贝 想法一 先拷贝出一份链表&#xff0c;再对于每个节点的random指针&#xff0c;在原链表进行遍历&#xff0c;找到random指针的指向&#xff0c;最后完成拷贝链表random…

Java自学第10课:JavaBean和servlet基础

目录 目录 1 JavaBean &#xff08;1&#xff09;概念 &#xff08;2&#xff09;分类 &#xff08;3&#xff09;使用 2 servlet &#xff08;1&#xff09;代码结构 &#xff08;2&#xff09;常用接口 &#xff08;3&#xff09;如何开发 1 新建servlet 2 配置 1…

19 异步通知

一、异步通知 1. 异步通知简介 阻塞和非阻塞两种方式都是需要应用程序去主动查询设备的使用情况。 异步通知类似于驱动可以主动报告自己可以访问&#xff0c;应用程序获取信号后会从驱动设备中读取或写入数据。 异步通知最核心的就是信号&#xff1a; #define SIGHUP 1 /* 终…

C详细的字符串函数

但行前路&#xff0c;莫问归期 要注意的是&#xff0c;要使用下边所讲的函数要包含头文件<string.h> 文章目录 strlenstrcpystrncpy strcatstrncat strcmpstrncmp strstrstrtokstrerror字符串大小写转换struprstrlwr memcpymemmovememcmp strlen 求字符串的长度 函数参…

Typescript -尚硅谷

基础 1.ts是以js为基础构建的语言&#xff0c;是一个js的超集(对js进行了扩展)&#xff1b; 2.ts(type)最主要的功能是在js的基础上引入了类型的概念; Js的类型是只针对于值而言&#xff0c;ts的类型是针对于变量而言 Ts可以被编译成任意版本的js&#xff0c;从而进一步解决了…

MySQL Command Line Client 运行闪退问题解决,缺少my.ini文件

MySQL Command Line Client 运行闪退问题解决&#xff1a; 问题排查&#xff1a; 1.找到Command Line Client的路径位置&#xff0c;并查看属性&#xff0c;步骤截图&#xff1a; 查看属性&#xff1a; 查看属性中的目标路径&#xff1a; 2.进入属性中的目标路径&#xff0c;…

基于SSM+Vue的电子商城的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

记录--vue3 setup 中国省市区三级联动options最简洁写法,无需任何库

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在写页面的时候&#xff0c;发现表单里面有一个省市区的 options 组件要写&#xff0c;因为表单很多地方都会用到这个地址选择&#xff0c;我便以为很简单嘛。 虽然很简单的一个功能&#xff0c;但是网…

C#中的扩展方法---Extension

C#中扩展方法是C# 3.0/.NET 3.x 新增特性&#xff0c;能够实现向现有类型中“添加”方法&#xff0c;以下主要介绍C#中扩展方法的声明及使用。 1、扩展方法的声明 扩展方法使能够向现有类型“添加”方法&#xff0c;而无需创建新的派生类型、重新编译或以其他方式修改原始类型…

安全通信网络(设备和技术注解)

网络安全等级保护相关标准参考《GB/T 22239-2019 网络安全等级保护基本要求》和《GB/T 28448-2019 网络安全等级保护测评要求》 密码应用安全性相关标准参考《GB/T 39786-2021 信息系统密码应用基本要求》和《GM/T 0115-2021 信息系统密码应用测评要求》 1网络架构 1.1保证网络…