Skip to article frontmatterSkip to article content

Notes on FRI-Binius (Part I): Binary Towers

二进制域拥有优美的内部结构,而 Binius 是意图充分利用这些内部结构,构造高效的 SNARK 证明系统。本文主要讨论 Binius 底层所依赖的 Binary Fields 以及 基于 Binary Fields 的 Extension Tower 的构造方法。Binary Fields 提供了更小的 Fields,并且兼容传统密码学中的各种工具构造,同时也可以充分利用硬件上的特殊指令的优化。选用 Extension Tower 优点主要有两个,一个是递归的 Extension 构造提供了一致的、增量式的 Basis 选择,从而使得 Small Field 可以以非常自然的方式嵌入到一个 Large Field 中,另一个优点是乘法和求逆运算存在高效的递归算法。

Extension Fields

我们尝试用简单的语言来描述下 Extension Field 的概念,为后续我们研究 Binary Tower 做铺垫,深入学习请参考有限域教科书中的严格定义和证明。

素数域 Fp\mathbb{F}_{p} 是有 pp 个元素的有限域,其中 pp 必定是一个素数。它同构于 Z/pZ\mathbb{Z}/p\mathbb{Z} ,也就是说我们可以用整数集合 {0,1,,p1}\{0, 1, \ldots, p-1\} 来表示 Fp\mathbb{F}_p 的全体元素。

我们可以把素数域的任意两个元素组成一个 Tuple,即 (a,b)Fp2(a, b)\in\mathbb{F}_{p}^2,那么这个 Tuple 也构成了一个域,其元素数量为 p2p^2。我们可以检验一下, a+bFpa+b\in\mathbb{F}_p,那么我们定义 Tuple 的加法如下:

(a1,b1)+(a2,b2)=(a1+a2,b1+b2)(a_1, b_1) + (a_2, b_2) = (a_1 + a_2, b_1 + b_2)

可以验证, Fp2\mathbb{F}_{p}^2 构成了一个向量空间, 因此它是一个加法群,其中零元素为 (0,0)(0, 0) 。接下来是怎么定义乘法的问题,我们希望乘法可以封闭,即:

(a1,b1)(a2,b2)=(c,d)(a_1, b_1)\cdot (a_2, b_2) = (c, d)

一种最简单的做法是采用 Entry-wise Mulplication 来定义乘法,即 (a1,b1)(a2,b2)=(a1a2,b1b2)(a_1, b_1)\cdot (a_2, b_2) = (a_1a_2, b_1b_2),并且乘法单位元为 (1,1)(1, 1),貌似这样我们构造可以让乘法封闭。但是这并不能保证每一个元素都有逆元素。例如 (1,0)(1, 0),它乘上任何 Tuple 都不能得到 (1,1)(1, 1),因为 Tuple 的第二个部分怎么计算都是 0。因此,这样的乘法无法构成一个「域」。

在有限域理论中,Tuple 的乘法运算是通过多项式模乘来实现的。也就是我们把 (a1,b1)(a_1, b_1) 看成是一个 Degree 为 1 的多项式的系数,同样 (a2,b2)(a_2, b_2) 也可以看成是一个 Degree 为 1 的多项式的系数,通过两者相乘,我们得到一个 Degree 为 2 的多项式:

(a1+b1X)(a2+b2X)=a1a2+(a1b2+a2b1)X+b1b2X2(a_1 + b_1\cdot X) \cdot (a_2 + b_2\cdot X) = a_1a_2 + (a_1b_2 + a_2b_1)X + b_1b_2X^2

然后我们再把结果多项式模掉一个 Degree 为 2 的不可约的多项式 f(X)f(X),得到一个余数多项式,这个余数多项式的系数即是 (c,d)(c, d)。那么我们定义新的 Tuple 乘法如下:

(a1+b1X)(a2+b2X)=c+dXmodf(X)(a_1 + b_1\cdot X) \cdot (a_2 + b_2\cdot X) = c + d\cdot X \mod f(X)

并且定义 (1,0)(1, 0) 为乘法单位元。这里我们强调 f(X)f(X) 必须是一个不可约多项式。那么假如 f(X)f(X) 是一个可约多项式,会有什么后果?比如 f(X)=(u1+u2X)(v1+v2X)f(X)=(u_1+u_2X)(v_1+v_2X),那么 (u1,u2)(u_1, u_2)(v1,v2)(v_1, v_2) 这两个非零元素的乘积等于 (0,0)(0, 0),跳出了乘法群。严格的说,Zero Divisor 的出现破坏了乘法群的结构,从而无法构成一个「域」。

接下来的问题是,是否存在一个不可约的 Degree 为 2 的多项式 f(X)f(X)。如果不存在 f(X)f(X) ,那么构造一个 Fp2\mathbb{F}_{p^2} 的域也就无从谈起。对于素数域 Fp\mathbb{F}_p,任取 wFpw\in\mathbb{F}_p,它不是任何元素的平方,数论中它属于非二次剩余类,即 wQNR(p)w\in QNR(p) 。如果 ww 存在,那么 f(X)=X2wf(X)=X^2-w 就是一个不可约多项式。进一步,ww 的存在性如何保证?如果 pp 是一个奇数,那么 ww 必然存在。如果 p=2p=2,虽然 ww 不存在,但我们可以指定 f(X)=X2+X+1F2[X]f(X)=X^2+X+1\in\mathbb{F}_2[X] 作为一个不可约多项式。

