个人网站:https://autosecure.cn/ - - - 汽车网络安全工具箱 - - - 持续更新中
系列文章目录
第一章:古典密码
第二章:对称密码
第三章:非对称密码
第四章:混合密码
第五章:哈希函数
第六章:消息认证码
第七章:数字签名
第八章:数字证书
文章目录
前言
密码并非是近代的产物,最早的密码使用可以追溯到古埃及时代,那时候就已经开始使用替换密码。尽管古典密码不再适用,但在寻找密码弱点的方法、破译密码的思路以及密码算法与密钥的关系等方面,这些密码与现代的密码技术依然是想通的。
一、凯撒密码
典型的替换密码 —— 凯撒密码(Caesar cipher),是一种相传尤利乌斯 - 凯撒曾使用过的密码。凯撒于公元前100年左右诞生于古罗马,是一位著名的军事统帅。
凯撒密码是通过将明文中所使用的字母表按照一定的字数“平移”来进行加密的。为了表示方便,我们用小写字母(a, b, c, …)来表示明文,用大写字母(A, B, C, …)来表示密文。
现在我们将字母表平移3个字母,于是,明文中的 a 在加密后就变成了与其相隔 3 个字母的 D,以此类推,通过下图我们可以很容易地理解“平移”的具体工作方式。
1.1 凯撒密码的加密
这里,我们假设要保密的信息位 yoshiko 这个女性的名字。我们暂且不管这个名字到底到底代表一位真是的女性,还是只是一种暗号,只考虑将它在保密的状态下发送给接收者。
此时,明文包含下列 7 个字谜。
yoshiko
接下来我们将明文中的字母逐一进行加密。
y → B
o → R
s → V
h → K
i → L
k → N
o → R
这样,明文 yoshiko 就被转换成了密文 BRVKLNR,yoshiko 这个词我们能够看懂,但 BRVKLNR 就看不懂了。
凯撒密码中,将字母表中的字母平移这个操作就是密码的算法,而平移的字母数量则相当于密钥。在上面的例子中,密钥为 3。
1.2 凯撒密码的解密
现在,假设接收者已经收到了密文 BRVKLNR,由于密文本身是看不懂的,因此必须将它解密成明文。
凯撒密码的解密过程是使用与加密时相同的密钥进行反向的平移操作。用刚才的例子来说,只要反向平移 3 个字母就可以解密了。
B → y
R → o
V → s
K → h
L → i
N → k
R → o
这样我们就得到了明文 yoshiko。
在这个场景中,密钥 3 必须由发送者和接收者实现约定好。
1.3 用暴力破解来破译密码
在凯撒密码中,密钥就是字母表平移的字数。由于字母表只有 26 个字母,因此加密用的密钥只有 0 到 25 共 26 种(平移0个字母实际上相当于没有加密,但在这里我们也将这种情况考虑进去)。
下面我们按照顺序将这 26 种密钥都尝一遍。
BRVKLNR → 用密钥 0 解密 → brvklnr
BRVKLNR → 用密钥 1 解密 → aqujkmq
BRVKLNR → 用密钥 2 解密 → zptijlp
BRVKLNR → 用密钥 3 解密 → yoshiko
BRVKLNR → 用密钥 4 解密 → xnrghjn
BRVKLNR → 用密钥 5 解密 → wmqfgim
BRVKLNR → 用密钥 6 解密 → vlpefhl
BRVKLNR → 用密钥 7 解密 → ukodegk
BRVKLNR → 用密钥 8 解密 → tjncdfj
BRVKLNR → 用密钥 9 解密 → simbcei
BRVKLNR → 用密钥 10 解密 → rhlabdh
BRVKLNR → 用密钥 11 解密 → qgkzacg
BRVKLNR → 用密钥 12 解密 → pfjyzbf
BRVKLNR → 用密钥 13 解密 → oeixyae
BRVKLNR → 用密钥 14 解密 → ndhwxzd
BRVKLNR → 用密钥 15 解密 → mcgvwyc
BRVKLNR → 用密钥 16 解密 → lbfuvxb
BRVKLNR → 用密钥 17 解密 → kaetuwa
BRVKLNR → 用密钥 18 解密 → jzdatvz
BRVKLNR → 用密钥 19 解密 → iycrsuy
BRVKLNR → 用密钥 20 解密 → hxbqrtx
BRVKLNR → 用密钥 21 解密 → gwapqsw
BRVKLNR → 用密钥 22 解密 → fvzoprv
BRVKLNR → 用密钥 23 解密 → euynoqu
BRVKLNR → 用密钥 24 解密 → dtxmnpt
BRVKLNR → 用密钥 25 解密 → cswlmos
尝试一遍之后,我们就会发现当密钥为3时,可以解密出有意义的字符串 yoshiko。这就意味着我们仅仅根据密文就推测出了密钥和密文,这样的密码有什么作用呢?凯撒密码实在是太脆弱了,无法保护重要的秘密。
上面介绍的这种密码破译方法,就是将所有可能的密钥全部尝试一遍,这种方法称为暴力破解(brute-force attack)。由于这种方法的本质是从所有的密钥中找出正确的密钥,因此又称为穷举搜索(exhaustive search)。
二、Enigma
下面我们来介绍一下第二次世界大战中德国使用的一种名为“Enigma”的密码机。
Enigma 是由德国人阿瑟 .谢尔比乌斯( Arthur Sherbius ) 于 20 世纪初发明的一种能够进行加密和解密操作的机器。 Enigma 这个名字在德语里是 “i迷” 的意思。 谢尔比乌斯使用能够转动的圆盘和电路, 创造出了人类手工所无法实现的高强度密码。 在刚刚发明之际, Enigma被用在了商业领域, 后来到了纳粹时期 , 德国国防军采用了 Enigma, 并将其改良后用于军事用途。
2.1 用 Enigma 进行加密通信
Enigma 是一种由键盘、齿轮、电池和灯泡所组成的机器,通过这一台机器就可以完成加密和解密两种操作。
发送者和接收者各自拥有一台 Enigma。发送者用 Enigma 将明文加密,将生成的密文通过无线电发送给接收者。接收者。接收者将接收到的密文用自己的 Enigma 解密,从而得到明文。
由于发送者和接收者必须使用相同的密钥才能够完成加密通信,因此发送者和接收者会事先收到一份叫作国防军密码本的册子。国防军密码本中记载了发送者和接受者所使用的每日密码,发生者和接收者需要分别按照册子的指示来设置 Enigma。
2.2 Enigma 的构造
Enigma 的构造如下图所示。Enigma能够对字母表中的 26 个字母进行加密和解密操作,但由于图示复杂,这里将字母的数量简化为4个。
按下输入键盘上的一个键后,电信号就会通过复杂的电路,最终点亮输出用的灯泡。下图秒胡了按下 a 键点亮 D 灯泡的情形。
每当按下 Enigma 上的一个键, 就会点亮一个灯泡。 操作 Enigma 的人可以在按键的同时读出灯泡所对应的字母, 然后将这个字母写在纸上。 这个操作在发送者一侧是加密, 在接收者一侧则是解密。 只要将键和灯泡的读法互换一下, 在 Enigma 上就可以用完全相同的方法来完成加密和解密两种操作了。
接线板( plugboard )是一种通过改变接线方式来改变字母对应关系的部件。 接线板上的接线方式是根据国防军密码本的每日密码来决定的, 在一天之中不会改变。
在电路中, 我们还看到有 3 个称为转子( rotor )的部件。 转子是一个圆盘状的装置, 其两侧的接触点之间通过电线相连。 尽管每个转子内部的接线方式是无法改变的, 但转子可以在每输入一个字母时自动旋转。 当输入一个字母时, 转子 1 就旋转 1/4 圈( 当字母表中只有 4 个字母时 )。 转子 1 每旋转 1 圈, 转子 2 就旋转 1/4 圈, 而转子 2 每旋转 1 圈, 转子 3 就旋转 1/4圈。 这 3 个转子都是可以拆卸的, 在对 Enigma 进行设置时可以选择转子的顺序以及它们的初始位置。
下图显示了一个转子的放大示意图。
2.3 Enigma 的加密
下图展示了发送者将一个包含5个字母的德语单词 nacht(夜晚)进行加密并发送的过程。
在进行通信之前, 发送者和接收者双方都需要持有国防军密码本, 国防军密码本中记载了
发送者和接收者需要使用的每日密码。
(1)设置Enigma
发送者查阅国防军密码本, 找到当天的每日密码, 并按照该密码来设置 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)加密消息
接下来, 发送者对消息进行加密。
发送者将消息( 明文 ) 逐字从键盘输人 , 然后从灯泡中读取所对应的字母并记录下来。 这里是输入 naCht5 个字母, 并记录下所对应的 5 个字母( 如 KXNWP )。
(5)拼接
接下来, 发送者将 “加密后的通信密码” ATCDVT 与 “加密后的消息” KXNWP 进行拼接, 将
ATCDVTKXNWP 作为电文通过无线电发送出去。
上面就是用 Enigma 进行加密的操作步骤, 看来还真是挺麻烦的。
2.4 每日密码与通信密码
大家应该注意到了, 在 Enigma 中出现了 “每日密码” 和 “通信密码” 这两种不同的密钥。
每日密码不是用来加密消息的, 而是用来加密通信密码的。 也就是说, 每日密码是一种用来加密密钥的密钥。 这样的密钥 , 一般称为密钥加密密钥( Key Encrypting Key , KEK )。 KEK在现代依然很常用, 在第 6 章的混合密码系统中也会出现这一概念。
之所以要采用两重加密, 即用通信密码来加密消息, 用每日密码来加密通信密码, 是因为用同一个密钥所加密的密文越多, 破译的线索也会越多, 被破译的危险性也会相应增加。
2.5 避免通信错误
在通信密码的加密中,我们需要将通信密码 psv 连续输入两次,即 psvpsv。这是因为在使用 Enigma 的时代,无线电的质量很差,可能会发生通信错误。如果通信密码没有被正确传送,接收者也就无法解密通信内容。 而通过连续输入两次通信密码( psvpsv ),接收者就可以对通信密码进行校验,也就是检查一下解密后得到的通信密码是不是 3 个字母重复两次这样的形式。
2.6 Enigma 的解密
下面我们来看看 Enigma 是如何解密的.
(1)分解
接收者将接收到的电文分解成两个部分,即开头的 6 个字母 ATCDVT 和剩下的字母KXNWP。
(2)设置 Enigma
接收者查阅国防军密码本中的每日密码,并按照该密码设置 Enigma, 这一步和发送者进行的操作是相同的。
(3)解密通信密码
接下来,接收者将加密后的通信密码 ATCDVT 进行解密。接收者在 Enigma 的键盘上输人 ATCDVT 这 6 个字母,然后将亮起的灯泡对应的字母 psvpsv 记下来。因为 psvpsv 是 psv 重复两次的形式,所以接收者可以判断在通信过程中没有发生错误。
(4)重新设置 Enigma
接下来, 接收者根据通信密码 psv 重新设置 Enigma。
(5)解密消息
接下来, 接收者对消息进行解密。
接收者将电文的剩余部分 KXNWP 逐一用键盘输人,然后从灯泡读取结果并记下来,这样接收者就得到了 nacht 这 5 个字母,也就是完成了对发送者发送的消息进行解密的过程。
2.6 Enigma 的弱点
Enigma 可以在每次输人时,通过 3 个转子的旋转来改变电路。然而,在加密通信密码这一重要步骤( 最开始的 6 次输入 )中,实际上只有转子 1 会旋转,这就是 Enigma 的弱点之一。
将通信密码连续输入两次并加密也是一个弱点,因为密码破译者可以知道,密文开头的 6 个字母被解密之后的明文一定是 3 个字母重复两次的形式。
通信密码是人为选定的也是一个弱点,因为通信密码必须不能被密码破译者推测出来。然而现实中的发送者却有可能使用 aaa、bbb 这样简单的密码,也经常有人用自己女朋友的名字当作密码,不知道是因为怕麻烦,还是因为过于相信 Enigma 的安全性,或者是没有充分理解通信密码的重要性。密码系统中使用的密钥不能是人为选定的,而应该使用无法预测的随机数来生成。
必须派发国防军密码本也可以说是一个弱点。如果没有国防军密码本,就无法使用 Enigma 进行通信,但如果国防军密码本落到敌人手里,就会带来大麻烦。如果现在所使用的国防军密码木被敌人得到,哪怕只泄露了一本,也必须重新制作新的密码本并发放到全军。 “必须配送密钥” 这个问题,在广泛使用计算机进行的现代密码通信中也是非常重要的。
2.7 Enigma 的破译
当时,Enigma 被认为是一种无法破译的密码机,为了破译 Enigma,欧洲各国的密码破译者们付出了巨大的努力。
首先,法国和英国的密码破译者通过间谍活动得到了德军使用的 Enigma 的构造。然而,即便知道了 Enigma 的构造,也还是无法破解 Enigma 的密码,这是因为 Enigma 的设计并不依赖于 "隐蔽式安全性”(security by obscurity)。即使密码破译者得到了 Enigma 密码机(相当于密码算法),只要不知道 Enigma 的设置(相当于密钥),就无法破译密码。
为 Enigma 破译打开新局面的是波兰的密码破译专家雷耶夫斯基(Marian Rejewski)。雷耶夫斯基得到了法国提供的信息支援,并在此基础上提出了通过密文找到每日密码的方法。由于每日密码在一天之中是不会改变的,因此密码破译者一天内所截获的所有通信,都是用同一个密码进行加密的。而且,这些密文都有一个共同的特点,那就是通信密码都会重复两次。以 ATCDVT 为例,我们可以知道第 1 个字母和第 4 个字母(A 和 D),第 2 个字母和第 5 个字母(T 和 V),第 3 个字母和第 6 个字母(C 和 T) 都是由相同的明文字母加密得到的。此外,我们还知道,在第 1 个字母和第 4 个字母的加密过程中,转子 1 旋转了 3/26 圈。通过上述事实以及大量的密文,雷耶夫斯基对密文字母的排列组合进行了深入的研究。
3 个转子的顺序共有 3 x 2 x 1=6 种可能,3 个转子的旋转位置共有 26 x 26 x 26=17576 种组合。雷耶夫斯基制作了 6 台机器,分別对这 17576 种组合进行检査。通过使用这些机器,他在大约两小时内通过大量的密文找到了每日密码。
由于担心希特勒进攻波兰导致 Enigma 破译的线索付之一炬 ,波兰决定将这些情报提供给英国和法国。于是,Enigma 破译的接力棒,就从波兰传给了英法。此后不久,第二次世界大战就全面爆发了。
英国的密码专家们在布莱切利园集中进行了 Enigma 的破译工作,其中,现代计算机之父阿兰 • 图灵( Alan Turing )也是破译团队的一员。图灵根据之前所获得的情报继续研究,终于在1940 年研制出了用于破译 Enigma 的机器 D Enigma 这一机器创造出了难以破译的密码,但最终战胜 Enigma 的却是另一台机器。
三、小结
我们介绍了历史上一些著名的密码系统:惶撒密码和 Enigma。关于密码破泽技术。我们也尝试了暴力破解和字母频率分析两种方法。此外,我们还对密码算法与密钥的关系进行了思考。
为了破译 Enigma,密码专家们制造出了能够高速进行复杂运算的机器,而这一努力为现代计算机的诞生做出了巨大的贡献。