RSA算法背后的数学原理

1. 引言

RSA算法(RSA algorithm)是一种非对称加密算法, 广泛应用在互联网和电子商务中. 它使用一对密钥进行加密和解密, 分别称为公钥(public key)私钥(private key). 使用公钥加密的内容只能用私钥解密, 使用私钥加密的内容只能用公钥解密, 并且不能通过公钥在可行的时间内计算出私钥. 这使得加密通信不需要交换私钥, 保证了通信的安全. 那么它是怎么做到这一点的呢? 背后有哪些数学原理? 这篇文章我们来讨论这个问题.

本文会先介绍RSA算法中用到的数论概念和定理: 模算术, 最大公约数与贝祖定理, 线性同余方程, 中国余数定理, 费马小定理; 然后再介绍RSA算法的原理, 并证明其是有效的. 本文会假设你了解数论的基本概念, 如素数, 最大公约数, 互素等.

2. 模算术

2.1 整数除法

我们用一个正整数去除一个整数, 可以得到一个商和一个余数. 形式化定义为:

定理 1 令 a 为整数, d 为正整数, 则存在唯一的整数 q 和 r, 满足 , 使得 .

时, 我们称 d 整除 a, 记作 ; 否则称 d 不整除 a, 记作

整除有以下基本性质:

定理 2 令 a, b, c 为整数, 其中 . 则: - 如果 , 则 - 如果 , 则对于所有整数 c 都有 - 如果 , 则

2.2 模算术

在数论中我们特别关心一个整数被一个正整数除时的余数. 我们用 表示整数 a 除以正整数 m 的余数是 b. 为了表示两个整数被一个正整数除时的余数相同, 人们又提出了同余式(congruence).

定义 1 如果 a 和 b 是整数而 m 是正整数, 则当 m 整除 a - b 时称 a 模 m 同余 b. 记作

很相似. 事实上, 如果 , 则 . 但他们本质上是两个不同的概念. 表达的是一个函数, 而 表达的是两个整数之间的关系.

模算术有下列性质:

定理 3 如果 m 是正整数, a, b 是整数, 则有

根据定理3, 可得以下推论

推论 1 设 m 是正整数, a, b, c 是整数; 如果 , 则

证明 , . 那么

需要注意的是, 推论1反之不成立. 来看推论2:

推论 2 设 m 是正整数, a, b 是整数, c 是不能被 m 整除的整数; 如果 , 则

证明 , 所以有

, , .

3. 最大公约数

如果一个整数 d 能够整除另一个整数 a, 则称 d 是 a 的一个约数(divisor); 如果 d 既能整除 a 又能整除 b, 则称 d 是 a 和 b 的一个公约数(common divisor). 能整除两个整数的最大整数称为这两个整数的最大公约数(greatest common divisor).

定义 2 令 a 和 b 是不全为零的两个整数, 能使 的最大整数 d 称为 a 和 b 的最大公约数. 记作

3.1 求最大公约数

如何求两个已知整数的最大公约数呢? 这里我们讨论一个高效的求最大公约数的算法, 称为辗转相除法. 因为这个算法是欧几里得发明的, 所以也称为欧几里得算法. 辗转相除法基于以下定理:

引理 1, 其中 a, b, q 和 r 均为整数. 则有

证明 我们假设 d 是 a 和 b 的公约数, 即 , 那么根据定理2, d 也能整除 . 所以 a 和 b 的任何公约数也是 b 和 r 的公约数;

类似地, 假设 d 是 b 和 r 的公约数, 即 , 那么根据定理2, d 也能整除 . 所以 b 和 r 的任何公约数也是 a 和 b 的公约数;

因此, a 与 b 和 b 与 r 拥有相同的公约数. 所以 .

辗转相除法就是利用引理1, 把大数转换成小数. 例如, 求 , 我们就把用较大的数除以较小的数. 首先用 287 除以 91, 得

我们有 . 问题转换成求 . 同样地, 用 91 除以 14, 得

. 继续用 14 除以 7, 得

因为 7 整除 14, 所以 . 所以 .

我们可以很快写出辗转相除法的代码:

1
2
3
def gcd(a, b):
if b == 0: return a
return gcd(b, a % b)

3.2 贝祖定理

现在我们讨论最大公约数的一个重要性质:

定理 4 贝祖定理 如果整数 a, b 不全为零, 则 是 a 和 b 的线性组合集 中最小的元素. 这里的 x 和 y 被称为贝祖系数

证明. 设存在 , 使 是 A 中的最小正元素, ; 现在用 去除 a, 这就得到唯一的整数 q(商) 和 r(余数) 满足

, 是 A 中最小正元素

, .

同理, 用 去除 b, 可得 . 所以说 是 a 和 b 的公约数.

设 a 和 b 的最大公约数是 d, 那么

是 a 和 b 的最大公约数.

我们可以对辗转相除法稍作修改, 让它在计算出最大公约数的同时计算出贝祖系数.

1
2
3
4
def gcd(a, b):
if b == 0: return a, 1, 0
d, x, y = gcd(b, a % b)
return d, y, x - (a / b) * y

4. 线性同余方程

