AIGC标识 计算数论详解

计算数论详解

目录

第一章 绪论

1.1 计算数论的定义

计算数论(Computational Number Theory),又称算法数论(Algorithmic Number Theory),是数论与计算机科学的交叉学科。它研究数论问题的算法设计、算法分析和算法实现。

计算数论的研究对象包括:

  • 整数的基本算术运算(大整数加减乘除)
  • 最大公因子的计算(欧几里得算法及其扩展)
  • 同余方程和模算术
  • 素性检验(Primality Testing)
  • 整数分解(Integer Factorization)
  • 离散对数问题(Discrete Logarithm Problem)
  • 椭圆曲线上的计算
  • 有限域上的多项式运算
  • 格的约简与格问题

计算数论不仅具有重要的理论意义(如理解数论问题的计算复杂性),更有广泛的实际应用。现代密码学,特别是公钥密码学,几乎完全建立在计算数论的基础上。

1.2 计算数论的历史发展

计算数论的发展大致可分为以下几个阶段:

第一阶段(公元前-20世纪中叶) :算法的雏形阶段。欧几里得算法(公元前300年)是历史上最古老的算法之一,至今仍在使用。中国剩余定理(公元3-5世纪)提供了求解同余方程组的系统方法。这些构成了计算数论的基石。

第二阶段(20世纪中叶-1970年代) :现代计算数论的诞生。随着电子计算机的出现,数论家开始系统地研究数论问题的算法复杂性。1960年代,Karatsuba发现了第一个比传统方法更快的乘法算法。1970年代,RSA密码体制的提出极大地推动了计算数论的发展——人们突然需要生成数百位的大素数、分解大整数、计算模幂运算。

第三阶段(1980-2000) :算法的大发展时期。Pollard的ρ算法和p-1算法、Lenstra的椭圆曲线分解算法(ECM)、二次筛法(QS)、数域筛法(NFS)、LLL格基约简算法等相继问世。1994年,RSA-129(129位十进制数)被成功分解。

第四阶段(2000年至今) :理论突破与实践应用并行。2002年,AKS算法证明了素性检验可以在确定性多项式时间内完成。与此同时,后量子密码学兴起,格密码、编码密码等成为研究热点。

1.3 计算数论的基本问题

计算数论的核心问题可以归纳为以下几类:

(1)判定性问题:判断一个数是否具有某种性质。例如:素性检验(“n是素数吗?”)。

(2)计算性问题:计算某个数论对象。例如:计算最大公因子、计算离散对数。

(3)构造性问题:构造具有特定性质的数论对象。例如:生成大素数。

(4)分解性问题:将一个对象分解为基本单元。例如:整数分解。

这些问题的难度差异巨大。素性检验容易(有多项式时间算法),而整数分解困难(目前没有已知的多项式时间算法)。这种难易鸿沟恰恰是现代密码学安全性的基础。

1.4 预备知识

学习计算数论需要以下预备知识:

  1. 初等数论:整除、同余、中国剩余定理、欧拉定理、费马小定理
  2. 抽象代数:群、环、域的基本概念
  3. 算法与复杂性:大O记号、多项式时间、NP问题
  4. 基本数据结构:数组、链表、树

第二章 算法分析基础

2.1 计算复杂性的度量

在计算数论中,算法的效率通常用时间复杂度(time complexity)和空间复杂度(space complexity)来衡量。

定义 2.1(大O记号) :设 \(f(n)\) 和 \(g(n)\) 是定义在正整数上的函数。称 \(f(n) = O(g(n))\),如果存在常数 \(C > 0\) 和 \(n_0 > 0\),使得对所有 \(n \geqslant n_0\),有 \(f(n) \leqslant C \cdot g(n)\)。

定义 2.2(输入规模) :在数论算法中,输入规模通常指输入整数的二进制位数 \(b = \lfloor \log_2 n \rfloor + 1\),而非数值 \(n\) 本身。

一个算法是多项式时间(polynomial-time)的,如果其运行时间 \(T(b)\) 是 \(b\) 的某个多项式函数,即 \(T(b) = O(b^k)\)。

一个算法是指数时间(exponential-time)的,如果 \(T(b) = 2^{\Omega(b)}\)。

2.2 算法复杂性的分类

在计算数论中,算法按其时间复杂性可分为:

类别 时间复杂性 代表算法
多项式时间 \(O(b^k)\) 欧几里得算法、AKS素性检验
亚指数时间 \(e^{O(\sqrt{b \log b})}\) 二次筛法、数域筛法
指数时间 \(2^{O(b)}\) 试除法、Pollard ρ算法(一般情形)
超多项式但亚指数 \(e^{O((\log b)^c)}\) 某些格算法

2.3 随机算法与确定性算法

定义 2.3(随机算法) :随机算法(randomized algorithm)在运行过程中使用随机数,其输出或运行时间可能带有概率性。

