《图解密码技术 (密码)》第二章 —— 历史上的密码


一、本章的学习内容概要

首先将会介绍历史上几种著名的 密码

  • 恺撒密码;
  • 简单替换密码;
  • Enigma。

此外,还将介绍两种 破译密码的方法,即 合法接收者以外的人 试图由 密文还原出明文 的方法:

  • 暴力攻击;
  • 频率分析。

在本章最后我们还将思考密码算法与密钥之间的关系。

 本章所介绍的密码在现代都已经不再使用了,但在 寻找密码弱点的方法、破译密码的思路、密码算法与密钥的关系 等方面,这些密码与现代的密码技术依然是相通的。


二、恺撒密码 (最简单的密码)

1、什么是恺撒密码

 恺撒密码是通过将 明文 中所使用的 字母表 按照一定的字数 “平移” 来进行加密的。在日语 (例如平假名) 或者 汉语 (例如汉语拼音) 中也可以用同样的思路来实现恺撒密码,但为了简化内容,在这里我们只使用英文字母。

 这里用 小写字母 表示 明文大写字母 表示 密文

在这里插入图片描述

2、凯撒密码的加密

 恺撒密码中,将字母表中的字母平移这个操作就是 密码算法,而平移的字母数量则相当于 密钥。在上面的例子中,密钥为 3 (图2-2)。

在这里插入图片描述

3、凯撒密码的解密

 恺撒密码的 解密过程 是使用 与加密时相同的 密钥 进行 反向的平移操作。用刚才的例子来说,只要 反向平移 3 个字母 就可以解密了。
 在这个场景中,密钥3 必须由 发送者和接收者 事先约定好

4、用暴力破解来破译密码

 凯撒密码十分脆弱,只需要暴力地将 密钥 从0到25不断尝试,将其中能解密出有意义字符串的 密钥 找出来即可。
 上面介绍的这种密码破译方法,就是将所有可能的密钥 全部尝试一遍,这种方法称为 暴力破解 (brute-force attack)。由于这种方法的本质是从所有的密钥中找出正确的密钥,因此又称为 穷举搜索 (exhaustive search)


三、简单替换密码

1、什么是简单替换密码

 如果我们将字母表中的 26 个字母,分别与这 26 个字母本身建立 一对一的对应关系,那么无论哪一种对应关系就都可以作为密码来使用。这种将 明文 中所使用的字母表替换为 另一套宇母表 的密码称为 简单替换密码 (simple substitution cipher)
 恺撒密码也可以说是简单替换密码的一种。

在这里插入图片描述

2、简单替换密码的加密

 简单替换密码的加密过程是依次将明文中的每一个字母按照 替换表 替换成另一个字母。

3、简单替换密码的解密

 只要使用加密时所使用的替换表进行反向替换,就可以对简单替换密码进行解密了。
 由于在简单替换密码的解密中,需要用到 加密时所使用的替换表,因此发送者和接收者必须 事先同时拥有 该替换表,而这份 替换表 也就相当于简单替换密码的 密钥

4、简单替换密码的密钥空间

 一种密码能够使用的 “所有密钥的集合” 称为 密钥空间 (keyspace)所有可用密钥的总数 就是 密钥空间的大小密钥空间越大,暴力破解就越困难
 显然,凯撒密码的暴力破解很简单,但简单替换密码的暴力破解就困难多了。可以计算出,凯撒密码 的密钥空间大小为 26简单替换密码 的密钥空间大小为:
26 × 25 × 24 × 23... × 1 = 403291461126605635584000000 26\times25\times24\times23...\times1=403291461126605635584000000 26×25×24×23...×1=403291461126605635584000000

5、用频率分析来破译密码

 虽然用 暴力破解 很难破译 简单替换密码,但使用被称为 频率分析 的密码破译方法,就能够破译简单替换密码。
 频率分析利用了 明文中的字母的出现频率与密文中的字母的出现频率一致 这一特性。接下来破译一段密码。

 假设你得到了下面一段 密文,已知明文是用 英语 写的,并且是通过 简单替换密码 进行的加密,但是你不知道作为密钥的替换表。下面就让我们来破译这段密文 (本质就是找到 替换表)。