现在我们来讨论求解形如 的线性同余方程. 求解这样的线性同余方程是数论研究及其应用中的一项基本任务. 如何求解这样的方程呢? 我们要介绍的一个方法是通过求使得方程 成立的整数 . 我们称 为 a 模 m 的逆. 下面的定理指出, 当 a 和 m 互素时, a 模 m 的逆必然存在.

定理 5 如果 a 和 m 为互素的整数且 , 则 a 模 m 的逆存在, 并且是唯一的.

证明贝祖定理可知, , 存在整数 x 和 y 使得

这蕴含着

, 所以有

x 为 a 模 m 的逆.

这样我们就可以调用辗转相除法 gcd(a, m) 求得 a 模 m 的逆.

a 模 m 的逆也被称为 a 在模m乘法群 中的逆元. 这里我并不想引入群论, 有兴趣的同学可参阅算法导论

求得了 a 模 m 的逆 , 现在我们可以来解线性同余方程了. 具体的做法是这样的: 对于方程 , 我们在方程两边同时乘上 , 得

带入上式, 得

就是方程的解. 注意同余方程会有无数个整数解, 所以我们用同余式来表示同余方程的解.

例 1 求线性同余方程

调用 gcd(34, 89), 得 , 34 模 89 的逆为 -34. 方程两边同时乘 -34 得

5. 中国余数定理

中国南北朝时期数学著作 孙子算经 中提出了这样一个问题:

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

用现代的数学语言表述就是: 下列同余方程组的解释多少?

孙子算经 中首次提到了同余方程组问题及其具体解法. 因此中国剩余定理称为孙子定理.

定理 6 中国余数定理 为大于 1 且两两互素的正整数, 是任意整数. 则同余方程组

有唯一的模 的解.

证明 我们使用构造证明法, 构造出这个方程组的解. 首先对于 , 令

即, 是除了 之外所有模数的积. 两两互素, . 由定理 5 可知, 存在整数 的逆. 即

上式等号两边同时乘

就是第 i 个方程的一个解; 那么怎么构造出方程组的解呢? 我们注意到, 根据 的定义可得, 对所有的 , 都有 . 因此我们令

就是方程组的解.

有了这个结论, 我们可以解答 孙子算经 中的问题了: 对方程组的每个方程, 求出 , 然后调用 gcd(M_i, m_i) 求出 :

最后求出

6. 费马小定理

现在我们来看数论中另外一个重要的定理, 费马小定理(Fermat’s little theorem)

定理 7 费马小定理 如果 a 是一个整数, p 是一个素数, 那么

特别地, 当 a 不是 p 的倍数时, 有

证明 假设 n 是整数, p 是素数, 考虑组合数

当 n 不为 p 或 0 时, 由于分子有质数p, 但分母不含p; 故分子的p能保留, 不被约分而除去. 即 .

令 b 为任意整数, 根据二项式定理, 我们有

对上式模 p, 可得同余式

通过不断地令 , 可得

依次代入, 得

, 即得 .

当 p 不整除 a 时, 根据推论 2, 有 .

7. RSA算法

我们终于可以来看 RSA 算法了. 先来看 RSA 算法是怎么运作的:

RSA 算法按照以下过程创建公钥和私钥: 1. 随机选取两个大素数 p 和 q, ; 2. 计算 ; 3. 选取一个与 互素的小整数 e; 4. 求 e 模 的逆, 记作 d; 5. 将 公开, 是为公钥; 6. 将 保密, 是为私钥.

要把明文 加密成密文 , 计算

要把密文 解密成明文 , 计算

下面证明 RSA 算法是有效的:

证明 要证明 RSA 加密算法的有效性, 我们只需要证明 也就是 . 注意到 d 为 e 模 的逆, 所以有

这蕴含着存在整数 k, 使得 . 由此可得

如果 不是 p 的倍数, 那么根据费马小定理, 可得 . 因此

如果 是 p 的倍数, 那么 . 所以对所有的 都有

类似地, 对于所有的 都有

由于 p, q 都是素数, 所以 . 由中国余数定理 可得

所以 RSA 加密算法是有效的.

(1) 式表明, 不仅可以用公钥加密, 私钥解密, 还可以用私钥加密, 公钥解密. 即加密计算 , 解密计算 .

RSA 算法的安全性基于大整数的质因数分解的困难性. 由于目前没有能在多项式时间内对整数作质因数分解的算法, 因此无法在可行的时间内把 n 分解成 p 和 q 的乘积. 因此就无法求得 e 模 的逆, 也就无法根据公钥计算出私钥.

8. 总结

RSA 算法是一个能体现数学之美的算法. 因为有 RSA 这样的非对称加密算法, 我们的互联网才变得安全, 电子商务, 移动支付, 网银等才得以存在. 在这些的背后都是数学家和计算机科学家的研究成果. 本文主要讨论的是 RSA 算法背后的数学原理而不是其实现, 因此, 限于篇幅, 像模取幂, 寻找大素数, 大整数运算之类的算法未予讨论. 感兴趣的同学可参阅参考资料中的文献.


参考资料 - 离散数学及其应用(原书第7版), 机械工程出版社 - 算法导论第三版, 机械工业出版社 - 费马小定理


RSA算法背后的数学原理
https://luyuhuang.tech/2019/10/24/mathematics-principle-of-rsa-algorithm.html
Author
Luyu Huang
Posted on
October 24, 2019
Licensed under