深入理解零知识证明算法之 ZK-Stark -- FRI 协议
2022-08-0711:04
Sin7y
2022-08-07 11:04
Sin7y
2022-08-07 11:04
收藏文章
订阅专栏


1. 前言

为了确保证明者返回的满足多项式等式相等的值确实是基于有效的多项式计算得到,我们需要对多项式进行 LDT 测试;同时为了使验证者的复杂度达到最优,我们把原始多项式进行变换,变换后,证明者要证明的多项式仅仅是原始多项式的一半,不断重复这一过程,一直到多项式的度可以直接判断为止。这其实就是 FRI 协议的核心思想,下面,让我们来详细介绍 FRI 协议的过程。


2. FRI 协议

也许, 我们应该先说一下FRI 协议是什么? FRI, Fast RS IOPP, 全称 Fast Reed−Solomen Interactive Oracle Proofs of Proximity,是一种更有效的 proximiary 测试方法, 测试一个点的集合大部分是在一个度小于某个值的多项式上,能达到线性级的证明复杂度和对数级的验证复杂度。在我们正式介绍 FRI 协议之前,我们先看一个简单的场景。


在有限域 F 上,存在一个乘法群 L0 ,群的阶为 2n


• 这时,证明者声称码字 f0 : L0 -> F 是满足 RS[F,L0,ρ] 编码参数的一个码字,即 f0 的大部分点在一个阶为 d<ρ∗2n 的多项式上 P(x) 上,这里 ρ=2(−R)


因此, 当 f0=P 时, 存在阶满足 deg(P1、P2)<1/2∗ρ∗2n 关系的多项式 P1、P2 满足以下等式:


f0(x)=P(x)=P1(x2)+x∗P2(x2 -- (1)


令 Q(x,y)=P1(y)+x∗P2(y) ,可以看出二元多项式 Q(x,y) 关于变量 x 的阶 d<2 ;关于变量 y 的阶 d<1/2∗ρ∗2n 且当 y=x2 ,有 Q(x,y)=f0(x) ;此时,验证者 V 随机选取一个值 x0 发送给证明者 P ,证明者 P 计算 Q(x0,y) 且令:


f1(y)=Q(x0,y)=P1(y)+x0∗P2(y)  -- (2)


对于多项式 f1(y) ,由于 y=x2 ,且 x 取值范围是群 L0 ,因此有等式 x(2n)=1 ,进一步转换为 (x2)n=1 ,因此,如果定义自变量 y 的取值范围为群 L1 ,则 L1 应具备以下属性:


• 群的阶为 2(n−1) ;

• 群 L1 的每个元素对应群 L0 的两个元素;即对于群 L1 的任意元素 y ,群 L0 都有两个元素 x 和 (−x)mod p ,满足 x2mod p=y && (−x)2mod p=y ;


至此,问题就转化为了证明者 P 证明多项式 f1(y) 的阶 满足 d<1/2∗ρ∗2n 问题;同时也要保证函数 f1 和 f0 的一致性,具体步骤如下:


a. 验证者 V 分别从群 L1 和群 L0 选取三个点 y,s0,s1 满足 s0!=s1 && s02=s12=y

b. 证明者 P 返回 f0(s0),f0(s1),f1(y) 三个值

c. 验证者 V 根据 f0(s0),f0(s1) 插值出一个阶 d<2 的多项式 g(x)

d. 验证者 V 验证 g(s0)=f1(y) ,不相等,则失败

e. //2022-01-11 修改错误描述 g(x0)=f1(y)


可靠性分析:如果函数 f1 不是由函数 f0 按照上述过程转换而来,那么公式 (1) 的多项式和 P1(x2) 和 P2(x2) 和公式 (2) 的多项式和 P1(y) 和 P2(y) 之间大概率互不相等。考虑到多项式的阶满足 d<1/2∗ρ∗2n ,变量的取值范围为 2(n−1) ,根据 Schwartz-Zippel 定理, 在这个范围内随机选取一个值,多项式相等的概率为 (1/2∗ρ∗2n) / 2(n−1)=ρ 。ρ 为编码 coderates,如果 ρ=2−8 ,那么一次校验成功的概率仅仅为 2−8 。如果经过 k 次验证,那么作恶成功的概率就等于 2−8k ,随着 k 的增大,概率无限接近 0。


对函数 f1 重复上述的过程,直到多项式 fr 变成一个可以有效判断阶的形式,就完成了整个 LDT 过程。


下面,我们看一下 FRI 协议的具体内容,如图 1 所示:


FRI 协议分为两个阶段:Commit 阶段和 Query 阶段。从前面简单的场景示例可以看出,一次交互过程需要:


a. 验证者 V 发送随机数 x0 给证明者 P ;

b. 证明者 P 生成新多项式 fi

c. 验证者 V 生成 query 的点集 s0,i,s1,i,yi 发送给证明者 P

d. 证明者 P 算对应的多项式值 fi(yi),fi−1(s0,i),fi−1(s1,i)

e. 验证者 V 进行有效性校验。


下面,先分别介绍 Commit 和 Query 协议里各参数和各个步骤的意义,然后总结一下相关的流程。


2.1 Commit:

a. Common input

 •  R : 编码比率参数

 •  i : 循环次数索引

 •  r : 循环次数,取值 (k0−R) / η

 •  η : 空间映射参数 x=>x

 •  L0 的阶:

 •  RS[F,Li,ρ] : 编码参数[ 有限域,作用域,编码比率 ]

 •  q0(x)=x , Li+1=q0(Li) ,表示群 Li 到群 Li+1 映射


b. Prover input

 • fi 第 i 次循环的函数输入

 • Li 第 i 次循环对应的群,阶为 2n−i

 • RSifi 对应的编码参数


c. LOOP i ≤ r

ⅰ. xi : 验证者 V 发送的随机数

ⅰ. Sy : 群 Li+1 的每一个元素对应于群 Li 的元素的集合

ⅱ. Pyi(X) : 基于 fi(x) 在 Sy 上的取值插值出来的多项式

ⅲ. fi+1(y)==Pyi(xi) : 表明多项式和 fi+1和 fi 之间的一致性

 • i==r

ⅰ.  生成多项式 fr

ⅱ. 插值出多项式 Pr(x)

ⅲ. 计算多项式 Pr(x) 的阶

ⅳ. 保存多项式 Pr(x) 的系数 a0,...,ad

ⅴ. Commit 阶段结束

 • i < r

ⅰ. 生成 fi+1 按照第 2 步的计算方式

ⅱ. 计算对多项式 fi+1的承诺

ⅲ. 更新相关参数,进入下一步循环


2.2 Query:

a. verifier input

 • R / η / Li / RSi / xi / fi / P(x) 见 Commit

 • l query 次数,重复多次以达到需要的安全级别


b. 重构 fr

 • 访问 oracle 获取 a0,...,ad,重构多项式 Pr(x)

 • 计算 Pr(x) 在群 Lr 上的所有取值,并赋值给 fr


c. repeat l times

 • i = {0~r-1}

ⅰ. Si 满足 si+1=q0(si) 的 si 的集合

ⅱ. 比如,从群 L0 开始,随机选取一个元素 s0 ,计算 s1=q0(s0) ,则 s1 为群 L1 的元素;但在群 L0 上满足上述关系的还有 −s0 (这里假设 q0(x)=x2 ),因此有 S0={s0,−s0} ;同样的,继续对 s1 重复进行上述运算,直到 r 次,会得到一系列的集合 S0,S1,...,Sr−1


 • i = {0~r-1}

ⅰ. 分别在步骤 1 得到的集合 S0,S1,...,Sr−1上,QUERY 多项式 fi 的取值

ⅱ. 校验返回的值与对应的多项式承诺一致(如果 COMMIT 阶段的承诺是基于 merkle 的 hash 计算,这里就需要用到多次 hash 计算,计算出 root)

ⅲ. 依次插值出 P0(x),P1(x),...,Pr−1(x)


 • round consistency check i = {0~r-1}

ⅰ. 依次校验 fi+1(si+1)=Pi(xi)

ⅱ. 如果都校验成功,则验证通过

下面,以η = 1(即 q0(x)=x2)为例,展示 FRI 协议的两个阶段的过程,如下图所示:d<ρ∗2n

由以上流程可以看出:
• 针对每一轮的一致性的校验,确保了原始多项式 f0 的确满足阶 d<ρ∗2n

• 上述协议重复 l 次,可以大大降低作恶者成功的概率


3. 总结

以上就是 FRI 协议的具体过程,可以看出,验证复杂度满足对数关系 r=Log2(ρ∗2n)。算法保证了,当且仅当原始多项式 f0 满足 d<ρ∗2n ,所有的 round consistency 校验才会通过。真正的实现可能略有差别,具体的可以参考 DEEP-FRI 论文,相对于 FRI,DEEP-FRI 在保持证明和验证的最优复杂度的同时,提高了系统的可靠性。


附录

1. 官方 FRI 的简单介绍

https://medium.com/starkware/low-degree-testing-f7614f5172db


2. FRI paper

https://eccc.weizmann.ac.il/report/2017/134/


3. DEEP-FRI paper

chrome-extension://cdonnmffkdaoajfknoeeecmchibpmkmg/assets/pdf/web/viewer.html%3Ffile%3Dhttps%253A%252F%252Farxiv.org%252Fpdf%252F1903.12243.pdf


4. Reed-Solomen WIKI 

https://en.wikipedia.org/wiki/Reed%25E2%2580%2593Solomon_error_correction

关于我们

Sin7y 成立于 2021 年,由顶尖的区块链开发者组成。我们既是项目孵化器也是区块链技术研究团队,探索 EVM、Layer2、跨链、隐私计算、自主支付解决方案等最重要和最前沿的技术。

微信公众号:Sin7y

GitHub: Sin7y

Twitter: @Sin7y_Labs

Medium: Sin7y

Mirror: Sin7y

HackMD: Sin7y

HackerNoon: Sin7y

Email: contact@sin7y.org


【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

专栏文章
查看更多
数据请求中

推荐专栏

数据请求中

一起「遇见」未来

DOWNLOAD FORESIGHT NEWS APP

Download QR Code