译自 halo2 book:background/fields.md
域(field)
许多密码学协议的一个基础组成部分,是被称为 域(field) 的代数结构。域是一些对象(通常是数)的集合,配备两个相关联的二元运算符 和 ,使得各种 域公理(field axioms) 成立。实数 就是一个具有不可数多个元素的域的例子。
Halo 使用 有限域(finite field),它只有有限个元素。有限域可以完全分类如下:
- 如果 是一个有限域,那么对某个整数 和某个素数 ,它包含 个元素;
- 任意两个具有相同元素个数的有限域是同构的。特别地,素域(prime field) 中的所有算术运算,都与整数模 的加法和乘法同构,即与 中的运算同构。这就是我们常把 称为 模(modulus) 的原因。
我们将域写作 ,其中 。素数 称为它的 特征(characteristic)。在 的情形下,域 是域 的 次扩张(extension)。(作个类比,复数 是实数的扩张。)然而在 Halo 中我们不使用扩域(extension field)。每当我们写 时,指的都是我们所说的 素域(prime field),它有素数 个元素,即 。
重要说明:
- 任何域中都有两个特殊元素:,即加法单位元(additive identity);以及 ,即乘法单位元(multiplicative identity)。
- 当域元素以二进制整数形式表示时,其最低有效位(least significant bit)可以被解释为它的"符号(sign)",以帮助把它与其加法逆元(negation)区分开。这是因为对于某个最低有效位为 的非零元素 ,我们有 的最低有效位为 ,反之亦然。我们也可以用一个元素是否大于 来赋予它一个"符号"。
有限域稍后将用于构造 多项式(polynomial) 和 椭圆曲线(elliptic curve)。椭圆曲线是群(group)的例子,我们接下来讨论群。
群(group)
群比域更简单也更受限;它们只有一个二元运算符 ,公理也更少。它们也有一个单位元,我们记作 。
群中任意非零元素 都有一个 逆元(inverse) ,它是 唯一 满足 的元素 。
例如, 的非零元素的集合构成一个群,其中群运算由域上的乘法给出。
(旁注)加法记法 vs 乘法记法
如果像我们上面那样把 写成 或者省略(即把 写作 ),把单位元写作 ,把求逆写作 ,那么我们说这个群是"用乘法记法书写的"。如果把 写成 ,把单位元写作 或 ,把求逆写作 ,那么我们说它是"用加法记法书写的"。
习惯上,椭圆曲线群用加法记法,而当元素来自有限域时用乘法记法。
使用加法记法时,对于非负的 ,我们还写
并称之为"标量乘法(scalar multiplication)";我们也常用大写字母作为表示群元素的变量。使用乘法记法时,我们还写
并称之为"幂运算(exponentiation)"。无论哪种情形,我们把满足 或 的标量 称为 以 为底的"离散对数(discrete logarithm)"。我们可以通过求逆把标量扩展到负整数,即 或 。
有限群的元素 的 阶(order) 定义为使得 (乘法记法)或 (加法记法)成立的最小正整数 。群的阶 是群中元素的个数。
群总有一个 生成集(generating set),即这样一个元素集合:我们能(用乘法术语来说)把群中任意元素表示为这些元素的幂的乘积。所以若生成集是 ,我们就能把群中任意元素表示为 。对于给定的群,可以有许多不同的生成集。
如果一个群有一个仅含单个元素(记为 )的(不一定唯一的)生成集,则称它为 循环群(cyclic)。在这种情形下,我们可以说 生成该群,并且 的阶就是该群的阶。
任意 阶有限循环群 都 同构(isomorphic) 于整数模 (记作 ),使得:
- 中的运算 对应于模 加法;
- 中的单位元对应于 ;
- 某个生成元 对应于 。
给定一个生成元 ,这个同构在 方向上总是易于计算的;它就是 (或在加法记法下,)。但在 方向上一般可能很难计算;当我们讲到 椭圆曲线(elliptic curve) 时会进一步讨论这一点。
如果有限群的阶 是素数,那么这个群是循环群,并且每个非单位元都是生成元。
有限域的乘法群(multiplicative group)
我们用记号 表示集合 上的乘法群(即群运算是 中的乘法)。
在 中求逆的一个快捷方式是 。其原因源自 费马小定理(Fermat's little theorem),该定理指出对任意整数 都有 。如果 非零,我们可以把它除两次 ,得到
设 是 的一个生成元,那么它的阶为 (等于 中元素的个数)。因此,对任意元素 ,都存在唯一的整数 使得 。
注意 (其中 )实际上可以被解释为 ,其中 且 。事实上,对所有 都有 成立。因此,非零域元素的乘法可以被解释为相对于某个固定生成元 的模 加法。加法只是发生"在指数上"。
这也是看待计算域中逆元为何用 的另一种角度:
所以 。
蒙哥马利技巧(Montgomery's Trick)
蒙哥马利技巧(以 Peter Montgomery(安息)命名)是一种同时计算多个群逆元的方法。它常用于计算 中的逆元,相对于乘法而言,这些逆元的计算开销相当大。
设想我们需要计算三个非零元素 的逆元。我们改为先计算乘积 和 ,然后计算逆元
现在我们可以把 乘以 得到 ,把 乘以 得到 ,随后再把它乘以 就能得到它们各自的逆元。
这个技巧可以推广到任意数量的群元素,而只需要做一次求逆。
乘法子群(multiplicative subgroups)
群 (运算为 )的一个 子群(subgroup),是 中这样一个元素子集:它在 下也构成一个群。
在上一节中我们说过 是 阶乘法群 的一个生成元。这个群的阶是 合数(composite),因此由中国剩余定理1,它有真子群(strict subgroups)。举例来说,设想 ,于是 分解为 。这样就存在一个 阶子群的生成元 和一个 阶子群的生成元 。因此 中的所有元素都可以唯一地写成 ,其中 (模 )、(模 )。
如果我们有 ,注意当我们计算
时会发生什么;我们实际上"杀死"了 阶子群分量,产生了一个 阶子群中的值。
拉格朗日定理(群论)(Lagrange's theorem (group theory)) 指出,有限群 的任意子群 的阶整除 的阶。因此, 任意子群的阶必定整除
像 Halo 2 这样基于 PLONK 的证明系统,更便于在具有大量乘法子群且其分布"光滑(smooth)"的域上使用(这使得随着电路规模增大,性能悬崖更小、更细粒度)。Pallas 和 Vesta 曲线特别地具有如下形式的素数
其中 且 为奇数(即 有 32 个低位零比特)。这意味着对所有 ,它们都有 阶的乘法子群。这些 2-adic 子群非常适合 高效的 FFT,同时也支持种类繁多的电路规模。
平方根(square roots)
在域 中,恰好一半的非零元素是平方数(squares);其余的是非平方数,或称"二次非剩余(quadratic non-residues)"。为了理解原因,考虑一个生成 的 阶乘法子群的 (之所以存在,是因为 是大于 的素数,所以 能被 整除),以及一个生成 的 阶乘法子群的 ,其中 。那么每个元素 都可以唯一地写成 ,其中 且 。所有元素中有一半满足 ,另一半满足 。
让我们考虑 的简单情形,此时 为奇数(如果 为偶数,那么 就能被 整除,这与 为 矛盾)。如果 是平方数,那么必定存在 使得 。但这意味着
换言之,在这个特定的域中所有平方数都不生成 阶乘法子群,于是由于一半的元素生成 阶子群,那么至多一半的元素是平方数。事实上恰好一半的元素是平方数(因为把每个非平方元素平方都给出一个唯一的平方数)。这意味着我们可以假定所有平方数都可以写成 (对某个 ),因此求平方根的问题就归结为做 的幂运算。
在 的情形下,事情变得更复杂,因为 不存在。我们把 写成 ,其中 为奇数。 的情形不可能, 的情形就是我们已经描述过的,所以考虑 。 生成一个 阶乘法子群, 生成奇数阶 阶乘法子群。那么每个元素 都可以写成 ,其中 且 。如果该元素是平方数,那么存在某个 ,它可以写成 ,其中 且 。这意味着 ,因此我们有 ,且 。在这种情形下 必须为偶数,否则就不可能对任何 都有 。在 不是平方数的情形下, 为奇数,所以一半的元素是平方数。
为了计算平方根,我们可以先把元素 升到 次幂以"杀死" 阶分量,得到
然后把这个结果升到 次幂,以撤销原来的幂运算对 阶分量的影响:
(因为 与 互素)。这就裸露出 值,我们可以平凡地处理它。我们可以类似地杀死 阶分量以得到 ,再把这些值组合起来得到平方根。
事实证明,在 的情形下,有更简单的算法把其中几个幂运算合并在一起以提高效率。对于其他的 值,已知唯一的方法是通过反复平方来手动提取 ,直到对 的每一位都得到单位元为止。这就是 Tonelli-Shanks 平方根算法(Tonelli-Shanks square root algorithm) 的精髓,描述了通用策略。(还有另一种使用二次扩域的平方根算法,但直到素数变得相当大之前,它在效率上都不划算。)
单位根(roots of unity)
在前面几节中,我们把 写成 ,其中 为奇数,并说明了元素 生成了 阶子群。为方便起见,记 元素 被称为 次 单位根(roots of unity)。
本原单位根(primitive root of unity) 是这样一个 次单位根:除非 ,否则 。
重要说明:
-
如果 是 次单位根, 满足 如果 那么
-
等价地,单位根是方程 的解。
-
("取负引理(Negation lemma)")。证明: 由于 的阶是 , 因此,
-
("减半引理(Halving lemma)")。证明: 换言之,如果我们把 次单位根中每个元素都平方,我们只会得到一半的元素,(即 次单位根)。元素与其平方之间是二对一的映射。