古典密码是密码学的一个类型,大部分加密方式是利用替换密码或者移项密码。在历史上曾被普遍使用,但因其简单特性,到了现代密码时代几乎不可信赖。
1. 线性映射
1.1 凯撒密码
凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后/向前安宅一个固定数目进行偏移后替换成密文。以下是凯撒密码的加密和解密公式,其中 $x$ 为待操作的文本, $n$ 为密钥(即偏移量):
$E_n(x)=(x+n)mod 26$
$D_n(x)=(x-n)mod 26$
因此,即使使用唯密文攻击,凯撒密码也是一种非常容易破解的加密方式。当我们猜测密文中使用了某个简单的替换加密方式,但不确定是否是凯撒密码时,可以使用诸如频率分析或者样式单词分析的方法,从结果中看出规律。
🙋:什么是唯密文攻击?
唯密文攻击(Ciphertext-Only Attack,简称COA)是一种密码分析方法,在这种攻击中,攻击者只能获取到加密后的密文,而没有加密算法的密钥、明文或明文-密文对等辅助信息。攻击者试图仅通过分析密文来推断明文或加密密钥。
下面举一个凯撒密码破译的例子,假设我们收到了这样一串密文 GSV XLWV RH ZOO ZMW GSV ZIV RH YVNV
。
第一步是频率分析:G: 4, S: 4, V: 5, X: 1, L: 1, W: 2, R: 2, H: 1, Z: 3, M: 1, I: 2, Y: 1, N: 1
,观察到:V
是出现频率最高的字母,出现了 5 次。按照经验,英语中最常见的字母是 E
。因此,我们初步猜测 V
可能对应 E
。
第二步是尝试解密偏移量,V
→ E
,则偏移量为 5(V
到 E
向前移动 5),使用偏移量 5 对密文解密:
1 | 密文: GSV XLWV RH ZOO ZMW GSV ZIV RH YVNV |
第三步是分析解密后的单词样式和语言规律,确认推测结果
- XLWV 解密为 QUICK,是一个常见的单词,符合逻辑。
- ZOO 解密为 ALL,也是合理的。
- ZIV 解密为 FOX,常见词语。
- 整句明文符合英语语法和上下文逻辑。
凯撒加密的危险性在于,当我们知道或猜测密文使用了凯撒密码,使用穷举法就能破解偏移量。因为一般使用凯撒加密都是英文,仅有26个英文字母,偏移量最大为25,可以通过穷举的方式轻易破解。
1.2 维吉尼亚密码
维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法。
让我们通过一个例子来了解维吉尼亚密码的加密过程:假设明文为 ATTACKATDAWN
,密钥为 LEMON
。首先循环密钥使之成为密钥流,长度和明文长度相同,即 LEMONLEMONLE
。然后根据每一位密钥对明文进行加密,第一位密钥为 L
是第12个字母,则偏移量为(12-1),对于第一位明文 A
,加密后的密文应为 (A+11)mod 26
,反复操作。
一般破解维吉尼亚密码有一定的套路:寻找密文中相同连续的字符串。下面我们举一个例子:ZICVTWQNGRZGVTWAVZHCQYGLMGJ
这是用维吉尼亚密码加密的密文,但密钥长度和明文未知。
第一步是寻找密文中的重复模式,卡西斯基测试法
:寻找密文中的重复子字符串及其间隔。观察密文,发现以下重复片段:
- VTW 出现两次,第一次在第 3-5 个字母,第二次在第 12-14 个字母。间隔为 9。
- GVT 也出现两次,间隔为 15。
因此,密钥长度可能是这些间隔的最大公约数。间隔为 9 和 15,最大公约数:3,因此推测密钥长度为 3。
第二步是分组分析,根据密钥长度 3,将密文分成 3 组,每组对应密钥的一个字母,每组分别是用密钥的某一字母加密的。
1 | ZICVTWQNGRZGVTWAVZHCQYGLMGJ |
第三步是对每组进行频率分析,假设明文是英语(以 E 为最常见字母),通过频率分析来推测偏移量。
组 1(Z V Q Z V Z G) 统计字母出现频率:Z: 3 次,V: 2 次,其余各 1 次。
假设 Z 对应明文中的 E,偏移量为:Z → E,偏移量 = (Z - E) mod 26 = (25 - 4) mod 26 = 21
组 2(I T N G T H L) 统计字母出现频率:T: 2 次,其余各 1 次。
假设 T 对应明文中的 E,偏移量为:T → E,偏移量 = (T - E) mod 26 = (19 - 4) mod 26 = 15
组 3(C W G R W C M) 统计字母出现频率:W: 2 次,其余各 1 次。
假设 W 对应明文中的 E,偏移量为:W → E,偏移量 = (W - E) mod 26 = (22 - 4) mod 26 = 18
第四步是根据推测的密钥尝试解密,推测密钥为 VPT(对应偏移量 21, 15, 18)。
密文第 1 个字母 Z 对应密钥第 1 个字母 V,解密:(Z - V) mod 26 = (25 - 21) mod 26 = 4 → 明文 E。
逐字母解密,可以得到明文:ENCRYPTEDMESSAGEEXAMPLE
卡西斯基测试法
原理:如果相同的明文片段落在相同的密钥位置上,其加密结果将完全一致。因为维吉尼亚密码的加密方式中,密钥循环使用;而作为明文的英语文法中也多有重复单词,因此有概率会出现相同的明文片段落在相同的密钥位置上的情况。找到多处重复片段的间隔后,取其最大公约数,则可能是密钥的长度。
局限性:
- 密文长度不足:如果密文过短,重复片段可能不足以推测密钥长度。
- 重复片段的偶然性:重复片段可能是明文中重复内容造成的,而非密钥周期引起。
- 频率分析依赖语言特性:密钥长度确定后,解密过程中依赖于目标语言的字母频率分布。
2. 固定替换
2.1 培根密码
培根密码是一种隐写技术,加密时明文中的每个字母都会转换成一组5个字符(二元密码,如 a 或 b)。
假设明文为 HELLO
, 有如下二元表:
字母 | 编码 |
---|---|
A | aaaaa |
B | aaaab |
C | aaaba |
D | aaabb |
E | aabaa |
H | aabbb |
L | ababa |
O | abbab |
则明文可以加密为:aabbbaabaaababababbab
。
但是,如果明文仅由两元密码组成,很容易被猜测出是培根密码。因此可以对密文进行伪装,如伪装成一段有意义的英文句子,长度和密文相同,但是使用大写、小写来区分a
和 b
。
但是对于经验丰富的破译者来说还是小菜一碟~
3. 移位密码
3.1 栅栏密码
栅栏密码是要把加密的明文分成每N个一组,然后把每组的第一个字符连接起来,形成一段无规律字符串。
假设我们要加密明文:HELLO WORLD
第一步,去掉空格,变成 HELLOWORLD
第二步,选择栅栏的行数 $n$(密钥),并改写成 $n$ 行。假设密钥为3,按如下方式排列字符:
- 第一行:从左到右写第 1 个字母,再隔两行写第 4、7、10 个字母,依此类推。
- 第二行:从左到右写第 2、5、8 个字母,依此类推。
- 第三行:从左到右写第 3、6、9 个字母,依此类推
得到:
1 | H O L D |
第四步,逐行读取字符,得到 HOLDELWRLO
。
常见的破解方法就是爆破,枚举栅栏行数从 $2$ 到 $n/2$,按栅栏密码的解密方法重建原文,逐个检查是否有可读的明文。
3.2 曲路密码
曲路密码的密钥是整个表格的列数和曲路路径。下面举一个🌰,假设明文为 DEFEND THE EAST WALL
第一步,去掉空格,得到 DEFENDTHEEASTWALL
第二步,构建网格,设定网格的行数和列数(即密钥的一部分)。假设我们选择 4 行 5 列,将明文按行填入网格(不足使用 X
补齐):
1 | D E F E N |
第三步,选择读取路径。假设选择螺旋顺时针路径,读取顺序如下:
1 | D → E → F → E → N → |
第四步,生成密文。按照路径顺序读取字符,得到:DEFENXXXLASTWATHEDL
破解的思路仍然是爆破,但是由于网格的行列数未知,读取路径变化多样,破译有一定的难度。
但是能够爆破的话,也算是个基础简单的加密了~