从欧拉定理到RSA算法:非对称加密的数学原理(三)

RSA算法的完整构造与实例验证

引言

经过前两篇的铺垫,我们已经掌握了通向 RSA 算法的全部数学钥匙:欧拉定理揭示了模幂运算的周期性归一性质,其变形 $a^{k\varphi(n)+1} \equiv a \pmod{n}$ 保证了”加密—解密”这对操作的可逆性,而模反元素则提供了配对公钥指数 $e$ 与私钥指数 $d$ 的工具。本篇将把这些数学零件组装成一台完整的加密引擎,系统呈现 RSA 算法的密钥生成、加密与解密流程,并通过经典数字实例验证其正确性,最后剖析其安全性根基。


一、RSA 密钥生成的六步法

RSA 算法的安全性建立在大整数分解难题之上,其密钥生成过程可以分解为六个步骤。我们以爱丽丝(Alice)生成密钥对为例,逐步展开。

1.1 第一步:选取两个不等的大质数 $p$ 和 $q$

爱丽丝随机选择两个不相等的质数 $p$ 和 $q$。在本例中,她选择 $p = 61$,$q = 53$。

在实际工程应用中,这两个质数必须足够大——现代标准通常要求至少 512 位(约 155 位十进制数),常用 2048 位甚至 3072 位。为确保安全性,$p$ 和 $q$ 最好大小相近,且 $(p-1)$ 和 $(q-1)$ 中至少有一个大的质因数。质数的选取通常借助伪随机数生成器配合 Miller-Rabin 素性判定法完成。

1.2 第二步:计算模数 $n = p \times q$

爱丽丝将两个质数相乘:

$$n = p \times q = 61 \times 53 = 3233$$

这个 $n$ 就是 RSA 加密和解密时用到的模数,也是公钥和私钥的公共组成部分。$n$ 的二进制位数就是 RSA 密钥的长度——$3233$ 写成二进制是 $110010100001$,共 12 位,因此这是一个 12 位的密钥。实际应用中,RSA 密钥一般为 1024 位,重要场合则为 2048 位。

关键原则:$p$ 和 $q$ 必须严格保密,一旦泄露,整个密钥体系即告崩溃。

1.3 第三步:计算欧拉函数 $\varphi(n)$

根据欧拉函数的性质,当 $n = pq$($p, q$ 为不同质数)时:

$$\varphi(n) = (p - 1)(q - 1)$$

爱丽丝计算:

$$\varphi(3233) = (61 - 1) \times (53 - 1) = 60 \times 52 = 3120$$

这里正是前两篇反复强调的欧拉函数发挥作用的关键节点——只有知道 $p$ 和 $q$,才能轻松算出 $\varphi(n)$。$\varphi(n)$ 同样必须严格保密,因为它是连接公钥 $e$ 与私钥 $d$ 的桥梁。

1.4 第四步:选择公钥指数 $e$

爱丽丝在 $1$ 到 $\varphi(n)$ 之间随机选择一个整数 $e$,要求 $e$ 与 $\varphi(n)$ 互质,即:

$$1 < e < \varphi(n), \quad \gcd(e, \varphi(n)) = 1$$

她选择了 $e = 17$(因为 $\gcd(17, 3120) = 1$)。

在实际工程中,$e$ 通常固定选择 $65537$(即 $2^{16} + 1$),这是因为它兼具计算效率与安全性。早期曾使用 $e = 3$ 或 $e = 17$,但小 $e$ 在某些场景下存在安全漏洞。

1.5 第五步:计算私钥指数 $d$

这一步是密钥生成的核心。我们需要求解 $e$ 对 $\varphi(n)$ 的模反元素 $d$,使得:

$$e \times d \equiv 1 \pmod{\varphi(n)}$$

即:

$$ed - 1 = k \cdot \varphi(n)$$

等价于求解二元一次不定方程:

$$ex + \varphi(n)y = 1$$

已知 $e = 17$,$\varphi(n) = 3120$,方程为 $17x + 3120y = 1$。利用扩展欧几里得算法,可求得一组整数解 $(x, y) = (2753, -15)$。

验证:

$$17 \times 2753 = 46801 = 15 \times 3120 + 1 \quad \checkmark$$