我们现在把 Fp2\mathbb{F}_{p}^2 这个 Tuple 构成的集合,连同定义的加法和乘法运算,构成的域记为 Fp2\mathbb{F}_{p^2} ,元素个数为 p2p^2。根据有限域理论,我们可以把二元 Tuple 扩大到 nn 元 Tuple,从而可以构成更大的有限域 Fpn\mathbb{F}_{p^n}

对于某个 Fp\mathbb{F}_p 上的不可约多项式 f(X)=c0+c1X+X2f(X) = c_0 + c_1X + X^2 ,它在 Fp2\mathbb{F}_{p^2} 中一定可以被分解。f(X)=(Xα)(Xα)f(X) = (X-\alpha)(X-\alpha') ,其中 αα\alpha' 互为共轭(Conjugate),并且它们都属于 Fp2\mathbb{F}_{p^2},但不属于 Fp\mathbb{F}_p 。按照扩张域的定义,Fp(α)\mathbb{F}_p(\alpha) 是一个 Degree 为 2 的代数扩张,它与前面我们通过不可约多项式的模乘构造的有限域同构。因此,我们也可以用 a1+a2αa_1 + a_2\cdot\alpha 来表示 Fp2\mathbb{F}_{p^2} 中的任意一个元素。或者进一步,我们可以把 (1,α)(1, \alpha) 看成是 Fp2\mathbb{F}_{p^2} 向量空间的一组 Basis,任意一个 aFp2a\in \mathbb{F}_{p^2} ,都可以表示为 Basis 的线性组合:

a=a01+a1α,a0,a1Fpa = a_0 \cdot 1 + a_1 \cdot \alpha, \quad a_0, a_1\in\mathbb{F}_p

这样一来,我们就可以用符号 a0+a1αa_0 + a_1\cdot \alpha 来表示 Fp2\mathbb{F}_{p^2} 中的元素,而非 a0+a1Xa_0 + a_1\cdot X 这样的多项式表示。元素的「多项式表示」并没有指定我们到底采用了哪个不可约多项式来构造的扩张域,而采用 α 这个不不可约多项式的根作为构建扩张域的方式,则不存在二义性。

把这个概念推广到 Fpn\mathbb{F}_{p^n},对于任意一个元素 aFpna\in\mathbb{F}_{p^n},都可以表示为:

a=a0+a1α+a2α2++an1αn1a = a_0 + a_1\cdot\alpha + a_2\cdot\alpha^2 + \cdots + a_{n-1}\cdot\alpha^{n-1}

这里 αnn 次不可约多项式 f(X)f(X) 的根。因此 (1,α,α2,,αn1)(1, \alpha, \alpha^2, \cdots, \alpha^{n-1}) 可以看成是 Fpn\mathbb{F}_{p^n} 的一组 Basis,这个 Basis 被称为有限域的 Polynomial Basis。注意 Fpn\mathbb{F}_{p^n} 作为一个 nn 维的向量空间,它有很多很多个不同的 Basis。后续我们将看到 Basis 选择是一个非常重要的步骤,恰当的 Basis 可以大大优化或简化一些表示或运算。

TODO: Fp* 乘法循环群

Binary Field

对于 F2n\mathbb{F}_{2^n} ,我们称之为二进制域,因为它的元素都可以表达为由 01 组成的长度为 nn 的向量。构造 F2n\mathbb{F}_{2^n} 可以通过两类方法构造,一种是通过 nn 次的不可约多项式;另一种是反复使用二次扩张的方法,被称为 Extension Tower。域扩张的路径非常多,对于 2n2^n ,它有多个 2 因子,因此存在多种介于两种方法之间的构造方式,比如对于 F28\mathbb{F}_{2^8},可以先构造 F24\mathbb{F}_{2^4},再通过二次扩张得到 F28\mathbb{F}_{2^8},也可以先构造 F22\mathbb{F}_{2^2},再通过四次不可约多项式进行扩张,构造 F28\mathbb{F}_{2^8}

我们先热身下,利用二次扩张的方法构造 F22\mathbb{F}_{2^2}。前面我们讨论过 f(X)=X2+X+1f(X)=X^2+X+1 是一个 F2[X]\mathbb{F}_2[X] 的不可约多项式,假设 ηf(X)f(X) 的一个根,那么 F22\mathbb{F}_{2^2} 可以表示为 a0+b0ηa_0 + b_0\cdot\eta。考虑到 F22\mathbb{F}_{2^2} 只有四个元素,可以列在下面

F22={0,1,η,η+1}\mathbb{F}_{2^2} = \{0, 1, \eta, \eta+1\}

并且 η 作为生成元可以产生乘法群 F22=η\mathbb{F}_{2^2}^*=\langle \eta \rangle,它的 Order 为 3:

η0=1η1=ηη2=η+1\begin{split} \eta^0 &= 1 \\ \eta^1 &= \eta \\ \eta^2 &= \eta+1 \\ \end{split}

我们演示下 F24\mathbb{F}_{2^4} 的两种构造方式。第一种是直接采用一个 4 次 F2\mathbb{F}_2 上的不可约多项式。其实总共有 3 个不同的 4 次不可约多项式,因此总共有 3 种不同的构造方式。

f1(X)=X4+X+1f2(X)=X4+X3+1f3(X)=X4+X3+X2+X+1\begin{split} f_1(X) &= X^4 + X + 1 \\ f_2(X) &= X^4 + X^3 + 1 \\ f_3(X) &= X^4 + X^3 + X^2 + X + 1 \\ \end{split}

因为只需要选择一个不可约多项式即可,那我们就选择 f1(X)f_1(X) 来定义 F24\mathbb{F}_{2^4}

F24=F2[X]/f1(X)\mathbb{F}_{2^4} = \mathbb{F}_2[X]/\langle f_1(X)\rangle

我们把 f1(X)f_1(X)F24\mathbb{F}_{2^4} 上的根记为 θ,那么 aF24a\in\mathbb{F}_{2^4} 元素可以唯一地表示为:

a=a0+a1θ+a2θ2++an1θn1a = a_0 + a_1\cdot\theta + a_2\cdot\theta^2 + \cdots + a_{n-1}\cdot\theta^{n-1}

这里补充一下,f1(X)f_1(X) 同时还是一个 Primitive 多项式,它的根 θ 同时也是 F24\mathbb{F}_{2^4} 的一个 Primitive Element。注意并不是所有的不可约多项式都是 Primitive 多项式,例如上面列出的 f3(X)f_3(X) 就不是一个 Primitive 多项式。

下面我们可以列出 F24\mathbb{F}_{2^4} 中的所有元素,每一个元素对应一个 4bit 的二进制向量:

0000000100100011010001010110011101θθ+1θ2θ2+1θ2+θθ2+θ+110001001101010111100110111101111θ3θ3+1θ3+θθ3+θ+1θ3+θ2θ3+θ2+1θ3+θ2+θθ3+θ2+θ+1\begin{array}{cccccccc} 0000 & 0001 & 0010 & 0011 & 0100 & 0101 & 0110 & 0111 \\ 0 & 1 & \theta & \theta+1 & \theta^2 & \theta^2+1 & \theta^2+\theta & \theta^2+\theta+1 \\ \hline 1000 & 1001 & 1010 & 1011 & 1100 & 1101 & 1110 & 1111 \\ \theta^3 & \theta^3+1 & \theta^3+\theta & \theta^3+\theta+1 & \theta^3+\theta^2 & \theta^3+\theta^2+1 & \theta^3+\theta^2+\theta & \theta^3+\theta^2+\theta+1 \\ \end{array}

对于 F24\mathbb{F}_{2^4} 中两个元素的加法,我们只需要把它们的二进制表示按位相加即可,例如:

(0101)+(1111)=(1010)(0101) + (1111) = (1010)

这个运算实际上就是 XOR 按位异或运算。而对于乘法,比如 aθa\cdot\theta,则对应于二进制上的移位运算:

(0101)<<1=(1010)(θ2+1)θ=θ3+θ\begin{split} (0101) << 1 &= (1010)\\ (\theta^2 + 1)\cdot\theta &= \theta^3 + \theta \\ \end{split}

如果继续乘以 θ,就会出现移位溢出的情况,

(θ3+θ)θ=θ4+θ2=θ2+θ+1(1010)<<1=(0100)+(0011)=(0111)\begin{split} (\theta^3 + \theta)\cdot\theta &= {\color{blue}\theta^4} + \theta^2 = \theta^2 + \theta + 1 \\ (1010) << 1 &= (0100) + (0011) = (0111)\\ \end{split}

对于溢出位,则需要补加上 0011,这是由不可约多项式 f1(X)f_1(X) 的定义决定的, θ4=θ+1\theta^4=\theta+1。所以一旦高位的 bit 移位溢出,就需要做一个与 0011 的 XOR 运算。由此,我们看到 F24\mathbb{F}_{2^4} 的乘法运算规则实际上取决于不可约多项式的选择。所以说,如何选择合适的不可约多项式也是二进制域乘法优化的关键步骤。

Field Embedding

如果我们要基于二进制域的构造 SNARK 证明系统,我们会将较小的数字用小位数来表示,但是不管怎么样,在协议的挑战轮,Verifier 都要给出一个在较大的扩张域中的随机数,以期望达到足够的密码学安全强度。这就需要我们在小域中用多项式编码 witness 信息,但在一个较大的域中对这些多项式进行取值运算。那么,我们需要找到一种办法把小域 KK 「嵌入」到大域 LL 中。

所谓的嵌入(Embedding),指的是把一个域 KK 中的元素映射到另一个域 LL 中,记为 ϕ:KL\phi: K\to L。这个映射是 Injective 的,并且这个同态映射保持了加法和乘法运算的结构:

ϕ(a+b)=ϕ(a)+ϕ(b)ϕ(ab)=ϕ(a)ϕ(b)\begin{split} \phi(a+b) &= \phi(a) + \phi(b) \\ \phi(a\cdot b) &= \phi(a)\cdot\phi(b) \end{split}

即如果 aKa\in K,那么 aaLL 中也有唯一的表示。为了保持乘法运算的结构,那么其实我们只要能找到一个 K 中的 Primitive Element α 对应到 LL 中的某个元素 β,那么这个同态映射就唯一确定了,因为 KK 中的任意一个元素都可以表示为 α 的幂次。不过,通常这个嵌入的同态映射并不是一个轻而易举可以找到。我们以 F22F24\mathbb{F}_{2^2}\subset\mathbb{F}_{2^4} 为例,看看如何找到前者嵌入到后者的映射。

因为 ηF22\mathbb{F}_{2^2} 中的一个 Primitive Element,所以我们只要考虑 ηF24\mathbb{F}_{2^4} 中的表示即可。

我们先看看 F24\mathbb{F}_{2^4} 中的 Primitive Element θ ,是否 ηθ\eta\mapsto\theta 是一个嵌入映射?

η2=η+1butθ2θ+1\eta^2 = \eta+1 \quad \text{but} \quad \theta^2 \neq \theta+1

很显然,η2θ2\eta^2 \neq \theta^2,所以 ηθ\eta\mapsto\theta 不是一个嵌入映射。联想到不可约多项式决定了元素间乘法的关系,而因为 ηX2+X+1X^2+X+1 的根,而 θX4+X+1X^4+X+1 的根,所以 ηθ 的乘法关系肯定不一样。在 F24\mathbb{F}_{2^4} 中,也存在 X2+X+1X^2+X+1 的两个根,分别为 θ2+θ\theta^2+\thetaθ2+θ+1\theta^2+\theta+1,读者可以验证下面的等式:

(θ2+θ)2+(θ2+θ)+1=θ4+θ2+θ2+θ+1=0(\theta^2+\theta)^2 + (\theta^2+\theta) + 1 = \theta^4 + \theta^2 + \theta^2 + \theta + 1 = 0

那么,我们就定义嵌入映射:

ϕ:F22F24,ηθ2+θ\begin{split} \phi &: \mathbb{F}_{2^2} \to \mathbb{F}_{2^4},\quad \eta \mapsto \theta^2+\theta \end{split}

这就意味着二进制 (10)(10) 对应于 L=F24L=\mathbb{F}_{2^4} 中的 (0110)(0110) ;而二进制 (11)(11) (也就是 η+1\eta+1)对应于 LL 中的 (θ2+θ+1)(\theta^2+\theta+1),即 (0111)(0111) 。这里要注意,我们也可以用 ϕ:ηθ2+θ+1\phi': \eta \mapsto \theta^2+\theta+1 作为另一个不同的嵌入映射,其内在原理是 θ2+θ\theta^2+\thetaθ2+θ+1\theta^2+\theta+1 互为共轭,它们是完美对称的,因此这两种映射都可以作为嵌入映射,除了映射到不同元素上,从整体结构上并且没有明显区别。

而对于任意的 [L:K]=n[L:K]=n 而言,我们将 KK 嵌入到 LL,一个直接的方法就是找 f(X)f(X) LL 中 的根,当然这个计算并不简单。并且嵌入和反嵌入都需要额外的计算,这无疑增加了系统的复杂性。

而 Binius 论文提到的采用递归式 Extension Tower 的构造方法,通过选取合适的不可约多项式和 Basis,我们就可以得到非常直接(称为 Zero-cost)的嵌入和反嵌入映射。

Extension Tower

我们可以通过两次的二次扩张来构造 F24\mathbb{F}_{2^4},首先我们选择一个二次不可约多项式 f(X)=X2+X+1f(X)=X^2+X+1,那么我们可以构造 F22\mathbb{F}_{2^2},然后基于 F22\mathbb{F}_{2^2} 再找到一个二次不可约多项式,从而构造 F24\mathbb{F}_{2^4}

F22=F2[X]/X2+X+1F2(η)\mathbb{F}_{2^2} = \mathbb{F}_2[X]/\langle X^2+X+1 \rangle \cong\mathbb{F}_2(\eta)

接下我们要找到 F22[X]\mathbb{F}_{2^2}[X] 中的一个二次不可约多项式。首先注意,X2+X+1X^2+X+1 已经不能使用,根据 F22\mathbb{F}_{2^2} 的定义,它已经可以被分解。再考虑下 X2+1X^2+1,它也可以被分解 (X+1)(X+1)(X+1)(X+1), 事实上所有的 F2[X]\mathbb{F}_2[X] 的二次多项式都可以被分解。而一个F22[X]\mathbb{F}_{2^2}[X] 中的二次不可约多项式,其系数中必然包含一个带有新元素 η 的项。

比如 X2+X+ηX^2+X+\eta 就是一个 F22\mathbb{F}_{2^2} 上的二次不可约多项式。那么我们可以构造 F24\mathbb{F}_{2^4}

F24=F22[X]/X2+X+η\mathbb{F}_{2^4} = \mathbb{F}_{2^2}[X]/\langle X^2+X+\eta \rangle

我们把 X2+X+ηX^2+X+\etaF24\mathbb{F}_{2^4} 中的根记为 ζ,那么 F24\mathbb{F}_{2^4} 可以表示为:

F24F22(ζ)F2(η)(ζ)F2(η,ζ)\mathbb{F}_{2^4} \cong \mathbb{F}_{2^2}(\zeta) \cong \mathbb{F}_2(\eta)(\zeta) \cong \mathbb{F}_2(\eta, \zeta)

那么 F24\mathbb{F}_{2^4} 的全部元素可以用 η,ζ\eta, \zeta 来表示:

0000000100100011010001010110011101ηη+1ζζ+1ζ+ηζ+η+110001001101010111100110111101111ζηζη+1ζη+ηζη+η+1ζη+ζζη+ζ+1ζη+ζ+ηζη+ζ+η+1\begin{array}{cccccccc} \hline 0000 & 0001 & 0010 & 0011 & 0100 & 0101 & 0110 & 0111 \\ 0 & 1 & \eta & \eta+1 & \zeta & \zeta+1 & \zeta+\eta & \zeta+\eta+1 \\ \hline 1000 & 1001 & 1010 & 1011 & 1100 & 1101 & 1110 & 1111 \\ \zeta\eta & \zeta\eta + 1 & \zeta\eta + \eta & \zeta\eta + \eta + 1 & \zeta\eta + \zeta & \zeta\eta + \zeta +1 & \zeta\eta+\zeta+\eta & \zeta\eta+\zeta+\eta+1 \\ \hline \end{array}

这时,4bit 二进制中的每一个 bit 都对应于 F24\mathbb{F}_{2^4} 中的一个元素,(1000)(1000) 对应 ζη\zeta\eta(0100)(0100) 对应 ζ(0010)(0010) 对应 η(0001)(0001) 对应 1。因此我们可以用下面的 Basis 来表示 F24\mathbb{F}_{2^4} 中的所有元素:

B=(1, η, ζ, ηζ)\mathcal{B} = (1,\ \eta,\ \zeta,\ \eta\zeta)

这时候,F22\mathbb{F}_{2^2} 的二进制表示直接对应于 F24\mathbb{F}_{2^4} 二进制表示的「低两位」,例如:

(1010)=(10)(10)=ζη+η\begin{split} (1010) &= (10) || (10) = \zeta\eta + \eta \\ \end{split}

因此,我们可以直接在 F22\mathbb{F}_{2^2} 的二进制表示的高两位补零,即可以得到 F24\mathbb{F}_{2^4} 的对应元素。反之,只要把高位两个零去除,一个 F24\mathbb{F}_{2^4} 中的元素直接映射回 F22\mathbb{F}_{2^2} 中的元素。

如上图所示,(1011)(1011)ζη+η+1\zeta\eta+\eta+1 的二进制表示,它的低两位 (11)(11) 直接对应于 F22\mathbb{F}_{2^2} 中的 (η+1)(\eta+1) 。这种嵌入是一种「自然嵌入」,因此 Binus 论文称之为 Zero-cost Embedding。

不过 F24\mathbb{F}_{2^4} 还是一个很小的域,不够用,如果继续往上进行二次扩张,怎么能找到合适的不可约多项式呢?方案并不唯一,我们先看看 Binius 论文 [DP23] 中给出的一个方案 —— Wiedemann Tower [Wie88]。

Wiedemann Tower

Wiedemann Tower 是一个基于 F2\mathbb{F}_2 的递归扩张塔。最底部的 Base Field 记为 T0\mathcal{T}_0,其元素仅为 01

T0=F2{0,1}\mathcal{T}_0 = \mathbb{F}_2 \cong \{0,1\}

然后我们引入一个未知数 X0X_0,构造一个一元多项式环 F2[X0]\mathbb{F}_2[X_0] 。如前所讨论,X2+X+1X^2 + X + 1 是一个 T0\mathcal{T}_0 上的不可约多项式,因此,我们可以用它来构造 T1\mathcal{T}_1

T1=F2[X0]/X02+X0+1={0,1,X0,X0+1}F22F2(α0)\mathcal{T}_1 = \mathbb{F}_2[X_0]/\langle X_0^2+X_0+1 \rangle = \{0, 1, X_0, X_0+1\} \cong \mathbb{F}_{2^2} \cong \mathbb{F}_2(\alpha_0)

接下来,我们找到一个 T1[X1]\mathcal{T}_1[X_1] 中的二次不可约多项式 X12+α0X1+1X_1^2+\alpha_0\cdot X_1+1,那么我们可以构造 T2\mathcal{T}_2

T2=T1[X1]/X12+α0X1+1F24F2(α0,α1)\mathcal{T}_2 = \mathcal{T}_1[X_1]/\langle X_1^2+ \alpha_0\cdot X_1+1\rangle \cong \mathbb{F}_{2^4} \cong \mathbb{F}_2(\alpha_0, \alpha_1)

依次类推,我们可以构造出 T3,T4,,Tn\mathcal{T}_3, \mathcal{T}_4, \cdots, \mathcal{T}_n

Ti+1=Ti[Xi]/Xi2+αi1Xi+1F22iF2(α0,α1,,αi),i1\mathcal{T}_{i+1} = \mathcal{T}_i[X_i]/\langle X_i^2+\alpha_{i-1}\cdot X_i+1\rangle \cong \mathbb{F}_{2^{2^i}} \cong \mathbb{F}_2(\alpha_0, \alpha_1, \ldots, \alpha_i),\quad i\geq 1

这里,α0,α1,,αn1\alpha_0, \alpha_1, \ldots, \alpha_{n-1} 是依次引入的二次不可约多项式的根,使得:

Tn=F2(α0,α1,,αn1)\mathcal{T}_{n} = \mathbb{F}_2(\alpha_0, \alpha_1, \ldots, \alpha_{n-1})

Tn=22n|\mathcal{T}_{n}| = 2^{2^{n}}。这些引入的根之间的关系满足下面的等式:

αi+1+αi+11=αi\alpha_{i+1} + \alpha^{-1}_{i+1} = \alpha_i

不难检验,α0+α01=1\alpha_0+\alpha^{-1}_0=1。并且多元多项式环 T0[X0,X1,,Xn]\mathcal{T}_0[X_0, X_1, \ldots, X_n] 中的多项式 Xi2+Xi1Xi+1X_i^2+X_{i-1}X_i+1 的两个根为 αi\alpha_iαi1\alpha^{-1}_i

(αi1)2+αi1αi1+1=αi1+αi1+αi=αi1+αi1=0(\alpha^{-1}_i)^2 + \alpha_{i-1}\alpha^{-1}_i + 1 = \alpha^{-1}_i + \alpha_{i-1} + \alpha_i = \alpha_{i-1} + \alpha_{i-1} = 0

并且,αi\alpha_iαi+1\alpha_{i+1} 满足下面的递推关系:

αi+1+αi+11=αi\alpha_{i+1} + \alpha^{-1}_{i+1} = \alpha_i

这是因为等式两边都乘以 αi+1\alpha_{i+1} 就会得到:αi+12+αiαi+1+1=0\alpha_{i+1}^2 + \alpha_i\alpha_{i+1} + 1 = 0 ,这正是我们递归构造二次扩张的不可约多项式。

Multilinear Basis

对于 Ti+1\mathcal{T}_{i+1} over F2\mathbb{F}_2,构成了一个关于 F2\mathbb{F}_2n+1n+1 维向量空间。我们可以使用 这些不可约多项式的根来构造 Multilinear Basis:

Bi+1=(1,α0)(1,α1)(1,αi)=(1,α0,α1,α0α1,α2, , α0α1αi)\begin{split} \mathcal{B}_{i+1} &= (1, \alpha_0)\otimes (1, \alpha_1) \otimes \cdots \otimes (1,\alpha_i) \\ & = (1, \alpha_0, \alpha_1, \alpha_0\alpha_1, \alpha_2,\ \ldots,\ \alpha_0\alpha_1\cdots \alpha_i) \end{split}

这与我们前面讨论过的,使用 (1,η,ζ,ζη)(1, \eta, \zeta, \zeta\eta) 作为 F2(η,ζ)\mathbb{F}_{2}(\eta, \zeta) 的 Basis 是一致的。我们可以快速地验证下,首先 (1,α0)(1, \alpha_0)T1\mathcal{T}_1 的 Basis,因为 T1\mathcal{T}_1 的每一个元素都可以表示为

a0+b0α0,a0,b0T0a_0 + b_0\cdot \alpha_0, \quad a_0, b_0\in\mathcal{T}_0

T1\mathcal{T}_1 通过 α1\alpha_1 扩张到 T2\mathcal{T}_2 后,T2\mathcal{T}_2 的元素都可以表示为:

a1+b1α1,a1,b1T1a_1 + b_1\cdot \alpha_1, \quad a_1, b_1\in\mathcal{T}_1

代入 a1=a0+b0α0a_1=a_0+b_0\cdot \alpha_0b1=a0+b0α1b_1=a_0'+b_0'\cdot \alpha_1,于是有:

a1+b1α1=(a0+b0α0)+(a0+b0α0)α1=a0+b0α0+a0α1+b0α0α1\begin{split} a_1 + b_1\cdot \alpha_1 &= (a_0+b_0\cdot \alpha_0) + (a'_0+b'_0\cdot \alpha_0)\cdot \alpha_1 \\ &= a_0 + b_0\alpha_0 + a'_0\cdot\alpha_1+ b_0'\cdot \alpha_0\alpha_1 \end{split}

于是,(1,α0,α1,α0α1)(1, \alpha_0, \alpha_1, \alpha_0\alpha_1) 就构成了 T2\mathcal{T}_2 的 Basis。依次类推,(1,α0,α1,α0α1,α2,α0α2,α1α2,α0α1α2)(1, \alpha_0, \alpha_1, \alpha_0\alpha_1, \alpha_2, \alpha_0\alpha_2, \alpha_1\alpha_2, \alpha_0\alpha_1\alpha_2)T3\mathcal{T}_3 的 Basis。最后,Bn\mathcal{B}_{n} 正是 Tn\mathcal{T}_{n} 的 Basis。

寻找 Primitive element

前面我们讨论过 αi\alpha_iαi1\alpha^{-1}_{i} 互为共轭根,由 Galois 理论,

αi22n=αi1\alpha_{i}^{2^{2^n}} = \alpha^{-1}_{i}

那么 αi\alpha_i 都满足下面的性质:

αiFi=1\alpha_i^{F_i} = 1

这里 FnF_n 代表费马数(Fermat Number),Fn=22n+1F_n=2^{2^n}+1。一个著名的定理是 gcd(Fi,Fj)=1,ij\mathsf{gcd}(F_i, F_j) = 1, i\neq j,即任意的两个不同的费马数互质,因此

ord(α0α1αi)=ord(α0)ord(α1)ord(αi)\mathsf{ord}(\alpha_0\alpha_1\cdots \alpha_i) = \mathsf{ord}(\alpha_0)\mathsf{ord}(\alpha_1)\cdots\mathsf{ord}(\alpha_i)

因此,如果费马数 FiF_i 为素数,那么很显然 ord(αi)=Fi\mathsf{ord}(\alpha_i)=F_i。目前我们已知 i4i\leq 4 的情况下, FiF_i 都是素数,那么

ord(α0α1αi)=ord(α0)ord(α1)ord(αn)=F0F1Fi=22i+11=Tn+11\begin{split} \mathsf{ord}(\alpha_0\cdot \alpha_1\cdot \cdots \cdot \alpha_i) &= \mathsf{ord}(\alpha_0)\cdot \mathsf{ord}(\alpha_1)\cdot \cdots \cdot \mathsf{ord}(\alpha_n) \\ & = F_0\cdot F_1\cdot \cdots \cdot F_i = 2^{2^{i+1}} - 1 \\ & = |\mathcal{T}_{n+1}| -1 \end{split}

如果 α0αi,i4\alpha_0\cdots \alpha_i, i\leq 4,那么根据有限域的性质,它是 Tn+1\mathcal{T}_{n+1} 的一个 Primitive Element。

另外,通过计算机程序检查验证,对于 5i85\leq i \leq 8 的情况,αi\alpha_i 的 Order 仍然等于 FiF_i。这个 α0α8\alpha_0\cdots \alpha_8 是有限域 F2512\mathbb{F}_{2^{512}}的大小已经能满足类似 Binius 证明系统的需求。但在数学上,是否所有的 αi\alpha_i 都满足这个性质?这个似乎还是个未解问题 [Wie88]。

乘法优化

采用 Extension Tower 的另一个显著的优点是乘法运算的优化。

第一种优化是 “Small-by-large Multiplication”,即 aTιa\in\mathcal{T}_\iotabTι+κb\in\mathcal{T}_{\iota+\kappa} 两个数的乘法运算。因为 bb 可以分解为 2κ2^\kappaTι\mathcal{T}_\iota 元素,因此这个乘法运算等价于 2κ2^\kappaTι\mathcal{T}_\iota 上的乘法运算。

a(b0,b1,,b2κ1)=(ab0,ab1,,abκ1)a \cdot (b_0, b_1, \cdots, b_{2^\kappa-1}) = (a\cdot b_0, a\cdot b_1, \cdots, a\cdot b_{\kappa-1})

即使对于同一个域上的两个元素的乘法,也同样有优化手段。假设 a,bTi+1a, b\in\mathcal{T}_{i+1},那么根据 Tower 构造的定义,可以分别表示为 a0+a1αia_0 + a_1\cdot\alpha_ib0+b1αib_0 + b_1\cdot \alpha_i ,那么它们的乘法可以推导如下:

ab=(a0+a1αi)(b0+b1αi)=a0b0+(a0b1+a1b0)αi+a1b1αi2=a0b0+(a0b1+a1b0)αi+a1b1(αi1αi+1)=a0b0+a1b1+(a0b1+a1b0+a1b1αi1)αi=a0b0+a1b1+((a0+a1)(b0+b1)a0b0a1b1)+a1b1αi1)αi\begin{split} a\cdot b & = (a_0 + a_1\cdot\alpha_i)\cdot (b_0 + b_1\cdot\alpha_i) \\ &= a_0b_0 + (a_0b_1+a_1b_0)\cdot\alpha_i + a_1b_1\cdot\alpha_i^2 \\ & = a_0b_0 + (a_0b_1+a_1b_0)\cdot\alpha_i + a_1b_1\cdot(\alpha_{i-1}\alpha_i+1) \\ & = a_0b_0 + a_1b_1 + (a_0b_1 + a_1b_0 + a_1b_1\cdot\alpha_{i-1})\cdot\alpha_i \\ & = a_0b_0 + a_1b_1 + \big((a_0+a_1)(b_0+b_1) - a_0b_0 - a_1b_1) + a_1b_1\cdot\alpha_{i-1}\big)\cdot\alpha_i \end{split}