定义 2.4(拉斯维加斯算法与蒙特卡洛算法) :

  • 拉斯维加斯算法(Las Vegas algorithm):总是给出正确结果,但运行时间是随机的。
  • 蒙特卡洛算法(Monte Carlo algorithm):运行时间有保证,但可能以很小的概率给出错误结果。

Miller-Rabin素性检验是典型的蒙特卡洛算法。

2.4 重要数学常数

在计算数论中,以下几个常数频繁出现:

欧拉常数 \(\gamma\):

\[\gamma = \lim_{n \to \infty} \left( \sum_{k=1}^n \frac{1}{k} - \log n \right) \approx 0.5772156649 \]

素数定理:设 \(\pi(x)\) 为不超过 \(x\) 的素数个数,则

\[\pi(x) \sim \frac{x}{\log x} \]

这意味着随机选取一个约为 \(x\) 的数为素数的概率约为 \(1/\log x\)。

第三章 大整数算术

大整数算术是计算数论的基础。几乎所有数论算法都需要处理超过计算机原生字长的大整数。

3.1 大整数的表示

大整数通常用基数表示法存储。选择基数 \(B = 2^k\)(如 \(B = 2^{32}\) 或 \(B = 2^{64}\)),一个整数表示为

\[n = \sum_{i=0}^{m-1} a_i B^i, \quad 0 \leqslant a_i < B \]

其中 \(a_i\) 称为“数字”(digit)或“肢”(limb)。

3.2 大整数加法与减法

大整数加法的时间复杂度为 \(O(m)\),其中 \(m\) 是数字的个数。减法类似。

3.3 大整数乘法

大整数乘法是计算数论中最基本的运算之一,也是许多高级算法的瓶颈。

(1)朴素乘法(小学乘法)

直接按照十进制乘法的规则计算,时间复杂度为 \(O(m^2)\),其中 \(m\) 是数字个数。

(2)Karatsuba乘法

Karatsuba算法是第一个渐近快于朴素乘法的乘法算法。

设 \(a\) 和 \(b\) 是两个 \(m\) 位整数,将其拆分为高低两部分:

\[a = a_1 B^{m/2} + a_0, \quad b = b_1 B^{m/2} + b_0 \]

则

\[ab = a_1 b_1 B^m + (a_1 b_0 + a_0 b_1) B^{m/2} + a_0 b_0 \]

Karatsuba的关键观察是:

\[a_1 b_0 + a_0 b_1 = (a_1 + a_0)(b_1 + b_0) - a_1 b_1 - a_0 b_0 \]

因此只需要3次乘法(而不是4次):\(a_1 b_1\)、\(a_0 b_0\)、\((a_1 + a_0)(b_1 + b_0)\)。

时间复杂度满足递推关系 \(T(m) = 3T(m/2) + O(m)\),解得 \(T(m) = O(m^{\log_2 3}) \approx O(m^{1.585})\)。

(3)Toom-Cook乘法

Toom-Cook算法是Karatsuba算法的推广。它将每个数分成 \(k\) 个部分,用 \(2k-1\) 次乘法完成计算。

  • Toom-2(\(k=2\))就是Karatsuba算法
  • Toom-3将数分成3部分,用5次乘法,加速比约为 \(9/5\)

时间复杂度为 \(O(m^{\log_k(2k-1)})\)。

(4)Schönhage-Strassen算法(FFT乘法)

Schönhage-Strassen算法使用快速傅里叶变换(FFT)进行大整数乘法。

基本思想是将整数乘法转化为多项式乘法,利用FFT在 \(O(m \log m)\) 时间内计算卷积。

时间复杂度为 \(O(m \log m \log \log m)\)。

(5)现代进展

2007年,Fürer将整数乘法的时间复杂度改进到 \(O(m \log m \cdot 2^{O(\log^* m)})\)。2019年,Harvey和van der Hoeven给出了 \(O(m \log m)\) 的算法。

3.4 大整数除法

大整数除法的朴素实现为 \(O(m^2)\)。使用Newton迭代法可以做到 \(O(M(m))\),其中 \(M(m)\) 是乘法的复杂度。

3.5 模运算

模运算(modular arithmetic)是计算数论的核心运算。

定义 3.1(模运算) :给定正整数 \(m\),称两个整数 \(a, b\) 模 \(m\) 同余,记作 \(a \equiv b \pmod{m}\),如果 \(m \mid (a-b)\)。

模加法和模乘法:先做普通加法/乘法,再取模。模乘法是大整数乘法的瓶颈。

模幂运算(modular exponentiation):计算 \(a^e \bmod m\)。

快速幂算法(binary exponentiation):

  1. 将指数 \(e\) 写成二进制形式
  2. 从最低位开始,若当前位为1,则累乘当前底数
  3. 每一步将底数平方

时间复杂度为 \(O(\log e)\) 次模乘法。

蒙哥马利约简(Montgomery reduction):是一种高效计算模乘法的技术,通过将数值转换到“蒙哥马利域”中运算,避免了大整数的除法运算。蒙哥马利约简广泛应用于RSA和ECC等公钥密码系统中。

