📦故事设定
小红想接收秘密信件,她要做三件事:
造一套魔法锁具(生成密钥对)
把“魔法锁”发给朋友(公布公钥)
用“魔法钥匙”开锁读信(私钥解密)
朋友小明要给小红寄信,他需要:
用魔法锁锁上信(公钥加密)
🔑第一步:密钥生成(小红造锁和钥匙)
1.1 选两个秘密质数(找核心材料)
小红悄悄选两个非常大的质数(只能被1和自身整除)。
比如:
p = 3,q = 11(实际是几百位数字,这里简化)。关键:这两个数必须绝对保密!是安全的基础。
1.2 制作“锁身”编号 n(公开部分)
计算:
n = p × qn = 3 × 11 = 33这个
n可以公开,它是锁的“型号编号”。
1.3 计算“隐藏的齿轮数” φ(n)(绝密!)
计算欧拉函数:
φ(n) = (p-1) × (q-1)φ(33) = (3-1) × (11-1) = 2 × 10 = 20这个
φ(n)=20必须像密码本一样藏好,绝对不能泄露!
1.4 选一个“公开的锁孔数字” e(公钥第二部分)
选一个与φ(n)互质(最大公约数为1)的数
e。在1和φ(n)之间选,比如选
e = 3(3和20互质)。公钥诞生!:
(e, n) = (3, 33)小红可以把
(3, 33)印在名片上发给全世界。
1.5 锻造“唯一钥匙” d(私钥)
计算
d,使得:(e × d) ÷ φ(n)的余数 = 1数学式:
e × d ≡ 1 (mod φ(n))即:
3 × d ≡ 1 (mod 20)找一个
d:3 × 7 = 21,21 ÷ 20余1✅私钥诞生!:
(d, n) = (7, 33)小红必须把
(7, 33)记在心里或存在最安全的地方。
🔐第二步:加密(小明用公钥锁信)
小明想发送数字13(代表秘密信息)。
加密公式:
密文 C = 明文 M^e mod n
计算过程:
小明拿到小红的公钥:
(e=3, n=33)明文:
M = 13计算:
C = 13^3 mod 3313^3 = 13×13×13 = 2197计算余数:
2197 ÷ 33 = 66...?33×66 = 21782197 - 2178 = 19
得到密文:
C = 19
小明把密文19发送给小红。即使被人截获,看到的只是19,不知道原始信息13。
🗝️第三步:解密(小红用私钥开锁)
小红收到密文C=19。
解密公式:
明文 M = 密文 C^d mod n
计算过程:
小红拿出私钥:
(d=7, n=33)计算:
M = 19^7 mod 33直接算
19^7太大,我们用技巧:19^2 mod 33 = 361 mod 33 = 28 (因为33×10=330, 361-330=31? 检查:361÷33=10余31) 更正:19^2=361, 33×10=330, 361-330=31 19^4 = (19^2)^2 = 31^2=961 mod 33 = 961÷33=29...4 (33×29=957, 961-957=4) 19^7 = 19^4 × 19^2 × 19^1 = 4 × 31 × 19 = 2356 mod 33 2356 ÷ 33 = 71...? 33×71=2343, 2356-2343=13
恢复明文:
M = 13✅神奇的事情发生了:密文
19被还原成原始信息13!🧩可视化流程
❓关键问题解答
Q1:为什么加密用e,解密用d?
因为
(M^e)^d = M^(e×d) = M^(k×φ(n)+1)根据欧拉定理:
M^(φ(n)) ≡ 1 (mod n)所以
M^(k×φ(n)+1) ≡ M (mod n)魔法就成立了:加密再解密回到原点!
Q2:为什么安全?
攻击者知道:
n=33,e=3,密文=19他想破解必须:
分解n=33→ 得到
p=3, q=11计算
φ(n)=20根据
e=3求d=7
但当n是617位十进制数(2048位)时,分解它需要全世界的计算机算几百万年!
Q3:数字太大怎么算?
实际中
M^e可能是个天文数字(比如123456789^65537),但:模运算:我们只需要余数,不需要完整结果
快速幂算法:计算机可以在瞬间算出结果
📝一张表总结RSA三步骤
步骤 谁执行 输入 关键操作 输出 比喻 密钥生成 接收者(小红) 两个秘密质数p,q 计算n, φ(n), 选e, 求d 公钥(e,n), 私钥(d,n) 造锁配钥匙
| 加密 | 发送者(小明) | 明文M, 公钥(e,n) | C = M^e mod n | 密文C | 用公钥锁信 |
| 解密 | 接收者(小红) | 密文C, 私钥(d,n) | M = C^d mod n | 明文M | 用私钥开信 |
💎核心思想一句话
RSA利用“质数相乘容易,乘积分解极难”的数学特性,创建了一对数学关联的密钥:用公开的(e,n)上锁,用私密的(d,n)开锁,实现了安全的秘密传输。