传统加密
在第二章中,我们讨论了现代密码学的基础知识。 我们将密码学等同于一个工具包,其中各种密码技术被视为基本工具。 这些工具之一是对称密钥加密,其中用于加密和解密的密钥是相同的。
在本章中,我们将进一步讨论该技术及其在开发各种密码系统中的应用。
早期的加密系统
在继续之前,您需要了解一些有关历史密码系统的事实 −
所有这些系统都基于对称密钥加密方案。
这些系统提供的唯一安全服务是信息机密性。
与数字化并将数据视为二进制数字的现代系统不同,早期的系统将字母表作为基本元素。
这些早期的加密系统也称为密码。 一般来说,密码只是一组用于执行加密和相应解密的步骤(算法)。
凯撒密码
它是一种单字母密码,其中明文的每个字母都被另一个字母替换以形成密文。 这是一种最简单形式的替换密码方案。
该密码系统通常称为移位密码。 这个概念是将每个字母表替换为另一个字母表,该字母表"移动"了 0 到 25 之间的某个固定数字。
对于这种类型的方案,发送者和接收者都同意使用"秘密移位号"来移位字母表。 这个0到25之间的数字成为加密的密钥。
当使用"三移位"时,"凯撒密码"这个名称偶尔会被用来描述移位密码。
移位密码过程
为了加密明文字母,发送者将滑动标尺放在第一组明文字母下方,并将其向左滑动秘密移位的位置数。
然后,明文字母在下面的滑动标尺上被加密为密文字母。 下图描述了这个过程的结果,即商定的三个位置的转移。 在这种情况下,明文"tutorial"被加密为密文"WXWRULDO"。 这是 3 次移位的密文字母表;
收到密文后,也知道秘密移位的接收者将其滑动标尺放在密文字母下方,并将其向右滑动约定的移位编号,在本例中为 3。
然后,他用下面滑动标尺上的明文字母替换密文字母。 因此,密文"WXWRULDO"被解密为"tutorial"。 要解密使用 Shift 3 编码的消息,请使用 Shift '-3' 生成明文字母表,如下所示 −
安全值
凯撒密码不是一个安全的密码系统,因为只有 26 个可能的密钥可供尝试。 攻击者可以利用有限的可用计算资源进行详尽的密钥搜索。
简单替换密码
它是凯撒密码的改进。 该方案不是将字母表移动某个数字,而是对字母表中的字母进行某种排列。
例如,A.B…..Y.Z 和 Z.Y…B.A 是字母表中所有字母的两个明显排列。 排列只不过是一组混乱的字母表。
字母表中有 26 个字母,可能的排列有 26 种! (26 的阶乘)等于 4x1026。 发送方和接收方可以选择这些可能的排列中的任何一种作为密文字母表。 这个排列就是该方案的密钥。
简单替换密码的过程
按照自然顺序写出字母 A、B、C、...、Z。
发送者和接收者决定随机选择的字母表字母排列。
在自然顺序字母表下方,写出所选的字母表字母排列。 对于加密,发送者通过替换表中紧邻其正下方的排列字母来替换每个明文字母。 此过程如下图所示。 在此示例中,所选排列为 K、D、G、...、O。明文"点"被加密为"MJBXZ"。
这是一个混乱的密文字母表,其中密文字母的顺序是关键。
接收到密文后,接收者(也知道随机选择的排列)将底行中的每个密文字母替换为顶行中相应的明文字母。 密文'MJBXZ'解密为'点'。
安全价值
简单替换密码比凯撒密码有相当大的改进。 可能的密钥数量很大(26 个!),甚至现代计算系统还没有强大到足以轻松发起暴力攻击来破坏系统。 然而,简单替换密码设计简单,容易出现设计缺陷,比如选择明显的排列,这种密码系统很容易被破解。
单表和多表密码
单字母密码是一种替代密码,其中对于给定密钥,每个普通字母表的密码字母表在整个加密过程中都是固定的。 例如,如果"A"被加密为"D",则对于该明文中出现的任意次数,"A"将始终被加密为"D"。
我们在本章前面讨论过的所有替换密码都是单字母的; 这些密码非常容易受到密码分析的影响。
多表密码是一种替代密码,其中明文字母表的密码字母表在加密过程中的不同位置可能不同。 接下来的两个示例,playfair 和 Vigenere Cipher 是多表密码。
Playfair 密码
在此方案中,对字母对进行加密,而不是像简单替换密码那样对单个字母进行加密。
在 playfair cipher 中,最初会创建一个密钥表。 密钥表是一个 5×5 的字母网格,充当加密明文的密钥。 25 个字母中的每一个都必须是唯一的,并且表中省略了一个字母(通常是 J),因为我们只需要 25 个字母而不是 26 个。如果明文包含 J,则将其替换为 I。
发送者和接收者决定特定的密钥,例如"教程"。 在键表中,表中的第一个字符(从左到右)是短语,不包括重复的字母。 表的其余部分将按自然顺序填充字母表中的剩余字母。 密钥表计算为 −
Playfair 密码的流程
首先,明文消息被分成两个字母对(二合字母)。 如果字母数为奇数,则在最后一个字母后添加 Z。 假设我们要加密"hide money"消息。 它将被写为 −
HI DE MO NE YZ
加密规则是 −
如果两个字母都在同一列中,则取每个字母下方的字母(如果在底部,则返回顶部)
T | U | O | R | I | 'H'和'I'在同一列,因此用它们下面的字母代替 . HI → QC |
A | L | S | B | C | |
D | E | F | G | H | |
K | M | N | P | Q | |
V | W | X | Y | Z |
如果两个字母在同一行,则取出每个字母右侧的字母(如果位于最右侧,则返回左侧)
T | U | O | R | I | 'D'和'E'在同一行,因此用它们右侧的字母替换 . DE → EF |
A | L | S | B | C | |
D | E | F | G | H | |
K | M | N | P | Q | |
V | W | X | Y | Z |
如果前面两条规则都不成立,则用这两个字母组成一个矩形,并取矩形水平对角上的字母。
使用这些规则,用"tutorials"密钥加密"hide money"的结果将是−
QC EF NU MF ZV
解密 Playfair 密码就像反向执行相同的过程一样简单。 接收方具有相同的密钥,并且可以创建相同的密钥表,然后解密使用该密钥发出的任何消息。
安全值
它也是一种替换密码,与简单替换密码相比很难破解。 与替换密码的情况一样,在 Playfair 密码上也可以进行密码分析,但是它会针对 625 个可能的字母对(25x25 字母表),而不是 26 个不同的可能字母表。
Playfair 密码主要用于保护重要但非关键的秘密,因为它使用起来很快,并且不需要特殊设备。
维吉尼亚密码
这种密码方案使用文本字符串(例如,一个单词)作为密钥,然后使用该密钥对明文进行多次移位。
例如,假设键是"point"。 密钥的每个字母都会转换为其各自的数值:在这种情况下,
p → 16, o → 15, i → 9, n → 14, and t → 20.
因此,密钥是:16 15 9 14 20。
维吉尼亚密码过程
发送者和接收者决定一个密钥。 说"点"是关键。 该密钥的数字表示形式为"16 15 9 14 20"。
发件人想要加密消息,例如"attack from south east"。 他会将明文和数字密钥排列如下−
他现在将每个明文字母按其下面写的数字进行移位,以创建密文,如下所示 −
这里,每个明文字符都被移动了不同的量——这个量由密钥决定。 键必须小于或等于消息的大小。
对于解密,接收方使用相同的密钥,并将收到的密文以相反的顺序移位以获得明文。
安全值
维吉尼亚密码是通过调整标准凯撒密码而设计的,以降低对密文进行密码分析的有效性,并使密码系统更加健壮。 它比常规凯撒密码安全得多。
历史上,它经常被用于保护敏感的政治和军事信息。 由于它给密码分析带来了困难,它被称为牢不可破的密码。
维吉尼亚密码的变体
维吉尼亚密码有两种特殊情况 −
关键字长度与plaintect消息相同。 这种情况称为Vernam Cipher。 它比典型的维吉尼亚密码更安全。
维吉尼亚密码成为一种具有完美保密性的密码系统,称为一次性密码本。
一次性密码本
具体情况是 −
- 关键字的长度与明文的长度相同。
- 关键字是随机生成的字母串。
- 该关键字仅使用一次。
安全值
让我们将 Shift 密码与一次性密码本进行比较。
移位密码 − 容易破损
在使用 Shift 密码的情况下,整个消息可能会在 1 到 25 之间移动。这是一个非常小的大小,并且很容易被暴力破解。 然而,由于每个字符现在都有自己的 1 到 26 之间的移位,因此消息的可能密钥呈指数级增长。
一次性密码本 − 无法打破
比方说,我们使用一次性密码本对名称"点"进行加密。 这是一个 5 个字母的文本。 要暴力破解密文,需要尝试所有可能的密钥,并进行 (26 x 26 x 26 x 26 x 26) = 265 = 11881376 次计算。 这是一条包含 5 个字母的消息。 因此,对于较长的消息,计算量随着每个额外的字母表呈指数增长。 这使得在计算上不可能通过暴力破解密文.
转置密码
这是另一种类型的密码,其中明文中的字母顺序被重新排列以创建密文。 实际的明文字母不会被替换。
一个例子是"简单的柱状转置"密码,其中明文以一定的字母宽度水平书写。 然后垂直读取密文,如图所示。
例如,明文是"golden statue is in eleventh cave",选择的秘密随机密钥是"five"。 我们在表中水平排列此文本,列数等于键值。 生成的文本如下所示。
从第一列到最后一列垂直向下读取列即可得到密文。 密文是"gnuneaoseenvltiltedasehetivc"。
为了解密,接收者准备类似的表。 列数等于键数。 行数是通过将密文字母总数除以密钥值并将商舍入到下一个整数值来获得的。
接收者然后将接收到的密文从左到右垂直向下写入。 为了获取文本,他从左到右、从上到下水平阅读。