现代密码学入门:从凯撒密码到完美加密

以克劳德·香农 1949 年的论文为界,密码学分为两个截然不同的世界。

古典密码学,以替换密码为核心,从 2000 年前的凯撒密码一路走来,至今仍是各类解密游戏中的常客 我们熟悉的摩斯密码,以及许多影视作品中出现的“密语”(如《原神》和《凹凸世界》中的虚构文字),本质上都是替换密码的变体

而现代密码学,一提起它大家就会想到RSA等充满复杂数学运算的算法 (原本古代只是替换掉,就没人能破解了,现如今要从↑,变成↓这种?) 从表面上看,这场革命似乎把密码学大厦的地基整个掀翻重来了 (那… 物理学大厦的两片乌云——“量子力学“和“相对论“都算小修小补?)

不过,现代密码学的地基,是一件非常简单、却被所有人忽略了快 2000 年的事

一、凯撒密码:古典密码的起点

Q:“要真的所有“替换密码”,都像摩斯密码一样,背不下来怎么办“ A:“有一个比较好记的方法,凯撒密码”

什么是凯撒密码?

凯撒密码的基本原理很简单:把每个字母在字母表中向后移动固定的位数。

首先,我们需要一个字母-数字对应表:

字母数字字母数字字母数字
A0J9S18
B1K10T19
C2L11U20
D3M12V21
E4N13W22
F5O14X23
G6P15Y24
H7Q16Z25
I8R17

加密公式:密文数字 = (明文数字 + 偏移量) mod 26

备注: mod 是 “取模运算” 的缩写,你可以把它通俗地理解为 “求余数” 或者 “时钟算术” 就相当于 12 小时制度:现在是上午 6 点,过了 7 个小时之后,则是下午 1 点,是循环

举例来说,ABCD,每个字母向后移动 3 位:

  • A (0) → (0+3)=3 → D
  • B (1) → (1+3)=4 → E
  • C (2) → (2+3)=5 → F
  • D (3) → (3+3)=6 → G

这样,“ABCD”就加密成了”DEFG”

OK,到现在为止,你已经可以在日常使用,加密信息不泄露了

如何破解凯撒密码?

方法一:暴力穷举 由于只有 26 种可能的偏移量,计算机(甚至人工)可以轻松尝试所有可能,从中找出有意义的原文 (反正一共 26 种,只要都尝试一便,可以算出来的) 先加密一遍love,向后都推 5 位,变成qtaj 加密过程:

l (11) → +5 → 16 → q
o (14) → +5 → 19 → t  
v (21) → +5 → 26 → 0 → a
e (4)  → +5 → 9  → j

暴力穷举(节选):

偏移量 0: qtaj
偏移量 1: pszi
偏移量 2: oryh
...
偏移量 5: love  ← 找到
...
偏移量 25: rubk

方法二:频率分析法(更优雅的方法) 在任何语言中,字母的出现频率都有固定规律。英语中,E、T、A出现的频率最高。通过分析密文中字母的频率分布,就能反推出偏移量

二、完美的加密:被忽视 2000 年的真相

一个有趣的发现

当密文很短时,凯撒密码会展现出一个神奇的特性

单词”sleep”和”bunny”经过凯撒加密后,会产生完全相同的 26 种可能密文!也就是说: {“sleep”的所有可能密文} = {“bunny”的所有可能密文}

具体来看:

  • 偏移 3 时:“sleep” → “vohhs”;“bunny” → “exqqb”(不同)
  • 偏移 20 时:“sleep” → “hyyzk”;“bunny” → “vohhs”(相同!)

攻击者的困境:如果你截获了密文”vohhs”,即使尝试所有 26 种密钥,你会发现:

  • 用密钥 3 解密得到”sleep”
  • 用密钥 20 解密得到”bunny”

你没有任何方法判断哪个才是真正的原文

(当然,密钥很长的话,就能根据上下文推理得出了…) 完美加密的兔子(bunny=小兔子,sleep=睡觉)

现代密码学的核心思想

完美加密不依赖密文没有规律,而依赖于不同的明文产生的密文无法区分。

只要攻击者无法从密文中找到任何可以用来区分不同明文的”痕迹”,加密就是绝对安全的 这就是被忽视了近 2000 年的密码学真谛

三、实战演练

场景一:单次密码簿的完美加密

如果我想要绝对安全地发送”I LOVE YOU”,可以使用单次密码簿方案:对每个字母独立使用凯撒密码,密钥与明文等长

