今天午睡的时候,可能是想到了之前对开源openssl做定制化算法生成的时看到自己生成的公钥和私钥,突然想起来好像自己从来没从原理的角度去解释一下,什么是rsa算法中的公钥和私钥,为什么他能做到公钥加密但不能解密,而公钥加密的私钥却能解密的原因。

开始学习后,才知道如果想要了解RSA算法的原理,必须要从欧拉定理入手,通过欧拉定理的变形和模反才能得到RSA算法的雏形。由于学下来发现篇幅太大,我懒得写了,所以下面的内容都是我和AI问答之后,我给的AI整体框架,让AI基于我们的对话生成的,当然其中也有我自己的一些补充,由于文笔粗劣,夹杂在AI流畅的文本中会很显眼,大家阅读的时候发现写的不好的地方,那大概率是我加的~😄。

内容有点多,我分了三篇wiki来讲。

非对称加密的数学原理(一)

欧拉定理的数学基础

引言

在广阔的数学领域中,某些原理如同万能钥匙,能解锁深层的结构性真理,并催生强大的现实世界应用。欧拉定理便是其中之一,作为数论的基石,它为我们理解整数的周期性本质提供了深刻的洞见。本文将作为系列文章的第一部分,系统梳理欧拉定理的数学基础,为后续引出RSA公钥加密算法做好理论铺垫。

一、基本概念回顾

`` 在正式阐述欧拉定理之前,我们需要先厘清几个数论中的基础概念,它们是理解后续内容的基石。

1.1 余数与同余

给定一个正整数 $n$,如果两个整数 a 和 b,能满足 n % a == n % b (百分号是计算机内取余的说法,我习惯这么写了),那么就称 $a$ 与 $b$ 对模 $n$ 同余。同余还有另一个数学算法,即如果两个整数 $a$ 和 $b$ 满足 $a - b$ 能够被 $n$ 整除,即 $n \mid (a - b)$,记作:

$$a \equiv b \pmod{n}$$ 为什么二者等价呢?推理如下:

  • 假设 $a$ 除以 $n$ 的商是 $q_1$,余数是 $r_1$;$b$ 除以 $n$ 的商是 $q_2$,余数是 $r_2$。即 $a = q_1 n + r_1$,$b = q_2 n + r_2$。
  • 那么它们的差 $a - b = (q_1 - q_2)n + (r_1 - r_2)$。
  • 如果 $a$ 和 $b$ 的余数相同(即 $r_1 = r_2$),那么 $r_1 - r_2 = 0$,此时 $a - b = (q_1 - q_2)n$,显然能被 $n$ 整除。
  • 反过来,如果 $a - b$ 能被 $n$ 整除,因为 $a - b = (q_1 - q_2)n + (r_1 - r_2)$,这意味着 $(r_1 - r_2)$ 也必须能被 $n$ 整除。但由于余数 $r_1, r_2$ 都小于 $n$,它们之间的差也必定小于 $n$。一个绝对值小于 $n$ 的数要想被 $n$ 整除,只能是 0。所以 $r_1 - r_2 = 0$,即余数相同。

同余是整数的一个重要等价关系,它将无限的整数划分成有限的等价类。欧拉定理本质上就是一个关于同余的定理

1.2 互质

若两个正整数 $a$ 和 $b$ 的最大公约数为 1,即 $\gcd(a, b) = 1$,则称 $a$ 与 $b$ 互质。需要注意的是,互质的两个数并不要求各自都是质数——例如 $(15, 8) = 1$,两个合数同样可以互质。

1.3 质数

质数(也称素数)是指只能被 1 和其自身整除的正整数,如 2, 3, 5, 7, 11, 13 等。质数是数论中最基本的构建单元,算术基本定理告诉我们,任何一个大于 1 的正整数都可以唯一地分解为质数的乘积。


二、欧拉函数 $\varphi(n)$

2.1 定义

对于任意正整数 $n$,欧拉函数 $\varphi(n)$ 定义为小于或等于 $n$ 的正整数中与 $n$ 互质的数的个数。

举例来说:

  • 当 $n = 8$ 时,与 8 互质的数有 ${1, 3, 5, 7}$,共 4 个,因此 $\varphi(8) = 4$。
  • 当 $n = 10$ 时,与 10 互质的数有 ${1, 3, 7, 9}$,共 4 个,因此 $\varphi(10) = 4$。

2.2 计算方法

欧拉函数的计算依赖于 $n$ 的质因数分解。设 $n$ 的质因数分解为:

$$n = p_1^{k_1} \cdot p_2^{k_2} \cdots p_m^{k_m}$$

