古典密码是密码学的一个类型,大部分加密方式是利用替换密码或者移项密码。在历史上曾被普遍使用,但因其简单特性,到了现代密码时代几乎不可信赖。

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

第二步是尝试解密偏移量,VE,则偏移量为 5(VE向前移动 5),使用偏移量 5 对密文解密:

1
2
密文:    GSV XLWV RH ZOO ZMW GSV ZIV RH YVNV
偏移 -5: THE QUICK IS ALL AND THE FOX IS DEAD

第三步是分析解密后的单词样式和语言规律,确认推测结果

  • XLWV 解密为 QUICK,是一个常见的单词,符合逻辑。
  • ZOO 解密为 ALL,也是合理的。
  • ZIV 解密为 FOX,常见词语。
  • 整句明文符合英语语法和上下文逻辑。

凯撒加密的危险性在于,当我们知道或猜测密文使用了凯撒密码,使用穷举法就能破解偏移量。因为一般使用凯撒加密都是英文,仅有26个英文字母,偏移量最大为25,可以通过穷举的方式轻易破解。

1.2 维吉尼亚密码

维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法。

让我们通过一个例子来了解维吉尼亚密码的加密过程:假设明文为 ATTACKATDAWN,密钥为 LEMON。首先循环密钥使之成为密钥流,长度和明文长度相同,即 LEMONLEMONLE。然后根据每一位密钥对明文进行加密,第一位密钥为 L 是第12个字母,则偏移量为(12-1),对于第一位明文 A ,加密后的密文应为 (A+11)mod 26,反复操作。

一般破解维吉尼亚密码有一定的套路:寻找密文中相同连续的字符串。下面我们举一个例子:ZICVTWQNGRZGVTWAVZHCQYGLMGJ 这是用维吉尼亚密码加密的密文,但密钥长度和明文未知。

第一步是寻找密文中的重复模式,卡西斯基测试法:寻找密文中的重复子字符串及其间隔。观察密文,发现以下重复片段:

  1. VTW 出现两次,第一次在第 3-5 个字母,第二次在第 12-14 个字母。间隔为 9。
  2. GVT 也出现两次,间隔为 15。

因此,密钥长度可能是这些间隔的最大公约数。间隔为 9 和 15,最大公约数:3,因此推测密钥长度为 3。

第二步是分组分析,根据密钥长度 3,将密文分成 3 组,每组对应密钥的一个字母,每组分别是用密钥的某一字母加密的。

1
2
3
4
ZICVTWQNGRZGVTWAVZHCQYGLMGJ
组 1: Z V Q Z V Z G
组 2: I T N G T H L
组 3: C W G R W C M

第三步是对每组进行频率分析,假设明文是英语(以 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

卡西斯基测试法原理:如果相同的明文片段落在相同的密钥位置上,其加密结果将完全一致。

因为维吉尼亚密码的加密方式中,密钥循环使用;而作为明文的英语文法中也多有重复单词,因此有概率会出现相同的明文片段落在相同的密钥位置上的情况。找到多处重复片段的间隔后,取其最大公约数,则可能是密钥的长度。

局限性:

  1. 密文长度不足:如果密文过短,重复片段可能不足以推测密钥长度。
  2. 重复片段的偶然性:重复片段可能是明文中重复内容造成的,而非密钥周期引起。
  3. 频率分析依赖语言特性:密钥长度确定后,解密过程中依赖于目标语言的字母频率分布。

2. 固定替换

2.1 培根密码

培根密码是一种隐写技术,加密时明文中的每个字母都会转换成一组5个字符(二元密码,如 a 或 b)。

假设明文为 HELLO, 有如下二元表:

字母 编码
A aaaaa
B aaaab
C aaaba
D aaabb
E aabaa
H aabbb
L ababa
O abbab

则明文可以加密为:aabbbaabaaababababbab

但是,如果明文仅由两元密码组成,很容易被猜测出是培根密码。因此可以对密文进行伪装,如伪装成一段有意义的英文句子,长度和密文相同,但是使用大写、小写来区分ab

但是对于经验丰富的破译者来说还是小菜一碟~

3. 移位密码

3.1 栅栏密码

栅栏密码是要把加密的明文分成每N个一组,然后把每组的第一个字符连接起来,形成一段无规律字符串。

假设我们要加密明文:HELLO WORLD

第一步,去掉空格,变成 HELLOWORLD

第二步,选择栅栏的行数 $n$(密钥),并改写成 $n$ 行。假设密钥为3,按如下方式排列字符:

  • 第一行:从左到右写第 1 个字母,再隔两行写第 4、7、10 个字母,依此类推。
  • 第二行:从左到右写第 2、5、8 个字母,依此类推。
  • 第三行:从左到右写第 3、6、9 个字母,依此类推

得到:

1
2
3
H  O  L  D
E L W R
L O

第四步,逐行读取字符,得到 HOLDELWRLO

常见的破解方法就是爆破,枚举栅栏行数从 $2$ 到 $n/2$,按栅栏密码的解密方法重建原文,逐个检查是否有可读的明文。

3.2 曲路密码

曲路密码的密钥是整个表格的列数和曲路路径。下面举一个🌰,假设明文为 DEFEND THE EAST WALL

第一步,去掉空格,得到 DEFENDTHEEASTWALL

第二步,构建网格,设定网格的行数和列数(即密钥的一部分)。假设我们选择 4 行 5 列,将明文按行填入网格(不足使用 X 补齐):

1
2
3
4
D  E  F  E  N
D T H E E
A S T W A
L L X X X

第三步,选择读取路径。假设选择螺旋顺时针路径,读取顺序如下:

1
2
3
4
D → E → F → E → N →
E → X → X → X → L →
A → S → T → W → A →
E → T → H → D → L

第四步,生成密文。按照路径顺序读取字符,得到:DEFENXXXLASTWATHEDL

破解的思路仍然是爆破,但是由于网格的行列数未知,读取路径变化多样,破译有一定的难度。

但是能够爆破的话,也算是个基础简单的加密了~