因此,私钥指数 $d = 2753$。

1.6 第六步:封装公钥与私钥

至此,所有计算完成:

  • 公钥:$(n, e) = (3233, 17)$ —— 可以公开给任何人
  • 私钥:$(n, d) = (3233, 2753)$ —— 必须严格保密

在实际应用中,公钥和私钥的数据通常采用 ASN.1 格式表达。


二、加密与解密过程

2.1 加密(使用公钥)

假设鲍勃(Bob)要向爱丽丝发送加密信息。明文 $M$ 必须满足 $0 < M < n$(若 $M$ 较长则需分块加密)。

加密公式

$$C \equiv M^e \pmod{n}$$

其中 $C$ 为密文。鲍勃使用爱丽丝的公钥 $(3233, 17)$ 加密,假设明文 $M = 123$:

$$C = 123^{17} \bmod 3233 = 855$$

鲍勃将密文 $C = 855$ 发送给爱丽丝。即使密文在传输过程中被截获,攻击者也无法从中还原出明文。

2.2 解密(使用私钥)

爱丽丝收到密文后,使用自己的私钥 $(3233, 2753)$ 解密。

解密公式

$$M \equiv C^d \pmod{n}$$

代入计算:

$$M = 855^{2753} \bmod 3233 = 123$$

明文被完美还原!


三、数学正确性的证明

为什么解密一定能还原明文?让我们从数学上严格证明。

3.1 核心推导

将加密结果代入解密公式:

$$C^d \equiv (M^e)^d \equiv M^{ed} \pmod{n}$$

根据密钥生成第五步,$ed \equiv 1 \pmod{\varphi(n)}$,即存在整数 $k$ 使得:

$$ed = k \cdot \varphi(n) + 1$$

因此:

$$M^{ed} = M^{k\varphi(n) + 1} = M \cdot \left(M^{\varphi(n)}\right)^k$$

3.2 应用欧拉定理

若 $M$ 与 $n$ 互质,根据欧拉定理:

$$M^{\varphi(n)} \equiv 1 \pmod{n}$$

代入上式:

$$M^{ed} \equiv M \cdot 1^k \equiv M \pmod{n}$$

解密成功!

3.3 当 $M$ 与 $n$ 不互质时

实际上,即使 $M$ 与 $n$ 不互质(因为 $n = pq$,这意味着 $M$ 是 $p$ 或 $q$ 的倍数),解密依然成立。这可以通过中国剩余定理(CRT)证明,此处从略。在实际应用中,由于 $n$ 极大(2048 位以上),随机选取的 $M$ 与 $n$ 不互质的概率微乎其微。


四、多组实例验证

为增强说服力,我们再列举几组经典算例。

4.1 算例一:$p = 3, q = 11$

参数 计算 结果
$n$ $3 \times 11$ $33$
$\varphi(n)$ $2 \times 10$ $20$
$e$ 选 $7$(与 $20$ 互质) $7$
$d$ $7d \equiv 1 \pmod{20}$ $3$
加密 $M = 5$ $5^7 \bmod 33$ $C = 14$
解密 $C = 14$ $14^3 \bmod 33$ $M = 5$ ✓

此例来自经典教材习题。

4.2 算例二:$p = 7, q = 11$

参数 计算 结果
$n$ $7 \times 11$ $77$
$\varphi(n)$ $6 \times 10$ $60$
$e$ 选 $17$ $17$
$d$ $17d \equiv 1 \pmod{60}$ $53$
加密 $M = 8$ $8^{17} \bmod 77$ $C = 57$
解密 $C = 57$ $57^{53} \bmod 77$ $M = 8$ ✓

该算例展示了稍大模数下的运算。

4.3 算例三:$p = 5, q = 11$

参数 计算 结果
$n$ $5 \times 11$ $55$
$\varphi(n)$ $4 \times 10$ $40$
$e$ 选 $3$ $3$
$d$ $3d \equiv 1 \pmod{40}$ $27$
加密 $M = 9$ $9^3 \bmod 55$ $C = 14$
解密 $C = 14$ $14^{27} \bmod 55$ $M = 9$ ✓

注意:这里 $e = 3$ 虽然在理论上可行,但在实际工程中因安全性问题已不推荐使用。


五、RSA 的安全性分析

