Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

译自 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)")。证明: 换言之,如果我们把 次单位根中每个元素都平方,我们只会得到一半的元素,(即 次单位根)。元素与其平方之间是二对一的映射。

参考文献


  1. Friedman, R. (n.d.) "Cyclic Groups and Elementary Number Theory II" (p. 5).