RSA 算法数学原理
RSA算法是应用最广泛的非对称加密算法。算法核心是“用两个大质数生成公钥和私钥,公钥加密的内容只有对应的私钥能解密”,两者不可逆且成对出现。
一、原理
RSA的本质是利用“大质数分解的数学难题”——把两个大质数相乘很容易,但要把乘积拆回原来的两个质数,在现有技术下几乎不可能,以此保证安全性。
- 
生成密钥对(公钥+私钥)
- 选两个不相等的质数(演示举例使用小质数,实际用数百位的大质数)
p=61、q=53。 - 计算乘积 
n = p×q(n=61×53=3233),n会作为公钥和私钥的共同参数。 - 计算“欧拉函数” 
φ(n) = (p-1)×(q-1)(φ(3233)=60×52=3120),用于后续计算私钥。 - 选一个整数 
e(1<e<φ(n),且e与φ(n)互质,即最大公约数为1),比如e=17,(17,3120)互质,此时(e,n)=(17,3233)就是公钥。 - 计算 
d(d是e关于φ(n)的“模逆元”,即(e×d) mod φ(n) = 1),通过计算得d=2753(即17×2753=46801,46801 mod 3120=1),此时(d,n)=(2753,3233)就是私钥。 
 - 选两个不相等的质数(演示举例使用小质数,实际用数百位的大质数)
 - 
公钥加密(任何人都能做)
假设要加密的明文是m(m<n,否则需分段),加密公式为:
密文c = (m^e) mod n
比如明文m=65(对应字母“A”的ASCII码),代入得c=(65^17) mod 3233,计算结果为2790,这就是加密后的密文。 - 
私钥解密(只有私钥持有者能做)
解密公式为:
明文m = (c^d) mod n
用私钥d=2753解密密文c=2790,即m=(2790^2753) mod 3233,计算结果会还原为65,完成解密。 
二、实例演示
为了让计算更简单,用更小的质数 p=3、q=11 再演示一遍:
| 步骤 | 计算过程 | 结果(密钥/数据) | 
|---|---|---|
| 1. 选质数 | p=3,q=11 | - | 
| 2. 计算n = p×q | n = 3×11 | n=33(公钥/私钥共用) | 
| 3. 计算φ(n) = (p-1)×(q-1) | φ(33)=(3-1)×(11-1) | φ(n)=20 | 
| 4. 选e(1<e<φ(n),且 e 与 φ(n)互质) | 选e=7(1<7<20,且7和20互质) | 公钥:(e,n)=(7,33) | 
| 5. 算d(e的模逆元,即(e×d) mod φ(n) = 1) | 找d使(7×d) mod 20=1,得d=3(7×3=21,21 mod20=1) | 私钥:(d,n)=(3,33) | 
| 6. 公钥加密 (m^e) mod n(明文m=5) | c=(5^7) mod 33(5^7=78125,78125÷33余6) | 密文c=6 | 
| 7. 私钥解密 (c^d) mod n(密文c=6) | m=(6^3) mod 33(6^3=216,216÷33余5) | 明文m=5(还原成功) | 
三、注意事项
- 实际场景中,
p和q是非常大的质数(通常 512、1024、1536、2048位二进制),n的位数≈p 的位数 + q 的位数(通常 1024、2048、3072、4096 位二进制),未来会逐步过渡到更长。这让“分解n找p、q”的难度达到当前计算机无法破解的程度。 - 公钥可以公开(比如发给别人加密信息),私钥必须保密(只有自己能解密)。
 