注意上面等式的右边,我们只需要计算三个 Ti\mathcal{T}_{i} 上的乘法,分别为 A=a0b0A=a_0b_0B=(a0+a1)(b0+b1)B=(a_0+a_1)(b_0+b_1)C=a1b1C=a_1b_1,然后上面的公式可以转换为:

ab=(A+C)+(BAC+Cαi1)αia\cdot b = (A + C) + (B-A-C+C\cdot \alpha_{i-1})\cdot\alpha_i

其中还漏了一个 Cαi1C\cdot \alpha_{i-1},这是一个常数乘法,因为 αi1Ti\alpha_{i-1}\in\mathcal{T}_{i} 是一个常数。这个常数乘法可以被归约到一个 Ti1\mathcal{T}_{i-1} 上的常数乘法运算,如下所示:

Cαi1=(c0+c1αi1)αi1=c0αi1+c1αi12=c0αi1+c1(αi2αi1+1)=c1+(c0+c1αi2)αi1\begin{split} C\cdot \alpha_{i-1} &= (c_0 + c_1\alpha_{i-1})\cdot \alpha_{i-1} \\ & = c_0\cdot \alpha_{i-1} + c_1\cdot \alpha_{i-1}^2 \\ & = c_0\cdot \alpha_{i-1} + c_1\cdot (\alpha_{i-2}\cdot \alpha_{i-1} + 1) \\ & = c_1 + (c_0 + {\color{blue}c_1\cdot \alpha_{i-2}})\cdot \alpha_{i-1} \end{split}