在这里插入图片描述
 首先,我们来统计一下这段密文中 每个字母出现的频率。也就是说,我们要数一下每个字母各出现了多少次。结果如 表2-1 所示。

在这里插入图片描述
 为了找到破泽的线索,我们再来看一看 英语文章 中所使用的字母的频率。例如,将爱伦 •坡的《金甲虫》中出现的英文字母按照出现频率排序的结果是:e, t, a, o, i, n, s, h, r, d, 1, u, c, m, f, w, g, y, p, b, v, k, j, q, z。这个顺序根据所统计的文章的不同会有所变化,但 一般的英语文章中出现频率最高的字母是 e,这一点基本上是不会错的
 表2-1 中出现频率最高的两个字母是 I 和 Y,我们假设它们中的其中一个是 e。当假设 Y → s Y \rightarrow s Ys 时,我们将密文中的 Y 全部替换成 e,替换后的密文如下。

在这里插入图片描述
 英语中 出现最多的单同是 the,因此我们可以寻找一下以 e 结尾的 3 个字母的组合,结果我们发现 MEe 这 3 个字母的组合是最常出现的,而且 MEe 出现在密文的开头,因此 MEe 很有可能就是 the。于是,我们再假设 M → t , E → h M \rightarrow t,E \rightarrow h MtEh

在这里插入图片描述
 让我们动员自己所有的英语词汇,在上面的文字中继续寻找可能的组合。我们发现中间有一个词 thPee 比较可疑,这个词不会就是 three 吧,也就是说 P → r P \rightarrow r Pr

在这里插入图片描述
 通观上面的文字,我们可以发现很多类似 he、re、re、ter 这样的很像是英语的拼写,通过这些碎片信息,我们可以断定 P → r P \rightarrow r Pr 的对应关系应该是正确的。
 接下来我们来看密文的末尾,末尾出现的单词 Oet 到底是 bet、get、let、set … 这些组合中的哪一种呢?我们先假设它是最常见的单词 get,即 O → g O \rightarrow g Og
 下面我们逐一列出所找到的组合以及假设的对应关系。
 “thethDWg” 这个组合,有可能是 “the thing”,即 D → i , W → n D \rightarrow i,W \rightarrow n DiWn
 “grINe” 这个组合,翻一下字典可以找到很多可能的单词,如 grace、grade、grape、grate、grave、gripe、grofe … 这可有点为难。
 我们先假设 I → a I \rightarrow a Ia,然后我们可以找到 “greater” 这样的组合,因此 I → a I \rightarrow a Ia 应该是正确的。但如果假设 N → c N \rightarrow c Nc,则会出现 “tricening” 这样的组合,这个单词怎么看也不像是英语,看来 N → c N \rightarrow c Nc 是错误的。
 英语中出现频率较高的字母中,只有 o 还没有出现在我们的假设中。相对地,密文中出现频率较高的字母中,还没有找到对应关系的有 G 和 Z。我们先假设 G → o G \rightarrow o Go
 使用上面所有的假设重新替换一下密文。

在这里插入图片描述
 这回在末尾出现了“Cannotget” 这样的组合,那么 C → c C \rightarrow c Cc 应该是没错了。既然 C → c C \rightarrow c Cc,那么也可以说明刚才我们的假设 N → c N \rightarrow c Nc 就是错误的了。
 “Shich” 这个组合,大概就是 “which” 吧,即 S → w S \rightarrow w Sw

 除了高频字母以外,密文中的低频字母 Q 也可以找到一些相关的组合。例如 “thethingtoQRench” 这个组合,应该是 “the thing to QRench”。查字典发现有 “quench” 这样一个单词,即 Q → q , R → u Q \rightarrow q,R \rightarrow u QqRu。quench 是 “解渴” 的意思,大概文章讲的是关于喝水的话题吧。
 接下来会发现 “hotZuUUer” 这个组合,大概是 “hot summer” 吧,即 Z → s , U → m Z \rightarrow s,U \rightarrow m ZsUm。U 连续出现了两次,这是一个关键性的线索,而且和 “解渴” 的上下文也比较符合。
 ”successagainanAagain“ 很明显应该是 ”success again and again“,即 A → d A \rightarrow d Ad
 “triedaLter” 应该是 “tried after”,即 L → f L \rightarrow f Lf
 ”whatXoucannotget“ 应该是 ”what you cannot get”,即 X → y X \rightarrow y Xy
 “thefoVandthegraNesonehotsummersday” 应该是 “the fox and the grapes one hot summers day”,即 V → x , N → p V \rightarrow x,N \rightarrow p VxNp
 用上面的假设重新替换密文后,我们发现小写字母的比例大幅增加,这说明我们已经基本上完成了破译工作。

