Binius:基于binary fields的SNARKs(Part 2)

1. 引言

前序博客有:

本文重点关注:

  • 1)concatenated codes:可扩展对small fields的多项式承诺方案
  • 2)用于,check 基于多变量多项式的statements,的不同协议

2. Concatenated Codes

之前的 Binius:基于binary fields的SNARKs(Part 1) 博客中,已覆盖了对small fields的多项式承诺方案。
为开发通用承诺方案,首先需引入:

  • 1)packing机制
  • 2)concatenated codes

回顾下,small fields的多项式承诺方案中,基于的是a tower of fields:

  • τ 0 ⊂ τ 1 ⊂ ⋯ ⊂ τ t \tau_0\sub\tau_1\sub\cdots\sub\tau_t τ0τ1τt

对应为:

  • linear inner code [ n i , k i , d i ] [n_i,k_i,d_i] [ni,ki,di]:对应为 τ i \tau_i τi
  • linear outer code [ n i + k , k i + k , d i + k ] [n_{i+k},k_{i+k},d_{i+k}] [ni+k,ki+k,di+k]:对应为 τ i + k \tau_{i+k} τi+k

整个构建依赖于,将源自某field的多个元素进行packing,并将其解析为某扩域内元素:

  • 可将 τ i \tau_i τi中的 2 k 2^k 2k个元素,看成是 τ i + k \tau_{i+k} τi+k中的某单个元素。
  • 即,将 τ i \tau_i τi看成是向量空间,类似与将复数,看成是基于实数的二维向量空间。

concatenated codes的编码流程为:

  • 1)将基于 τ i \tau_i τi的初始消息,pack进 τ i + k \tau_{i+k} τi+k元素。如,有源自 τ 0 \tau_0 τ0的4个bit变量 0 , 1 , 1 , 1 0,1,1,1 0,1,1,1,可将其组合为 τ 2 \tau_2 τ2 0111 0111 0111元素。
  • 2)使用outer code来对packed message进行编码。如,可使用Reed-Solomon编码。
  • 3)将codeword中的每个symbol,unpack为 τ i \tau_i τi的某message。
  • 4)使用inner code进行编码,并将编码元素进行concatenate。该编码可能是trivial的,即用于identity code。

所面临的问题之一是:

  • 不得不使用extension code。

从而:

  • 需在不同的fields之间来回切换:
    • 用于表示多项式系数的field
    • 用于表示code字母表的field
    • intermediate field
    • 用于密码学安全性的extension field:此处为 τ t \tau_t τt

为使用extension code,定义在( 2 t − i × 2 k 2^{t-i}\times 2^{k} 2ti×2k个元素的)矩形数组内包含源自 τ i \tau_i τi元素的结构:

  • 每行有 2 k 2^k 2k个元素,可解析为一个 τ i + k \tau_{i+k} τi+k元素。
  • 每列有 2 t − i 2^{t-i} 2ti个元素,可解析为一个 τ t \tau_t τt元素。

可从2个维度来看该结构:

  • 从列角度来看:将其看成是基于 τ t \tau_t τt,维度为 2 k 2^k 2k的向量空间。
  • 从行角度来看:将其看成是基于 τ i + k \tau_{i+k} τi+k,维度为 2 t − i 2^{t-i} 2ti的向量空间。

该数组,与某 τ i \tau_i τi元素,的乘法运算,可解析为:

  • 每个元素的乘法运算:
    • 可取每列(为单个 τ t \tau_t τt元素),然后将每列与该元素相乘。
    • 可取每行(为单个 τ i + k \tau_{i+k} τi+k元素),然后将每行与该元素相乘。