第四章 欧几里得算法与同余计算

4.1 欧几里得算法

欧几里得算法(Euclidean algorithm)是计算两个整数最大公因子的最古老算法,至今仍是最优的。

算法 4.1(欧几里得算法) :

输入:正整数 a, b (a ≥ b)
输出:gcd(a, b)
while b ≠ 0:
    r = a mod b
    a = b
    b = r
return a

定理 4.1:欧几里得算法的正确性基于恒等式 \(\gcd(a, b) = \gcd(b, a \bmod b)\)。

定理 4.2:欧几里得算法的时间复杂度为 \(O(\log \min(a, b))\) 次除法(Lame定理)。

4.2 扩展欧几里得算法

扩展欧几里得算法(Extended Euclidean Algorithm)不仅计算 \(\gcd(a, b)\),还找到整数 \(x, y\) 使得:

\[ax + by = \gcd(a, b) \]

算法 4.2(扩展欧几里得算法) :

输入:正整数 a, b
输出:(d, x, y) 使得 d = gcd(a, b) = ax + by
if b = 0:
    return (a, 1, 0)
(d, x1, y1) = ExtendedEuclid(b, a mod b)
return (d, y1, x1 - (a // b) * y1)

推论 4.1(Bézout定理) :对任意整数 \(a, b\),存在整数 \(x, y\) 使得 \(ax + by = \gcd(a, b)\)。

4.3 模逆元

定义 4.1(模逆元) :给定 \(a\) 和模数 \(m\),若 \(\gcd(a, m) = 1\),则存在唯一的 \(a^{-1} \in \mathbb{Z}_m\) 使得

\[a \cdot a^{-1} \equiv 1 \pmod{m} \]

\(a^{-1}\) 称为 \(a\) 模 \(m\) 的逆元。

计算模逆元:解方程 \(ax + my = 1\),使用扩展欧几里得算法,\(x\) 即为 \(a^{-1} \pmod{m}\)。

4.4 中国剩余定理

定理 4.3(中国剩余定理,CRT) :设 \(m_1, m_2, \cdots, m_k\) 是两两互素的正整数,\(M = \prod m_i\)。则对任意整数 \(a_1, \cdots, a_k\),同余方程组

\[\begin{cases} x \equiv a_1 \pmod{m_1} \\ x \equiv a_2 \pmod{m_2} \\ \cdots \\ x \equiv a_k \pmod{m_k} \end{cases}\]

有唯一解模 \(M\)。

计算CRT:

  1. 对每个 \(i\),令 \(M_i = M / m_i\)
  2. 计算 \(t_i = M_i^{-1} \pmod{m_i}\)
  3. \(x = \sum a_i M_i t_i \bmod M\)

中国剩余定理在RSA解密(CRT-RSA)、大整数运算优化等方面有重要应用。

4.5 模线性方程

定理 4.4:模线性方程

\[ax \equiv b \pmod{m} \]

有解当且仅当 \(d = \gcd(a, m) \mid b\)。若有解,则恰有 \(d\) 个解模 \(m\)。

4.6 欧拉定理与费马小定理

定理 4.5(欧拉定理) :若 \(\gcd(a, m) = 1\),则

\[a^{\varphi(m)} \equiv 1 \pmod{m} \]

其中 \(\varphi(m)\) 是欧拉函数。

定理 4.6(费马小定理) :若 \(p\) 是素数且 \(p \nmid a\),则

\[a^{p-1} \equiv 1 \pmod{p} \]

费马小定理是许多素性检验算法(如Miller-Rabin)的理论基础。

第五章 素性检验

素性检验(primality testing)是判断一个给定整数是否为素数的算法。这是计算数论中最基本的问题之一。

5.1 试除法

试除法(trial division)是最简单的素性检验方法:用所有不超过 \(\sqrt{n}\) 的素数去除 \(n\)。

时间复杂度为 \(O(\sqrt{n})\),对于输入规模 \(b = \log n\) 来说是指数时间 \(O(2^{b/2})\)。因此试除法只适用于小数(\(n < 10^{12}\))。

5.2 Fermat素性检验

Fermat素性检验基于费马小定理的逆命题。

算法 5.1(Fermat素性检验) :

输入:奇数 n > 2,迭代次数 k
输出:n 为“合数”或“可能素数”
重复 k 次:
    随机选取 a ∈ {2, 3, ..., n-2}
    若 a^(n-1) mod n ≠ 1:
        return "合数"
return "可能素数"

问题:存在卡迈克尔数(Carmichael numbers)——合数 \(n\) 使得对所有 \(\gcd(a, n) = 1\) 都有 \(a^{n-1} \equiv 1 \pmod{n}\)。Fermat检验会将它们误判为素数。

5.3 Miller-Rabin素性检验

Miller-Rabin素性检验是目前实际应用中最常用的素性检验算法。

算法 5.2(Miller-Rabin) :

输入:奇数 n > 2,迭代次数 k
输出:n 为“合数”或“可能素数”
将 n-1 写成 2^s * d 的形式,其中 d 为奇数
重复 k 次:
    随机选取 a ∈ {2, 3, ..., n-2}
    x = a^d mod n
    if x == 1 or x == n-1:
        continue
    for r = 1 to s-1:
        x = x^2 mod n
        if x == n-1:
            break
    else:
        return "合数"
return "可能素数"

正确性:Miller-Rabin基于以下事实:若 \(n\) 是素数,则 \(x^2 \equiv 1 \pmod{n}\) 的解只有 \(x \equiv \pm 1 \pmod{n}\)。

错误概率:单次迭代的错误概率 \(\leqslant 1/4\)。经过 \(k\) 次迭代后,错误概率 \(\leqslant 4^{-k}\)。

确定性版本:对某些特定范围的 \(n\),可以固定 \(a\) 的值进行确定性检验。例如:

  • 若 \(n < 2,047\),测试 \(a = 2\) 即可
  • 若 \(n < 1,373,653\),测试 \(a = 2, 3\) 即可
  • 若 \(n < 3,474,749,660,383\),测试 \(a = 2, 3, 5, 7, 11, 13, 17\) 即可

5.4 AKS素性检验

AKS素性检验(Agrawal-Kayal-Saxena)是第一个确定性的、多项式时间的、无条件的素性检验算法。

核心定理:整数 \(n > 1\) 是素数当且仅当对某个 \(r\) 和所有 \(1 \leqslant a \leqslant \lfloor 2\sqrt{\varphi(r)} \log n \rfloor\),

\[(x + a)^n \equiv x^n + a \pmod{x^r - 1, n} \]

算法 5.3(AKS) :

输入:整数 n > 1
1. 若 n = a^b(a > 1, b > 1),输出"合数"
2. 找到最小的 r 使得 ord_r(n) > log^2 n
3. 若对某个 a ≤ r,有 1 < gcd(a, n) < n,输出"合数"
4. 若 n ≤ r,输出"素数"
5. 对 a = 1 到 floor(2√(φ(r)) log n):
     若 (x + a)^n ≠ x^n + a (mod x^r - 1, n),输出"合数"
6. 输出"素数"

时间复杂度:原始AKS算法为 \(\tilde{O}(\log^{12} n)\)。后续改进将复杂度降至 \(\tilde{O}(\log^6 n)\)。

意义:AKS算法证明了素性检验属于复杂度类P。但实际应用中,由于常数因子过大,AKS算法并不实用。

5.5 特殊形式数的素性检验

对于特殊形式的数,存在更快的素性检验算法:

Lucas-Lehmer检验:用于检验梅森素数(Mersenne primes)\(M_p = 2^p - 1\)。

Pocklington定理:若 \(n-1\) 的部分因子已知,可以确定性证明 \(n\) 的素性。

ECPP(椭圆曲线素性证明) :使用椭圆曲线理论,在实践中可以证明大数的素性。

第六章 整数分解

整数分解(Integer Factorization)是计算数论中最重要也是最困难的问题之一。给定合数 \(n\),找到一个非平凡因子 \(d\)(\(1 < d < n\))。

整数分解的困难性是RSA密码体制安全性的基础。

6.1 试除法

用所有不超过 \(\sqrt{n}\) 的素数试除。时间复杂度 \(O(\sqrt{n})\),只适用于 \(n < 10^{12}\)。

6.2 Pollard p-1算法

Pollard p-1算法利用了一个简单观察:若 \(n\) 有素因子 \(p\) 使得 \(p-1\) 的所有素因子都很小(即 \(p-1\) 是 B-光滑数),则可以高效找到 \(p\)。

算法 6.1(Pollard p-1) :

输入:合数 n,界 B
输出:n 的非平凡因子或失败
a = 2
for j = 2 to B:
    a = a^j mod n
d = gcd(a - 1, n)
if 1 < d < n:
    return d
else:
    return "失败"

正确性分析:若 \(p \mid n\) 且 \(p-1\) 的所有素因子幂 \(\leqslant B\),则 \((p-1) \mid B!\)。由费马小定理:

\[a \equiv 2^{B!} \equiv 1 \pmod{p} \]

因此 \(p \mid (a-1)\),\(p \mid \gcd(a-1, n)\)。

6.3 Pollard ρ算法

Pollard ρ算法是一种基于生日悖论的随机化分解算法。

算法 6.2(Pollard ρ) :

输入:合数 n
输出:n 的非平凡因子或失败
选择随机函数 f(x) = (x^2 + c) mod n
x = 2, y = 2, d = 1
while d == 1:
    x = f(x)
    y = f(f(y))
    d = gcd(|x - y|, n)
if d == n:
    return "失败"
return d

期望时间复杂度:\(O(\sqrt{p})\),其中 \(p\) 是 \(n\) 的最小素因子。

6.4 Lenstra椭圆曲线分解法(ECM)

Lenstra椭圆曲线分解法(Elliptic Curve Method, ECM)是Pollard p-1算法的推广。

基本思想:将Pollard p-1中的乘法群 \(\mathbb{F}_p^\times\) 替换为椭圆曲线上的群 \(E(\mathbb{F}_p)\)。

优势:ECM可以在不同的椭圆曲线上运行,每次运行相当于尝试不同的“虚拟”\(p-1\)。如果某条曲线的群阶是B-光滑的,算法就能成功。

时间复杂度:\(e^{O(\sqrt{\log p \log \log p})}\),其中 \(p\) 是 \(n\) 的最小素因子。

ECM特别擅长发现中等大小的素因子(20-40位)。

6.5 二次筛法(QS)

二次筛法(Quadratic Sieve)由Pomerance于1981年提出,是分解100位以下整数的最有效算法。

基本思想:找到两个整数 \(x\) 和 \(y\) 使得

\[x^2 \equiv y^2 \pmod{n} \]

则 \(\gcd(x-y, n)\) 和 \(\gcd(x+y, n)\) 给出 \(n\) 的因子。

算法步骤:

  1. 选择因子基(factor base):一组小素数 \(\{p_1, p_2, \cdots, p_k\}\)
  2. 筛法阶段:寻找 \(\pi(B) + 1\) 个数 \(a_i\),使得 \(b_i = a_i^2 \bmod n\) 是 B-光滑数(即所有素因子都在因子基中)
  3. 线性代数阶段:将每个 \(b_i\) 的素因子指数向量模2,寻找线性相关关系
  4. 因子提取:从线性关系构造 \(x^2 \equiv y^2 \pmod{n}\),计算 \(\gcd(x-y, n)\)

时间复杂度:\(e^{O(\sqrt{\log n \log \log n})}\)。

6.6 数域筛法(NFS)

数域筛法(Number Field Sieve, NFS)是目前分解大整数最有效的算法。

基本思想:构造代数数域,寻找满足特定条件的数对集合,利用数域中的平方同余关系来分解大整数。

算法步骤:

  1. 多项式选择:选择两个不可约多项式 \(f(x)\) 和 \(g(x)\),存在公共根 \(m \bmod n\)
  2. 数对筛选:寻找整数对 \((a, b)\) 使得 \(f(a/b)\) 和 \(g(a/b)\) 都是光滑的
  3. 矩阵生成:构建筛选关系矩阵
  4. 矩阵求解:使用大型稀疏线性系统求解方法(如Block Wiedemann)
  5. 平方根求解:从线性关系构造平方同余,提取因子

时间复杂度:

  • 特殊数域筛法(SNFS):\(e^{(c + o(1))(\log n)^{1/3}(\log \log n)^{2/3}}\)
  • 一般数域筛法(GNFS):\(e^{(64/9)^{1/3} + o(1))(\log n)^{1/3}(\log \log n)^{2/3}}\)

6.7 各算法的比较

算法 时间复杂度 适用场景
试除法 \(O(\sqrt{n})\) \(n < 10^{12}\)
Pollard p-1 因子相关 \(p-1\) 光滑
Pollard ρ \(O(\sqrt{p})\) 有小因子
ECM \(e^{O(\sqrt{\log p \log \log p})}\) 发现中等因子
二次筛法 亚指数 50-100位
数域筛法 亚指数 100位以上

目前,RSA-240(240位十进制数,约795位二进制)已被成功分解。

第七章 离散对数问题

离散对数问题(Discrete Logarithm Problem, DLP)是另一个重要的计算数论难题。

7.1 离散对数的定义

定义 7.1(离散对数) :设 \(G\) 是有限循环群,\(g\) 是生成元,\(h \in G\)。离散对数问题是找到整数 \(x\)(\(0 \leqslant x < |G|\))使得

\[g^x = h \]

记作 \(x = \log_g h\)。

重要情形:

  • 有限域 \(\mathbb{F}_p^\times\) 中的离散对数(DLP)
  • 椭圆曲线群 \(E(\mathbb{F}_q)\) 中的离散对数(ECDLP)

7.2 通用算法

以下算法适用于任意有限循环群。

(1)穷举搜索

逐个尝试 \(x = 0, 1, 2, \cdots\),时间复杂度 \(O(|G|)\)。

(2)Baby-Step Giant-Step(BSGS)

Shanks提出的BSGS算法利用中间相遇策略。

算法 7.1(BSGS) :

输入:群 G,生成元 g,目标 h,阶 m
输出:x 使得 g^x = h
设 n = ceil(√m)
构造 baby steps: 存储 (g^j, j) for j = 0, 1, ..., n-1
计算 giant step factor: c = g^{-n}
y = h
for i = 0 to n:
    若 y 在 baby steps 中,设 y = g^j,则 x = i*n + j
    y = y * c

时间复杂度 \(O(\sqrt{m})\),空间复杂度 \(O(\sqrt{m})\)。

(3)Pollard ρ算法

Pollard ρ算法是计算离散对数的标准方法。

基本思想:在群中构造一个“随机”序列,利用生日悖论寻找碰撞。

时间复杂度 \(O(\sqrt{m})\),空间复杂度 \(O(1)\)。

(4)Pohlig-Hellman算法

若群阶 \(m\) 有因子分解 \(m = \prod p_i^{e_i}\),Pohlig-Hellman算法将DLP分解为子群中的DLP。

时间复杂度 \(O(\sum e_i (\log m + \sqrt{p_i}))\)。当 \(m\) 的所有素因子都很小时,算法非常高效。

7.3 有限域中的离散对数

对于有限域 \(\mathbb{F}_p^\times\),存在比通用算法更快的指标演算(Index Calculus)算法。

指标演算算法的基本思想:

  1. 选择因子基(一组小素数)
  2. 收集关系:对随机 \(k\),计算 \(g^k \bmod p\),若其因子全在因子基中,记录线性关系
  3. 用线性代数求解因子基中每个元素的离散对数
  4. 计算目标 \(h\) 的离散对数

时间复杂度为亚指数:\(e^{O(\sqrt{\log p \log \log p})}\)。

7.4 椭圆曲线离散对数(ECDLP)

椭圆曲线离散对数问题(ECDLP)是椭圆曲线密码学安全性的基础。

目前,ECDLP的最佳攻击算法是Pollard ρ算法及其并行变体,时间复杂度 \(O(\sqrt{m})\)。

注意:对于某些特殊类型的椭圆曲线(如超奇异椭圆曲线),存在更快的攻击算法(如MOV攻击、SSSA攻击)。

7.5 离散对数问题的难度比较

群 最佳算法 时间复杂度 密钥长度建议
\(\mathbb{F}_p^\times\) 指标演算 亚指数 2048位
椭圆曲线 Pollard ρ 指数 \(O(\sqrt{m})\) 256位
一般群 Pollard ρ 指数 \(O(\sqrt{m})\) -

椭圆曲线密码体制能用更短的密钥提供相同的安全级别。

第八章 椭圆曲线密码学

椭圆曲线密码学(Elliptic Curve Cryptography, ECC)由Koblitz和Miller于1985年独立提出。

8.1 椭圆曲线的定义

定义 8.1(椭圆曲线) :椭圆曲线是满足Weierstrass方程的点集:

\[E: y^2 = x^3 + ax + b \]

其中 \(4a^3 + 27b^2 \neq 0\)(保证曲线无奇点),加上一个无穷远点 \(\mathcal{O}\)。

8.2 椭圆曲线上的群运算

椭圆曲线上的点构成一个阿贝尔群。

单位元:无穷远点 \(\mathcal{O}\)。

逆元:点 \(P = (x, y)\) 的逆元是 \(-P = (x, -y)\)。

加法公式:设 \(P = (x_1, y_1)\),\(Q = (x_2, y_2)\),\(P \neq -Q\),则 \(P + Q = (x_3, y_3)\),其中:

\[x_3 = \lambda^2 - x_1 - x_2 \]

\[y_3 = \lambda(x_1 - x_3) - y_1 \]

\[\lambda = \begin{cases} \frac{y_2 - y_1}{x_2 - x_1}, & P \neq Q \\ \frac{3x_1^2 + a}{2y_1}, & P = Q \text{(倍点)} \end{cases}\]

标量乘法:\(kP = P + P + \cdots + P\)(\(k\) 次)。

标量乘法通过二进制展开实现:将 \(k\) 写成二进制,每个比特为1时进行点加操作。标量乘法是ECC中最核心、最耗时的运算。

8.3 ECDLP

椭圆曲线离散对数问题(ECDLP) :给定椭圆曲线 \(E\) 上的点 \(P\) 和 \(Q = kP\),求 \(k\)。

ECDLP被认为是困难的。目前最好的通用算法是Pollard ρ算法,时间复杂度 \(O(\sqrt{n})\)。

8.4 ECC的优势

与传统公钥密码(如RSA)相比,ECC的主要优势是:

  • 更短的密钥:256位ECC密钥提供与3072位RSA相同的安全级别
  • 更快的运算:由于密钥更短,运算速度更快
  • 更低的功耗:适合移动设备和物联网设备

8.5 椭圆曲线上的点计数

对于密码学应用,需要知道椭圆曲线群的阶 \(\#E(\mathbb{F}_q)\)。

Schoof算法(1985):在多项式时间内计算 \(\#E(\mathbb{F}_q)\),时间复杂度 \(O(\log^8 q)\)。

Schoof-Elkies-Atkin算法(SEA) :Schoof算法的改进,在实践中效率更高。

第九章 格与格算法

9.1 格的定义

定义 9.1(格) :设 \(\{ \mathbf{b}_1, \cdots, \mathbf{b}_n \} \subset \mathbb{R}^m\) 是线性无关的向量。由这些向量生成的格(lattice)为:

\[\mathcal{L} = \left\{ \sum_{i=1}^n a_i \mathbf{b}_i \mid a_i \in \mathbb{Z} \right\} \]

\(\{ \mathbf{b}_i \}\) 称为格的基(basis)。

9.2 格中的重要问题

最短向量问题(SVP) :在格中寻找一个非零的最短向量。

最近向量问题(CVP) :给定目标点 \(\mathbf{t}\),在格中寻找距离 \(\mathbf{t}\) 最近的向量。

SVP的难度:在二维空间中,高斯算法可以精确解决SVP。但在高维空间中,SVP被认为是困难的,这一困难性构成了现代密码学的基础。

9.3 LLL格基约简算法

LLL算法(Lenstra-Lenstra-Lovász)是格理论中最重要的算法之一。

LLL算法将格的一个“坏”基(长且几乎线性相关的向量)转换为由短且接近正交的向量组成的“好”基。

LLL算法的核心操作:

  1. Size reduction:使基向量满足正交性条件
  2. Swap:若某个条件不满足,交换相邻基向量

时间复杂度:多项式时间 \(O(n^5 \log B)\),其中 \(B\) 是输入基向量的最大长度。

9.4 LLL算法的应用

LLL算法是计算数论中最强大的工具之一:

  1. 密码分析:将密码问题转化为格中寻找短向量的问题
  2. 整数关系检测:判断一组实数是否存在整数线性关系
  3. 多项式分解:在有理数域上分解多项式
  4. 代数数论:计算代数数域的单位群和类群
  5. 量子计算:在量子算法分析中有应用

第十章 有限域上的计算

10.1 有限域的基本性质

定义 10.1(有限域) :有限域 \(\mathbb{F}_q\) 是具有 \(q = p^m\) 个元素的域,其中 \(p\) 是素数,\(m \geqslant 1\)。

  • 当 \(m = 1\) 时,\(\mathbb{F}_p \cong \mathbb{Z}/p\mathbb{Z}\)
  • 当 \(m > 1\) 时,\(\mathbb{F}_{p^m}\) 是 \(\mathbb{F}_p\) 的 \(m\) 次扩张

10.2 有限域上的多项式运算

有限域上的多项式运算包括:

  • 多项式加法、减法、乘法
  • 多项式除法(带余除法)
  • 多项式最大公因子(扩展欧几里得算法)
  • 多项式因式分解

10.3 有限域上的平方根

问题:给定 \(a \in \mathbb{F}_p\),求 \(x\) 使得 \(x^2 = a\)。

Tonelli-Shanks算法:计算模素数平方根的有效算法。

Cipolla算法:另一种计算平方根的方法。

10.4 有限域上的离散对数

有限域 \(\mathbb{F}_{p^m}\) 上的离散对数问题:

  • 当 \(m = 1\) 时,使用指标演算算法
  • 当 \(m > 1\) 时,可以使用更复杂的算法(如函数域筛法)

第十一章 计算数论在密码学中的应用

计算数论是现代密码学的数学基础。

11.1 RSA密码体制

RSA由Rivest、Shamir和Adleman于1977年提出。

密钥生成:

  1. 随机选择两个大素数 \(p\) 和 \(q\)
  2. 计算 \(n = pq\),\(\varphi(n) = (p-1)(q-1)\)
  3. 选择 \(e\) 使得 \(\gcd(e, \varphi(n)) = 1\)
  4. 计算 \(d \equiv e^{-1} \pmod{\varphi(n)}\)
  5. 公钥:\((n, e)\),私钥:\(d\)

加密:\(c \equiv m^e \pmod{n}\)
解密:\(m \equiv c^d \pmod{n}\)

安全性:RSA的安全性依赖于整数分解的困难性。

11.2 Diffie-Hellman密钥交换

Diffie-Hellman协议(1976)基于离散对数问题的困难性。

协议:

  1. 公开参数:大素数 \(p\),生成元 \(g \in \mathbb{F}_p^\times\)
  2. Alice选择秘密 \(a\),计算 \(A = g^a \bmod p\),发送 \(A\)
  3. Bob选择秘密 \(b\),计算 \(B = g^b \bmod p\),发送 \(B\)
  4. Alice计算 \(K = B^a \bmod p = g^{ab} \bmod p\)
  5. Bob计算 \(K = A^b \bmod p = g^{ab} \bmod p\)

11.3 椭圆曲线密码(ECC)

ECC的安全性基于ECDLP的困难性。

ECC的优势:更短的密钥长度。

安全级别 RSA密钥长度 ECC密钥长度
80位 1024 160
112位 2048 224
128位 3072 256
192位 7680 384
256位 15360 512

11.4 基于格的密码

基于格的密码是后量子密码学的重要方向。

其安全性基于格中困难问题(SVP、CVP等)。

优势:

  • 抗量子攻击
  • 最坏情况-平均情况等价性(有严格的安全证明)
  • 高效的实现

第十二章 后量子计算数论

12.1 量子计算对计算数论的挑战

Shor算法(1994)可以在量子计算机上多项式时间内解决整数分解和离散对数问题。

这意味着,一旦大规模量子计算机建成,RSA、ECC等当前主流的公钥密码体制将被攻破。

12.2 后量子密码学

后量子密码学(Post-Quantum Cryptography)研究能够抵抗量子攻击的密码体制。

主要方向包括:

  1. 基于格的密码(Lattice-based cryptography)
  2. 基于编码的密码(Code-based cryptography)
  3. 基于多变量的密码(Multivariate cryptography)
  4. 基于哈希的签名(Hash-based signatures)
  5. 基于同源的密码(Isogeny-based cryptography)

12.3 NIST后量子密码标准化

美国国家标准与技术研究院(NIST)正在进行后量子密码标准化工作。已选定的算法包括:

  • Kyber(基于格的密钥封装机制)
  • Dilithium(基于格的数字签名)
  • Falcon(基于格的数字签名)
  • SPHINCS+(基于哈希的数字签名)

第十三章 现代计算数论工具与实现

13.1 大整数运算库

  • GMP(GNU Multiple Precision Arithmetic Library):最广泛使用的大整数运算库
  • NTL(Number Theory Library):数论算法库,支持大整数、多项式、有限域等
  • FLINT(Fast Library for Number Theory):用C语言实现的高效数论库

13.2 计算机代数系统

  • PARI/GP:专门为计算数论设计的系统
  • SageMath:基于Python的开源数学软件,集成了多种数论工具
  • Magma:商业计算机代数系统,数论功能强大

13.3 计算数论软件包

  • msieve:实现二次筛法和数域筛法的整数分解软件
  • CADO-NFS:数域筛法的开源实现
  • ECM:椭圆曲线分解法的实现
  • GGNFS:数域筛法的实现

附录:重要公式与算法汇总

A.1 基本算法

算法 输入 输出 时间复杂度
欧几里得算法 \(a, b\) \(\gcd(a, b)\) \(O(\log \min(a,b))\)
扩展欧几里得 \(a, b\) \((d, x, y)\) \(O(\log \min(a,b))\)
快速幂 \(a, e, m\) \(a^e \bmod m\) \(O(\log e)\)
中国剩余定理 \(a_i, m_i\) \(x\) \(O(k^2)\)

A.2 素性检验

算法 类型 时间复杂度 正确性
试除法 确定性 \(O(\sqrt{n})\) 100%
Fermat 概率性 \(O(k \log n)\) 可能错误
Miller-Rabin 概率性 \(O(k \log^3 n)\) 错误概率 \(4^{-k}\)
AKS 确定性 \(\tilde{O}(\log^6 n)\) 100%

A.3 整数分解

算法 时间复杂度 特点
试除法 \(O(\sqrt{n})\) 只适用于小数
Pollard p-1 因子相关 \(p-1\) 光滑时有效
Pollard ρ \(O(\sqrt{p})\) 发现小因子
ECM \(e^{O(\sqrt{\log p \log \log p})}\) 发现中等因子
二次筛法 亚指数 50-100位
数域筛法 亚指数 100位以上,最优

A.4 离散对数

算法 时间复杂度 空间复杂度
穷举搜索 \(O(m)\) \(O(1)\)
BSGS \(O(\sqrt{m})\) \(O(\sqrt{m})\)
Pollard ρ \(O(\sqrt{m})\) \(O(1)\)
Pohlig-Hellman \(O(\sum e_i(\log m + \sqrt{p_i}))\) -
指标演算 亚指数 -

A.5 格算法

算法 问题 时间复杂度
高斯约简 SVP(二维) \(O(\log B)\)
LLL 近似SVP \(O(n^5 \log B)\)
BKZ 近似SVP 指数(块大小相关)

参考文献

  1. Cohen, H. A Course in Computational Algebraic Number Theory [M]. Springer, 1993.
  2. Vasilenko, O. N. Number-Theoretic Algorithms in Cryptography [M]. American Mathematical Society, 2006.
  3. 裴定一, 祝跃飞. 算法数论 [M]. 科学出版社, 2002.
  4. Yan, S. Y. Computational Number Theory and Modern Cryptography [M]. Wiley, 2013.
  5. Crandall, R. & Pomerance, C. Prime Numbers: A Computational Perspective [M]. Springer, 2005.
  6. Shoup, V. A Computational Introduction to Number Theory and Algebra [M]. Cambridge University Press, 2005.
  7. 冯克勤. 代数数论 [M]. 科学出版社.
  8. Menezes, A. J., van Oorschot, P. C. & Vanstone, S. A. Handbook of Applied Cryptography [M]. CRC Press, 1996.
posted @ 2026-09-20 18:12  Aries2011  阅读(33)  评论(0)    收藏  举报