RSA加密算法:数学之美守护信息安全

5 阅读1分钟

"任何人都可以给我发消息,但只有我能读懂。" —— 这就是RSA的浪漫

一、从生活场景说起

想象这样一个场景:你想给好友发送一份机密文件,但你们之间没有任何安全的通信渠道。如果直接发送密码,窃听者就能截获;如果不发送密码,对方又无法解密。

RSA的解决方案是:把钥匙分成两把。

  • 公钥:公开给所有人,用来"上锁"(加密)
  • 私钥:只有你自己保管,用来"开锁"(解密)

这听起来像魔法,但背后的数学却优雅而严谨。


二、核心数学原理

2.1 欧拉定理(Euler's Theorem)

RSA的数学基石是欧拉定理:

aϕ(n)1(modn)a^{\phi(n)} \equiv 1 \pmod{n}

其中 ϕ(n)\phi(n) 是欧拉函数,表示小于 nn 且与 nn 互质的正整数的个数。

2.2 RSA密钥生成四步法

第一步:选择两个大素数 p,q(实际应用中通常是几百位的大素数)p, q \quad (\text{实际应用中通常是几百位的大素数})

第二步:计算模数 n=p×qn = p \times q

第三步:计算欧拉函数 ϕ(n)=(p1)(q1)\phi(n) = (p-1)(q-1)

第四步:选择公钥和私钥

  • 选择公钥指数 ee,满足:1<e<ϕ(n)1 < e < \phi(n)gcd(e,ϕ(n))=1\gcd(e, \phi(n)) = 1
  • 计算私钥指数 dd,满足:e×d1(modϕ(n))e \times d \equiv 1 \pmod{\phi(n)}

2.3 加密与解密

  • 加密c=memodnc = m^e \mod n (用公钥)
  • 解密m=cdmodnm = c^d \mod n (用私钥)

2.4 为什么能解密?

关键证明

我们需要证明:(me)dm(modn)(m^e)^d \equiv m \pmod{n}

由于 e×d1(modϕ(n))e \times d \equiv 1 \pmod{\phi(n)},可设: e×d=k×ϕ(n)+1e \times d = k \times \phi(n) + 1

因此: (me)d=me×d=mk×ϕ(n)+1=m×(mϕ(n))k(m^e)^d = m^{e \times d} = m^{k \times \phi(n) + 1} = m \times (m^{\phi(n)})^k

根据欧拉定理,当 gcd(m,n)=1\gcd(m, n) = 1 时: mϕ(n)1(modn)m^{\phi(n)} \equiv 1 \pmod{n}

所以: m×(mϕ(n))km×1km(modn)m \times (m^{\phi(n)})^k \equiv m \times 1^k \equiv m \pmod{n}

证毕!


三、实战案例演示

让我们用具体数字来走一遍完整流程(实际应用中的数字要大得多)。

📋 场景设定

Alice 要给 Bob 发送秘密消息 "7"


步骤1:Bob 生成密钥对

选择素数

  • p=11p = 11
  • q=3q = 3

计算模数n=11×3=33n = 11 \times 3 = 33

计算欧拉函数ϕ(33)=(111)(31)=10×2=20\phi(33) = (11-1)(3-1) = 10 \times 2 = 20

选择公钥 ee: 选择 e=3e = 3(满足 1<3<201 < 3 < 20gcd(3,20)=1\gcd(3, 20) = 1

计算私钥 dd: 需要找到 dd 使得 3d1(mod20)3d \equiv 1 \pmod{20}

3d=20k+13d = 20k + 1

尝试:

  • k=1k=1: 3d=21d=73d = 21 \Rightarrow d = 7

验证3×7=211(mod20)3 \times 7 = 21 \equiv 1 \pmod{20}


步骤2:Bob 公开公钥,保管私钥

公钥(公开)私钥(保密)
(e=3,n=33)(e=3, n=33)(d=7,n=33)(d=7, n=33)

步骤3:Alice 加密消息

明文m=7m = 7

加密计算c=memodn=73mod33c = m^e \mod n = 7^3 \mod 33

计算: 73=3437^3 = 343 343÷33=10 余 13343 \div 33 = 10 \text{ 余 } 13

密文c=13c = 13

Alice 将 "13" 发送给 Bob


步骤4:Bob 解密密文

密文c=13c = 13

解密计算m=cdmodn=137mod33m = c^d \mod n = 13^7 \mod 33

计算 137mod3313^7 \mod 33

采用快速幂算法:

  • 13113(mod33)13^1 \equiv 13 \pmod{33}
  • 132=1694(mod33)13^2 = 169 \equiv 4 \pmod{33}169=5×33+4169 = 5 \times 33 + 4
  • 13442=16(mod33)13^4 \equiv 4^2 = 16 \pmod{33}
  • 137=134×132×13116×4×13=832(mod33)13^7 = 13^4 \times 13^2 \times 13^1 \equiv 16 \times 4 \times 13 = 832 \pmod{33}

832÷33=25 余 7832 \div 33 = 25 \text{ 余 } 7

明文m=7m = 7


步骤5:验证结果

阶段数值
原始明文7
加密后密文13
解密后明文7

完全正确! 🎉


四、为什么RSA是安全的?

🔒 安全性的数学基础

RSA的安全性依赖于一个数学难题:

大整数分解问题:给定 n=p×qn = p \times q,当 ppqq 是几百位的大素数时,从 nn 反推出 ppqq 在计算上是不可行的。

攻击者的困境

假设黑客截获了:

  • 密文 c=13c = 13
  • 公钥 (e=3,n=33)(e=3, n=33)

他想解密,必须知道 dd,而 dd 需要 ϕ(n)\phi(n)ϕ(n)\phi(n) 需要知道 ppqq

对于 n=33n=33,分解很容易(就是 3×113 \times 11)。但对于一个2048位的 nn

  • 目前最快的算法也需要数亿年
  • 即使是量子计算机,也需要足够大的规模才能威胁RSA

五、实际应用中的RSA

📱 everyday场景

场景RSA的作用
HTTPS网站浏览器和服务器交换对称加密密钥
数字签名验证软件更新、合同的真实性
SSH登录免密码安全登录服务器
加密货币比特币钱包地址生成

⚡ 优化技巧

由于RSA计算较慢,实际使用中通常采用混合加密

  1. 用RSA加密一个随机的对称密钥
  2. 用对称加密(如AES)加密实际数据
  3. 这样既安全又高效

六、总结

RSA算法的优雅之处在于:

  1. 不对称性:加密和解密使用不同的钥匙
  2. 数学基础扎实:建立在数论中经过严格证明的定理之上
  3. 计算不对称:正向计算(加密)容易,逆向计算(破解)困难
核心公式回顾:
┌─────────────────────────────────────┐
│  密钥生成:n = p×q, φ(n) = (p-1)(q-1) │
│  公钥:(e, n),私钥:(d, n)            │
│  加密:c = m^e mod n                 │
│  解密:m = c^d mod n                 │
│  核心:e×d ≡ 1 (mod φ(n))            │
└─────────────────────────────────────┘

💡 思考题:在我们的例子中,如果Alice想发送消息"5",密文是多少?(答案:53mod33=265^3 \mod 33 = 26


参考资料

  • Rivest, R. L., Shamir, A., & Adleman, L. (1978). A method for obtaining digital signatures and public-key cryptosystems.
  • 《密码学导论》—— Katz & Lindell