在这里插入图片描述
 接下来我们再将密文中的大写字母拿出来,可以很容易地分析得到:

在这里插入图片描述
 至此,我们就全部破译完成了。密钥,即替换表,为:在这里插入图片描述
&从上面的破译过程可以得到一些结论:

  1. 除了高频字母以外,低频字母也能够成为线索;
  2. 搞清开头和结尾能够成为线索,搞清单词之间的分隔也能够成为线索;
  3. 密文越长越容易破译;
  4. 同一个字母连续出现能够成为线索,这是因为在简单替换密码中,某个字母在替换表中所对应的另一个字母是固定的;
  5. 破译的速度会越来越快。

四、Enigma

1、什么是 Enigma

 第二次世界大战中德国使用了一种名为 “Enigma” 的密码机。这是谢尔比乌斯使用能够转动的圆盘和电路,创造的一种人类手工无法实现高强度密码机器。
 Enigma 是一种由 键盘、齿轮、电池、灯泡所组成的机器,通过这一台机器就可以完成 加密和解密 两种操作。

2、用 Enigma 进行加密通信

 加密和解密都是通过 Enigma 完成的,这就要求 发送者 和 接收者 各自拥有一台 Enigma。
 由于发送者和接收者必须拥有 相同的密钥 才能进行通信,即 Enigma 是一种 对称密码。所以发送者和接收者会事先收到一份叫作 国防军密码本 的册子。国防军密码本中记载了发送者和接收者所使用的 每日密码发送者和接收者需要分别 按照册子的指示 来设置 Enigma。用 Enigma 进行加密通信的过程如 图2-5 所示。

在这里插入图片描述

3、Enigma 的构造

 Enigma 的构造如 图2-6 所示。由于 Enigma 的结构过于复杂,这里只对 4 个字母进行加密解密。

在这里插入图片描述
 对于发送者,只要按下一个键 (明文), Enigma 便会在输出端亮一个灯 (密文)。对于接收者,只要将上面的过程反过来就好了,即 只要将键和灯泡的读法互换一下

接线板,plugboard,是一种通过改变接线方式来改变字母对应关系的部件。接线板上的接线方式是根据 国防军密码本每日密码 来决定的,在一天之中不会改变

转子 是一个圆盘状的装置,其两侧的接触点之间通过电线相连。尽管 每个转子内部的接线方式无法改变的,但转子可以在每输入一个字母时自动旋转。当输入一个字母时,转子1 就旋转 1/4圈 (字母表中有多少个字母,便旋转 多少分之一圈)。转子1 每旋转 1圈,转子2 就旋转 1/4圈,而 转子2 每旋转 1圈,转子3 就旋转 1/4圈。这 3 个转子都是可以拆卸的,在对Enigma 进行设置时可以选择 转子的顺序 以及它们的 初始位置

在这里插入图片描述

4、Enigma 的加密

 下面我们来详细讲解一下 Enigma 的加密步骤。图2-8 展示了发送者将一个包含 5 个字母的
德语单词 ”nacht“ (夜晚) 进行加密并发送的过程。