encoding-based多项式承诺方案的基本流程为:

  • 1) C o m m i t ( p ) Commit(p) Commit(p):将多项式系数分配进某 m 0 × m 1 m_0\times m_1 m0×m1矩阵内,均为 τ i \tau_i τi元素。以 2 k 2^k 2k为chunk size进行分组,并将其解析为 τ i + k \tau_{i+k} τi+k元素。对每行应用extended encoding,获得size为 m 0 × n m_0\times n m0×n的矩阵,其均为 τ t \tau_t τt元素。基于列构建一棵Merkle tree,并将其root用作承诺值。
  • 2) P r o v e ( p , s ) Prove(p,s) Prove(p,s):Prover将多项式系数分配进某 m 0 × m 1 m_0\times m_1 m0×m1矩阵 ( t i ) i = 0 m 0 − 1 (t_i)_{i=0}^{m_0-1} (ti)i=0m01内,均为 τ i \tau_i τi元素。Prover计算并发送 t ′ = ⊗ i = l 1 ℓ ( 1 − r i , r i ) ⋅ ( t i ) i = 0 m 0 − 1 t'=\otimes _{i=l_1}^{\ell}(1-r_i,r_i)\cdot (t_i)_{i=0}^{m_0-1} t=i=l1(1ri,ri)(ti)i=0m01 给Verifier。
    • Verifier采样 ρ \rho ρ个索引值 J : = { j 0 , j 1 , ⋯   , j ρ − 1 } \mathcal{J}:=\{j_0,j_1,\cdots,j_{\rho-1}\} J:={ j0,j1,,jρ1}
    • 对于所有的 j ∈ J j\in\mathcal{J} jJ,Prover将列 ( u i , j ) i = 0 m 0 − 1 (u_{i,j})_{i=0}^{m_0-1} (ui,j)i=0m01组成矩阵 U U U,给Verifier发送编码后的矩阵 U U U及其相应Merkle paths。
  • 3) V e r i f y ( π , r , s ) Verify(\pi,r,s) Verify(π,r,s):Verifier检查 t ′ ⊗ i = 0 l 1 ( 1 − r i , r i ) = s t'\otimes_{i=0}^{l_1}(1-r_i,r_i)=s ti=0l1(1ri,ri)=s,然后:
    • Verifier将 t ′ t' t按chunk size 2 k 2^k 2k分组,并应用extended code,unpacking所有元素来获得 u ′ u' u
    • Verifier检查所提供的所有列都包含在Merkle tree内,并检查 ⊗ i = l 1 ℓ − 1 ( 1 − r i , r i ) ⋅ ( u i , j ) i = 0 m 0 − 1 = ? u j ′ \otimes_{i=l_1}^{\ell-1}(1-r_i,r_i)\cdot (u_{i,j})_{i=0}^{m_0-1}\stackrel{?}{=} u_j' i=l11(1ri,ri)(ui,j)i=0m01=?uj

可根据:

  • t ′ t' t(源自 τ t \tau_t τt m 1 m_1 m1个元素),
  • 列(包含源自 τ i + k \tau_{i+k} τi+k ρ m 0 \rho m_0 ρm0个元素)
  • ρ \rho ρ个列的authentication paths

来计算 proof size。若单个digest size为 256 256 256 bits,则proof size为:

  • 2 t m 1 + 2 i + k ρ m 0 + 2 8 ρ log ⁡ 2 n 2^{t}m_1+2^{i+k}\rho m_0+2^8\rho \log_2 n 2tm1+2i+kρm0+28ρlog2n 个bits。

3. 用于,check 基于多变量多项式的statements,的不同协议

Binius中包含了一系列由HyperPlonk提出的关键多项式协议:

  • 1)Query
  • 2)SumCheck
  • 3)ZeroCheck
  • 4)ProductCheck
  • 5)Multiset Check
  • 6)Permutation
  • 7)LookUp

几乎所有协议底层都是sumcheck协议。关于sumcheck协议基础知识,可参看Justin Thaler的Proofs, Arguments, and Zero-Knowledge书籍

ZeroCheck协议,可用于证明HyperPlonk中所强化的gate constraints。在ZeroCheck协议中,有:

  • multilinear多项式 M M M(用于强化trace),
  • 和selector multilinear多项式 S 1 , S 2 , S 3 S_1, S_2,S_3 S1,S2,S3

