本文主要受 STIR 论文 作者的博客文章 STIR: Reed–Solomon Proximity Testing with Fewer Queries 与演讲 ZK11: STIR: Reed–Solomon Proximity Testing with Fewer Queries - Gal Arnon & Giacomo Fenzi 的启发,介绍 STIR 协议。
STIR 和 FRI 一样,也是解决 Reed-Solomon Proximity Testing 问题,不过与 FRI 相比,其有更低的查询复杂度,这会降低 argument 的大小与 Verifier 的哈希复杂度。那么 STIR 是如何实现这一点的呢?其实谜底就在谜面上,STIR 取了 S hift T o I mprove R ate 的首字母,STIR 的核心点就在其通过每次移动 evaluation domain,来提升码率。直观地理解,码率实际刻画的是码字中所含的真实信息的比例,码率降低,真实信息减少,对应码字中的冗余就增大了,Verifier 就更容易测试接受到的一个消息到该编码空间的 proximity 了,其测试能力变得更强了。换句话说,由于 Verifier 的测试能力变强,那么其只需要更少的查询次数就能达到目标的安全性了。下面通过对比 FRI 和 STIR,来看看 STIR 是如何降低码率的。
FRI v.s. STIR ¶ 对于一个有限域 F \mathbb{F} F ,取 L ⊆ F \mathcal{L} \subseteq \mathbb{F} L ⊆ F 为 evaluation domain,设其大小 ∣ L ∣ = n |\mathcal{L}| = n ∣ L ∣ = n ,用 d d d 表示次数界限(不妨设 n n n 与 d d d 都是 2 的幂次),那么 Reed-Solomon 编码空间 R S [ F , L , d ] \mathrm{RS}[\mathbb{F},\mathcal{L},d] RS [ F , L , d ] 包含的是所有这样的函数 f : L → F f: \mathcal{L} \rightarrow \mathbb{F} f : L → F ,函数 f f f 能与一个次数严格小于 d d d 的多项式在 L \mathcal{L} L 上的求值完全一致。码率 ρ : = d / ∣ L ∣ \rho := d/|\mathcal{L}| ρ := d /∣ L ∣ 。
协议的目标是解决 Reed-Solomon Proximity Testing 问题,其中 Verifier 是可以通过查询获得一个函数 f : L → F f: \mathcal{L} \rightarrow \mathbb{F} f : L → F 的,那么 Verifier 的目标就是在尽可能少的位置上查询 f f f 的值,能够区分出 f f f 属于下面哪一种情况:
f f f 是一个 Reed-Solomon 码字,即 f ∈ R S [ F , L , d ] f \in \mathrm{RS}[\mathbb{F},\mathcal{L},d] f ∈ RS [ F , L , d ] ;f f f 距离 Reed-Solomon 编码空间 R S [ F , L , d ] \mathrm{RS}[\mathbb{F},\mathcal{L},d] RS [ F , L , d ] 中的所有码字的相对 Hamming 距离都有 δ 那么远,即 Δ ( f , R S [ F , L , d ] ) > δ \Delta(f, \mathrm{RS}[\mathbb{F},\mathcal{L},d]) > \delta Δ ( f , RS [ F , L , d ]) > δ 。我们在 IOPP(Interactive Oracle Proofs of Proximity) 模型下考虑上述 Reed-Solomon Proximity Testing 问题,此时 Verifier 可以和 Prover 进行交互,并且能通过 oracle 获得 Prover 的消息,如下图所示。
Verifier 通过与 Prover 一系列交互之后,分两种情况:
f ∈ R S [ F , L , d ] f \in \mathrm{RS}[\mathbb{F},\mathcal{L},d] f ∈ RS [ F , L , d ] ,Verifier 接受 :)Δ ( f , R S [ F , L , d ] ) > δ \Delta(f, \mathrm{RS}[\mathbb{F},\mathcal{L},d]) > \delta Δ ( f , RS [ F , L , d ]) > δ ,Verifier 大概率拒绝 :(我们在 k k k 折的情况下对比 FRI 协议和 STIR 协议,如下图所示。
在 FRI 协议中,假设 g 1 g_1 g 1 是通过随机数 α 1 \alpha_1 α 1 进行 k k k 折得到的,其中 L k = { x k , x ∈ L } \mathcal{L}^{k} = \{x^k,x\in \mathcal{L}\} L k = { x k , x ∈ L } 。因此将测试 f ∈ R S [ F , L , d ] f \in \mathrm{RS}[\mathbb{F},\mathcal{L},d] f ∈ RS [ F , L , d ] 转换为 g 1 ∈ R S [ F , L k , d / k ] g_1 \in \mathrm{RS}[\mathbb{F},\mathcal{L}^k,d/k] g 1 ∈ RS [ F , L k , d / k ] ,递归地来测试 g i ∈ R S [ F , L k i , d / k i ] g_i \in \mathrm{RS}[\mathbb{F},\mathcal{L}^{k^i},d/k^i] g i ∈ RS [ F , L k i , d / k i ] 。因此在第 i i i 轮,其码率
ρ i = d k i ∣ L i ∣ = d k i ⋅ k i n = d n = ρ \rho_i = \frac{\frac{d}{k^i}}{|\mathcal{L}_i|} = \frac{d}{k^i} \cdot \frac{k^i}{n} = \frac{d}{n} = \rho ρ i = ∣ L i ∣ k i d = k i d ⋅ n k i = n d = ρ 可以发现在每一轮中,码率 ρ i \rho_i ρ i 始终为 ρ ,保持不变。
而在 STIR 协议中,注意 g 1 ′ g_1' g 1 ′ 仍然是 k k k 折,但是其 evaluation domain L ′ \mathcal{L}' L ′ 的大小却不是缩小 k k k 倍,而是 2 倍。此时将测试 f ∈ R S [ F , L , d ] f \in \mathrm{RS}[\mathbb{F},\mathcal{L},d] f ∈ RS [ F , L , d ] 转换为测试 g 1 ′ ∈ R S [ F , L ′ , d / k ] g_1' \in \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k] g 1 ′ ∈ RS [ F , L ′ , d / k ] 。那么在第 i i i 轮,需要测试 g i ′ ∈ R S [ F , L i ′ , d / k i ] g_i' \in \mathrm{RS}[\mathbb{F},\mathcal{L}_{i}',d/k^i] g i ′ ∈ RS [ F , L i ′ , d / k i ] 。这时
ρ i = d k i ∣ L i ′ ∣ = d k i ⋅ 2 i n = ( 2 k ) i ⋅ d n = ( 2 k ) i ⋅ ρ \rho_i = \frac{\frac{d}{k^i}}{|\mathcal{L}'_i|} = \frac{d}{k^i} \cdot \frac{2^i}{n} = \left( \frac{2}{k}\right)^i \cdot \frac{d}{n} = \left( \frac{2}{k}\right)^i \cdot \rho ρ i = ∣ L i ′ ∣ k i d = k i d ⋅ n 2 i = ( k 2 ) i ⋅ n d = ( k 2 ) i ⋅ ρ 如果 2 k < 1 \frac{2}{k} < 1 k 2 < 1 即 k > 2 k > 2 k > 2 ,可以发现码率 ρ i \rho_{i} ρ i 每一轮都在减小,这就是 STIR 降低查询复杂的关键之处。
当我们将上述的 IOPP 编译成 SNARK 时,需要用到 BCS 转换 ([BCS16], BCS transformation) ,分为两步:
将 Prover 的消息进行 Merkle 承诺,当 Verifier 想要查询时就打开这些承诺,这一步将 IOPP 转换为了一个简洁的交互论证(succinct interactive argument) 。 使用 Fait-Shamir 转换将第一步得到的简洁的交互论证转换为非交互的。 在BCS转换中,就需要 IOPP 有一个比较强的 soundness 性质,称为 round-by-round soundness,意思是要求 IOPP 在每一轮有比较小的 soundness error,这比要求整个 IOPP 有比较小的 soundness error 要求更强。我们假设要求 round-by-round soundness error 的界为 2 − λ 2^{-\lambda} 2 − λ 。每一轮可以重复查询 t i t_{i} t i 次,整个 IOPP 协议进行 M M M 轮,那么整个证明的总查询复杂度就为 ∑ i = 0 M t i \sum_{i = 0}^M t_i ∑ i = 0 M t i 。对于 δ 达到 Johnson bound,即 δ = 1 − ρ \delta = 1 - \sqrt{\rho} δ = 1 − ρ ,通过计算可以得到
FRI 的查询复杂度为:
O ( λ ⋅ log d − log ρ ) O \left( \lambda \cdot \frac{\log d}{- \log \sqrt{\rho}} \right) O ( λ ⋅ − log ρ log d ) STIR 的查询复杂度为:
O ( λ ⋅ log ( log d − log ρ ) + log d ) O \left( \lambda \cdot \log \left( \frac{\log d}{- \log \sqrt{\rho}} \right) + \log d \right) O ( λ ⋅ log ( − log ρ log d ) + log d ) 在 STIR 查询复杂度中,d d d 通常不大,因此占比比较大的是第一项 λ ⋅ log ( log d − log ρ ) \lambda \cdot \log \left( \frac{\log d}{- \log \sqrt{\rho}} \right) λ ⋅ log ( − l o g ρ l o g d ) ,可以发现其是 log log \log \log log log 级别的,而原来的 FRI 只是 log \log log 级别。
在论文 [ACFY24] 6.4 节中的图 2 给出了 FRI 和 STIR 的对比试验结果,可以发现 STIR 降低查询复杂度导致了其在 argument 大小和 Verifier 计算的哈希数量相比 FRI 更优。这也比较好理解,更少的查询复杂度意味着:
减少整个 argument 大小是显然的。 由于查询次数更少,那么 Verifier 需要打开的 Merkle 承诺就更少,计算对应的哈希数量就更少。 关于 RS 编码的强有力的工具 ¶ 在这里先引入几个关于 RS 编码的强大工具,其能帮助我们理解具体的 STIR 协议构造。
Folding ¶ 对于一个函数 f : L → F f: \mathcal{L} \rightarrow \mathbb{F} f : L → F ,给一个随机数 r ∈ F r \in \mathbb{F} r ∈ F ,其 k k k 次折叠之后的函数记为 f r : = F o l d ( f , r ) : L k → F f_r := \mathrm{Fold}(f,r) : \mathcal{L}^{k} \rightarrow \mathbb{F} f r := Fold ( f , r ) : L k → F 。其定义为,对于每一个 x ∈ L k x \in \mathcal{L}^{k} x ∈ L k ,在 L \mathcal{L} L 中能找到 k k k 个 y y y 满足 y k = x y^k = x y k = x ,由 k k k 对 ( y , f ( y ) ) (y, f(y)) ( y , f ( y )) 可以得到唯一的一个次数小于 k k k 的多项式 p ^ \hat{p} p ^ ,其满足 p ^ ( y ) = f ( y ) \hat{p}(y) = f(y) p ^ ( y ) = f ( y ) ,那么 p ^ ( r ) \hat{p}(r) p ^ ( r ) 就是函数 f r ( x ) f_r(x) f r ( x ) 的值。这个 Fold 函数的定义和 FRI 协议中的 Fold 函数定义完全一致,其有两个很好的性质。
第一个性质是距离的保持。
如果折叠前的函数 f ∈ R S [ F , L , d ] f \in \mathrm{RS}[\mathbb{F}, \mathcal{L}, d] f ∈ RS [ F , L , d ] ,那么对于任意选取的随机数 r ∈ F r \in \mathbb{F} r ∈ F ,都有折叠之后的函数依然是 RS 码,即 f r ∈ R S [ F , L k , d / k ] f_r \in \mathrm{RS}[\mathbb{F}, \mathcal{L}^k, d/k] f r ∈ RS [ F , L k , d / k ] 。 对于 δ ∈ ( 0 , 1 − ρ ) \delta \in (0, 1 - \sqrt{\rho}) δ ∈ ( 0 , 1 − ρ ) ,如果 f f f 距离 R S [ F , L , d ] \mathrm{RS}[\mathbb{F}, \mathcal{L}, d] RS [ F , L , d ] 有 δ 远,那么以至少 1 − p o l y ( ∣ L ∣ ) / F 1 - \mathrm{poly}(|\mathcal{L}|)/\mathbb{F} 1 − poly ( ∣ L ∣ ) / F 的概率对随机数 r r r 进行选择,有 f r f_r f r 距离 R S [ F , L k , d / k ] \mathrm{RS}[\mathbb{F}, \mathcal{L}^k, d/k] RS [ F , L k , d / k ] 有 δ 远。 这个性质保证了我们可以大胆进行折叠,如果 Prover 作弊,提供了距离编码空间有 δ 远的函数,极大概率其折叠之后的函数依然距离对应的编码空间有 δ 远。
第二个性质称为 Local,意思是如果要得到折叠后的函数在任意一点的值,只需要查询 f f f 在 k k k 个点的值就能计算得出,因为此时可以得到唯一一个次数小于 k k k 的多项式 p ^ \hat{p} p ^ ,再带入 r r r 计算得到 p ^ ( r ) \hat{p}(r) p ^ ( r ) 就是该点的值。此时 Prover 也不需要单独提供 F o l d ( f , r ) \mathrm{Fold}(f,r) Fold ( f , r ) 的 oracle 了,Verifier 通过访问 f f f 的 oracle 就能得到了,这就减少了 argument 大小。
Quotienting ¶ 对于函数 f : L → F f: \mathcal{L} \rightarrow \mathbb{F} f : L → F ,以及 p : S → F p: S \rightarrow \mathbb{F} p : S → F ,其中 S ⊆ F S \subseteq \mathbb{F} S ⊆ F ,则关于函数 f f f 的 quotient 定义为:
Q u o t i e n t ( f , S , p ) ( x ) : = f ( x ) − p ^ ( x ) ∏ a ∈ S ( X − a ) , \mathrm{Quotient}(f, S, p)(x) := \frac{f(x) - \hat{p}(x)}{\prod_{a \in S}(X - a)}, Quotient ( f , S , p ) ( x ) := ∏ a ∈ S ( X − a ) f ( x ) − p ^ ( x ) , 其中 p ^ \hat{p} p ^ 是满足对任意的 a ∈ S a \in S a ∈ S ,都有 p ^ ( a ) = p ( a ) \hat{p}(a) = p(a) p ^ ( a ) = p ( a ) 的次数小于 ∣ S ∣ |S| ∣ S ∣ 的唯一的多项式。
该函数的一个重要性质是一致性(Consistency) ,假设 S S S 与 L \mathcal{L} L 不相交(其实也可以相交,结论会更复杂些,见[ACFY24] Lemma 4.4),那么
如果 f ∈ R S [ F , L , d ] f \in \mathrm{RS}[\mathbb{F}, \mathcal{L}, d] f ∈ RS [ F , L , d ] ,其是一个次数小于 d d d 的多项式在 L \mathcal{L} L 上的 evaluation,并且该多项式在 S S S 上与 p p p 一致,那么 Q u o t i e n t ( f , S , p ) ∈ R S [ F , L , d − ∣ S ∣ ] \mathrm{Quotient}(f, S, p) \in \mathrm{RS}[\mathbb{F}, \mathcal{L}, d - |S|] Quotient ( f , S , p ) ∈ RS [ F , L , d − ∣ S ∣ ] 。 如果对于任意一个离 f f f 有 δ 近的次数小于 d d d 的多项式 u ^ \hat{u} u ^ ,都有 u ^ \hat{u} u ^ 与 p p p 在 S S S 上不完全一致,即对于一些 a ∈ S a \in S a ∈ S ,有 u ^ ( a ) ≠ p ( a ) \hat{u}(a) \neq p(a) u ^ ( a ) = p ( a ) ,那么 Q u o t i e n t ( f , S , p ) \mathrm{Quotient}(f, S, p) Quotient ( f , S , p ) 距离 R S [ F , L , d − ∣ S ∣ ] \mathrm{RS}[\mathbb{F}, \mathcal{L}, d - |S|] RS [ F , L , d − ∣ S ∣ ] 就有 δ 远。 对于上述第 2 点,在 f f f 的 δ 范围内的码字 u ^ \hat{u} u ^ ,这些码字组成的集合记为 L i s t ( f , d , δ ) \mathrm{List}(f,d,\delta) List ( f , d , δ ) 。对于任意的 u ^ ∈ L i s t ( f , d , δ ) \hat{u} \in \mathrm{List}(f,d,\delta) u ^ ∈ List ( f , d , δ ) ,只要在 S S S 上有一点,使得 u ^ ( a ) ≠ p ( a ) \hat{u}(a) \neq p(a) u ^ ( a ) = p ( a ) ,商多项式 Q u o t i e n t ( f , S , p ) \mathrm{Quotient}(f, S, p) Quotient ( f , S , p ) 的距离就被放大了,就有 δ 那么远了,也就是如果这里被除了错误的值 f ( a ) − p ( a ) f(a) - p(a) f ( a ) − p ( a ) ,商多项式距离低次多项式所在的 RS 编码空间就很远了。
注意到这里要求任意的 u ^ ∈ L i s t ( f , d , δ ) \hat{u} \in \mathrm{List}(f,d,\delta) u ^ ∈ List ( f , d , δ ) ,都有 u ^ \hat{u} u ^ 与 p p p 在 S S S 上不一致。而用 Out of Domain Sampling 的方法,我们可以将 f f f 在 δ 范围内的码字以极大概率限制到最多一个,这会使得 Verifier 更容易去检测。我们将在下一小节详细介绍该方法。
Q u o t i e n t \mathrm{Quotient} Quotient 函数可以帮助我们实现在函数 f f f 上添加约束。例如想限制 f f f 在点 a a a 处的值为 b b b ,那么可以通过 Q u o t i e n t ( f , { a } , p ) \mathrm{Quotient}(f, \{a\}, p) Quotient ( f , { a } , p ) 来实现,其中 p ( a ) = b p(a) = b p ( a ) = b ,即
Q u o t i e n t ( f , { a } , p ) = f ( x ) − p ( x ) x − a \mathrm{Quotient}(f, \{a\}, p) = \frac{f(x) - p(x)}{x - a} Quotient ( f , { a } , p ) = x − a f ( x ) − p ( x ) 接着证明 Q u o t i e n t ( f , { a } , p ) ∈ R S [ F , L , d − 1 ] \mathrm{Quotient}(f, \{a\}, p) \in \mathrm{RS}[\mathbb{F}, \mathcal{L}, d - 1] Quotient ( f , { a } , p ) ∈ RS [ F , L , d − 1 ] 就可以了。如果 Prover 提供的 f f f 在 a a a 点的值不为 b b b ,即 f ( a ) ≠ b f(a) \neq b f ( a ) = b ,那么 f ( a ) ≠ p ( a ) f(a) \neq p(a) f ( a ) = p ( a ) ,就会导致 Q u o t i e n t ( f , { a } , p ) \mathrm{Quotient}(f, \{a\}, p) Quotient ( f , { a } , p ) 距离 R S [ F , L , d − 1 ] \mathrm{RS}[\mathbb{F}, \mathcal{L}, d - 1] RS [ F , L , d − 1 ] 有 δ 远,就容易被 Verifier 检测出来了。这里只添加了一个约束,自然可以添加多个约束,这样就能在 f f f 添加约束的同时将测试 f f f 转换为测试 Q u o t i e n t \mathrm{Quotient} Quotient 函数距离对应的 RS 编码空间有 δ 近了。
Q u o t i e n t \mathrm{Quotient} Quotient 函数和折叠函数一样有 Local 性质。要计算 Q u o t i e n t \mathrm{Quotient} Quotient 函数在点 x ∈ L \ S x \in \mathcal{L}\backslash\mathcal{S} x ∈ L \ S 的值,通过查询函数 f f f 在 x x x 点的值就可以计算得出。
Out of Domain Sampling ¶ Out of Domain Sampling 是一种强大的工具,其可以帮助我们限制 Prover 提供的函数 f f f 在 δ 范围内的码字数量,这样就就可以将 List Decoding 转换为 Unique Decoding 了。
对于函数 f : L → F f: \mathcal{L} \rightarrow \mathbb{F} f : L → F ,Verifier 从区域 L \mathcal{L} L 之外随机选取一个数 α ∈ F \ L \alpha \in \mathbb{F} \backslash \mathcal{L} α ∈ F \ L ,Prover 返回值 β ,那么在 f f f 的 δ 范围内的码字列表 L i s t ( f , d , δ ) \mathrm{List}(f,d,\delta) List ( f , d , δ ) 中,大概率最多只有一个码字 u ^ \hat{u} u ^ 满足 u ^ ( α ) = β \hat{u}(\alpha) = \beta u ^ ( α ) = β 。
可以用代数基本定理来说明这一点。我们只要证明在 L i s t ( f , d , δ ) \mathrm{List}(f,d,\delta) List ( f , d , δ ) 中存在两个不同的码字 u ^ ′ \hat{u}' u ^ ′ 与 u ^ \hat{u} u ^ ,它们在 α 点的值都相等的概率比较小就可以了,这也就说明了大概率最多有一个码字满足 u ^ ( α ) = β \hat{u}(\alpha) = \beta u ^ ( α ) = β 。
先固定两个不同的码字 u ^ ′ \hat{u}' u ^ ′ 与 u ^ \hat{u} u ^ ,由于它们是不同的码字并且次数都小于 d d d ,则由代数基本定理可以得到
Pr α ← F \ L [ u ^ ′ ( α ) = u ^ ( α ) ] ≤ d − 1 ∣ F ∣ − ∣ L ∣ \Pr_{\alpha \leftarrow \mathbb{F} \backslash \mathcal{L}} [\hat{u}'(\alpha) = \hat{u}(\alpha)] \le \frac{d - 1}{|\mathbb{F}| - |\mathcal{L}|} α ← F \ L Pr [ u ^ ′ ( α ) = u ^ ( α )] ≤ ∣ F ∣ − ∣ L ∣ d − 1 假设 R S [ F , L , d ] \mathrm{RS}[\mathbb{F}, \mathcal{L},d] RS [ F , L , d ] 是 ( δ , l ) (\delta, l) ( δ , l ) 可列表解码的,意思就是在 δ 范围内的码字数量最多为 l l l 个,那么任意选取不同的两个码字 u ^ ′ \hat{u}' u ^ ′ 与 u ^ \hat{u} u ^ 的选法就有 ( l 2 ) \binom{l}{2} ( 2 l ) 种。因此任意选取两个不同的码字 u ^ ′ \hat{u}' u ^ ′ 与 u ^ \hat{u} u ^ ,它们在 α 点的值相等的概率不超过 ( l 2 ) ⋅ d − 1 ∣ F ∣ − ∣ L ∣ \binom{l}{2} \cdot \frac{d - 1}{|\mathbb{F}| - |\mathcal{L}|} ( 2 l ) ⋅ ∣ F ∣ − ∣ L ∣ d − 1 。这个概率是非常小的,因此得证。
如何去限制 Prover 发送过来的 β 真的是 f f f 在点 a a a 处的值呢?用上一小节引入的工具 Quotient 就能做到啦。
深入 STIR 协议的一次迭代 ¶ 在这一节中将应用前面提到的三个工具,深入 STIR 协议中的一次迭代。
目标:
初始给定一个函数 f f f ,想证明其在 R S [ F , L , d ] \mathrm{RS}[\mathbb{F},\mathcal{L},d] RS [ F , L , d ] 中,其中 L = ⟨ ω ⟩ \mathcal{L} =\langle \omega \rangle L = ⟨ ω ⟩ 。 经过一次迭代后,证明函数 f ′ ∈ R S [ F , L ′ , d / k ] f' \in \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k] f ′ ∈ RS [ F , L ′ , d / k ] ,其中 L ′ = ω ⋅ ⟨ ω 2 ⟩ \mathcal{L}' = \omega \cdot \langle \omega^2 \rangle L ′ = ω ⋅ ⟨ ω 2 ⟩ 。 也就是函数 f f f 进行了 k k k 折,其次数降为 d / k d/k d / k ,但是一次迭代后的函数 f ′ f' f ′ 的 evaluation domain L ′ \mathcal{L}' L ′ 的大小并不是缩小 k k k 倍,而是 2 倍。这就是前面提到的 STIR 协议的核心思想,通过提升码率来降低查询复杂度。
关于 evaluation domain L = ⟨ ω ⟩ \mathcal{L} =\langle \omega \rangle L = ⟨ ω ⟩ 与 L ′ = ω ⋅ ⟨ ω 2 ⟩ \mathcal{L}' = \omega \cdot \langle \omega^2 \rangle L ′ = ω ⋅ ⟨ ω 2 ⟩ ,这里举一个例子来说明。假设 ω 8 = 1 \omega^8 = 1 ω 8 = 1 。
这样构造的 L ′ \mathcal{L}' L ′ 相比 L \mathcal{L} L 大小减少了一半,但其实 ⟨ ω 2 ⟩ \langle \omega^2 \rangle ⟨ ω 2 ⟩ 也能满足减少一半的要求,为什么不选择 L ′ = ⟨ ω 2 ⟩ \mathcal{L}' = \langle \omega^2 \rangle L ′ = ⟨ ω 2 ⟩ 呢?假设我们进行 k = 4 k = 4 k = 4 折,我们能保证 L 4 = { ω 4 , ω 8 } \mathcal{L}^4 = \{\omega^4, \omega^8\} L 4 = { ω 4 , ω 8 } 与 L ′ = { ω 1 , ω 3 , ω 5 , ω 7 } \mathcal{L}' = \{\omega^1, \omega^3,\omega^5, \omega^7\} L ′ = { ω 1 , ω 3 , ω 5 , ω 7 } 不相交。这样做的好处是能避免构造 L 4 ∩ L ′ \mathcal{L}^4 \cap \mathcal{L}' L 4 ∩ L ′ 中的相交点定义的函数 F i l l \mathrm{Fill} Fill ,这样 Verifier 就不用额外检查 F i l l \mathrm{Fill} Fill 的函数值是否正确了([ACFY24] Remark 5.3 说明了这一点)。
一次迭代的协议流程如下图所示:
取样折叠随机数(Sample folding randomness): Verifier 先从 F \mathbb{F} F 中随机选取一个数 r f o l d r^{\mathrm{fold}} r fold ,这个随机数将用于折叠函数 f f f 。 发送折叠函数(Send folded function): Prover 发送折叠后的函数 g : L ′ → F g: \mathcal{L}' \rightarrow \mathbb{F} g : L ′ → F 。如果 Prover 是诚实的,那么函数 g g g 是多项式 g ^ \hat{g} g ^ 在 L ′ \mathcal{L}' L ′ 上的 evaluation 。这里 evaluation 的意思就是 g g g 与 g ^ \hat{g} g ^ 在 L ′ \mathcal{L}' L ′ 上的值完全一致,而多项式 g ^ \hat{g} g ^ 是通过 F o l d ( f , r f o l d ) \mathrm{Fold}(f, r^{\mathrm{fold}}) Fold ( f , r fold ) 得到的。首先用随机数 r f o l d r^{\mathrm{fold}} r fold 对函数 f f f 进行 k k k 次折叠,得到了 F o l d ( f , r f o l d ) : L k → F \mathrm{Fold}(f, r^{\mathrm{fold}}) : \mathcal{L}^k \rightarrow \mathbb{F} Fold ( f , r fold ) : L k → F ,此时折叠函数的取值范围是 L k \mathcal{L}^k L k ,我们想要的是在 L ′ \mathcal{L}' L ′ 上取值,这时只需将 F o l d ( f , r f o l d ) \mathrm{Fold}(f, r^{\mathrm{fold}}) Fold ( f , r fold ) 的定义域扩展(extension) 到 L ′ \mathcal{L}' L ′ 上即可,就得到了多项式 g ^ : L ′ → F \hat{g}: \mathcal{L}' \rightarrow \mathbb{F} g ^ : L ′ → F ,其次数小于 d / k d/k d / k 。 Out-of-domain sample: Verifier 从 F \ L ′ \mathbb{F}\backslash \mathcal{L}' F \ L ′ 中取一个随机数 r o u t r^{\mathrm{out}} r out ,发送给 Prover 。 Out-of-domain reply: Prover 答复 β ∈ F \beta \in \mathbb{F} β ∈ F 。如果 Prover 是诚实的,那么 β : = g ^ ( r o u t ) \beta := \hat{g}(r^{\mathrm{out}}) β := g ^ ( r out ) 。 📝 Notes
这里第 3 步和第 4 步的目的是为了用 Out of domain Sampling 来将 g ′ g' g ′ 在 δ 范围内的码字数量限制为最多一个,能将列表解码转换为唯一解码。
Shift queries: Verifier 从 ⟨ ω k ⟩ \langle \omega^k \rangle ⟨ ω k ⟩ 中选取 t t t 个随机数,即 ∀ i ∈ [ t ] , r i s h i f t ← ⟨ ω k ⟩ \forall i \in [t],r_i^{\mathrm{shift}} \leftarrow \langle \omega^k \rangle ∀ i ∈ [ t ] , r i shift ← ⟨ ω k ⟩ 。根据折叠函数的 Local 性质,Verifier 通过查询 f f f 可计算得到 y i : = f f o l d ( r i s h i f t ) y_i := f_{\mathrm{fold}}(r_i^{\mathrm{shift}}) y i := f fold ( r i shift ) ,其中 f f o l d : = F o l d ( f , r f o l d ) f_{\mathrm{fold}} :=\mathrm{Fold}(f, r^{\mathrm{fold}}) f fold := Fold ( f , r fold ) 。 在第 2 步中 Prover 发送了 g : L ′ → F g: \mathcal{L}' \rightarrow \mathbb{F} g : L ′ → F 并且 Prover 声称其与 F o l d ( f , r f o l d ) \mathrm{Fold}(f, r^{\mathrm{fold}}) Fold ( f , r fold ) 在 L ′ \mathcal{L}' L ′ 上的取值是一致的,但是 Verfier 无法直接查询折叠函数在 L ′ \mathcal{L}' L ′ 上的值, Verifier 只能通过查询 f f f 的方式来计算得到 F o l d ( f , r f o l d ) \mathrm{Fold}(f, r^{\mathrm{fold}}) Fold ( f , r fold ) 在 L k \mathcal{L}^k L k 上的取值。好在这里可以用到 Quotient 工具来保证一致性。
在第 3 步和第 4 步先用 Out-of-domain Sampling 的方法限制 g g g 在 δ 范围内的码字数量最多为一个,设为 u ^ \hat{u} u ^ ,然后在第 5 步查询 F o l d ( f , r f o l d ) \mathrm{Fold}(f, r^{\mathrm{fold}}) Fold ( f , r fold ) 在 L k \mathcal{L}^k L k 上的值,这里方便后续验证 u ^ \hat{u} u ^ 与折叠函数在 L k \mathcal{L}^k L k 上的值是否一致。验证是否一致就交给 Quotient 函数了。
将所有这些要确保一致性的点组成集合 G : = { r o u t , r 1 s h i f t , … , r t s h i f t } \mathcal{G} := \{r^{\mathrm{out}},r_1^{\mathrm{shift}}, \ldots, r_t^{\mathrm{shift}}\} G := { r out , r 1 shift , … , r t shift } ,然后定义函数 p : G → F p: \mathcal{G}\rightarrow \mathbb{F} p : G → F ,其满足:
p ( r o u t ) = β , p(r^{\mathrm{out}}) = \beta, p ( r out ) = β , p ( r i s h i f t ) = y i . p(r_i^{\mathrm{shift}}) = y_i. p ( r i shift ) = y i . 定义下一步的函数 f ′ f' f ′ 为
f ′ : = Q u o t i e n t ( f , G , p ) = g ( x ) − p ^ ( x ) ∏ a ∈ G ( X − a ) . f' := \mathrm{Quotient}(f, \mathcal{G}, p) = \frac{g(x) - \hat{p}(x)}{\prod_{a \in \mathcal{G}}(X - a)}. f ′ := Quotient ( f , G , p ) = ∏ a ∈ G ( X − a ) g ( x ) − p ^ ( x ) . 由于 Quotient 函数具有 Local 性质,因此想要计算 f ′ f' f ′ 在 L ′ \mathcal{L}' L ′ 上的值,只需要查询 g g g 在 L ′ \mathcal{L}' L ′ 上的值就可以了。
至此,接下来测试 f ′ f' f ′ 距离 R S [ F , L ′ , d / k ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k] RS [ F , L ′ , d / k ] 是否有 δ 近就可以了。
细看 f ′ f' f ′ 的公式,可以发现 Prover 诚实情况下 f ′ ∈ R S [ F , L ′ , d / k − ∣ G ∣ ] f' \in \mathrm{RS}[\mathbb{F}, \mathcal{L}', d/k - |\mathcal{G}|] f ′ ∈ RS [ F , L ′ , d / k − ∣ G ∣ ] ,这里其实出现了多项式次数的降低,需要进行次数校正 (degree correction) ,将 f ′ f' f ′ 的次数校正为 d / k d/k d / k 。关于这一点将在后文进行介绍。
Soundness 分析 ¶ 在本小节将对一次迭代进行 soundness 分析,即如果 Prover 作弊, f f f 距离 R S [ F , L , d ] \mathrm{RS}[\mathbb{F},\mathcal{L},d] RS [ F , L , d ] 有 δ 远,来分析 f ′ f' f ′ 距离 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] 也比较远的概率。[ACFY24] Lemma 1 给出了如下的结论:
命题 1 [ACFY24, Lemma 1] 如果 f f f 距离 R S [ F , L , d ] \mathrm{RS}[\mathbb{F},\mathcal{L},d] RS [ F , L , d ] 有 δ 远,那么除了概率为 ( 1 − δ ) t + p o l y ( ∣ L ∣ ) / ∣ F ∣ (1 - \delta)^t + \mathrm{poly}(|\mathcal{L}|)/|\mathbb{F}| ( 1 − δ ) t + poly ( ∣ L ∣ ) /∣ F ∣ 的情况,f ′ f' f ′ 距离 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] (大约) 有 ( 1 − ρ ′ ) (1 - \sqrt{\rho'}) ( 1 − ρ ′ ) 远。
证明思路:
根据折叠函数保持距离的性质,对 f f f 用随机数 r f o l d r^{\mathrm{fold}} r fold 折叠之后得到的函数 f r f o l d : = F o l d ( f , r f o l d ) f_{r^{\mathrm{fold}}} := \mathrm{Fold}(f, r^{\mathrm{fold}}) f r fold := Fold ( f , r fold ) 距离 R S [ F , L k , d / k ] \mathrm{RS}[\mathbb{F},\mathcal{L}^k,d/k] RS [ F , L k , d / k ] 有 δ 远的概率超过 1 − p o l y ( ∣ L ∣ / ∣ F ∣ ) 1 - \mathrm{poly}(|\mathcal{L}|/|\mathbb{F}|) 1 − poly ( ∣ L ∣/∣ F ∣ ) 。 根据 Out-of-domain Sampling 的性质,g g g 在 1 − ρ ′ 1 - \sqrt{\rho'} 1 − ρ ′ 范围内最多有一个码字 u ^ \hat{u} u ^ 满足 u ^ ( r o u t ) = β \hat{u}(r^{\mathrm{out}}) = \beta u ^ ( r out ) = β 的概率超过 1 − p o l y ( ∣ L ∣ ) / ∣ F ∣ 1 - \mathrm{poly}(|\mathcal{L}|)/|\mathbb{F}| 1 − poly ( ∣ L ∣ ) /∣ F ∣ 。 现在分析下第 2 点,函数 g : L ′ → F g: \mathcal{L}' \rightarrow \mathbb{F} g : L ′ → F ,现在考虑其与编码空间 R S [ F , L ′ , d / k ] \mathrm{RS}[\mathbb{F}, \mathcal{L}', d/k] RS [ F , L ′ , d / k ] 的距离。根据 Johnson 界,R S [ F , L ′ , d / k ] \mathrm{RS}[\mathbb{F}, \mathcal{L}', d/k] RS [ F , L ′ , d / k ] 是 ( γ , l ) (\gamma, l) ( γ , l ) - 可列表解码(list-decodable)的,其中 γ ≈ 1 − ρ ′ \gamma \approx 1 - \sqrt{\rho'} γ ≈ 1 − ρ ′ , l = p o l y ( ∣ L ′ ∣ ) = p o l y ( ∣ L ∣ ) l = \mathrm{poly}(|\mathcal{L}'|) =\mathrm{poly}(|\mathcal{L}|) l = poly ( ∣ L ′ ∣ ) = poly ( ∣ L ∣ ) ,也就是最多有 l l l 个次数小于 d / k d/k d / k 的多项式距离 g g g 不超过 γ 。那么在 l l l 个多项式中任意选取两个不同的多项式 u ^ ′ \hat{u}' u ^ ′ 与 u ^ \hat{u} u ^ ,从 F \ L ′ \mathbb{F} \backslash \mathcal{L}' F \ L ′ 中选取随机数 r o u t r^{\mathrm{out}} r out ,它们在 r o u t r^{\mathrm{out}} r out 点的值都等于 β 的概率不超过 d / k − 1 ∣ F ∣ − ∣ L ′ ∣ \frac{d/k - 1}{|\mathbb{F}| - |\mathcal{L}'|} ∣ F ∣ − ∣ L ′ ∣ d / k − 1 。这两个多项式的选取方法有 ( l 2 ) \binom{l}{2} ( 2 l ) 种,因此这个概率不超过
( l 2 ) ⋅ d / k − 1 ∣ F ∣ − ∣ L ′ ∣ = O ( l 2 ⋅ ( d / k − 1 ) ∣ F ∣ − ∣ L ′ ∣ ) = p o l y ( ∣ L ∣ ) / ∣ F ∣ . \binom{l}{2} \cdot \frac{d/k - 1}{|\mathbb{F}| - |\mathcal{L}'|} = O\left(\frac{l^2 \cdot (d/k - 1)}{|\mathbb{F}| - |\mathcal{L}'|}\right) = \mathrm{poly}(|\mathcal{L}|)/|\mathbb{F}|. ( 2 l ) ⋅ ∣ F ∣ − ∣ L ′ ∣ d / k − 1 = O ( ∣ F ∣ − ∣ L ′ ∣ l 2 ⋅ ( d / k − 1 ) ) = poly ( ∣ L ∣ ) /∣ F ∣. 因此 g g g 在 1 − ρ ′ 1 - \sqrt{\rho'} 1 − ρ ′ 范围内最多有一个码字 u ^ \hat{u} u ^ 满足 u ^ ( r o u t ) = β \hat{u}(r^{\mathrm{out}}) = \beta u ^ ( r out ) = β 的概率超过 1 − p o l y ( ∣ L ∣ ) / ∣ F ∣ 1 - \mathrm{poly}(|\mathcal{L}|)/|\mathbb{F}| 1 − poly ( ∣ L ∣ ) /∣ F ∣ 。
如果第 1 项和第 2 项都成立,那么这个概率超过 1 − p o l y ( ∣ L ∣ ) / ∣ F ∣ 1 - \mathrm{poly}(|\mathcal{L}|)/|\mathbb{F}| 1 − poly ( ∣ L ∣ ) /∣ F ∣ ,现在只需证明 f ′ f' f ′ 距离 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] (大约) 有 ( 1 − ρ ′ ) (1 - \sqrt{\rho'}) ( 1 − ρ ′ ) 远的概率至少为 1 − ( 1 − δ ) t 1 - (1 - \delta)^t 1 − ( 1 − δ ) t 即可。
下面分两种情况进行讨论:
如果在第 2 项中没有码字满足要求,即在 g g g 的 1 − ρ ′ 1 - \sqrt{\rho'} 1 − ρ ′ 范围内没有码字满足 u ^ ( r o u t ) = β \hat{u}(r^{\mathrm{out}}) = \beta u ^ ( r out ) = β ,而根据协议的构造,p ( r o u t ) = β p(r^{\mathrm{out}}) = \beta p ( r out ) = β 。因此对于 g g g 的 1 − ρ ′ 1 - \sqrt{\rho'} 1 − ρ ′ 范围内的任意一个码字有 u ^ ( r o u t ) ≠ p ( r o u t ) \hat{u}(r^{\mathrm{out}}) \neq p(r^{\mathrm{out}}) u ^ ( r out ) = p ( r out ) 。由于
f ′ : = Q u o t i e n t ( g , G , p ) = g ( x ) − p ^ ( x ) ∏ a ∈ G ( X − a ) . f' := \mathrm{Quotient}(g, \mathcal{G}, p) = \frac{g(x) - \hat{p}(x)}{\prod_{a \in \mathcal{G}}(X - a)}. f ′ := Quotient ( g , G , p ) = ∏ a ∈ G ( X − a ) g ( x ) − p ^ ( x ) . 根据 Quotient 函数的一致性,此时 u ^ \hat{u} u ^ 与 p p p 在 G \mathcal{G} G 上不完全一致,那么 f ′ = Q u o t i e n t ( f , G , p ) f' = \mathrm{Quotient}(f, \mathcal{G}, p) f ′ = Quotient ( f , G , p ) 距离 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] 就有 ( 1 − ρ ′ ) (1 - \sqrt{\rho'}) ( 1 − ρ ′ ) 远。
如果在第 2 项中存在一个码字 u ^ \hat{u} u ^ 满足要求,在 g g g 的 1 − ρ ′ 1 - \sqrt{\rho'} 1 − ρ ′ 范围已经存在了一个码字满足 u ^ ( r o u t ) = β \hat{u}(r^{\mathrm{out}}) = \beta u ^ ( r out ) = β 。根据
f ′ : = Q u o t i e n t ( g , G , p ) = g ( x ) − p ^ ( x ) ∏ a ∈ G ( X − a ) . f' := \mathrm{Quotient}(g, \mathcal{G}, p) = \frac{g(x) - \hat{p}(x)}{\prod_{a \in \mathcal{G}}(X - a)}. f ′ := Quotient ( g , G , p ) = ∏ a ∈ G ( X − a ) g ( x ) − p ^ ( x ) . 现在已经满足 u ^ ( r o u t ) = β = p ( r o u t ) \hat{u}(r^{\mathrm{out}}) = \beta = p(r^{\mathrm{out}}) u ^ ( r out ) = β = p ( r out ) ,如果对于任意的 i ∈ [ t ] i \in [t] i ∈ [ t ] ,有 u ^ ( r i s h i f t ) = y i = p ( r i s h i f t ) \hat{u}(r_i^{\mathrm{shift}}) = y_i = p(r_i^{\mathrm{shift}}) u ^ ( r i shift ) = y i = p ( r i shift ) ,那么 f ′ = Q u o t i e n t ( f , G , p ) f' = \mathrm{Quotient}(f, \mathcal{G}, p) f ′ = Quotient ( f , G , p ) 距离 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] 不超过 ( 1 − ρ ′ ) (1 - \sqrt{\rho'}) ( 1 − ρ ′ ) 。否则根据 Quotient 函数的一致性,一旦对于某一个 i i i 有 u ^ ( r i s h i f t ) ≠ y i \hat{u}(r_i^{\mathrm{shift}}) \neq y_i u ^ ( r i shift ) = y i ,此时 u ^ ( r i s h i f t ) ≠ p ( r i s h i f t ) \hat{u}(r_i^{\mathrm{shift}}) \neq p(r_i^{\mathrm{shift}}) u ^ ( r i shift ) = p ( r i shift ) ,就会导致 f ′ f' f ′ 距离 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] 有 ( 1 − ρ ′ ) (1 - \sqrt{\rho'}) ( 1 − ρ ′ ) 远。
由于第 1 项成立,因此对于折叠函数有 Δ ( f r f o l d , R S [ F , L k , d / k ] ) ≥ δ \Delta(f_{r^{\mathrm{fold}}}, \mathrm{RS}[\mathbb{F}, \mathcal{L}^k, d/k]) \ge \delta Δ ( f r fold , RS [ F , L k , d / k ]) ≥ δ ,因此
Pr [ ∀ i ∈ [ t ] , u ^ ( r i s h i f t ) = y i ] = Pr [ ∀ i ∈ [ t ] , u ^ ( r i s h i f t ) = f r f o l d ( r i s h i f t ) ] ≤ ( 1 − δ ) t . \begin{aligned}
\Pr \left[\forall i \in [t], \hat{u}(r_i^{\mathrm{shift}}) = y_i \right] & = \Pr \left[\forall i \in [t], \hat{u}(r_i^{\mathrm{shift}}) = f_{r^{\mathrm{fold}}}(r_i^{\mathrm{shift}}) \right] \\
& \le (1 - \delta)^t.
\end{aligned} Pr [ ∀ i ∈ [ t ] , u ^ ( r i shift ) = y i ] = Pr [ ∀ i ∈ [ t ] , u ^ ( r i shift ) = f r fold ( r i shift ) ] ≤ ( 1 − δ ) t . 因此 f ′ f' f ′ 距离 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] (大约) 有 ( 1 − ρ ′ ) (1 - \sqrt{\rho'}) ( 1 − ρ ′ ) 远的概率至少为 1 − ( 1 − δ ) t 1 - (1 - \delta)^t 1 − ( 1 − δ ) t 。
至此命题 1 得证。\Box
实际上,协议的 round-by-round soundness error 大概就为 max { p o l y ( ∣ L ∣ ) ∣ F ∣ , ( 1 − δ ) t } \max \{\frac{\mathrm{poly}(|\mathcal{L}|)}{|\mathbb{F}|}, (1 - \delta)^t\} max { ∣ F ∣ poly ( ∣ L ∣ ) , ( 1 − δ ) t } 。
Degree correction ¶ 现在还剩下一个小问题需要解决,那就是根据 f ′ f' f ′ 函数的定义
f ′ : = Q u o t i e n t ( g , G , p ) = g ( x ) − p ^ ( x ) ∏ a ∈ G ( X − a ) . f' := \mathrm{Quotient}(g, \mathcal{G}, p) = \frac{g(x) - \hat{p}(x)}{\prod_{a \in \mathcal{G}}(X - a)}. f ′ := Quotient ( g , G , p ) = ∏ a ∈ G ( X − a ) g ( x ) − p ^ ( x ) . 可以发现,准确来讲,这里是将对 f f f 的测试转换为了测试 f ′ f' f ′ 到 R S [ F , L ′ , d / k − ∣ G ∣ ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k- |\mathcal{G}|] RS [ F , L ′ , d / k − ∣ G ∣ ] 的距离,而不是 R S [ F , L ′ , d / k ] \mathrm{RS}[\mathbb{F},\mathcal{L}',d/k] RS [ F , L ′ , d / k ] ,这就需要进行次数校正(degree correction)了。
一般地,不妨假设我们要进行次数校正的函数是 f : L → F f: \mathcal{L} \rightarrow \mathbb{F} f : L → F ,其初始的次数是 d d d ,目标矫正的次数是 d ∗ ≥ d d^* \ge d d ∗ ≥ d ,我们想要构造一个高效的次数校正算法,能输出一个函数 f ∗ f^* f ∗ 满足:
如果 f ∈ R S [ F , L , d ] f \in \mathrm{RS}[\mathbb{F},\mathcal{L},d] f ∈ RS [ F , L , d ] ,那么 f ∗ ∈ R S [ F , L , d ∗ ] f^* \in \mathrm{RS}[\mathbb{F},\mathcal{L},d^*] f ∗ ∈ RS [ F , L , d ∗ ] 。 如果 f f f 距离 R S [ F , L , d ] \mathrm{RS}[\mathbb{F},\mathcal{L},d] RS [ F , L , d ] 有 δ 远,那么以极大的概率有 f ∗ f^* f ∗ 距离 R S [ F , L , d ∗ ] \mathrm{RS}[\mathbb{F},\mathcal{L},d^*] RS [ F , L , d ∗ ] 也有 δ 远。 对 f ∗ f^* f ∗ 的查询可以通过查询 f f f 来高效的计算出来。 STIR 论文 ([ACFY24], 第 2.3 节) 中提出了一种方法,不仅满足上述三个条件,还利用几何级数求和的方法,使得第 3 项的计算更加高效。
该方法是,随机采样一个域中的元素 r ← F r \leftarrow \mathbb{F} r ← F ,定义
f ∗ ( x ) = ∑ i = 0 e r i ⋅ f i ( x ) (1) f^*(x) = \sum_{i=0}^{e} r^i \cdot f_i(x) \tag{1} f ∗ ( x ) = i = 0 ∑ e r i ⋅ f i ( x ) ( 1 ) 其中,f i ( x ) : = x i ⋅ f ( x ) f_i(x) := x^i \cdot f(x) f i ( x ) := x i ⋅ f ( x ) , e = d ∗ − d e = d^* - d e = d ∗ − d 。将 ( 1 ) (1) ( 1 ) 式展开可得
f ∗ ( x ) = r 0 ⋅ x 0 ⋅ f ( x ) + r 1 ⋅ x 1 ⋅ f ( x ) + ⋯ + r e ⋅ x e ⋅ f ( x ) (2) f^*(x) = r^0 \cdot x^0 \cdot f(x) + r^1 \cdot x^1 \cdot f(x) + \cdots + r^e \cdot x^e \cdot f(x) \tag{2} f ∗ ( x ) = r 0 ⋅ x 0 ⋅ f ( x ) + r 1 ⋅ x 1 ⋅ f ( x ) + ⋯ + r e ⋅ x e ⋅ f ( x ) ( 2 ) 根据 f ∗ f^* f ∗ 的构造,自然第 1 项是成立的。
对于 δ < min { 1 − ρ , 1 − ( 1 + 1 / d ∗ ) ⋅ ρ } \delta < \min \{ 1 - \sqrt{\rho}, 1 - (1 + 1/d^*) \cdot \rho\} δ < min { 1 − ρ , 1 − ( 1 + 1/ d ∗ ) ⋅ ρ } ,第 2 项也是成立的。这可以通过 [BCIKS20] 中的 Correlated Agreement 定理得到的,这里就不详细展开了。
接下来分析下第 3 项。通过 ( 2 ) (2) ( 2 ) 式,可以发现如果要计算 f ∗ f^* f ∗ 在 x x x 点处的值,当查询到 f ( x ) f(x) f ( x ) 的值后,要进行 e + 1 e + 1 e + 1 项求和,需要花费 O ( e ) O(e) O ( e ) 的时间。如果 e = Ω ( d ) e = \Omega(d) e = Ω ( d ) ,这是低效的,但是通过几何级数求和的方法,可以将计算复杂度降到 O ( log e ) O(\log e) O ( log e ) 。
f ∗ ( x ) = ∑ i = 0 e r i ⋅ f i ( x ) = ∑ i = 0 e r i ⋅ x i ⋅ f ( x ) = f ( x ) ⋅ ∑ i = 0 e ( r ⋅ x ) i \begin{aligned}
f^*(x) & = \sum_{i=0}^{e} r^i \cdot f_i(x) \\
& = \sum_{i=0}^{e} r^i \cdot x^i \cdot f(x)\\
& = f(x) \cdot \sum_{i=0}^{e} (r \cdot x)^i \\
\end{aligned} f ∗ ( x ) = i = 0 ∑ e r i ⋅ f i ( x ) = i = 0 ∑ e r i ⋅ x i ⋅ f ( x ) = f ( x ) ⋅ i = 0 ∑ e ( r ⋅ x ) i 对 ∑ i = 0 e ( r ⋅ x ) i \sum_{i=0}^{e} (r \cdot x)^i ∑ i = 0 e ( r ⋅ x ) i 使用几何级数求和公式,可以得到
f ∗ ( x ) = { f ( x ) ⋅ 1 − ( r ⋅ x ) e + 1 1 − r ⋅ x if r ⋅ x ≠ 1 f ( x ) ⋅ ( e + 1 ) if r ⋅ x = 1 f^*(x) = \begin{cases}
f(x) \cdot \frac{1 - (r \cdot x)^{e+1}}{1 - r \cdot x} & \text{if} \quad r \cdot x \neq 1 \\
f(x) \cdot (e + 1) & \text{if} \quad r \cdot x = 1
\end{cases} f ∗ ( x ) = { f ( x ) ⋅ 1 − r ⋅ x 1 − ( r ⋅ x ) e + 1 f ( x ) ⋅ ( e + 1 ) if r ⋅ x = 1 if r ⋅ x = 1 对于比较复杂的 f ( x ) ⋅ 1 − ( r ⋅ x ) e + 1 1 − r ⋅ x f(x) \cdot \frac{1 - (r \cdot x)^{e+1}}{1 - r \cdot x} f ( x ) ⋅ 1 − r ⋅ x 1 − ( r ⋅ x ) e + 1 ,其中 ( r ⋅ x ) e + 1 (r \cdot x)^{e+1} ( r ⋅ x ) e + 1 这一项可以通过反复平方的方法计算得到,需要 O ( log e ) O(\log e) O ( log e ) 次计算,再通过查询 f f f 在点 x x x 处的值得到 f ( x ) f(x) f ( x ) ,因此整体需要 O ( log e ) O(\log e) O ( log e ) 次操作来计算 f ∗ ( x ) f^*(x) f ∗ ( x ) 。
将该方法可以扩展到多个不同次数的函数上。对于 m m m 个函数 f 1 , … , f m : L → F f_1, \ldots, f_m: \mathcal{L} \rightarrow \mathbb{F} f 1 , … , f m : L → F 以及次数 d 1 , … , d m d_1, \ldots, d_m d 1 , … , d m ,我们希望进行批量次数校正(batch-degree-correct),最后得到一个函数 f ∗ f^* f ∗ ,次数为 d ∗ d^* d ∗ 。随机采样一个随机数 r ← F r \leftarrow \mathbb{F} r ← F ,定义 e i = d ∗ − d i e_i = d^* - d_i e i = d ∗ − d i 以及
f ∗ ( x ) = ∑ i = 0 e 1 r i ⋅ x i ⋅ f 1 ( x ) + r 1 + e 1 ∑ i = 0 e 2 r i ⋅ x i ⋅ f 2 ( x ) + ⋯ + r m − 1 + ∑ j = 1 m − 1 e j ∑ i = 0 e m r i ⋅ x i ⋅ f m ( x ) . f^*(x) = \sum_{i = 0}^{e_1} r^i \cdot x^i \cdot f_1(x) + r^{1 + e_1} \sum_{i = 0}^{e_2} r^i \cdot x^i \cdot f_2(x) + \cdots + r^{m - 1 + \sum_{j = 1}^{m - 1}e_j} \sum_{i = 0}^{e_m} r^i \cdot x^i \cdot f_m(x). f ∗ ( x ) = i = 0 ∑ e 1 r i ⋅ x i ⋅ f 1 ( x ) + r 1 + e 1 i = 0 ∑ e 2 r i ⋅ x i ⋅ f 2 ( x ) + ⋯ + r m − 1 + ∑ j = 1 m − 1 e j i = 0 ∑ e m r i ⋅ x i ⋅ f m ( x ) . 与上面单个函数的次数校正类似,对于 δ < min { 1 − ρ , 1 − ( 1 + 1 / d ∗ ) ⋅ ρ } \delta < \min \{ 1 - \sqrt{\rho}, 1 - (1 + 1/d^*) \cdot \rho\} δ < min { 1 − ρ , 1 − ( 1 + 1/ d ∗ ) ⋅ ρ } ,如果有任意的 f i f_i f i 距离 R S [ F , L , d i ] \mathrm{RS}[\mathbb{F},\mathcal{L},d_i] RS [ F , L , d i ] 有 δ 远,那么 f ∗ f^* f ∗ 距离 R S [ F , L , d ∗ ] \mathrm{RS}[\mathbb{F},\mathcal{L},d^*] RS [ F , L , d ∗ ] 就有 δ 远。同样地,用几何级数求和的方式,通过查询 f 1 , … , f m f_1, \ldots, f_m f 1 , … , f m ,进行 O ( ∑ i log e i ) = O ( m ⋅ log d ∗ ) O(\sum_i \log e_i) = O(m \cdot \log d^*) O ( ∑ i log e i ) = O ( m ⋅ log d ∗ ) 次操作就可以计算出 f ∗ f^* f ∗ 在 x x x 点的值。
STIR 通过在每一轮中改变函数的 evaluation domain ,将原来 FRI 协议中的 L k \mathcal{L}^k L k 变为 L ′ \mathcal{L}' L ′ ,函数依然是 k k k 折,但是 L ′ \mathcal{L}' L ′ 只有原来的一半大小,这样做降低了编码空间的码率,能减少 Verifier 的查询数量,这也是 STIR 的核心思想。
在STIR 协议的构造中使用 RS 编码的几个有力的工具,使得整个协议是高效且安全的。
首先和 FRI 协议一致,先对函数 f f f 进行 k k k 折,但得到的函数需要将 evaluation domain 从 L k \mathcal{L}^k L k 扩展到 L ′ \mathcal{L}' L ′ ,根据折叠函数具有距离保持的性质,这一过程我们可以放心的进行折叠。 接着为了降低 Verifier 的工作,使用 Out of Domain Sampling 的方式将列表编码的方式转换为唯一解码,也就是协议中 Verifier 从 F \ L \mathbb{F} \backslash \mathcal{L} F \ L 中选取一个随机数 r o u t r^{\mathrm{out}} r out ,要求 Prover 答复 β 。 此时将 evaluation domain 变为 L ′ \mathcal{L}' L ′ 之后,面临的问题是 Verifier 只能查询 k k k 折函数 f r f o l d \mathrm{f}_{r^{\mathrm{fold}}} f r fold 在 L k \mathcal{L}^k L k 上的值,好在可以用 Quotient 这个强大的工具来约束 Prover 发送的函数在 L k \mathcal{L}^k L k 上的值与折叠函数在 L k \mathcal{L}^k L k 上的值是一致的。此时 Verifier 从 L k \mathcal{L}^k L k 中选取 t t t 个随机数 r i s h i f t r_{i}^{\mathrm{shift}} r i shift 进行查询。 最后结合 r o u t r^{\mathrm{out}} r out 与 r i s h i f t r_{i}^{\mathrm{shift}} r i shift ,用 Quotient 工具来约束 Prover 在这些点发送的值是正确的。 结合这些工具对一次迭代的 STIR 协议进行了 soundness 分析,其实可以得到 STIR 的 round-by-round soundness error 为 max { p o l y ( ∣ L ∣ ) ∣ F ∣ , ( 1 − δ ) t } \max \{\frac{\mathrm{poly}(|\mathcal{L}|)}{|\mathbb{F}|}, (1 - \delta)^t\} max { ∣ F ∣ poly ( ∣ L ∣ ) , ( 1 − δ ) t } 。
最后为了将迭代后的 f ′ f' f ′ 从次数 d / k − ∣ G ∣ d/k - |\mathcal{G}| d / k − ∣ G ∣ 提升到 d / k d/k d / k ,介绍了利用几何级数求和方法能高效计算的 degree correction 方法。
References ¶ [ACFY24] Gal Arnon, Alessandro Chiesa, Giacomo Fenzi, and Eylon Yogev. “STIR: Reed-Solomon proximity testing with fewer queries.” In Annual International Cryptology Conference , pp. 380-413. Cham: Springer Nature Switzerland, 2024. [BCIKS20] Eli Ben-Sasson, Dan Carmon, Yuval Ishai, Swastik Kopparty, and Shubhangi Saraf. Proximity Gaps for Reed–Solomon Codes. In Proceedings of the 61st Annual IEEE Symposium on Foundations of Computer Science , pages 900–909, 2020. [BCS16] Eli Ben-Sasson, Alessandro Chiesa, and Nicholas Spooner. “Interactive Oracle Proofs”. In: Proceedings of the 14th Theory of Cryptography Conference . TCC ’16-B. 2016, pp. 31–60. [BGKS20] Eli Ben-Sasson, Lior Goldberg, Swastik Kopparty, and Shubhangi Saraf. “DEEP-FRI: Sampling Outside the Box Improves Soundness”. In: Proceedings of the 11th Innovations in Theoretical Computer Science Conference . ITCS ’20. 2020, 5:1–5:32. STIR: Reed–Solomon Proximity Testing with Fewer Queries Video: ZK11: STIR: Reed–Solomon Proximity Testing with Fewer Queries - Gal Arnon & Giacomo Fenzi