在这里插入图片描述
 基本过程如下:

  1. 设置 Enigma
     发送者查阅国防军密码本,找到当天的每日密码:在接线板上接线、3 个转子的排列、每个转子的旋转位置
  2. 加密通信密码
     接下来,发送者需要想出 3 个字母,并将其加密。这 3 个字母称为 通信密码
    通信密码的加密 也是通过 Enigma 完成的。假设发送者选择的通信密码为 psv,则发送者需要在 Enigma 的键盘上 输入两次 该通信密码,也就是说需要输入 psvpsv 这 6 个字母。
     发送者每输人一个字母,转子就会旋转,同时灯泡亮起,发送者记下亮起的灯泡所对应的字母。输人全部 6 个字母之后,发送者就记下了它们所对应的密文,在这里我们假设密文是 ATCDVT (密文用大写字母来表示)。
  3. 重新设置 Enigma
     接下来,发送者 根据通信密码 重新设置 Enigma。
     通信密码中的 3 个字母实际上代表了 3 个转子的初始位置。每一个转子的上面都印有字母,可以根据字母来设置转子的初始位置。
    通信密码 psv 就表示需要将转子 1 、2、3 分别转 到p、s、v 所对应的位置
  4. 加密消息
     接下来,发送者对消息进行加密。
     发送者将消息 (明文) 逐字从键盘输人,然后从灯泡中读取所对应的字母并记录下来。这里是输入 ”naCht“ 5个字母,并记录下所对应的 5个字母,如 ”KXNWP“。
  5. 拼接
     接下来,发送者将 加密后的通信密码 ”ATCDVT“加密后的消息 ”KXNWP“ 进行拼接,将 ”ATCDVTKXNWP“ 作为电文通过无线电发送出去。

5、每日密码与通信密码

 在 Enigma 中出现了 “每日密码” 和 “通信密码” 这两种不同的密钥。
每日密码 不是用来加密消息的,而是用来 加密通信密码 的。也就是说,每日密码是一种 用来加密密钥的密钥。这样的密钥,一般称为 密钥加密密钥 (Key Encrypting Key, KEK)。KEK 在现代依然很常用,在 第6章 混合密码系统 中也会出现这一概念。
 之所以要采用两重加密,即用通信密码来加密消息,用每日密码来加密通信密码,是因为 用同一个密钥所加密的密文越多,破译的线索也会越多,被破译的危险性也会相应增加

6、避免通信错误

 在通信密码的加密中,我们需要将 通信密码 PSV 连续输入两次,即 psvpsv。这是因为在使用 Enigma 的时代,无线电的质量很差,可能会发生通信错误。如果通信密码没有被正确传送,接收者也就无法解密通信内容。
 而通过连续输入两次通信密码 ”psvpsv“,接收者就可以对通信密码进行校验,也就是检查一下解密后得到的通信密码是不是 3 个字母重复两次这样的形式。

7、Enigma 的解密

在这里插入图片描述
 基本过程如下:

  1. 分解
     接收者将收到的电报分为两个部分,即 开头的6个字母其他的字母
  2. 设置 Enigma
     接收者查阅 国防军密码本中的每日密码,按照该密码设置 Enigma,这一步和发送者进行的操作是相同的,其中包括:接线板的接线方式、3个转子的顺序、每个转子的旋转位置。
  3. 解密通信密码
     接下来,接收者 将加密后的通信密码 ATCDVT 进行解密。接收者在Enigma 的键盘上输人 ATCDVT 这 6个字母,然后将亮起的灯泡对应的字母 psvpsv 记下来 (注意!想要这一步成功,必须将发送者和接收者手中的 Enigma 中的转子进行相同的初始化)。因为 psvpsv 是 psv 重复两次的形式,所以接收者可以判断在通信过程中没有发生错误。
  4. 重新设置 Enigma
     根据接收者收到的通信密码,重新设置 Enigma 的转子。
  5. 解密信息
     接收者将 电文的剩余部分 逐一用键盘输人,然后从灯泡读取结果并记下来,于是便得到了 明文

8、Enigma 的弱点

  1. 加密通信密码时,实际上只有 转子1 会旋转:这就是 Enigma 的弱点之一;
  2. 将通信密码连续输入两次:这会导致攻击者一定会知道,密文的头六个字母被解密后一定是三个字母重复两次的形式;
  3. 通信密码是人为选定的:密码系统中使用的密钥不能是人为选定的,而应该使用无法预测的 随机数 来生成。关于随机数,我们将在 第12章 详细探讨;
  4. 必须派发国防军密码本:如果没有国防军密码本,就无法使用 Enigma 进行通信,但如果国防军密码本落到敌人手里,就会带来大麻烦。