使得对 0 , 1 n 0,1^n 0,1n内的每个点,有:
0 = S 1 ( M 0 + m 1 ) + S 2 M 0 M 1 + S 3 G ( M 0 , M 1 ) − M 2 + I 0=S_1(M_0+m_1)+S_2M_0M_1+S_3 G(M_0,M_1)-M_2+I 0=S1(M0+m1)+S2M0M1+S3G(M0,M1)M2+I
其中:

  • M 0 ( x ) = M ( 0 , 0 , x ) M_0(x)=M(0,0,x) M0(x)=M(0,0,x)
  • M 1 ( x ) = M ( 0 , 1 , x ) M_1(x)=M(0,1,x) M1(x)=M(0,1,x)
  • M 2 ( x ) = M ( 1 , 0 , x ) M_2(x)=M(1,0,x) M2(x)=M(1,0,x)

如何证明多变量多项式 P = S 1 ( M 0 + m 1 ) + S 2 M 0 M 1 + S 3 G ( M 0 , M 1 ) − M 2 + I P=S_1(M_0+m_1)+S_2M_0M_1+S_3 G(M_0,M_1)-M_2+I P=S1(M0+m1)+S2M0M1+S3G(M0,M1)M2+I,对于 0 , 1 n 0,1^n 0,1n内的每个点,其值均为0呢?

  • 由Verifier提供 F n \mathbb{F}^n Fn内随机点 r z c r_{zc} rzc
  • Prover 构建多变量多项式: P ′ ( x ) = e q ( r z c , x ) P ( x ) P'(x)=eq(r_{zc},x)P(x) P(x)=eq(rzc,x)P(x),其中 e q ( x , y ) = ∏ ( x i y i + ( 1 − x i ) ( 1 − y i ) ) eq(x,y)=\prod(x_iy_i+(1-x_i)(1-y_i)) eq(x,y)=(xiyi+(1xi)(1yi))
  • Prover 对 P ′ ( x ) P'(x) P(x)运行sumcheck协议,其sum值为0。
  • Verifier仅需对 P ′ ( x ) P'(x) P(x) x = r s x=r_s x=rs点处做一次evaluation即可。

P ′ ( x ) P'(x) P(x)时候用sumcheck时,包含了非multilinear多变量多项式,即意味着,Prover在每轮,不得不发送degree最多为 d d d的多项式。HyperPlonk对此进行了优化:

  • Prover发送某degree最多为 d d d的单变量多项式 的承诺值,并提供在单个点(而不是至少3个点)的evaluation值。

由于大多数协议最终都对应为sumcheck协议,可使用随机线性组合来batch多项式,将所有check reduce为单个sumcheck。
https://gitlab.com/UlvetannaOSS/binius 代码库中已实现了ZeroCheck、SumCheck和evaluation check。

Binius推荐使用Plonkish算术化:

  • 其与HyperPlonk的主要区别在于:trace内包含的元素属于不同的subfields。
  • 因此gate constraints需基于不同的subfields来表示relations。

当:

  • 1)所有gate constraints成立。【对任意Plonk变种都成立】
  • 2)所有全局copy constraints满足。【对任意Plonk变种都成立】
  • 3)每个witness变量位于所规定的subfield。【因使用的是extension towers】

则该execution是有效的。前2个条件对任意Plonk变种都成立,最后一个条件引入的原因在于:使用的是extension towers。

4. 结论

本文介绍了如何将 Binius:基于binary fields的SNARKs(Part 1) 的承诺方案扩展为适于packed fields。可以以双重方式来看待域元素数组:

  • 按列或按行排列元素。

随后,本文提出了一些用于check多变量多项式的关键协议,如:

  • evaluation check、sumcheck、productcheck

这些都可归结为进行几次(可被batch的)sumcheck协议。

small-field多项式承诺方案 + 关键协议,再加上一些算术化方案(如Plonkish),可用来生成SNARK方案。

HyperPlonk和Binius的主要区别在于Binius中的trace元素可能属于不同的子域。但是,这不会添加新的检查。相反,这可以取代HyperPlonk中的额外检查。这些子域检查由small-field多项式承诺方案的安全性来保证。

参考资料

[1] LambdaClass团队2024年博客 SNARKs on binary fields: Binius - Part 2

Binius系列博客

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/135422987
今日推荐