其中蓝色部分表达式,c1αi2{\color{blue}c_1\cdot \alpha_{i-2}} 为需要递归计算的 Ti2\mathcal{T}_{i-2} 上的常数乘法运算。全部递归过程只需要计算若干次加法即可完成。

再回头看看 aba\cdot b 的运算,我们也可以构造一个 Karatsuba 风格的递归算法,每一层递归只需要完成三次乘法运算,比不优化的四次乘法运算少一次。综合起来,优化效果会非常明显。

进一步,Ti\mathcal{T}_{i} 上的乘法逆运算也可以被大大优化 [FP97]。考虑 a,bTi+1a, b\in\mathcal{T}_{i+1},满足 ab=1a\cdot b=1,展开 aabb 的表达式:

ab=(a0+a1αi)(b0+b1αi)=a0b0+a1b1+((a0+a1)(b0+b1)a0b0a1b1)+a1b1αi1)αi=1\begin{split} a\cdot b &= (a_0 + a_1\cdot\alpha_i)\cdot (b_0 + b_1\cdot\alpha_i) \\ & = a_0b_0 + a_1b_1 + \big((a_0+a_1)(b_0+b_1) - a_0b_0 - a_1b_1) + a_1b_1\cdot\alpha_{i-1}\big)\cdot\alpha_i\\ &= 1\\ \end{split}