则欧拉函数可通过下式计算:

$$\varphi(n) = n \left(1 - \frac{1}{p_1}\right)\left(1 - \frac{1}{p_2}\right) \cdots \left(1 - \frac{1}{p_m}\right)$$

在实际计算中,我们常常遇到以下几种特殊情况:

情形 条件 公式 示例
情形1 $n = 1$ $\varphi(1) = 1$ $\varphi(1) = 1$
情形2 $n$ 为质数 $p$ $\varphi(p) = p - 1$ $\varphi(7) = 6$
情形3 $n = p^k$ $\varphi(p^k) = (p-1) \cdot p^{k-1}$ $\varphi(8) = \varphi(2^3) = 1 \cdot 2^2 = 4$
情形4 $n = pq$($p, q$ 为不同质数) $\varphi(pq) = (p-1)(q-1)$ $\varphi(15) = \varphi(3 \times 5) = 2 \times 4 = 8$

其中,情形4,也就是 $\varphi(pq) = (p-1)(q-1)$ 在后续 RSA 算法中扮演着至关重要的角色,我们稍后会详细讨论。

2.3 情形4的简单证明

由于 $p, q$ 是不同的质数,在区间 $[1, pq)$ 上,与 $pq$ 互质的数只有两类:

  1. $p$ 的整数倍:$p, 2p, 3p, \ldots, (q-1)p$,共 $q - 1$ 个;
  2. $q$ 的整数倍:$q, 2q, 3q, \ldots, (p-1)q$,共 $p - 1$ 个。

因此,与 $pq$ 互质的正整数个数为:

$$\varphi(pq) = (pq - 1) - (q - 1) - (p - 1) = pq - p - q + 1 = (p - 1)(q - 1)$$

证毕。


三、欧拉定理

3.1 定理表述

欧拉定理(Euler’s Theorem):若 $a$ 和 $n$ 为正整数,且 $\gcd(a, n) = 1$(即 $a$ 与 $n$ 互质),则:

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

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

3.2 直观理解:指数的周期性

欧拉定理的核心思想在于指数的周期性。在模 $n$ 运算中,不断地用一个数 $a$ 去乘以自己(即 $a, a^2, a^3, \ldots$),结果会呈现出周期性循环。欧拉定理告诉我们:只要 $a$ 和 $n$ 互质,那么 $a$ 的 $\varphi(n)$ 次方模 $n$ 的结果必然是 1。

换一种说法:在模 $n$ 的世界里,$a^{\varphi(n)}$ 就像是”走完了一整圈”,回到了起点 1。

3.3 一个具体例子

令 $a = 3$,$n = 10$。首先验证两者互质:$\gcd(3, 10) = 1$。

计算欧拉函数:

  • 与 10 互质的数有 ${1, 3, 7, 9}$,故 $\varphi(10) = 4$。

验证欧拉定理:
$$3^{\varphi(10)} = 3^4 = 81 = 80 + 1 \equiv 1 \pmod{10} \quad \checkmark$$

与定理结论完全相符。

3.4 与费马小定理的关系

欧拉定理实际上是费马小定理的推广。当 $n$ 为质数 $p$ 时,$\varphi(p) = p - 1$,代入欧拉定理即得:

$$a^{p-1} \equiv 1 \pmod{p}$$

这就是费马小定理。因此,费马小定理可以视为欧拉定理在模数为质数时的特殊情形。


四、欧拉定理的证明

以下是一个基于剩余系置换的经典证明思路。

4.1 构造缩系

设 $b_1, b_2, \ldots, b_{\varphi(n)}$ 为小于 $n$ 且与 $n$ 互质的全部正整数,即缩系(reduced residue system)。

考虑如下 $\varphi(n)$ 个数:

$$m_i = a \cdot b_i \pmod{n}, \quad i = 1, 2, \ldots, \varphi(n)$$

4.2 证明这 $\varphi(n)$ 个数互不相同

假设存在 $i \neq j$ 使得 $a \cdot b_i \equiv a \cdot b_j \pmod{n}$。

由于 $\gcd(a, n) = 1$,$a$ 在模 $n$ 下存在乘法逆元,可以两边消去 $a$(乘法逆元可以看七、补充中的内容),得到:

$$b_i \equiv b_j \pmod{n}$$

但 $b_i, b_j$ 都小于 $n$ 且互不相同,矛盾。因此 $m_1, m_2, \ldots, m_{\varphi(n)}$ 互不相同。

4.3 证明这些数都与 $n$ 互质

