密码学科普小说 · 第 3 章

共享钥匙像共用牙刷

温先生那个问题,让三个人在酒馆里一直聊到了打烊。

Bob 先把这事讲明白:“我们前两天玩的,不管是凯撒、乱序字母表,还是密码棒,有一个共同点:加密用的钥匙和解密用的钥匙是同一把,或者说,知道其中一把就能立刻推出另一把。这种叫‘对称加密’。”

温先生:“那不就跟家里的门锁一样?锁门开门,用的都是同一把钥匙。”

Bob:“对。门锁的问题不在锁,在钥匙。你要让远房表哥能进门,就得先把钥匙送到他手上。”

对称加密的“送钥匙难题” AliceBob 🔑 → → 🔑 👂 锁本身很牢,可钥匙在路上被抄一份,一切白搭
加密算法再强,钥匙在路上被人抄了一份,就前功尽弃。

Alice 把问题说得更直白:“我们要加密,是因为路上不安全。可是要把钥匙安全地送过去,又需要一条安全的路。要是真有一条安全的路,我直接把信从那条路送过去不就完了吗?”

酒馆里安静了几秒。温先生端着碗,半天没喝下去。

“这是个死循环啊。”他说。

“历史上的人是怎么办的呢?”Alice 问 Bob。

Bob 掰着手指头数:“第一,提前见面。两国使臣在边境碰头,当面交换密码本,然后各自带回去。第二,派最信得过的人专程送,比如皇帝的贴身侍卫。第三,一本密码本用很久很久——因为换一次太麻烦了。”

温先生:“第三条听着就要出事。”

Bob:“对,后来真出了大事。我们下一章会看到。”

Alice 又想到一层:“还有个更麻烦的。如果只有我和你两个人,一把钥匙就够了。可要是我们村十个人,人人都想和别人说悄悄话,每两个人之间都要一把单独的钥匙——不然我和你的悄悄话,老王也能看。”

Bob 在桌上用筷子摆:“10 个人,两两配对,是 10×9÷2 = 45 把钥匙。一个县一千人,就是将近五十万把。每一把都得安全送到,每一把丢了都得重新换。”

N 个人两两之间都要一把共享钥匙 10 个人 → 45 把钥匙;1000 个人 → 499500 把。公式:N(N−1)/2
人越多,需要的共享钥匙越多,而且是按平方增长。

📌 课堂小结:对称加密的两大难题

1. 密钥分发:通信双方必须先通过某种安全途径拿到同一把密钥。
2. 密钥数量:N 个人两两保密通信,需要 N(N−1)/2 把密钥。
注意:对称加密本身一点都不弱。今天的 AES-256 速度极快、强度极高,银行、手机、硬盘加密都离不开它。它的麻烦只在“钥匙怎么送、怎么管”。

温先生沉默了很久,最后说了一句很有分量的话:

“共享的钥匙,就像共用的牙刷。人越多,越恶心,也越危险。”

Alice 差点把酒喷出来,Bob 却很认真地把这句话记在了石板上。

那天夜里回到磨坊,Alice 睡不着,问 Bob:“你说,有没有可能有这样一种锁:上锁用的钥匙可以随便发给全世界,但开锁的钥匙只有我自己有?”

Bob 愣了一下:“你是说……挂锁?”

“对!就像挂锁!”Alice 坐了起来,“我做一大堆一模一样的打开着的挂锁,发给全村每个人。谁想给我写悄悄话,就把信放进盒子,咔哒一声用我的挂锁锁上,送过来。路上谁都打不开,因为开锁的钥匙只在我手里。他们甚至不需要和我见过面!”

Bob 盯着她看了好几秒。

“Alice,”他说,“你刚刚用三句话,描述了一个人类在 1976 年才想明白的东西。”

“那它叫什么?”

“非对称加密。公钥就是你的挂锁,私钥就是你兜里那把钥匙。”Bob 躺回去,“不过在那之前,人类还得先吃一场很大很大的亏。”

📌 思考题

1. 用“挂锁”比喻:如果 Bob 也想给 Alice 回信,他需要什么?
2. 你们班 40 人,如果每两人之间都要一个独立的共享密码,一共需要多少个?如果用“每人一把挂锁”的方案呢?