5.1 攻击者的视角

假设攻击者截获了密文 $C$,并且知道公钥 $(n, e)$。他要还原明文 $M$,必须先求得私钥 $d$。

由 $ed \equiv 1 \pmod{\varphi(n)}$ 可知,求 $d$ 必须知道 $\varphi(n)$;而由 $\varphi(n) = (p-1)(q-1)$,求 $\varphi(n)$ 必须知道 $p$ 和 $q$;而由 $n = pq$,求 $p$ 和 $q$ 必须对 $n$ 做质因数分解。

5.2 大整数分解难题

当 $n$ 足够大时(2048 位或以上),大整数分解在计算上是不可行的。截至 2008 年,世界上还没有任何可靠的攻击 RSA 算法的方式。目前人类破解的最长 RSA 密钥是 RSA-768(768 位二进制,232 位十进制),耗费了巨大的计算资源。

对于 2048 位的 RSA 密钥,分解 $n$ 所需的时间远超宇宙年龄,这就是 RSA 安全性的物理保障。

5.3 陷门函数

RSA 的数学构造正是一个典型的陷门单向函数(Trapdoor One-Way Function):

  • 正向容易:已知 $M, e, n$,计算 $C = M^e \bmod n$ 很快(快速模幂算法)
  • 逆向困难:已知 $C, e, n$,求 $M$ 等价于求解离散对数,极其困难
  • 陷门信息:私钥 $d$(或等价地,$p$ 和 $q$)是”陷门”,拥有它就能轻松解密

5.4 六个数字的保密层级

在 RSA 密钥生成过程中,一共出现六个关键数字:

数字 是否公开 说明
$p$ 绝密 质因数之一
$q$ 绝密 质因数之一
$n$ 公开 $n = pq$,公钥与私钥的组成部分
$\varphi(n)$ 绝密 欧拉函数值
$e$ 公开 公钥指数
$d$ 绝密 私钥指数

公钥用到了两个数($n$ 和 $e$),其余四个数字都不公开。其中最关键的是 $d$,一旦泄露就等于私钥泄露。


六、工程实际与教学演示的差异

6.1 质数规模

教学演示中使用 2 位小质数(如 $p = 61, q = 53$),实际工程中使用 2048/4096 位超大质数($p, q$ 各 1024 位以上),$n$ 为 2048/4096 位。

6.2 公钥指数 $e$ 的选择

工程中固定使用 $e = 65537$(二进制 $10000000000000001$),兼顾安全性和运算速度,避免小 $e$(如 $3, 7$)的安全漏洞。

6.3 填充方案

实际应用中,RSA 必须结合填充方案(如 OAEP),否则会遭受选择明文攻击等结构性攻击。直接对原始消息做 RSA 运算是不安全的。

6.4 性能优化

为提升解密效率,实际私钥通常还包含基于中国剩余定理(CRT)的预计算参数 $d_p, d_q, q^{-1} \bmod p$,可使解密速度提升约 4 倍。


七、小结

在本篇中,我们完成了从欧拉定理到 RSA 算法的最后一步:

  1. 密钥生成六步法:选质数 $p, q$ → 算 $n$ → 算 $\varphi(n)$ → 选 $e$ → 求 $d$ → 封装密钥对
  2. 加解密公式:$C = M^e \bmod n$,$M = C^d \bmod n$
  3. 正确性根源:$ed = k\varphi(n) + 1$ 触发欧拉定理的还原性质
  4. 安全性根基:大整数分解难题构成陷门单向函数

至此,从欧拉定理到 RSA 算法的完整数学链条已然贯通。RSA 的精妙之处在于:它将一个古老的数论定理(欧拉定理)与现代计算复杂性理论(大数分解难题)巧妙结合,构建出了人类历史上最具影响力的公钥加密体制。

然而,RSA 并非永恒的安全港湾。随着量子计算的发展,Shor 算法能够在多项式时间内分解大整数,RSA 的安全性面临根本性挑战。未来的密码学世界,或许将属于抗量子的后量子密码学算法。但无论如何,RSA 算法所展现的数学之美与工程之巧,将永远是密码学史上的一座丰碑。


全系列完结

参考文献:本系列文章参考了多篇网络资源,在此一并致谢。