1. 引言
前序博客有:
- 以更快的承诺方案助力Lasso/Jolt
- 关于Lasso、Jolt和SNARK设计最新进展的技术常见问题解答
- 基于Towers of Binary Fields的succinct arguments
- multilinear多项式承诺方案benchmark对比
Ulvetanna团队Benjamin E. Diamond和Jim Posen 2023年论文《Succinct Arguments over Towers of Binary Fields》,开源代码见:
- https://github.com/recmo/binius(Rust + Sage)【基于plonky3等库】【Binius:针对硬件优化的SNARK】
在该论文中:
- 构建了基于towers of binary fields 的高效SNARK。
- 基于Brakedown进行了调整,构建了适于tiny域(包括只有2个元素的域)的multilinear多项式承诺方案。
- 该承诺方案可treat small-field多项式 with zero embedding overhead。
- 对HyperPlonk的product和permutation check、以及Lasso的lookup,均引入了binary-field调整版本。
- binary PLONKish变种,可高效用于标准哈希函数——如Keccak-256和Grøstl。
2. Binary field
Binary field的characteristic为2,形式为 F 2 n \mathbb{F}_{2^n} F2n, n n n为某整数。
最简单的binary field为 F 2 \mathbb{F}_2 F2,其元素为 { 0 , 1 } \{0,1\} {0,1},运算为模 2 2 2:
- 加法运算对应bitwise XOR
- 乘法运算对应bitwise AND。
由于 2 n 2^n 2n不是素数,需如下操作来将其转换为某field:
- 1)基于 F 2 \mathbb{F}_2 F2的多项式,其系数为0或1,如 p ( x ) = x 7 + x 5 + x 2 + 1 p(x)=x^7+x^5+x^2+1 p(x)=x7+x5+x2+1
- 2)选择基于
F
2
\mathbb{F}_2
F2的不可约多项式
m
(
x
)
m(x)
m(x),将
m
(
x
)
m(x)
m(x)的余数看成是equivalence classes。如
m
(
x
)
=
x
2
+
x
+
1
m(x)=x^2+x+1
m(x)=x2+x+1,其余数为degree最多为1的多项式
r
(
x
)
=
a
x
+
b
r(x)=ax+b
r(x)=ax+b,其中
a
,
b
a,b
a,b值为0或1。余数构成field
F
2
2
\mathbb{F}_{2^2}
F22,其包含4个元素:
0
+
0
x
,
1
+
0
x
,
0
+
1
x
,
1
+
1
x
0+0x,1+0x,0+1x,1+1x
0+0x,1+0x,0+1x,1+1x,可分别表示为
00
,
10
,
01
,
11
00,10,01,11
00,10,01,11。
- 对于 F 2 n \mathbb{F}_{2^n} F2n中元素,可 以长度为 n n n的bitstring来表示。
- 基于 F 2 n \mathbb{F}_{2^n} F2n, 2 ≤ n ≤ 10000 2\leq n \leq 10000 2≤n≤10000的不可约多项式列表见:Table of Low-Weight Binary Irreducible Polynomials
多项式
m
(
x
)
=
x
3
+
x
+
1
m(x)=x^3+x+1
m(x)=x3+x+1也是不可约多项式,可用于构建包含8个其它元素的扩域
F
2
3
\mathbb{F}_{2^3}
F23。
另一种构建
F
2
3
\mathbb{F}_{2^3}
F23的方式是:就是使用extension towers。Binius采用的方式为:
- DOUG WIEDEMANN的 AN ITERATED QUADRATIC EXTENSION OF GF(2)
可使用multilinear Lagrange polynomials作为tower of extensions的base。这样的优势在于:
- trivially填充0系数,可将一种extension嵌入到其它extensions
具体的构建流程为:
- 1)以 τ 0 = F 2 \tau_0=\mathbb{F}_2 τ0=F2为起点
- 2)设置 τ 1 = F 2 [ x 0 ] / ( x 0 2 + x 0 + 1 ) \tau_1=\mathbb{F}_2[x_0]/(x_0^2+x_0+1) τ1=F2[x0]/(x02+x0+1)
- 3)继续: τ k = F 2 [ x k − 1 ] / ( x k − 1 2 + x k − 1 x k − 2 + 1 ) \tau_k=\mathbb{F}_2[x_{k-1}]/(x_{k-1}^2+x_{k-1}x_{k-2}+1) τk=F2[xk−1]/(xk−12+xk−1xk−2+1)
有: τ 0 ⊂ τ 1 ⊂ τ 2 ⊂ ⋯ τ m \tau_0\sub\tau_1\sub\tau_2\sub\cdots\tau_m τ0⊂τ1⊂τ2⊂⋯τm。
直观来看其工作原理为:
- 1)显然 τ 0 \tau_0 τ0为0或1。
- 2) τ 1 \tau_1 τ1中元素有: 0 + 0 x 0 , 1 + 0 x 0 , 0 + 1 x 0 , 1 + 1 x 0 0+0x_0,1+0x_0,0+1x_0,1+1x_0 0+0x0,1+0x0,0+1x0,1+1x0,可使用前2个,即 00 , 10 00,10 00,10来标识 τ 0 \tau_0 τ0中元素。
- 3) τ 2 \tau_2 τ2中元素有: 0 + 0 x 0 + 0 x 1 + 0 x 0 x 1 , 1 + 0 x 0 + 0 x 1 + 0 x 0 x 1 , 0 + 1 x 0 + 0 x 1 + 0 x 0 x 1 , 1 + 1 x 0 + 0 x 1 + 0 x 0 x 1 , 1 + 0 x 0 + 1 x 1 + 0 x 0 x 1 , 0 + 1 x 0 + 1 x 1 + 0 x 0 x 1 , 1 + 1 x 0 + 1 x 1 + 0 x 0 x 1 , 1 + 1 x 0 + 1 x 1 + 1 x 0 x 1 0+0x_0+0x_1+0x_0x_1,1+0x_0+0x_1+0x_0x_1,0+1x_0+0x_1+0x_0x_1,1+1x_0+0x_1+0x_0x_1,1+0x_0+1x_1+0x_0x_1,0+1x_0+1x_1+0x_0x_1,1+1x_0+1x_1+0x_0x_1,1+1x_0+1x_1+1x_0x_1 0+0x0+0x1+0x0x1,1+0x0+0x1+0x0x1,0+1x0+0x1+0x0x1,1+1x0+0x1+0x0x1,1+0x0+1x1+0x0x1,0+1x0+1x1+0x0x1,1+1x0+1x1+0x0x1,1+1x0+1x1+1x0x1,即以size为4的bitstring来表示。 τ 1 \tau_1 τ1元素,可看成是 b 0 b 1 00 b_0b_100 b0b100格式的 τ 2 \tau_2 τ2元素。元素按词典顺序排序。
同时,已知 τ k \tau_k τk的某元素 b 0 b 1 b 2 ⋯ b 2 k − 1 b_0b_1b_2\cdots b_{2^k-1} b0b1b2⋯b2k−1,可将其对半切分表示为 b l o + X k − 1 b h i b_{lo}+X_{k-1}b_{hi} blo+Xk−1bhi,其中 b l o , b h i b_{lo},b_{hi} blo,bhi均源自 τ k − 1 \tau_{k-1} τk−1。
- 加法对应为XOR,从硬件角度来看,有很多优势,其中之一就是无需考虑carry(进位)。
- 乘法可分解为递归方式表示,如有
a
l
o
+
x
k
a
h
i
a_{lo}+x_{k}a_{hi}
alo+xkahi和
b
l
o
+
x
k
b
h
i
b_{lo}+x_{k}b_{hi}
blo+xkbhi,则乘法表示为:
a h i b h i x k 2 + ( a h i b l o + a l o b h i ) x k + a l o b l o a_{hi}b_{hi}x_k^2+(a_{hi}b_{lo}+a_{lo}b_{hi})x_k+a_{lo}b_{lo} ahibhixk2+(ahiblo+alobhi)xk+aloblo
但由于已知 x k 2 = x k − 1 x k + 1 x_k^2=x_{k-1}x_k+1 xk2=xk−1xk+1,因此需计算 τ k − 1 \tau_{k-1} τk−1中元素乘积:- 如采用相同的策略,直到 F 2 \mathbb{F}_2 F2。
- 或者使用lookup table来获取values
- 同时有其它高效乘法计算来将某域元素,与其subfield元素相乘。如, τ k + j \tau_{k+j} τk+j元素与 τ k \tau_k τk元素的乘积,可 以 2 j 2^j 2j次乘法来实现。
3. 编码理论
基于字母表 A A A的某code of block n n n,为 A n A^n An的subset,即向量中 n n n个元素属于 A A A。2个codes之间的Hamming distance,是指二者不同的元素个数。
基于域 F \mathbb{F} F的 [ k , n , d ] [k,n,d] [k,n,d] code,为:
- F n \mathbb{F}^n Fn的 k k k-维线性子空间,使得2个不同元素的distance至少为 d d d。
Reed-Solomon codes为其中的一种code类型。
已知某长度为
k
k
k的向量
(
a
0
,
a
1
,
⋯
,
a
k
−
1
)
(a_0,a_1,\cdots,a_{k-1})
(a0,a1,⋯,ak−1),其Reed-Solomon编码为:
- 将每个 a k a_k ak当做某degree 为 k − 1 k-1 k−1多项式的evaluation值,然后对该多项式在 n n n个点进行evaluate(当使用STARKs时,需使用该编码)。
- 若这 n n n个evaluation值的前 k k k个值与原始向量相同,则称该编码为systematic。
- ρ = k / n \rho=k/n ρ=k/n为该编码方式的ratio,其倒数 1 / ρ = n / k 1/\rho=n/k 1/ρ=n/k称为blow-up factor。
- 由于2个degree k − 1 k-1 k−1多项式,最多有 k − 1 k-1 k−1个重合点,因此该编码distance为 n − k + 1 n-k+1 n−k+1。
- m m m-fold interleaved code of block length,可看成是基于字母表 A m A^m Am定义的size为 n n n的linear code。可将该code看成是rows,行内元素在 A m A^m Am中。
已知基于域 F \mathbb{F} F的某 [ n , k , d ] [n,k,d] [n,k,d] linear code C C C,其generating matrix M M M和基于域 F \mathbb{F} F的向量空间 V V V, C C C的extension code C ′ C' C′,为 M x Mx Mx mapping的image,其中 x ∈ V k x\in V^k x∈Vk。
4. 多项式承诺方案
多项式的系数和code field size F \mathbb{F} F可尽可能小,但二者必须相等。通过从扩域 E \mathbb{E} E中来采样,可增加安全性。
Prover:
- 将向量 ( t 0 , t 1 , ⋯ , t n ) (t_0,t_1,\cdots, t_n) (t0,t1,⋯,tn)解析为,基于 0 , 1 log n 0,1^{\log n} 0,1logn的Lagrange basis内的系数
- 将这些系数按 m 0 × m 1 m_0\times m_1 m0×m1矩阵 T T T表示,对第 r o w i row_i rowi行编码获得 u i u_i ui。矩阵 T T T共有 m 0 m_0 m0行,每行长度为 ρ − 1 m 1 \rho^{-1}m_1 ρ−1m1。
- 将以 u i u_i ui为行的矩阵,称为 U U U。
- 将矩阵 U U U中每列作为叶子节点,构建一棵Merkle tree,其root用作承诺值。
Verifier:
- 选择evaluation point r = ( r 0 , r 1 , ⋯ , r log ( n ) − 1 ) r=(r_0,r_1,\cdots,r_{\log(n)-1}) r=(r0,r1,⋯,rlog(n)−1)。
- Prover提供 s s s作为多项式在 r r r点的evaluation值。
为生成Proof:
- Prover发送vector-matrix product R . T R.T R.T,其中 R R R为 r r r的最后 log ( m 0 ) \log(m_0) log(m0)个元素的tensor product。
- Verifier采样 i i i次query(具体次数取决于安全级别),每次选中 U U U的一列。
- Prover发送所请求的列,及其相应的authentication paths。
proof中包括:
- evaluation s s s
- Merkle root r o o t root root
- vector-matrix product R . T R.T R.T
- 对应 i i i次query的,共 i i i列,及其相应的authentication paths。
为check该proof:
- Verifier检查该Merkle tree包含了这些列
- Verifier计算 R . T R.T R.T的编码,并检查,根据 R R R从 U U U中选中的列的product,对应 R . T R.T R.T所编码的列。
- 使用 R . T R.T R.T,和 r r r的前 log ( m 1 ) \log(m_1) log(m1)个元素的tensor product,Verifier检查 s s s是合适的evaluation值。
构建承诺方案的核心思想为:
- packing。
已知具有 m m m个 τ k \tau_k τk元素,将其分组为 m / 2 j m/2^j m/2j个 τ k + j \tau_{k+j} τk+j元素。类似地,rows可pack进 τ r \tau_r τr元素。该多项式承诺方案修改为,Verifier测试的不是单个列,而是blocks of columns。
5. 结论
本文涵盖了Binius背后的基本思想。其利用了:
- 采用extension towers构建的binary fields的优势,binary fields具有硬件友好性。
- 可拼接多个元素,并将其解析为某扩域元素
- 其承诺方案是基于Brakedown的,使用了Merkle trees和Reed-Solomon编码。
- 相比于FRI,该方案具有更大的proofs和更长的验证时间,但Prover time却大幅降低了。
- 但是,证明时间的好处通常超过了更长的验证时间。
- 此外,使用递归证明可以进一步减小proof size,或可使用final SNARK——如Groth16或Plonk,以实现提交到L1上的smaller proof。
参考资料
[1] LambdaClass 2023年12月博客 SNARKs on binary fields: Binius - Part 1