RSA 算法是一种非对称加密算法,由 Ron Rivest、Adi Shamir 和 Leonard Adleman 于 1977 年提出,其名称取自三位发明者的姓氏首字母。作为非对称加密的经典代表,RSA 基于 “大数分解问题” 的数学困难性,广泛应用于数字签名、密钥交换、数据加密等领域。以下从核心原理、工作流程、安全性及应用等方面进行详细解析。
1. RSA 的核心原理
RSA 属于非对称加密,与对称加密(如 AES)的核心区别在于:
- 加密和解密使用不同的密钥:公开的 “公钥”(用于加密)和保密的 “私钥”(用于解密)。
- 公钥无法推导出私钥(基于数学难题),因此公钥可公开分发,私钥仅由持有者保存。
其安全性依赖于大数分解问题的计算困难性:对于两个大质数(如 1024 位或 2048 位)的乘积(即 “模数 n”),在现有计算能力下,很难将其分解为原来的两个质数。
2. RSA 的工作流程
RSA 的完整流程包括三个核心步骤:密钥生成、加密、解密。
2.1 密钥生成(核心步骤)
密钥生成是 RSA 最复杂的环节,需通过一系列数学操作生成公钥(e, n)和私钥(d, n)。具体步骤如下:
(1)选择两个大质数 p 和 q
- 质数 p 和 q 需足够大(目前推荐至少 1024 位,实际应用中常用 2048 位或 4096 位),且 p≠q。
- 质数的选择需通过严格的素性测试(如 Miller-Rabin 测试),确保其为 “真质数”。
(2)计算模数 n
模数 n 是 p 和 q 的乘积,即:
n=p×q
n 是公钥和私钥的共同部分,用于后续加密和解密的模运算。
(3)计算欧拉函数 φ(n)
欧拉函数 φ(n) 表示 “小于 n 且与 n 互质的正整数的个数”。由于 p 和 q 是质数,根据欧拉函数的性质:
ϕ(n)=(p−1)×(q−1)
(原理:质数 p 的 φ(p)=p-1,且若 p 和 q 互质,则 φ(p×q)=φ(p)×φ(q))
(4)选择公钥 e
公钥 e 需满足两个条件:
- 1 <e < φ(n)(e 是介于 1 和 φ(n) 之间的整数);
- e 与 φ(n)“互质”(即 gcd (e, φ(n)) = 1,最大公约数为 1)。
常见的 e 值为 65537(0x10001),因其是质数且计算效率高,被广泛采用。
(5)计算私钥 d
私钥 d 是 e 的 “模 φ(n) 逆元”,即满足:
(e×d)modϕ(n)=1
通俗说,d 是使得 “e 乘以 d 的结果除以 φ(n) 余 1” 的整数。计算 d 需使用扩展欧几里得算法(一种高效求解模逆的数学方法)。
(6)生成密钥对
- 公钥:(e, n)(公开,用于加密);
- 私钥:(d, n)(保密,用于解密)。
(生成后可销毁 p 和 q,仅保留 n、e、d 即可)
2.2 加密过程
假设发送方需要加密明文 m(需满足 m < n,若 m ≥ n 则需分段加密),使用接收方的公钥(e, n)加密,得到密文 c:
c = m的e次方,对n取模
2.3 解密过程
接收方使用自己的私钥(d, n)对密文 c 解密,恢复明文 m:
2.4 示例:用小数字演示 RSA 流程
为便于理解,用极小的质数演示(实际中质数需极大):
- 选择 p=3,q=11(均为质数);
- 计算 n = 3×11 = 33;
- 计算 φ(n) = (3-1)×(11-1) = 2×10 = 20;
- 选择 e=7(满足 1<7<20 且 gcd (7,20)=1);
- 计算 d:需满足 (7×d) mod 20 = 1,解得 d=3(7×3=21,21 mod 20=1);
- 公钥:(7, 33),私钥:(3, 33)。
加密:明文 m=5(m < 33),密文 c = 5⁷ mod 33。
5⁷=78125,78125 mod 33 = 78125 - 33×2367 = 78125 - 78111 = 14 → c=14。
解密:密文 c=14,明文 m = 14³ mod 33。
14³=2744,2744 mod 33 = 2744 - 33×83 = 2744 - 2739 = 5 → 恢复明文 m=5。
3. RSA 的理论依据:为什么加密解密成立?
RSA 的加密解密公式成立,核心依赖欧拉定理(费马小定理的推广):
若 a 与 n 互质,则
对于 RSA,由于
代入解密公式:
而根据 d 的定义,
k 为整数,因此:
若 m 与 n 互质,根据欧拉定理,
因此:
若 m 与 n 不互质(即 m 是 p 或 q 的倍数),通过数论推导仍可证明解密公式成立。因此,RSA 的加密解密过程在数学上是严谨的。
4. RSA 的安全性分析
RSA 的安全性基于 “大数分解问题”:若攻击者能将 n 分解为 p 和 q,则可计算 φ(n)=(p-1)(q-1),再通过 e 推导出 d(私钥),从而破解加密。
4.1 影响安全性的核心因素
- 密钥长度:n 的位数直接决定安全性。位数越长,分解 n 的难度越大:
- 1024 位密钥:2010 年后已被证明可被国家级别攻击者分解,不再安全;
- 2048 位密钥:目前广泛使用,预计可安全到 2030 年;
- 4096 位密钥:安全性更高,适用于高敏感场景。
- 质数 p 和 q 的选择:p 和 q 需足够大且 “随机”,避免使用特殊形式的质数(如易被分解的弱质数)。
4.2 潜在威胁
- 因数分解攻击:通过数学算法(如 General Number Field Sieve,GNFS)分解 n,是最直接的威胁。
- 侧信道攻击:通过分析加密 / 解密时的时间、功耗、电磁辐射等物理信息,推断私钥(如针对 d 的攻击)。
- 量子计算威胁:量子计算机可通过 Shor 算法在多项式时间内分解大数,若量子计算实用化,现有 RSA 将被破解(目前应对方案:研究抗量子加密算法)。
5. RSA 的应用场景
RSA 因加密速度较慢(指数运算耗时),通常不直接用于加密大量数据,而是用于以下场景:
- 数字签名:用私钥对数据哈希值加密(签名),接收方用公钥验证,确保数据完整性和发送方身份(不可否认性)。
- 密钥交换:在对称加密中,用 RSA 加密对称密钥(如 AES 密钥),实现安全的密钥分发(避免对称密钥在传输中泄露)。
- 身份认证:通过公钥验证对方持有对应的私钥,确认身份合法性(如 SSH 登录、SSL/TLS 握手)。