因为 $\gcd(a, n) = 1$ 且 $\gcd(b_i, n) = 1$,所以 $\gcd(a \cdot b_i, n) = 1$,进而 $\gcd(m_i, n) = \gcd(a \cdot b_i \bmod n, n) = 1$。

4.4 得出结论

由于 $m_1, m_2, \ldots, m_{\varphi(n)}$ 是 $\varphi(n)$ 个互不相同且都与 $n$ 互质的数,它们必然恰好是 $b_1, b_2, \ldots, b_{\varphi(n)}$ 的一个排列。因此:

$$\prod_{i=1}^{\varphi(n)} m_i \equiv \prod_{i=1}^{\varphi(n)} b_i \pmod{n}$$

即:

$$a^{\varphi(n)} \cdot \prod_{i=1}^{\varphi(n)} b_i \equiv \prod_{i=1}^{\varphi(n)} b_i \pmod{n}$$

由于 $\prod b_i$ 与 $n$ 互质,可以在两边消去,得到:

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

证毕。 $\blacksquare$


五、欧拉定理的一个重要推论

对欧拉定理稍作变形,可以得到一个在后续 RSA 算法中至关重要的推论。

将 $a^{\varphi(n)} \equiv 1 \pmod{n}$ 两边同时取 $k$ 次方,再乘以 $a$,得到:

$$a^{k \cdot \varphi(n) + 1} \equiv a \pmod{n}$$

其中 $k$ 为任意正整数。

这个推论的深刻含义在于:如果一个数的指数可以写成 $k \cdot \varphi(n) + 1$ 的形式,那么对该数进行这个指数次方运算后模 $n$,结果会还原为原数本身。

这正是后续 RSA 加解密能够成功还原明文的数学根基所在——通过精心设计公钥指数 $e$ 和私钥指数 $d$,使得 $e \cdot d = k \cdot \varphi(n) + 1$,从而利用这一推论实现可逆的加密与解密。


六、欧拉定理的应用:降幂

除了作为密码学的基石,欧拉定理在计算数学中还有一个非常实用的功能——降幂

当需要计算 $a^b \bmod n$ 而 $b$ 极其巨大时,如果 $\gcd(a, n) = 1$,可以利用欧拉定理将指数降低:

$$a^b \equiv a^{b \bmod \varphi(n)} \pmod{n}$$

示例:计算 $3^{100} \bmod 7$。

  1. 检查条件:$\gcd(3, 7) = 1$,满足。
  2. 计算 $\varphi(7) = 6$(因为 7 是质数)。
  3. 降幂:$100 \bmod 6 = 4$。
  4. 简化:$3^{100} \equiv 3^4 = 81 \equiv 4 \pmod{7}$。

这种降幂技巧在算法竞赛和密码学工程中极为常用。


七、补充

7.1 乘法逆元的概念

“乘法逆元”是模运算里的一个概念,可以类比成”模意义下的倒数”。

定义

在模 n意义下,如果 gcd(a,n)=1,则存在唯一一个整数 a−1(记作 a−1modn),使得 a⋅a−1≡1(modn) 这个 a−1就叫做 a在模 n下的乘法逆元

例子

比如模 n=7,a=3:

  • 3×5=15≡1(mod7)
  • 所以 3−1≡5(mod7),即 3 的逆元是 5。

再比如模 n=6,a=4:

  • gcd(4,6)=2=1,没有逆元(因为 4 乘任何数模 6 都不可能等于 1)。
为什么存在唯一的乘法逆元

假设存在两个不同的整数 x1​,x2​都是 a的逆元,即: ax1​≡1(modn) ax2​≡1(modn)

两式相减得: a(x1​−x2​)≡0(modn)

这意味着 n∣a(x1​−x2​)。 因为 gcd(a,n)=1,所以 n∣(x1​−x2​)(这是数论的一个基本性质:若 gcd(a,n)=1且 n∣a⋅k,则 n∣k)。 于是 x1​≡x2​(modn),即它们在模 n下相等。所以逆元在模 n意义下唯一


小结

在本篇中,我们从同余、互质等基本概念出发,系统介绍了欧拉函数 $\varphi(n)$ 的定义与计算,阐述了欧拉定理的内容及其证明,并引出了对 RSA 算法至关重要的推论 $a^{k\varphi(n)+1} \equiv a \pmod{n}$。

欧拉定理揭示了模运算中指数的周期性规律,它”能将看似不可能的巨大指数计算转变为可处理的问题”,并为构建陷门函数提供了理论基础。在下一篇中,我们将以此为基础,探讨欧拉定理的进一步变形,并最终引出 RSA 公钥加密算法的完整构造。


下一篇预告:《从欧拉定理到RSA算法(二):欧拉定理的变形与模反元素》