
人们已经用“明处藏密”的方式隐藏信息两千多年了。最早的技巧是通过固定规则将每个字母替换为另一个字母。这些方法很有趣,是学习密码学的绝佳起点,但任何一个都挡不住拿着铅笔的耐心攻击者。本指南将介绍五种经典密码的工作原理,以及为什么它们现在都无法保护你。
明文、密文与密钥
原始消息称为明文。打乱后的版本称为密文。密码是将明文转换为密文的规则,而密钥则是决定具体使用哪种打乱方式的秘密细节。
一个源自19世纪的良好习惯是:假设敌人知道密码的方法,只有密钥是秘密的。以下所有内容都应以此为标准来评判:如果某人知道你的做法但不知道你的密钥,他们还能读懂你的消息吗?
凯撒移位:滑动字母表
凯撒移位将每个字母向前移动固定的位数。如果使用3位移位,A写作D,B写作E,而Z则循环回到C。罗马作家苏埃托尼乌斯记载,尤利乌斯·凯撒曾在军事信件中使用此方法。
移位的位数就是密钥。任何知道它的人都可以反向移位。问题在于密钥数量极少:只有25种有效的移位。攻击者只需尝试所有可能,这种暴力破解手动只需一分钟,在计算机上则瞬间完成。
ROT13
ROT13将凯撒移位固定为13位。由于字母表有26个字母,两次13位移位就会回到起点。加密和解密是相同的操作。论坛用它来隐藏剧透,因为它能阻挡随意的一瞥,而不是因为它能保护任何内容。
Atbash:镜像字母表
Atbash将字母表倒序写在下方,因此A与Z配对,B与Y配对,C与X配对,依此类推。它源自希伯来字母表,出现在一些古代文本中。
与ROT13一样,它完全没有密钥,且可以自我还原:镜像的镜像就是原样。这使它更像是一个谜题,而非一把锁。一旦有人认出这种模式,所有用此方法写过的消息都将公开。
仿射密码:先乘后移
给每个字母分配一个数字,A = 0 到 Z = 25。仿射密码取该数字,乘以 a,加上 b,并在26处取模循环:
E(x) = (a·x + b) mod 26
设置 a = 1,你就回到了普通的凯撒移位。乘法会将相邻字母拉开距离,看起来更加混乱。
这里有个陷阱。为了能够解密,每个密文字母必须恰好对应一个明文字母。这只有在 a 与26互质(没有公因数)时才会发生。因此 a = 3 和 a = 5 有效,但 a = 2 或 a = 13 无效,因为它们会将两个不同的字母映射到同一个位置。只有12个 a 的值是允许的,加上26个 b 的值,总共只有312个密钥。这比25个好,但对于计算机来说仍然微不足道。
关键词替换:任意洗牌
为什么要按规则移动每个字母?替换密码允许密钥是任意打乱的字母表。为了让打乱后的顺序容易记住,先写一个关键词,去掉重复的字母,然后按顺序补上未使用的字母。关键词 ZEBRAS 生成的密钥字母表是 ZEBRASCDFGHIJKLMNOPQTUVWXY,因此 A 变成 Z,B 变成 E,C 变成 B,依此类推。
可能的打乱方式有 26 的阶乘,约为 4 × 10²⁶。尝试所有组合是不可能的,因此替换密码在几个世纪里被认为无法破解。但事实并非如此。
为什么这些方法在今天都不安全
替换密码有一个致命弱点:一个字母总是变成同一个字母。因此语言的结构得以保留。在英语中,E 出现频率最高,其次是 T、A 和 O,而 Q 和 Z 很少见。伊斯兰世界的学者在 9 世纪左右描述了频率分析:统计密文中的字母,将最常见的对应为 E,并利用单词模式(单字母单词很可能是 A 或 I)来推断其余部分。
消息越长,统计数据越准确,因此即使密钥空间巨大也无济于事。现代密码的设计使得密文中不出现此类模式,其安全性依赖于大到无法猜测的密钥。对于任何实际应用,请使用经过充分测试的现代工具,切勿自创方案。
如何在实验室中探索
密码与密码学实验室为你提供了一个可旋转的密码轮,以及用于统计字母和测试猜测的工具。以下是免费第一世界的推荐学习顺序:
这是历史密码的简化教学模型。它旨在帮助你建立对密钥和攻击方式的直觉,而不是用于保护真实信息。
- 密钥决定打乱方式;假设攻击者知道加密方法。
- 凯撒密码只有 25 个有效密钥,而 ROT13 和 Atbash 没有秘密密钥。
- 仿射密码的乘数必须与 26 互质,因此只有 12 个有效值。
- 关键词替换拥有巨大的密钥空间,但会被字母频率分析破解。
凯撒移位
每个字母移动相同的距离. 大约需要 6 分钟。 免费、无需账号,直接在浏览器中运行。
本指南中的更多免费课程
Novareka 上的模拟都是教学模型,经过了有意简化。它们用于展示某个概念的运行方式,不能替代专业、医疗或工程建议。