我选择密钥:20090705

加密过程:

明文ILOVEYOU
明文数字81114214241420
密钥数字20090705
密文数字1011144451425
密文KLOEEFOZ

“I LOVE YOU” → “KLOEEFOZ”

不知道密钥的人,即使拿到密文也绝对无法破解 这就是完美加密

但缺点也很明显,对方必须要知道密钥,但如果传递的话… 为什么不直接把明文告知对方,已经交到手上了 传递是可以被截获的 (但表白这种是… 比较隐晦,确实可以加密一下)

场景二:频率分析法破解浪漫表白

假设你收到一段密文:

QSZZI EZ OZME ZQZM XZPCDMZOD RCDMZOD JT YZJP XZPCDMZOD

步骤 1:统计频率 发现字母Z出现的频率高达 23.1%,远高于其他字母。

步骤 2:匹配猜测 英语中最常见的字母是E,猜测Z对应E,推算偏移量为 21。

步骤 3:尝试解密 用偏移量 21 解密,得到混乱的结果,说明猜测错误。

步骤 4:系统尝试 通过程序尝试所有 26 种偏移量,发现偏移量为 14 时得到有意义的英文:

“LOVING YOU IS THE MOST BEAUTIFUL THING I HAVE EVER EXPERIENCED IN MY LIFE”

浪漫的表白就这样被破解了

四、从完美到实用:现代密码学的演进

单次密码簿的困境:完美的,但也是无用的?

这是一个真实的历史故事,记载于古希腊历史学家希罗多德的《历史》中

  • 主角:米利都的僭主希斯塔泰乌斯 公元前 5 世纪,希斯塔泰乌斯被波斯国王大流士软禁在苏萨城,他想秘密送信给他在米利都的女婿阿里斯塔格拉斯,怂恿他发动叛乱 但是,如何让信使穿过重重关卡,而不被波斯守卫发现密信?
  • 妙计:
    1. 他找来了一个最信任的奴隶
    2. 将奴隶的头发全部剃光
    3. 用墨水将消息直接纹在奴隶的头皮上
    4. 等待奴隶的头发重新长出来,完全覆盖了头皮上的信息
  • 在送信的时候,这个“长了头发”的信使就这样安然无恙地穿过了所有检查,顺利抵达米利都
  • 见到阿里斯塔格拉斯后,奴隶再次剃光头发,头皮上的密信便重现天日 这个故事的本质,它解决的并非“加密”,而是“隐写”——即隐藏信息本身的存在。它用一种戏剧性的方式,揭示了密码学中一个比加密本身更根本的挑战:如何安全地将密钥(或信息)传递给对方?

单次密码簿的困境

虽然单次密码簿绝对安全,但有个致命缺陷:密钥长度必须等于明文长度。如果你能安全地把密钥送出去,为什么不直接把消息送出去呢?

(如果是用于表白,对方知道凯撒密码,且知道密钥是她生日… 这也有些难度,安全性虽不完美,但情趣满分)

这就造成了”能用的加密方案不安全,安全的加密方案不能用”的尴尬局面

“如果你想用‘单次密码簿’绝对安全地加密一本《战争与和平》,你就需要一本同样厚的密码本。你怎么把这本密码本送给盟友呢?难道要像希斯塔泰乌斯那样,找一群人来剃光头,把密码本纹在他们头上,等几年后头发长出来再派过去吗?”

公钥加密的智慧妥协

现代密码学找到了一条中间道路:单向函数

这种函数的特点是:正向计算容易,反向推倒极其困难。RSA算法就是基于这个原理

公钥加密方案:

  • 公钥:公开的单向函数,任何人都可以用来加密
  • 私钥:只有接收者掌握的”暗门”,用来解密
  • 安全性建立在当前算力无法在合理时间内破解的基础上

两种加密的哲学对比

  • 私钥加密:安全性建立在密钥的随机性上,理论上绝对安全
  • 公钥加密:安全性建立在人类当前算力局限上,理论上可破解,实际上不可行

五、密码学的星辰大海

现代密码学远不止加密解密,还包括:

  • 伪随机数:如何生成真正的随机
  • 零知识证明:如何证明你知道秘密,却不泄露任何信息
  • 哈希函数:数据的数字指纹

所有这些技术都有一个共同的核心:在达成目标的同时,不泄露任何额外信息