我们可以计算得到 b0,b1b_0, b_1 的表达式:

b0=a0+a1αi1a0(a0+a1αi1)+a12b1=a1a0(a0+a1αi1)+a12\begin{split} b_0 &= \frac{a_0 + a_1\alpha_{i-1}}{a_0(a_0 + a_1\alpha_{i-1}) + a_1^2} \\[2ex] b_1 &= \frac{a_1}{a_0(a_0 + a_1\alpha_{i-1}) + a_1^2} \\ \end{split}

所以,b0b_0b1b_1 的计算包括:一次求逆运算,三次乘法,两次加法,一次常数乘法,还有一次平方运算。

d0=αi1a1d1=a0+d0d2=a0d1d3=a12d4=d2+d3d5=1/d4b0=d1d5b1=a1d5\begin{split} d_0 &= \alpha_{i-1}a_1\\ d_1 &= a_0 + d_0 \\ d_2 &= a_0 \cdot d_1 \\ d_3 &= a_1^2 \\ d_4 &= d_2 + d_3 \\ d_5 &= 1/d_4 \\ b_0 & = d_1\cdot d_5\\ b_1 & = a_1 \cdot d_5\\ \end{split}

其中 d5d_5 的求逆运算可以沿着 Extension Tower 逐层递归,递归过程中的主要运算开销为三次乘法运算。还有 d3d_3 的平方运算,它也可以递归地计算:

a12=(e0+e1αi1)2=e02+e12αi12=e02+e12(αi2αi1+1)=(e02+e12)+(e12αi2)αi1\begin{split} a_1^2 &= (e_0 + e_1\cdot\alpha_{i-1})^2 \\ & = e_0^2 + e_1^2\cdot\alpha_{i-1}^2 \\ & = e_0^2 + e_1^2\cdot(\alpha_{i-2}\alpha_{i-1} + 1) \\ & = (e_0^2 + e_1^2) + (e_1^2\alpha_{i-2})\cdot\alpha_{i-1} \\ \end{split}

详细的递归效率分析可以参考 [FP97]。总体上,这个计算复杂度和 Karatsuba 算法复杂度相当,从而很大程度上降低了求逆的算法复杂度。

Artin-Schreier Tower (Conway Tower)

还有一种构造 Binary Tower 的方法,源自 Amil Artin 与 Otto Schreier 发表在 1927 年的论文中,也出现在 Conway 的 「On Numbers and Games」一书中。关于这个历史溯源与相关理论,请参考 [CHS24]。

对于任意的 Fpn\mathbb{F}_{p^n},我们选择 h(Xi+1)=Xi+1pXi+1α0α1αih(X_{i+1}) = X_{i+1}^p - X_{i+1} - \alpha_0\alpha_1\cdots \alpha_i 作为每一层 Tower 的不可约多项式。而 αi+1\alpha_{i+1} 作为 h(Xi+1)=0h(X_{i+1})=0 在上一层 Tower 上的根。这样 我们可以得到一个 Extension Tower:

F2F22F2(α0)F24F22(α1)F28F24(α2)\mathbb{F}_2 \subset \mathbb{F}_{2^2}\cong\mathbb{F}_2(\alpha_0) \subset \mathbb{F}_{2^4}\cong\mathbb{F}_{2^2}(\alpha_1) \subset \mathbb{F}_{2^8}\cong\mathbb{F}_{2^4}(\alpha_2)

而且 (1,α0)(1,α1)(1,αn)(1, \alpha_0)\otimes(1, \alpha_1)\otimes\cdots \otimes (1, \alpha_n) 构成了 F22i+1\mathbb{F}_{2^{2^{i+1}}} 向量空间的 Basis。依照我们前面的讨论,这组 Basis 也支持 Zero-cost 的子域嵌入。这类的 Multilinear Basis 也被称为 Cantor Basis [Can89]。

References