“必须配送密钥” 这个问题,在广泛使用计算机进行的现代密码通信中也是非常重要的。关于这个话题,我们将在 第5章密钥配送问题 中详细探讨。

9、Enigma 的破译

 首先,法国和英国的密码破译者通过间谍活动得到了德军使用的 Enigma 的构造。然而,即便知道了 Enigma 的构造,也还是无法破解 Enigma 的密码,这是因为 Enigma 的设计并不依赖于 "隐蔽式安全性” (security by obscurity)。即使密码破译者得到了 Enigma 密码机 (相当于密码算法),只要不知道 Enigma 的设置 (相当于密钥),就无法破译密码。

 为 Enigma 破译打开新局面的是波兰的密码破译专家雷耶夫斯基 (Marian Rejewski)。雷耶夫斯基得到了法国提供的信息支援,并在此基础上提出了 通过密文找到每日密码 的方法。
 根据上述 Enigma 的加密过程的特点,我们可以知道:

  1. 密码破译者一天内所截获的所有通信,都是用同一个密码进行加密的;
  2. 通信密码都会重复两次;
  3. 此外,在 第1个字母 和 第4个字母 的加密过程中,转子1 旋转了 3/26圈

通过上述事实以及大量的密文,雷耶夫斯基对密文字母的 排列组合 进行了深入的研究。
 3个转子 的顺序共有 3x2x1=6 钟可能,3个转子 的旋转位置共有 26x26x26=17576 钟组合。雷耶夫制作了 6台机器,分别对这 17576种 组合进行检査。通过使用这些机器,他在大约两小时内通过大量的密文找到了 每日密码 (即接线板中的构造)

 Enigma 的破译过程十分冗长和复杂,在这里无法详细介绍。对此感兴趣的读者请参阅《密码故事:人类智力的另类较量》(The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography) [Singh] 以及《艾伦.图灵传:如继的解谜者》(Alan Turing: The Enigma) [Hodges]。


五、本章小结

1、将 密码算法 和 密钥 分开

思考一下,为什么要将 密码算法密钥 分开呢?

  • 在凯撒密码中:
    密码算法:将明文中的各个字母按照指定的字母数平移。
    密钥:平移的字母数量。
  • 在简单替换密码中:
    密码算法:按照替换表对字母表进行替换。
    密钥:替换表。
  • 在 Enigma (通信密码的加密) 中:
    密码算法:使用 Enigma 密码机。
    密钥 (每日密码):通过接线板的接线方式、3 个转子的顺序、每个转子的旋转位置。
  • 在 Enigma (通信电文的加密) 中:
    密码算法:由每日密码确定了 接线板、3个转子顺序的 Enigma密码机 (每个转子的旋转位置由 通信密码 确定)。
    密钥 (通信密码):每个转子的旋转位置。

 如果每次加密都必须产生一个新的 密码算法,那真是太诡异了。对于已经开发出的一种密码算法,我们总是希望能够重复使用。
 将密码算法和密钥分开的意义正在于此。密码算法是需要重复使用的,但在重复使用同一种算法的过程中,该算法被破译的可能性也在逐渐增大。因此,我们就在密码算法中准备了 一些可变部分,并在 每次通信时 都对这部分内容进行 改变,而这一可变部分就是 密钥
在这里插入图片描述

2、密码算法中标准化的技术

 现在的密码算法中都有一部分标准化的技术。你也许会想,密码这种需要机密性的领域怎么可能会标准化呢?其实这并不奇怪,请大家回想一下我们之前讲过的那条常识 —— 不要使用保密的密码算法 (1.7.1节)。
 标准化的推进,使得密码算法能够作为 公有财产 被开发、研究和利用。即便经过标准化,密文的机密性也丝毫没有降低,这是因为 密码算法和密钥是分开的
密钥 才是秘密的精华。因此,在密码技术中,如何管理密钥是一个重要的课题。关于密钥管理,我们将在 第11章 详细讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值