📄 一句话概括
共享密钥先得把钥匙送到对方手里,这是个死结——公开密钥把钥匙拆成一对:公钥人人可拿只管上锁,私钥只有本人有才能开锁。
📝 本节和前面几节的关系
密钥越长越安全,但还有更根本的难题:第一把密钥怎么安全送到对方手里?本节看上世纪七十年代最漂亮的答案。
一、共享密钥的死结
对称加密(凯撒、AES)加解密用同一把钥匙——双方必须先共享它; 互联网上素不相识,把密钥明文发过去等于当众交钥匙——被截获全线崩盘; 为了传数据加密、又得先安全地传密钥——鸡生蛋蛋生鸡,这就是密钥分发问题。
二、公钥与私钥的分工
公开密钥加密把钥匙拆成一对:公钥(挂在门口谁都能拿)与私钥(只有本人持有); 公钥加密的密文,只有配对的私钥能解开——发件人拿对方的公钥上锁,收件人用自己的私钥开锁; 密钥分发问题就此消失:公钥随便发、被截获也无所谓——它只能上锁不能开锁。
三、数学魔法:从公钥推不出私钥
代表算法 RSA 的地基是一道数学难题:把两个大素数相乘很容易,把乘积拆回两个素数极难; 公钥里带着乘积 n,私钥的机关藏在两个素数里——想从公钥倒推私钥就得拆 n; 数字一大(如今常用 2048 位)拆解耗时天文数字——【容易的正向、不可能的逆向】正是安全的来源; 【⚠️ 2026 现状】HTTPS 握手用这类算法送出对称密钥,之后大数据改走高速的 AES——两种方式是搭档不是对手。
四、动手 Demo:玩具版 RSA:公钥上锁、私钥开锁
用小数字演示 RSA 的骨架:公钥 (33, 3) 加密、私钥 (33, 7) 解密,往返走一遍。
n, e, d = 33, 3, 7
m = 5
c = pow(m, e, n)
print("密文:", c)
m2 = pow(c, d, n)
print("明文:", m2)
实跑输出:
--------------------------------------------------------------------
适用于互联网的公开密钥加密技术
--------------------------------------------------------------------
共享密钥的老大难: 密钥怎么安全地送到对方手里? 公开密钥加密用一个
漂亮的数学机关解决——钥匙拆成一对, 一把上锁(公钥), 一把开锁(私钥):
[玩具版 RSA 演算]
公钥 = (n=33, e=3), 挂在门口谁都能拿
私钥 = (n=33, d=7), 只有收件人有
发件人加密: 明文 5 -> 5^3 mod 33 = 26
收件人解密: 密文 26 -> 26^7 mod 33 = 5 <- 明文回来了
钥匙 给谁 能干什么
---------------------------------------
公钥 所有人 只能上锁(加密)
私钥 收件人自己 能开锁(解密)
密钥分发问题就此消失: 公钥随便发, 被截获也无所谓——
它只能加密不能解密。从公钥倒推出私钥, 要把 n 拆回两个素数,
数字一大就实际不可行——难倒的正是这一步。
【⚠️ 2026 现状】HTTPS 握手就是用 RSA(或更新的椭圆曲线)送出对称
密钥, 之后大数据改用高速的共享密钥加密——两种方式搭档干活。
5 的 3 次方对 33 取余得 26;26 的 7 次方对 33 取余回到 5——乘方取余一来一回完璧归赵。 真实 RSA 用几百位的大数,玩具数字只为看清【公钥加密、私钥解密】的结构。
30 秒实验
- 用【挂在门口的锁】比喻向别人解释:为什么公钥被看见也不要紧。
- 把共享密钥与公开密钥各用一句话概括,并说明 HTTPS 为什么两个都用。
常见误区
- 以为公钥加密后私钥也能加密同一份明文——加密上锁只用公钥,私钥负责开。
- 以为公开密钥比共享密钥更快更好——它慢得多,实战只用来送对称密钥,大数据仍走 AES。
自测三问(点开对答案)
1. 密钥分发问题是什么? —— 对称加密的密钥无法安全送到素未谋面的对方手里。 2. 公钥私钥各给谁、各干什么? —— 公钥人人可拿、只能加密;私钥本人持有、用来解密。 3. RSA 的安全地基? —— 大数拆回两个素数极难——正向易、逆向难。- ☐ 下一节(10.5 数字签名可以证明数据的发送者是谁)
相关笔记
- 解决密钥分发问题的密码 — 死结与解法的完整故事
- 🕸️ Web技术原理 · 索引 — HTTPS 握手在浏览器侧的应用
- 💻 计算机是怎样跑起来的 · 索引