密钥密码学(一)(4)

简介: 密钥密码学(一)

密钥密码学(一)(3)https://developer.aliyun.com/article/1508651

7.2.1 Cysquare

历史趣闻:在第二次世界大战期间,英国使用了这个想法的一个变体,称为Cysquare,由约翰·H·蒂尔特曼准将于 1941 年发明。Cysquare 是一个具有大量涂黑的列置换密码。英国发行了 26×26 网格的填充物,大约 60%的方块以随机模式涂黑。每页有不同的模式。消息被写入横跨行的白方块中,然后以某种顺序垂直读出。网格是正方形的,因此可以以任何方向使用。

关键是填充物中的页码、方向以及网格内的起始和结束位置。密码员会在页面上画线标记消息区域。使用不同的区域可以让页面用于多条消息。

缺点在于需要分发如此多的填充物。为了最小化填充物的数量,英国人每天将每页用于可能多达 50 条消息。这意味着要写得很淡并且擦拭多次。页面变得难以阅读,最终密码员拒绝使用它们。Cysquare 在 1944 年被放弃了。

德国人在战争结束前从 1944 年开始使用这些填充物之一,连同说明书一起。他们开始自己使用这个系统,直到战争结束。他们称之为Rasterschlüssel,意思是网格密钥。然而,德国人在选择黑白方块时做得不好。他们使用了太多相邻的白方块,因此当他们将条带匹配时,英国人可以识别出二元组和三元组。这些消息成为英国情报的宝贵来源。Cysquare 评分为七分。Rasterschlüssel 评分为四分。

值得注意的是,在计算机时代,黑白方块可以作为比特模式传输,网格可以是任意大小,并且网格可以针对每条消息进行更改。我建议使用 65%到 75%的黑方块。这样做,cysquare 将被评为八分。

有一个简化版本的 cysquare 可供手动使用,不需要印刷网格,并且允许您使用数字密钥指定哪些方块被涂黑。这里有两种Blackout置换密码的变体,一种是左右交替版本,另一种是阶梯版本。两者都使用数字密钥 3174255 进行涂黑。涂黑密钥可以是重复的密钥,或者可以由伪随机数生成器生成。您将使用单独的密钥指定读取列的顺序。


加强列置换的另一种方法是将文本分成不规则大小的块。例如,如果消息长度为 150,您可以将其分成 37、71 和 42 个字母的块。这种方法被评为四分。如果您为每个块使用不同的密钥,评分将提高到五分。

将栏式置换与任何类型的替换密码结合在一起会极大增强其安全性。即使与简单的替换结合,等级也会提高到五级,因为匹配条变得更加困难。哪个先做都没有关系。将通用多表密码与至少 12 列的栏式置换结合会将等级提高到七级,即使多表密码的周期只有 3。这是因为您基本上消除了匹配条的可能性。

7.2.2 单词置换

Word transposition 是一个基于单词而不是字母的具有历史重要性的栏式置换。这是美国内战期间联邦军队使用的主要方法。这个想法来自安森·斯泰格(Anson Stager),一个后来创立了西联电报公司的联邦电报员。联邦军队的通信受到高传输错误率的影响。在许多情况下,指挥官们会放弃电报,而只是派遣步行或骑马的信使。斯泰格意识到,发送单词而不是单个字母将减少错误率,并减少重发消息的需要。

联邦密码员将消息逐字从左到右写成矩形数组,然后使用各种路线读出,例如交替上下读取列,或者交替从数组的左半部分和右半部分取列。空单词被大量使用。这里是一个例子。请注意第三行是空的。列按顺序读取为 1,3,5,2,4。


7.3 双栏式置换

如其名称所示,双栏式置换 意味着连续进行两次栏式置换,最好使用两个不同的密钥。这消除了匹配条的可能性。值得注意的是,1934 年,所罗门·库尔巴克(Solomon Kullback)找到了一个通用解决方案,并由信号情报局发布。这本 31 页的书在 1980 年解密,并由爱琴海公园出版社出版。爱琴海公园出版社多年来一直是密码学书籍的宝贵资源。在其创始人韦恩·G·巴克(Wayne G. Barker)去世后的 2001 年后不久,该公司停业,书籍不再可用。我很高兴地说,www.openlibrary.org 现在有这些书籍(2019 年 7 月访问)。

我不会在这里重复库尔巴克的分析,除了说它是基于确定每个明文字母在密文中出现的位置。相反,我将讨论 3 种打败库尔巴克解决方案的方法。(顺便说一句,库尔巴克和我父亲上了同一所高中,只是早了 6 年。)

一个简单的方法是通过涂黑几个方块来改变网格的形状。这些方块可以形成一个矩形,或者在一个角落,甚至在网格的中间形成其他形状。这里有一些例子:


黑掉的部分在两个置换步骤中可以具有不同的大小、形状或位置。黑掉的部分的大小、形状和位置可以附加到密钥中,以便为每个消息使用不同的黑掉。具有黑掉的双栏置换等级为 Five。

相反的方法称为NullBlock,也很有效。您可以将一块空字符块插入中间密文或最终密文,或两者都插入。将空块添加到明文中并不有助于加密。块的大小和位置可以由数字密钥指定。这些应该在消息之间变化。

将任何置换密码与任何替换密码结合使用会增强两者的安全性。双栏置换与简单替换的组合等级为 Six。双栏置换与通用多表替换的组合等级为 Eight。

7.4 循环栏置换

栏置换的另一种变体是循环栏置换。它有两种变体,水平循环和垂直循环。水平循环需要两个密钥,一个用于循环行,一个用于确定列顺序。首先,从左到右将消息写入矩形块的行。接下来,在行的左侧写入循环密钥。如果行数多于此密钥的长度,则根据需要重复使用该密钥。如果循环密钥是一个词或短语,请使用字母顺序将其转换为数字。

将循环密钥转换为数字形式后,将每行向左循环移动所指定的位置数。然后按列密钥指定的顺序垂直读出字母。以下是使用循环密钥 CYCLES 和列密钥 PAULREVERE 的示例。


解决栏置换所使用的匹配纸条方法也适用于循环栏置换。这只是稍微困难一点,因为每行的最后一个字母与第一个字母相邻,可能形成低频的二元组。这对 Emily 来说最多只是一个轻微的阻碍。具有水平循环的栏置换等级为 Three。

垂直循环类似。不是将块的行向左循环移动,而是将块的列向上循环移动。以下是使用关键字 CYCLE 来循环列和使用密钥短语 PAULREVERE 来选择列读取顺序的示例。


这种密码仍然可以通过匹配纸条来解决,就像普通的栏置换一样,但 Emily 需要为每个列使用两条纸条,一条用于顶部部分,一条用于底部部分。当每列循环时,某些字符从列的顶部移动到底部,并成为新的底部部分。剩下的字母向上移动,并成为新的顶部部分。在例子中,左列 ODYTEL 向上移动 1 个位置,所以 DYTEL 成为新的顶部部分,O 成为新的底部部分。这些部分需要放在不同的纸条上,因为 Emily 不知道这些字母是来自长列还是短列。这使得匹配过程变得相当困难。带有垂直循环的栏置换被评为 Four。

在这个区块上可以执行垂直和水平循环。这与双栏置换的强度相当。但请记住,你的密码越复杂,花费的时间就越长,而且正确地加密和解密也就越困难。双循环栏置换 被评为 Five。

7.5 随机数置换

让我们来看一个完全不同类型的置换。这种置换不涉及任何形式的数组或网格。相反,它只是随机对消息中的字母进行编号。

你可以使用任何随机数生成器。第十三章中介绍了几种随机数生成器。到目前为止,我只描述了第 4.5.1 节中的链式数字生成器,所以让我们使用那个生成器来说明。为消息的每个字母生成一个随机数字,像这样:


首先取所有从左到右编号为 1 的字母。这些是 C、V 和 I。


接下来取所有编号为 2 的字母。这些是 A、O 和 L。


然后取所有编号为 3 的字母,即 N、E、E 和 M。


持续这样做,直到所有的字母都被取走。

要解密这条消息,Riva 首先会生成随机数字。有三个 1,所以她会在三个 1 下面写下密文的前 3 个字母 CVI,像这样:


Riva 会将密文的下一个 3 个字母 AOL 写在 2 下面,像这样:


以此类推。

随机数置换被评为 Four。可以通过尝试所有可能的随机数生成器种子来破解它。

通过使用更长的种子或通过以 1、2、3、…以外的顺序选择明文中的字母来增强密码。 这相当于对随机数生成器的输出应用简单的替换。 例如,如果您想从标记为 4 的字母开始,那么您将把所有的 4 改为 1。 如果接下来想要取出所有标记为 7 的字母,那么您将把所有的 7 改为 2,依此类推。 然后按照描述的方式进行。 这将使可能的密钥数量增加到 10!,即 3,628,800。

通过这种改进,链式数字置换评级为五。 对于计算机版本,其中随机数生成器产生随机字节,该方法评级为七,因为重新排列 256 个不同字节的可能顺序太多。

7.6 选择器置换

由于我们正在研究随机数,让我们看看基于随机数的另一种置换密码,即选择器置换。 思路是将消息分成大致相等的部分,然后使用随机数序列合并这些部分。

假设明文有 100 个字符,你想将其分成 3 部分。 假设你有一个随机数生成器,以相等的概率产生数字 0、1 和 2,并且你已经选择了一个种子,它作为置换的密钥。 你需要知道如何将消息的每个部分做多大。 这很容易做到。 只需生成前 100 个随机数字,并计算产生的每个数字的数量。 假设有 36 个零,25 个一和 39 个二。 你将消息切成 3 部分,P0 有 36 个字母,P1 有 25 个字母,P2 有 39 个字母。

加密很容易。 每当生成器产生一个 0 时,从 P0 中取下一个字母。 每当生成器产生一个 1 时,从 P1 中取下一个字母。 每当生成器产生一个 2 时,从 P2 中取下一个字母。 解密甚至更容易,因为 Riva 不需要知道每个部分有多大。 每当她得到一个 0 时,她将下一个字母放入 P0 中。 每当她得到一个 1 时,她将下一个字母放入 P1 中。 每当她得到一个 2 时,她将下一个字母放入 P2 中。 然后她连接这 3 个部分,或者简单地忽略换行符读取消息。

当只用 2 部分完成时,Emily 可以轻松重构消息。 评级为一。 用 3 部分时稍微困难,评级为二。 用 20 个或更多部分时,评级为五。

7.7 密钥置换

有时,逐块移位消息是首选。用于置换块的最佳选择是 主要置换。在消息的字符上方写下数字密钥,然后将每个字符移动到其密钥编号指示的位置。在此示例中,块大小为 8,数字密钥为 41278563。第一个字母 R 的密钥编号为 4,因此将 R 移动到块中的第四个位置。第二个字母 U 的密钥编号为 1,因此将 U 移动到块中的第一个位置,依此类推。


主要置换可以用于明文、密文或两者。仅使用主要置换是弱的。根据块大小,主要置换的等级从一到三。

*****让我们深入了解置换。在数学中,置换被称为 排列。这里有一个例子。我用十六进制数字 A、B 和 C 来表示数字 10、11 和 12。在密码中,这些数字将代表被置换的位、字母或其他单元。


顶行是标准的。它表示置换之前的原始顺序。第二行是置换后的顺序。在本节的后面,第二行将用于描述置换。

在此置换中,位置 1 的数字移动到位置 4,位置 4 的数字移动到位置 7,位置 7 的数字移动到位置 12,位置 12 的数字移动到位置 3,位置 3 的数字移动到位置 1,完成循环 147C31。循环可以表示为 (1,4,7,12,3)。

不在此循环中的第一个数字是 2。从位置 2 开始,我们找到循环 2A69B852,可以表示为 (2,10,6,9,11,8,5)。整个置换可以表示为 (1,4,7,12,3) (2,10,6,9,11,8,5)。

这两个循环的周期分别为 5 和 7,因此此置换的周期为 35。也就是说,如果你将此置换一直应用到一个由 12 个字母组成的块上,它将产生 35 种不同的字母置换,而第 36 种置换将与原始明文相同。

假设你想要生成一个强大的块置换密码,其中每个块都有不同的置换。对于每个块分别应用先前的置换不足够,因为它每 35 个周期就重复一次。可以通过使用两个不同的置换并交替使用来解决这个问题。

让两个置换分别是 A 和 B。如果 A 和 B 被适当选择,那么你可以生成大量不同的置换 A、B、AA、AB、BA、BB、AAA、AAB、ABA,…。

理解排列的循环结构变得很重要。假设你选择了排列 (1,4,7,12,3) (2,10,6,9,11,8,5) 和 (1,4,3,12,7) (2,10,9,6,5,11,8)。这两个排列以相同的方式划分了 12 个单位的块,即 [1,3,4,7,12] 和 [2,5,6,8,9,10,11]。当你交替使用这两个排列时,[1,3,4,7,12] 的分区将与 [2,5,6,8,9,10,11] 的分区分别排列。也就是说,这两组数字之间没有相互作用。为了获得长周期,第二个排列的每个循环应尽可能与第一个排列的每个循环重叠。下面是一组适合的排列。

(1,4,7,12,3) (2,10,6,9,11,8,5)

(1,10,8) (4,6,5,12) (2,11,9,7,3)

这个转位密码被评为三。它可以通过尝试所有 12! 种可能的排列来简单解决第一个块。这只有 4.79×10⁸。对于为第一个块生成合理文本的每个排列,艾米莉可以尝试第二个块的 12! 种排列。实际上,这并不需要 (12!)² = 2.29×10¹⁷ 次尝试,因为仅查看块的前 3 或 4 个字符就可以消除许多不合理的组合。事实上,通过手工方法解决这个密码是可行的。随着块大小的增加,难度增加得很慢。

有几种增加密钥置换安全性的方法。一种方法是重叠块。例如,如果块大小为 16,则在消息中不是从位置 1、17、33、… 开始块,而是从位置 1、9、17、25、33、… 开始块。这样,每个块与前一个块重叠 8 个单位,并且与后一个块重叠 8 个单位。消息的最后 8 个单位可以与前 8 个单位组合成一个环绕块。这个密码被评为四。

重叠量可以是可变的。如果当前块从位置 P 开始,块长度为 L,则下一个块可以从位置 P+1 到位置 P+L 的任何位置开始。这个密码被评为五。如果使用两个不同的转位,并随机选择,评分将提高到七。

加强块置换密码的第二种方法是通过组合置换。如果 T 和 U 是转置,则 T 和 U 的组合,表示为 TU,是通过首先执行转置 U 然后执行 T 而形成的。结果的转置与使用 T 转置 U 然后使用结果的转置转置文本相同。让我们试试一个例子。假设 T 是419628573,U 是385917462*。由于 U 是一个包含 10 个字符的块,您可以使用 T 来转置 U,就像您使用 T 来转置一个 10 字母的单词一样。将 T 写在顶行上用作置换键,并将 U 写在第二行上作为被转置的文本。结果的第一个数字是键中数字 1 下面的数字,即8(见阴影)。结果的第二个数字是键中数字 2 下面的数字,即1,依此类推。使用 T 来排列 U 得到812349675


通过这种方式组合转置,您可以生成一个转置序列,U,TU,TTU,TTTU,… 。此序列的周期与 T 的周期相同。对于块大小为 12,当循环的长度为 3、4 和 5 时,最长可能的周期为 3×4×5 = 60. 如果您的消息长于 60 个块,则可能需要更长的周期。这可以通过以某种重复或随机模式排列转置与 U 或 T 之一来完成,例如 U,TU,TTU,UTTU,UUTTU,… 这可以生成一个非常大的不同转置集合,前提是 T 和 U 各自具有较长的周期,并且 T 的循环重叠 U 的循环,如前文所述。

您可以使用累积测试来测试循环是否重叠足够。从 T 或 U 的任何一个循环开始。这形成一个只包含该循环的集合。将与其具有共同元素的 T 或 U 的任何其他循环添加到该集合中。现在将具有与您已选择的循环具有共同元素的 T 或 U 的任何其他循环添加到此较大的集合中。继续这样做,直到没有更多的共同元素为止。如果循环集现在包含 T 和 U 的所有循环,则具有很好的重叠。如果您决定使用超过两个转置,比如 T,U 和 V,则 T 和 U 应该重叠,T 和 V 应该重叠,U 和 V 也应该重叠。

这里有一个例子,使用本节早些时候的一些转置,T = (1,4,7,12,3) (2,10,6,9,11,8,5),U = (1,10,8) (4,6,5,12) (2,11,9,7,3)。从循环(1,4,7,12,3)开始。

(1,4,7,12,3)

这个与循环 U 的(1,10,8)共有元素 1,因此将该循环添加到集合中。

(1,4,7,12,3) (1,10,8)

这个与循环 U 的(4,6,5,12)共有元素 4,因此将该循环添加到集合中。

(1,4,7,12,3) (1,10,8) (4,6,5,12)

依此类推。因为这将包括 T 和 U 的所有循环,它们是很好的重叠对,当它们组合时会产生非常庞大的转置家族。******

7.8 分半置换

分半 置换 是我发明的一种计算机技术,使用二进制密钥交换可能是位或字节,或者可能是十六进制数字的单元。IBM 在公司的发明披露公告中发布了这一技术,并考虑将其纳入数据加密标准(DES)中。分半置换作用于块的大小为 2 的某个幂次方,通常为 32 或 64 个单元。对于 n 个单元的块,密钥将有 n-1 位。

让我们以 16 个字符的块大小为例。明文是乔治·华盛顿。置换将使用一个 15 位的密钥。密钥的第一位确定了块的左右 8 单元半部分是否交换。0 表示不交换,1 表示交换两部分。接下来的 2 位密钥位确定了这些半部分的 4 单元是否交换。如果密钥的第 2 位是 1,则块的第一季度与第二季度交换。如果密钥的第 3 位是 1,则块的第三季度与第四季度交换。密钥的接下来的 4 位确定了这些季度的半部分是否交换。例如,如果密钥的第四位是 1,则块的第一八分之一与第二八分之一交换。最后的 8 位控制了块的 16 分之一是否交换。例如,如果密钥的最后一位是 1,则块的最后 2 个单元,第 15 和第 16 个单元,字母 O 和 N 被交换。


要解密这个置换,步骤必须按相反顺序进行。也就是说,首先应该交换单元,然后是对、四个一组等。

7.9 多次变位

解决置换密码的一般技术,适用于许多类型的置换,即使类型未知,也是多次变位。要使用这种技术,您需要拦截几条相同长度的消息。如果这些消息使用相同的密钥进行置换,那么每条消息的第一个字母将在所有密码文本中的相同位置,第二个字母将在所有密码文本中的相同位置,依此类推。

我们可以利用这一事实。用所有密码文本中的第一个字母制作纸条 1。用所有密码文本中的第二个字母制作纸条 2,依此类推。制作与每个密码文本长度相同的纸条。这些纸条可以像解决列置换时那样匹配。可用的消息越多,纸条就越长,成功的机会就越大。通常认为需要至少 3 条消息。

让我们看一个例子。假设我们有这 3 个密码消息:


消息长度为 12。右侧显示了 12 条条带。

消息(1)包含一个 K。可能在 K 之前的字母有 C 和 N。消息(1)各包含一个。消息(2)包含一个 D。在 D 之前可能的字母是 N。消息(2)包含一个 N。让我们检查这些是否是合理的选择。我们有


在消息(2)中,最有可能在ND之前的字母是AE。这给出 3 种可能性:


将这 3 个选择与剩下的 9 条纸条进行匹配,最佳匹配是与第 4 条纸条。


这与我们之前已经组合的第 5 列和第 10 列非常匹配。


现在这 3 条消息很容易完成,(1)黎明时攻击,(2)发送更多弹药,和(3)立即见我。

第八章:杰斐逊轮式密码

本章包括

  • 托马斯·杰斐逊的轮式密码
  • 使用已知单词解密轮式密码
  • 当不知道任何单词时解密轮式密码

托马斯·杰斐逊(Thomas Jefferson)在 1790 年至 1793 年间发明了杰斐逊轮式密码,当时他担任乔治·华盛顿(George Washington)的国务卿。该装置由直径为 1/8 至 1/4 英寸,长为 6 到 8 英寸的铁棒或纺锤和直径约为 2 英寸,厚约为 1/6 英寸的 36 个木制圆盘组成。每个圆盘在中心都有一个与棒相同大小的孔,以便所有圆盘都可以紧密地放在棒上,形成一个木制圆筒。圆盘的平面面对着彼此,外圆的圆边可见。棒的一端有一个类似钉头的头部。另一端有螺纹,以便螺母可以拧紧到棒上,将圆盘牢固地固定在位。

圆盘的平面侧编号为 1 到 36。外圆边被分为 26 个相等的部分。字母表的 26 个字母以某种混乱的顺序写入或刻在这些 26 个部分中的每一个中,每个圆盘的顺序都不同。棒上圆盘的顺序是密码的关键,这种密码现在被称为复用密码

这是位于马里兰州福特米德(Fort Meade)的国家密码博物馆(National Cryptologic Museum)展示的一台 26 片杰斐逊密码轮的复制品。(照片由 Daderot 拍摄,根据知识共享 CC0 1.0 许可证发布。)


使用该装置对消息进行加密的方法是首先按照密钥指定的顺序将圆盘放在轴上。螺母松开,以便可以转动各个圆盘。消息的第一个字母在第一个圆盘上找到,然后转动第二个圆盘,使消息的第二个字母紧挨着第一个字母。然后转动第三个圆盘,使消息的第三个字母紧挨着第二个字母,依此类推,直到消息的前 36 个字母排成一行。然后拧紧螺母以固定它们的位置。

转动圆筒,还有其他 25 行字母,所有这些都是无意义的混乱。桑德拉可以选择其中任意一行作为密文。里瓦重复这个过程,在圆筒的一行上设置密文。很明显,其他 25 行中哪一行是预期的信息。

杰斐逊显然从未将这种密码投入使用。这个概念一直搁置,直到 19 世纪 90 年代初由Étienne Bazeries 重新发明。它于 1901 年被法国采用。Bazeries 的版本有两个改进。它有一个支架,这样设备可以放在桌子上进行双手操作,并且有一个导轨,帮助用户将字母对齐并选择用于读出密文的行。1914 年,上校帕克·希特发明了一种使用 25 个铝盘的密码版本,并于 1922 年被美国陆军采用为 M-94,于 1926 年被美国海军采用为 CSP-488。希特的版本只有 4.25 英寸长,足够小,可以放在口袋里,盘片的平面面上有凹槽和齿,使得它们在对齐后不会滑动。

这是国家密码博物馆展示的一张 CSP-488 的照片。


1916 年,Hitt 发明了密码的平面版本,并于 1935 年被军方采用,称为 M-138。这个版本是一个带有 25 个通道的平面铝板,上面放置着可以前后滑动的纸条,以模拟盘片的旋转。每个纸条上都有两份乱序的字母表。这个设备更加安全,因为纸条可以很容易地更换,甚至在必要时可以在野外手写。这很快被 M138A 或海军的 CSP-845 所取代,后者有 30 个纸条槽。设备附带 100 条纸条,用 2 位数字编号,因此任何消息使用了 100 条中的 30 条。这样可以产生 100!/70!=7.79×10⁵⁷种可能的密钥。

M-138A 中间有一个铰链,可以折叠以便携带。每半部分都有一个独立的导轨,用于对齐纸条并读出密码的 15 个字母。这些改进显著增强了密码的安全性。

军方在 1942 年或 1943 年左右放弃了这种带纸条的密码,但海军仍将其作为备用,以防止电力故障使得无法使用任何电子或电机式密码设备。

如果 Emily 没有设备的副本并且不知道字母表,解密多路复用密码是不可行的。如果 Emily 拥有设备,如果她知道一些可能的单词,解密就相对容易。当 Emily 拥有设备的副本并且知道一些可能的单词时,杰斐逊密码轮的评级为四到五。如果没有已知的可能单词,评级为六到七。Emily 拥有的密文越多,评级越低。相反,如果设备有很多额外的盘片,评级就会提高。例如,如果设备有 30 个盘片,用户可以从 100 个盘片中选择,评级可以达到八。对于非常短的消息,少于两倍盘片数量,除非 Emily 拦截使用相同密钥的多个消息,否则解密可能是不可能的。如果发件人每天只更改盘片的顺序一次,这种情况可能会发生。

8.1 已知单词解答

当你有足够的文本,并且知道至少部分消息时,可以解密使用杰斐逊密码轮加密的消息。通常,只要知道一个单词就足够了。假设你知道 Sandra 正在使用 M-94 设备,它有 25 个盘片,并且你拦截到了一条消息:


假设你还知道明文消息以 URGENT 开始。这已经被转换成了密文 CLPOXF。由于 URGENT 在一行上,而 CLPOXF 在另一行上,因此相应字母对之间的距离必须相同。让我们将带有 URGENT 的行称为第 1 行,假设带有 CLPOXF 的行是第 8 行。明文的第一个字母 U 和密文的第一个字母 C 分别来自第一个盘片的第 1 行和第 8 行。因此,在第一个盘片上,从 U 到 C 的距离必须为 7. 在第二个盘片上,从 R 到 L 的距离必须为 7. 在第三个盘片上,从 G 到 P 的距离必须为 7,E 到 O 也是,N 到 X 也是,T 到 F 也是。

搜索的最简单方法是依次尝试从 1 到 25 的每个可能的距离。从距离为 1 开始。找出所有距离 U 到 C 的距离为 1 的盘片。换句话说,U 的下一个字母是 C 的盘片。如果没有这样的盘片,那么你知道距离不是 1. 然后找出所有距离 R 到 L 的距离为 1 的盘片。同样,如果没有,那么距离也不能是 1。

假设你已经找到了 12 组盘片,其中字母对的距离都是 1. 现在你需要测试这 12 组盘片,看看它们中是否有任何一组是正确的。假设第一组盘片是 18-4-21-9-13-11. 从密文的第二块开始测试,字母从 26 到 50. 这个块以 ESIWVI 开头。将盘片 18 设置为字母 E,盘片 4 设置为字母 S,盘片 21 设置为字母 I,依此类推。现在看其他 25 行。如果它们都是无意义的,比如 HNSAEITFPGUW,那么你就知道 18-4-21-9-13-11 不是正确的盘片顺序。另一方面,如果你看到一些像 NCONDI 这样的合理文本,它可能是 UNCONDITIONAL 的一部分,那么 18-4-21-9-13-11 可能是正确的盘片顺序。再次测试,使用以 GAFOEM 开头的密文的第三块。如果第三和第四块都导致合理的文本片段,那么 18-4-21-9-13-11 可能是正确的…但继续搜索,因为你可能会找到更好的盘片顺序。

如果你没有看到任何可能的文本片段,那么尝试其他 11 组盘片顺序。如果这些都不起作用,尝试距离为 2、距离为 3,… 直到距离为 25. 可能会有几百种盘片顺序和距离的组合需要测试。这很乏味,但手工仍然可行。如果没有任何组合有效,请返回查找其中 2 个测试给出合理文本的盘片顺序。

一旦你确定了前 6 个盘的最有可能的序列以及相应的距离,然后尝试将其扩展到第 7 个盘。对于每个已知的盘的选择,你已经知道了从明文到密文的距离,因此扩展过程会相当快速。

*8.2 仅密文解决方案

当没有已知单词时,也可以解密多重密码。这被称为仅密文解决方案。我是第一个找到这种解决方案的人(“解密多重密码的计算机方法。” Cryptologia 2 (1978 年 4 月), pp. 152-160)。在原始的 1978 年论文中,我使用了二元频率,并逐步发展到三元组。如今的计算机速度更快,存储更多,所以我们可以跳过二元组步骤。该方法假设你有一张表,列出了英语中每个可能三元组的概率。你可以自己编制这样一张表,或者只需从互联网上下载一个三元组表。以下是该方法的要点。

假设与之前一样,艾米莉正在使用具有 25 个密码字母表的 M-94 设备,并且我们拦截了至少 3 个区块或 75 个字母的消息。我们知道关于消息的一切就是它是用英语写的。例如,假设我们拦截到了


首先尝试前 3 个盘的所有可能选择。有 25×24×23 = 13,800 种这样的选择。对于每个选择,将盘设置为密文每个区块的前 3 个字母,即CLPESIGAF。对于这些三字母组中的每一个,查看其他 25 行。这些行包含与密文三字母组对应的可能的明文三字母组。由于每个 3 行有 25 种选择,所以总的可能性数为 13800×25³ = 215,625,000。这可以很容易地通过台式电脑或甚至笔记本电脑处理。

对于每个 3 个盘和 3 行的组合,该组合的概率是 3 个明文三字母组的概率的乘积。等价地,概率的对数是 3 个三字母组概率的对数之和。这个想法是只保留最有可能的组合并丢弃其余的。例如,你可以只保留前 1%,或者你可以保留一定数量的好组合,也许是最好的 1,000,000 个。假设你选择保留前 2,000,000 个。

一种方法是生成所有 215,625,000 个组合,然后按概率对它们进行排序,并且去掉最低的 99%。这需要大量的存储空间。有更好的方法来做这件事。首先分配一个比你想要的组合数大 10%到 25%的表,比如说 2,500,000 个组合。开始生成这些组合并将它们放入表中。当表满了之后,需要将其减少大约 20%。

通过对表格进行排序并删除底部 20%,可以实现这一点。也就是说,你按照概率降序排序,然后将表格条目数量设置为 2,000,000。对 2,500,000 个项目进行排序比对 215,625,000 个项目进行排序要快得多,但有更快的方法。从表格中随机选择 10 个项目。(如果你不知道如何随机选择,那么选择距离表格 1/11、2/11、…、10/11 处的项目。)将这 10 个项目按照从最不可能到最可能的顺序排序。将这些排序好的项目命名为 a、b、c、d、e、f、g、h、i、j。设 P 为项目 b 的概率。删除表格中概率小于 P 的每个项目。

继续生成组合,但不要向表中添加任何概率小于或等于 P 的项目。每当表填满时,重复抽样、对样本进行排序并重新设置截止概率 P 的过程。

在所有这些步骤结束后,你将获得约 2,000,000 种由 3 个磁盘和 3 行组成的组合。下一步是将此扩展到 4 个磁盘。尝试所有 22 种可能的选择来选择第 4 个磁盘。这将给你约 44,000,000 个组合。现在查看由磁盘 2、3 和 4 形成的三元组。对于每种组合,将磁盘 1、2、3 上的三元组的概率乘以磁盘 2、3、4 上的三元组的概率,以获得所有 4 个磁盘上的四元组的近似概率。将对应于 3 个密文三元组CLPOESIWGAFO的明文四元组的概率相乘。

这将为你提供 4 个磁盘和 3 行的 44,000,000 种组合的概率。同样,你可以保留最佳的 1% 来给你 440,000 组四元组。使用与三元组相同的方法。

以此方式继续获取五元组、六元组、七元组等。每次添加一个磁盘时,你可以保留的组合比上一次少。当你的组合数量少于 100 时,你可以通过眼睛直接选择出正确的组合,并手动完成解决方案。

可能导致此过程失败的一个问题是:即使在普通文本中,也可能出现在你的三元组表中概率为 0 的三元组。如果 Emily 使用了空值,这种情况可能经常发生。这可能导致合法明文被拒绝。

一种解决方案是调整三元组概率,使得 0 概率永远不会出现。让 P(x) 表示字符串 x 的概率。如果一个三元组,比如 XYZ,的概率为零,你可以使用 P(X)P(YZ) 和 P(XY)P(Z) 中较大的那个。我建议将这个值除以 3,比如说,因为 XYZ 从未在你的三元组计数中出现过。如果 XYZ 的概率仍然为 0,则使用各个字母。例如,将 P(XYZ) 设置为 P(X)P(Y)P(Z)/10。

另一种解决方案是不要将概率相乘,而是使用其他函数将它们组合起来。例如,你可以将概率的平方和相加。这将强烈奖励常见的三元组,而大部分忽略罕见的三元组。

如果所有这些方法都失败了,那么就从密文中的另一个起始点再次尝试该过程。例如,从第五个磁盘开始。

第九章:分数化

本章涵盖

  • Polybius 方阵
  • 将一封信拆分成较小的部分,如比特或十六进制数字
  • 混合和重新组合这些部分

密码学的前两个基本工具是替换和置换,这些内容涵盖在第 5 至 8 章。密码学的第三个基本元素是分数化。这意味着将语言的正常单位,即字母、音节和单词,拆分为较小的单位并对这些单位进行操作。较小的单位通常是比特、十进制数字、十六进制数字或其他进制的数字。本章涵盖了使用 2、3、5、6 和 16 进制的数字进行分数化,以及其他形式的分数化。

9.1 Polybius 方阵

可能是将字母表示为较小单位的最古老方法是Polybius 方阵,我们在第 4.4 节中看到过。在这里,每个字母由两个基数 5 位数字表示,共有 25 种可能的 2 位数字组合。(希腊人没有 0 的表示,因此他们的数字从 1 开始。)

这是第 4.4 节的 Polybius 方阵。每个字母都用方阵中的坐标表示,即通过其行号和列号表示。例如,字母 P 在第 2 行第 5 列,因此表示为 25。需要时,为了清晰起见,也可以写成 2,5。


Polybius 方阵本身可以产生多种不同的密码。例如,它可以通过用方阵中右边的字母(U 变成V)、下面的字母(U 变成Z)、下面和右边的字母(U 变成S)或左边的字母(U 变成P)等方式产生简单的替换。这个想法可以通过改变方向来扩展为多表密码,比如向右、向左、向下、向右、向左、向下等。你也可以走 2 个字母的距离或使用象棋中的骑士走法。

Polybius 方阵也可以用于生成Polybius Ripple密码。首先,将消息中的每个字母替换为其坐标,简单地写在一行中。从此列表中的第二个数字开始,将前一个数字加到当前数字上。如果总和超过 5,减去 5 以保持数字在 1 到 5 的范围内。然后再次使用 Polybius 方阵将这些数字转换回字母。


Polybius 涟漪密码评级为三。通过使用不同的 Polybius 方阵将坐标转换回字母,可以加强密码。

让我们看一下基于 Polybius 方阵的几种手写密码,涵盖在第 9.2 至 9.7 节。我在第 9.8 至 9.11 节中介绍了一些额外的手写方法。然后我在本章的其余部分讨论了一些计算机方法。

9.2 Playfair

普莱费尔密码是由查尔斯·维特斯通(发音为 WHIT-stun)于 1854 年发明的。维特斯通在电气工程师中以发明维特斯通电桥而闻名,该电桥用于测量电阻。维特斯通和威廉·库克在塞缪尔·摩尔斯发明他的键式电报几年前就发明了指针电报。库克在英格兰商业化了指针电报,比摩尔斯在美国成立电报公司早了几年。

维特斯通的密码被称为普莱费尔密码,因为维特斯通的长相类似的朋友利昂·普莱费尔男爵(两人都有红头发,身高约 5’2’')主张使用它,并说服英国外交部在外交通信中使用该密码。

历史插曲

由于这个密码并不被称为维特斯通密码,这使得维特斯通的名字可以用于他大约在 1860 年发明并在 1867 年巴黎世界博览会上展示的第二个密码。维特斯通密码机看起来像一个大口袋手表,由两个固定的硬纸板同心圆环和两个可移动的时钟指针组成,通过简单的钟表机制连接。内环可擦拭,每条消息都可以更改。这个环上有乱序的 26 个字母表,而外环有标准的 26 个字母表加一个空格,共 27 个位置。您将长时钟指针移动到外环上的明文字母位置,短指针移动到内环上的密文字母位置。当长时钟指针完成 27 个位置的一次旋转时,短指针也会移动 27 个位置,即完成一次完整的旋转再加上 1 个额外的字母位置。因此,短指针在每次旋转时都从不同的位置开始。相当于具有可移动环而没有指针的设备于 1817 年由军械长德西厄斯·沃兹沃斯制造,该设备基于托马斯·杰斐逊于 1790 年制定的计划,但维特斯通的名字永远与这个概念联系在一起。

照片由拉尔夫·辛普森提供。铭文如下

“密码学。C.维特斯通 Inv^r。”


普莱费尔密码基于波利比奥斯方阵,每次加密两个字母。也就是说,它加密的是双字母组。方阵可以通过使用第 5.2 节中的任何方法混合字母来准备。为了使字母适应 5×5 方阵,会省略一个低频字母,如 J、Q 或 Z。(在法语中,J、Q 和 Z 很常见,所以省略 W。在德语中,省略 Q、X 或 Y。)当省略的字母出现在消息中时,会选择其他字母替换它。在我们的例子中,每个 J 都被I替换。

下一步是将信息分成二元素,例如 ME ET ME TO MO RR OW。如果一个二元素是双字母的,则应该将其分开,通常是通过在中间插入一个 X 来实现。(这是不应该从方块中省略 X 的一个很好的理由。)另外,如果消息包含奇数个字母,则在末尾添加一个 X。消息变为 ME ET ME TO MO RX RO WX。现在我们准备好加密它了。

普莱菲尔有 3 条规则:(1)如果两个字母位于同一行,则每个字母都被其右侧的字母替换;(2)如果字母位于同一列,则每个字母都被其下方的字母替换;(3)对于所有其他字母,每个字母都被二元素的另一个字母所在的同一行中的字母替换。理解方块环绕,因此在第 9.1 节的方块中,Y 的右侧字母是 U,Q 下方的字母是 W。

这些规则可以用坐标来重新表述。让我们要加密的二元素是 r1c1 r2c2,因此第一个字母在第 r1 行第 c1 列,第二个字母在第 r2 行第 c2 列。现在这 3 条规则变为

  1. 如果 r1 = r2,那么将替换为 r1,c1+1 r2,c2+1。
  2. 如果 c1 = c2,那么将替换为 r1+1,c1 r2+1,c2。
  3. 否则替换为 r1,c2 r2,c1。

让我们对我们的样本信息 ME ET ME TO MO RX RO WX 进行加密,看看这些规则是如何起作用的。第一个二元素是 ME。M 和 E 位于不同的行和不同的列,因此适用规则 3。M 位于第 2 行第 4 列,E 位于第 3 行第 2 列。因此,M 被替换为同一行的字母,即第 2 行,与字母 E 相同的列,即第 2 列。第 2 行第 2 列的字母是 S,所以 M 被替换为S。同样,E 被替换为第 3 行第 4 列的字母,即C

同样地,ET 被DO替换,第二个 ME 被SC替换。字母 T 和 O 位于同一行,因此适用规则 1。它们被替换为其右侧的字母。T 被N替换,O 被Q替换。所以 TO 被替换为NQ

MO 按照规则 3 进行。它被替换为SR。R 和 X 位于同一列,因此适用规则 2。RX 被替换为XM。RO 和 WX 都使用规则 1,被替换为TQXY。因此整个消息变为SC DO SC NQ SR XM TQ XY,在重新分组后变为SCDOS CNQSR XMTQX Y

这里有一些图表可以帮助你形象化地理解大二元素 LY、TO 和 RX 是如何被加密的。


普莱菲尔密码一直被军事和外交用途使用,至少持续到 1960 年。接下来,让我们简要地看一下普莱菲尔密码如何被解密。

9.2.1 解密普莱菲尔密码

请注意,每个字母只能由其所在行上的其他 4 个字母和其下方的字母替换。对于每个字母,在网格中有其他 24 个字母。其中,只有其所在列中的 4 个字母会导致该字母被其下方的字母替换。因此,被下方字母替换的概率为 4/24,或 1/6。因此,它被其所在行上的另一个字母替换的概率为 5/6。

由于方格中有 5 行,而英语字母中频率超过 5% 的有 9 个字母,因此至少有几行包含至少 2 个高频字母。如果这样的行少于 4 行,则必须至少有一行包含 3 个高频字母。这些行中的其他字母在密文中将比任何其他字母更频繁地出现。如果您有足够的密文,那么密文中出现频率最高的 3 到 5 个字母很可能在方格的同一行上。

如果我们去除包含这些字母的所有双字母组合,那么剩余双字母组合中出现频率最高的 3 到 5 个字母很可能在方格的同一行上。知道了 5 行中的 2 行上的高频字母就足以开始重建方格了。下一步是尝试放置一些可能的单词。

Playfair 密码的评级为三。有几种方法可以增强 Playfair 密码的强度。我就提几种。

9.2.2 强化 Playfair 密码

这里有几种更强的 Playfair 密码变体。

Nullfair 或 nofair

在密文中可以按照重复的间隔添加空值,就像这样:


Nullfair 的评级为五。

Playfair+1

这种超级简单的增强方式在 Playfair 密文中添加了重复的二进制密钥。在有 1 位的地方,使用字母表的下一个字母。如果二进制密钥的长度为奇数,则 Playfair+1 更强大。


Playfair+1 的评级为五。 Playfair+1 也可以用三进制数完成。加法密钥中的数字保持较小,因此可以在脑中进行加法,而不需要表格。

双 Playfair

Playfair 密码可以通过两次应用来加强。在第二轮中,成对字母应跨越第一轮创建的双字母组合。 (1) 使用 Playfair 密码对消息进行加密。 (2) 将第一个字母移到末尾,将最后一个字母移到开头,或在两端都添加一个空值。 (3) 应用另一轮 Playfair。如果第二个 Playfair 密码使用了不同的混合字母表,则这是最强的。双 Playfair 的评级为六。

Playfair 涟漪

这是双 Playfair 的一种变体,只需通过消息进行一次传递,而且只需要一个 Polybius 方块。让明文为 P[1]P[2]P[3]P[4] … 从左端开始,使用 Playfair 对明文二元组 P[1]P[2] 进行加密,产生密文二元组 C[1]C[2]。然后将 C[2]P[3] 作为第二个二元组进行加密,得到 D[2]C[3]。注意,D[2] 已经加密了两次。接下来,你将 C[3]P[4] 进行加密,得到 D[3]C[4],依此类推,每一步向右移动一个字符。Playfair 波动被评为 Six。

由于密文的第一个字母 C[1] 和最后一个字母 C[n] 仅加密了一次,因此你可能希望将它们作为一个二元组加密以完成循环。


PolyPlayfair

使用两个不同的 Polybius 方块,并通过使用重复密钥在它们之间交替。例如,密钥为 11212 意味着在每个 5 个二元组的周期中,第一个、第二个和第四个二元组将使用方块 1 进行加密,而第三个和第五个二元组将使用方块 2 进行加密。这可以扩展到三个或更多方块,相应的设置时间会更长。使用两个方块和不超过 10 位数字的密钥,PolyPlayfair 的评级为 Five。如果密钥是由 Chained Digit 算法生成的,当数字为 0 到 4 时使用第一个方块,当数字为 5 到 9 时使用第二个方块,评级会增加到 Six。(注意:使用链式数字序列的奇偶性具有更短的周期,因此它更弱。)

转位

使用 Playfair 密码对明文进行加密后,可以对结果的密文进行转置。转置可以像第 7.2 节的栏转置那样复杂,也可以像第 4.6.1 节的 Bazeries 类型 4 密码那样简单。使用栏转置,Playfair 评为 Seven。使用分段反转,Playfair 评为 Five。

9.3 双方块

Two Square 密码,有时称为 双 Playfair,是 Playfair 密码的改进版本。它是由法国业余密码学家费利克斯·玛丽·德拉斯泰尔(Félix-Marie Delastelle)发明的,并在他的 1902 年著作 Traité Élémentaire de Cryptographie 中描述。顾名思义,它使用两个 Polybius 方块而不是一个,因此有两个混合字母表而不是一个。这两个方块可以水平并排放置,也可以垂直从底部到顶部放置。水平版本如图所示。在此示例中,使用关键词 FIRST 和 SECOND 混合了两个方块,并且省略了字母 Q 以适应 5×5 网格。


与 Playfair 一样,消息每次加密 2 个字母。也就是说,Two Square 加密双字母组。要加密双字母组 SO,我们在左方块中找到 S,在右方块中找到 O。S 的替代字母是右方块中与 S 同一行且与 O 同一列的字母,即T。O 的替代字母是左方块中与 O 同一行且与 S 同一列的字母,即K。因此,双字母组 SO 变成了TK

与 Playfair 不同,不需要分开双字母。两个字母可以在两个方块的不同行上。例如,SS 变成MK。在大多数情况下,密文中的双��母不会对应于明文中的双字母。

这里是替换过程的可视化展示。


Two Square 密码的一个重要弱点是,当一个双字母组的两个字母在网格中的同一行时,替代字母就是这两个字母的反向。例如,ST 会变成TS。这种弱点被称为透明性,有时会导致整个单词泄露出来。例如,SU ND AY 会变成US DN YA

为了防止这种情况,我提出了这个相同行规则:当两个字母在同一行上时,它们被它们下面的字母替换,必要时回到顶行。例如,ST 现在会变成DY,VI 会变成FP

使用相同行规则,Two Square 评级为四。将这种变体称为Two Square B

德国人字面上采用了“双 Playfair”这个名称。他们使用了 Two Square 密码对每个双字母组进行加密,然后再次使用相同的两个方块进行加密。结果基本上是一个通用的双字母替换(第 6.5 节)。

加强 Playfair 密码所使用的方法也可以用于加强 Two Square 密码,比如TwoSquare+1Two Square Ripple,评级相同。这里是一个额外的变体。

Playfair TwoSquare

Two Square 密码使用了两个 Polybius 方块。这两个方块中的任何一个都可以用于 Playfair 密码。这提示了一种混合方法,将 Playfair 和 Two Square 结合起来。同样,我们将使用一个数字密钥来控制每个连续双字母组的加密。1 表示使用左方块中的 Playfair 加密双字母组,2 表示使用右方块中的 Playfair 加密双字母组,3 表示使用 Two Square 或 Two Square B 加密双字母组。最好是数字密钥至少包含每个数字。由于 Two Square 比 Playfair 更强大,3 应该比 1 或 2 在密钥中更频繁出现。大约 50% 是合适的。Playfair TwoSquare 评级为六。

9.4 三方块

Three Square 是我的独创想法。否则,它没有特别的优点。我在这里包括它只是因为我在为这本书做研究时阅读的一本书说 Two Square 不能扩展到超过两个方块。我喜欢挑战。

顾名思义,Three Square 使用三个 Polybius 方格。这些方格应该与独立的密钥混合得很好。Three Square 每次加密 3 个字母,也就是加密三字母组合。这比 Two Square 更强大。


基本思想是,每个字母都被其右侧方格中的一个字母替换。替换字母与原字母在同一行,但在下一个三字母组合中的列中。

假设我们希望加密三字母组合 THE。第一个字母是 T,第二个字母是 H,第三个字母是 E。我们使用第一个方格中的 T,第二个方格中的 H 和第三个方格中的 E 进行加密,就像这样。


T 的替代字母位于包含 T 的行,以及第二个方格中包含 H 的列,所以 T 被替换为V。H 的替代字母与第三个方格中包含 E 的列上的 H 在同一行,所以 H 被替换为R。E 的替代字母与第一个方格中包含 T 的列上的 E 在同一行,所以 E 被替换为Z。因此,THE 变成了VRZ

这可以如下图所示:


解密是相反的过程。由于密文三字母组合VRZ的第一个字母来自第二个方格,我们从第二个方格开始解密,像这样:


Three Square 比 Two Square 更容易出现字母位于同一行的问题。在 XYZ 这样的三字母组合中,可能出现 X 和 Y 在同一行,Y 和 Z 在同一行,或者 Z 和 X 在同一行。这需要额外的两条规则来防止透明度,其中一个字母表示它自己。

规则 1: 如果三字母组合中连续的两个字母位于同一行,则这两个字母中的第一个被加密为第二个字母的右侧字母,如果需要则绕到左侧列。例如,在三字母组合 SUB 中,S 在第一个方格的顶行,而 U 在第二个方格的顶行。因此 S 被替换为V而不是U。类似地,在三字母组合 LET 中,T 在第三个方格的第三行,而 L 在第一个方格的第三行。所以 T 被替换为G而不是L

这个图示说明了规则 1。没有规则 1,在三字母组合 SUB 中,S 将被U替换。相反,它被中间方格中 U 右侧的字母替换,即V。没有规则 1,在三字母组合 LET 中,T 将被L替换。相反,它被左方格中 L 右侧的字母替换。这从第 5 列绕到第 1 列,其中有字母G


规则 2: 如果三元组中的所有三个字母都在同一行上,那么每个字母将被其下方的字母替换,如果需要,将回到顶行。因此,FUN 将被替换为AZV,而 WRE 将被替换为IXL

根据这些规则,三方格被评为五。

Playfair ThreeSquare

三方格密码使用三个波利比斯方格。这些方格中的任何一个都可以用于 Playfair 密码。这表明了一种混合方法,将 Playfair 和三方格密码混合在一起。您可以使用数字密钥,例如 1,4,1,3,4,2,4 来控制每个连续的二元组或三元组的加密方式。1 表示使用第一个方格中的 Playfair 将下一个 2 个字母加密为二元组。2 表示使用第二个方格中的 Playfair 将下一个 2 个字母加密为二元组。3 表示使用第三个方格中的 Playfair 将下一个 2 个字母加密为二元组。4 表示使用三方格将下一个 3 个字母加密为三元组。最好是数字密钥至少包含每个数字。由于三方格比 Playfair 更强大,数字 4 应该比数字 1、2 或 3 更频繁地出现在数字密钥中。大约 50% 的频率是合适的。也就是说,4 应该与 1、2 和 3 的总和一样频繁出现。同样,生成从 1 到 6 的随机数,并使用 4、5 或 6 进行三方格加密。

由于 Playfair ThreeSquare 混合了二元组和三元组,大约一半的二元组和三分之二的三元组不会落在偶数边界上。这意味着强度的增加比 Playfair TwoSquare 的增加更大。Playfair ThreeSquare 被评为七。

可以将 Playfair、Two Square 和 Three Square 结合成一个更复杂的密码,毫无疑问具有更强的强度,但是 Playfair ThreeSquare 已经在推动人类代码员的极限。速度和准确性都会受到影响。

还有一种相反的方法,我称之为跨三方格。将明文分组成包含每行四个 3 个字符块的行。使用三方格密码对每个块进行加密。现在,取第一个块的最后一个字母和第二个块的第一个字母,并使用第一个波利比斯方格的 Playfair 密码对该二元组进行加密。取第二个块的最后一个字母和第三个块的第一个字母,并使用第二个波利比斯方格的 Playfair 密码对该二元组进行加密。取第三个块的最后一个字母和第四个块的第一个字母,并使用第三个波利比斯方格的 Playfair 密码对该二元组进行加密。这样可以提高三方格密码的强度,而不会增加太多复杂性或时间。始终使用相同行规则。

9.5 四方格

四方密码是由 Félix-Marie Delastelle 大约于 1890 年发明的,并在他于 1902 年去世后的 3 个月出版的书籍Traité Élémentaire de Cryptographie中描述。Delastelle 在四方密码之后发明了双方密码,作为简化且稍微不那么安全的版本。然而,使用第 9.3 节中描述的同行规则,可以认为这两种密码的强度相等。

如其名称所示,四方密码利用四个 Polybius 方块。其中两个方块包含标准字母表,另外两个方块包含使用独立密钥混合的字母表。消息以两个字母为一组进行加密,即四方加密二元组。

这是一个示例排列。


加密使用熟悉的矩形方案。您在标准字母表中定位两个明文字母,并将它们替换为矩形对角线上的字母,如下所示:


由于两个明文字母永远不可能在 10×10 网格的同一行或同一列中,因此无需特殊规则或分隔双字母。唯一需要空字符的情况是为了完成最后一个双字母组合。四方加密的评级为五。

循环方法

要获得更大的强度,您可以使用类似于第 4.6.1 节中的分段反转的简单换位。此换位使用重复的数字密钥,例如 1、3、1、4、2、6。将密文分成 7 个字符或任何其他奇数长度的块。在每个块的上方写下连续的密钥数字。然后将每个块左移其密钥数字指示的位置数。例如,如果密钥数字是 4,则将最左边的 4 位数字移动到块的右端。这是一个例子:


使用循环方法的四方加密的评级为六。

分半方法

加强四方加密的另一种方法是事先转置消息。假设消息是 AMBASSADOR WILKINS ASSASSINATED KABUL TODAY。这有 39 个字母。将 39 除以 2 并四舍五入得到 20。将消息写成两行,每行 20 个字母,并从垂直方向读取双字母组合。使用四方进行这些双字母组合的加密。


这些双字母组合不再具有正常的双字母组合频率或英语双字母组合的正常联系频率。使用分半方法的四方加密的评级为七。

9.6 双分

让我们再看一个基于 5×5 波利比乌斯方阵的历史手工密码。这是双重密码,也是在 19 世纪 90 年代由菲利克斯·玛丽·德拉斯特尔发明的。双重是一个 3 步密码,其中(1)字母被转换为它们的波利比乌斯坐标,(2)这些坐标被重新排列,(3)然后坐标被转换回字母。最初,德拉斯特尔将整个消息写出,坐标垂直写在每个字母下面,然后他将坐标对水平地读出,先横穿顶行,然后横穿底行。

现代方法是将消息分成固定大小的块。块大小应该是奇数,如 5、7 或 9。如果块大小是偶数,则艾米莉可以将块分成二元组。

第一步是将字母转换为波利比乌斯方阵中的坐标。假设块长度为 5。5 个明文字母可以表示为 X1、X2、X3、X4 和 X5。它们的行和列坐标可以表示为 R1C1、R2C2、R3C3、R4C4 和 R5C5。这些 R 和 C 符号各自是从 1 到 5 的数字,先是行坐标,然后是列坐标。这些坐标对是垂直地写在每个块的每个字母下面,像这样:


然后按照 R1R2、R3R4、R5C1、C2C3、C4C5 的顺序读取。这里是一个例子。使用关键词 SAMPLE 混合的波利比乌斯方阵对单词 MAJOR 进行了加密。


请注意,密文中的第三组字母坐标,R5C1,是一个行/列对。这意味着第三个密文字母将来自与第五个明文字母相同的行,R5,以及与第一个明文字母相同的列,C1。这个同时出现行坐标和列坐标的情况被称为自然

由于方阵中每行有 5 个字母,每列有 5 个字母,所以第三个密文字母与第五个明文字母相同的概率为 1/5,第三个密文字母与第一个明文字母相同的概率也是 1/5。也就是说,R5C1R5C5相同的概率是 20%,而R5C1R1C1相同的概率也是 20%。在这个例子中,确实发生了这种情况。第五个明文字母是 R,第三个密文字母也是R

现在看看第一个密文字母R1R2。这是一个行/行对,而不是一个行/列对。在这里,只有第一个坐标R1处于正确的位置,形成了一个行/列对。另一个坐标R2是列位置上的行坐标。这样的单一放置被称为半自然。它意味着第一个密文字母来自波利比奥斯方阵的与第一个明文字母相同的行。因此,第一个密文字母与第一个明文字母相同的机会为 20%。

第二、第四和第五个密文字母也是如此。它们中的每一个都落在明文字母的同一行或同一列中的一个。因此,它们每一个有 20%的机会与该明文字母相同。在这个例子中发生了这种情况,第二个密文字母J与第三个明文字母相同。

这是 bifid 密码的一个严重弱点,使得 Emily 能够猜测并放置可能的单词。另一方面,如果明文和密文字母不同,则知道它们位于同一行或列中。在本例中,第一个明文字母R1C1是 M,第一个密文字母R1R2S。这意味着 M 和 S 必须在波利比奥斯方阵的同一行中。当 Emily 推断或猜测一个单词时,这提供了几个这样的等价物。这反过来又使得放置其他单词变得更容易。当积累了足够多的这些字母对时,Emily 可以重构方阵。

由于这些弱点,bifid 密码评分为三。

9.6.1 共轭矩阵 bifid

这些问题可以通过使用不同的 Polybius 方阵将坐标转换回字母来消除。例如,方阵 2 产生的密文是VBJEF


两个单独的波利比奥斯方阵组成的双重 Polybius 方阵被称为共轭矩阵 Bifid。在这个上下文中,矩阵只是指一个字母或字符的矩形数组。共轭矩阵 bifid 密码评分为五。

有几种方法可以增强 bifid 密码的强度。一种方法是使用重复的数字密钥来改变块长度,例如 5、11、7。块长度将是该密钥的循环重复,即 5、11、7、5、11、7、5、… 如果您愿意,您可以通过使用链式数字生成器生成块长度,并将数字翻译为奇数块长度。一种可能性是


因此,如果生成器生成数字 3、6、2、7,…,那么块长度将为 11、7、9、9、…

使用短重复密钥和共轭矩阵的密码评分为六。使用长重复密钥或使用随机数生成器生成块长度的密码评分为七。

另一个类似的想法是从每个块的不同起点开始读出坐标。你可以使用一个数字密钥来指定起点的顺序。如果块的长度为 L,密钥中的每个数字可以是从 1 到 2L 的任何位置。从 1 到 L 的数字表示坐标顶行的起始位置,而从 L+1 到 2L 的数字表示底行的起始位置,就像这样:


坐标将成对地从左到右读取。这是使用数字密钥 4、9 读取坐标的顺序。起始位置 4 和 9 已经阴影化。


这种方法将评级提高到六。

加强双重栅栏密码的另一种方法是使用更强的置换来混合坐标。使用长度为 L 的标准双重栅栏将 2L 个坐标写入 2×L 块中。坐标被垂直写入块中,水平读出。我们将其识别为一个非常简单的路径置换,描述在第 7.1 节。在第七章中涵盖了几种更强的置换,尤其是列置换。这种密码的一个例子是由情报官尼布尔中尉发明并由德国人在第一次世界大战中使用的ADFGVX密码。在 ADFGVX 密码中,由字母 A、D、F、G、V、X 表示的坐标通过列置换混合,然后作为这些字母的字符串传输。这种密码的评级为五。

如果你使用更长的块,比如 20 个字符,那么将会得到 40 个坐标。(使用这种方法,块的长度可以是偶数也可以是奇数。)这足以有效地使用列置换来混合坐标。或者,你可以回到德拉斯泰尔的原始概念,并将整个消息的坐标作为单个块。无论哪种方式,使用共轭矩阵,此密码的评级为八。使用双列置换,密码的评级为十。假设有四个长的独立密钥和混合良好的字母表,这是一种无法破解的纸笔密码。称之为双列置换双重栅栏

9.7 对角双重栅栏

对双重栅栏密码的变种是将波利比斯坐标垂直地写在每个字母下面,然后沿对角线从左下到右上(或从西南到东北)读取它们。这被称为左对角线反对角线。(在纹章的冠上,它被称为邪恶的酒吧,并表示非婚生的出生。)对于最后一个字母,你会回到第一列(阴影部分的数字 1)。这样做的好处是没有自然数或半自然数可以帮助艾米莉猜测单词。这是一个例子。


对角 bifid 被评为 Four。与共轭矩阵一起,它被评为 Five。与共轭矩阵和定期变化的块大小一起,它被评为 Six。与古典 bifid 不同,对角 bifid 可以使用奇数和偶数块大小。

9.8 6×6 方阵

如果你的消息包含很多数字,使用 6×6 的 Polybius 方阵而不是 5×5 方阵可能会更有优势。6×6 方阵允许您使用完整的 26 个字母表以及从 0 到 9 的数字。不需要从字母表中省略 J 或 Q。如果你正在手动加密,这就需要额外小心地区分字母 O、I、Z、S 和 G 与数字 0、1、2、5 和 6。一些人采用特殊的惯例,例如在所有数字下划线。我觉得这样很麻烦且容易出错。我通常只是夸大区分这些字符与它们的同伴的特征,例如用额外宽的衬线写字母 I。

前面 5 节中的所有方法,即 Playfair、Two Square、Three Square、Four Square 和 Bifid,都可以与 6×6 方阵一起使用,以及它们的所有变体。

9.9 三重置

如果你喜欢方阵,那么立方体呢?另一种分数方法,也是在 1890 年代由 Félix-Marie Delastelle 发明的,是 Trifid 密码。与通过在基数 5(五进制数)中的两位数字来代表字母不同,每个字母由三位基数为 3 的数字(三进制数)表示。这给出了 3×3×3,或 3³,不同的 3 位数字组合。这足以表示字母表中的所有 26 个字母加上一个额外的字符。Delastelle 使用了一个 + 加号表示第 27 个字符。

额外的字符 + 可以用作标点符号的形式,或者它可能是一个信号,表示接下来的明文字母应该被解释为一个数字。对应关系 +A = 1, +B = 2, … , +J = 0 可以被使用。字母表的其余部分也可以被用作特殊字符。例如,+K 可以表示句号,+L 可以表示逗号,等等。

就像 2 位数字组合可以显示为 5×5 字母方阵一样,3 位数字组合可以显示为 3×3×3 字母立方体。每个三元组中的 3 位数字可以被解释为该字母位于的立方体中的坐标。这些坐标通常称为层、行和列。

这里是 27 个三元组合,按顺序排列,字母等效通过使用关键词 EXAMPLE 弱混合,并交替列。例如,字母 N 由三元组 102 表示,因此它将位于 3×3×3 字母立方体的第 1 层、第 0 行和第 2 列。


三方加密器的工作原理与双重加密器类似。明文按固定大小的块写入。大小可以是任何不是 3 的倍数的数字。将这 3 位数字垂直写在每个消息字母下面,然后水平分组读取。然后使用相同的等价关系将它们转换回字母。这里有一个明文为 SEND HELP,块大小为 4 的示例。


用于双重加密器的相同分析和技术也可以应用于 trifid,并且具有相同的评级。您可以使用两个单独的替换表将字母转换为数字,然后将数字转换回字母。您可以变化块的大小。您可以从每个块的不同位置开始读取数字。您可以使用强大的置换来混合三进制数字。

一个自然的问题是是否有与对角双重加密器类似的对角 trifid 加密器。对角双重加密器比原始双重加密器的优势在于,对角版本不会产生削弱原始版本的半自然数。在类似的对角 trifid 中,每组的中间数字将是第三自然数,因此失去了优势。然而,如果您使用两个不同的混合字母表,一个用于数字的书写,另一个用于读取它们,则自然问题会消失。带有两个字母表的对角 trifid 的评分为五。

9.10 三方加密器

当我在打前面关于 trifid 加密器的段落时,我意识到 3×3×3 的立方排列非常适合于描述第 9.3 节中描述的双重加密器的三维类比。在两个维度中很容易想象双重加密器,但在三个维度中很难想象一个立方体,因此我将仅根据坐标描述新的加密器。让我们将此加密器称为 三方加密器

两方加密器一次加密两个字母,使用两个替换表,因此三方加密器会一次使用三个替换表加密三个字母。这里是使用关键字 COLUMBIA、STANFORD 和 HOPKINS 很好地混合了的三个表。这三个替换表分别标记为 S、T 和 U。这里的 S 表示替换(Substitution),T 表示表(Table),U 表示字母表中的下一个字母。

替换表对应字母表的 26 个字母和字符 + 与 27 个三元组。


与 trifid 类似,三方加密器首先将每个字母的 3 位数字三元组垂直写在其下方。第一个字母的 3 位数字来自替换表 S,第二个字母的 3 位数字来自表 T,第三个字母的 3 位数字来自 U。该模式在此处显示,并由三元组 FLY 进行说明。


然后从左到右读出数字,并将这些水平三元组转换回字母。使用表 S 转换顶行,表 T 转换中行,表 U 转换底行似乎很自然。然而,这会导致顶行与左列相同的概率为 9 分之 1,因此第一个明文字母将被自身替换。也就是说,S1S2S3 与 S1T1U1 相同的可能性为 9 分之 1。中行和底行也是如此。让我们将这种情况称为部分自然

为此,第二行使用替换表 S,第三行使用表 T,顶行使用表 U。这样就消除了自然性。以下是模式。


由于手动加密时很难保持清晰,我建议在每个数字三元组上面写上替换表的选择。这类似于使用贝拉索密码(第 5.5 节)时在每个明文字母上写上密钥字母。以下是使用明文消息 FLY TO ROME 的三方块加密的示例。


三方块密码的评级为七。

有一种简单的方法可以加强三方块密码。不再像刚才那样使用三个替换表严格轮换地将三元组转换回字母,而是使用一个密钥来设置读出表的顺序。该密钥将由字母 S、T 和 U 以某种打乱的顺序组成,例如 SUTUTTUUSTS。这个密钥的长度不应该是 3 的倍数。我将这个变种称为三方块加密。以下是使用这个读出密钥对 FLY TO ROME 进行加密的方法。


使用三方块加密,大约有三分之一的字母会有部分自然性。也就是说,三个填写数字中的一个将与三个读出数字中的一个相同。然而,艾米丽不会知道哪些字母有这种缺陷,也无法利用它。

三方块加密的评级为九。

因此,你可能会说,是否可能将评级提高到十,而不使密码对手工使用过于复杂?感谢你的提问。首先,让我们将替换表的数量从 3 增加到 6。让我们称它们为 S、T、U、V、W 和 X。我们将不再使用严格的 STU、STU、STU…轮换写入三元组,而是使用另一个字母密钥,该密钥由这 6 个字母以某种打乱的顺序组成。填写密钥可以是 TWXUSTTVWV,读出密钥可以是 VWTXXSUSVTU。理想情况下,这些密钥的长度应该是互质的,并且两者的长度都不可被 3 整除。在这里,长度分别为 10 和 11。我们将这个密码称为三方块超级密码。这是一个使用明文 FLY TO NEW YORK 的三方块超级密码的示例。


三方块超级密码的评级为十。这是另一种不可破解的手工加密。

9.11 矩形网格

到目前为止,我们只讨论了字母的方形和立方体阵列。在密码学中,没有要求字母网格的所有维度都相同的限制。英文字母表有 26 个字母基本上是历史的偶然。如果我们使用 33 个字母的俄语字母表,我们可能会选择 4×8 或 5×7 的矩形。

如果我们想要所有 26 个字母的字母表,那么 3×9 或 4×7 的矩形可能更可取。这些给您提供了完整的 26 个字母的字母表,再加上一个或两个额外字符。我们之前已经讨论过这些额外字符的使用,例如用于在字母和数字之间切换。基于波利比奥斯方格的大多数密码与 5×5 方格一样适用于 3×9 或 4×7 的矩形,假设所有矩形都以相同的方向排列。这些是 Playfair、Two Square、Three Square、Four Square 和对角线 bifid 密码。

实际上,当与那些矩形一起使用时,这 5 种密码可能更强大,因为字母表中的每个字母都有更多可能的替代字符。使用 Playfair 或 Two Square 时的缺点是,两个字母在同一行的概率较高,因此它们将被其下方或右侧的字母替换。

下面是使用 3×9 矩形进行 Playfair 密码的示例:


9.12 十六进制分数

到目前为止,本章仅专注于手动方法。这意味着仅使用大写字母的小数组。对于计算机使用,通常希望使用完整的字母表,包括大写和小写字母、数字、标点符号、特殊符号、音标,以及可能是多个字母表。简而言之,您可能希望拥有计算机的完整文本功能。做到这一点的最简单方法是使用标准计算机代码之一,如 UTF-8 或 UTF-16,将每个字符表示为一个 8 位字节。

将 8 位字节分数化的一种自然方式是将其拆分为两个 4 位十六进制数字,或十六进制数字。所有基于波利比奥斯方格的分数化方法也适用于 16×16 方格,即 Playfair、Two Square、Three Square、Four Square 和 bifid。如果 16×16 方格使用大密钥混合得很好,那么这些方法比使用 5×5 方格的同一方法更强大。这是因为 256 个字符的排列方式远远多于 25 个字符的排列方式,即 8.58×10⁵⁰⁶与 1.55×10²⁵。

使用十六进制分数化的简单方法是:(1)通过使用混合得很好的密钥替换表将消息的字符转换为十六进制数字,(2)使用一些置换密码对这些数字进行混淆,然后(3)使用第二个混合得很好的密钥替换表将十六进制数字的对转换回字节。

最简单的转位法就是将第一个十六进制数字移到末尾,这样 12 34 56 78 就会变成 23 45 67 81。这可能被称为 Cycle Hex。它本质上是对角线的二重置位(第 9.7 节),只不过是在基数为 16 而不是基数为 5 下进行的。Cycle hex 评级为 Five。你也可以使用第 4.6.1 节描述的逐段反转置换来打乱字母顺序。这可能被称为 Piecewise Hex。它也评级为 Five。一种更强大的方法是使用列转位密码来打乱十六进制数字。这可以称为 Columnar Hex。它评级为 Seven。使用双列转位置换后,评级增至 Ten。

这些方法可以用于对任何计算机文件进行加密。但是,如果文件是纯文本,则可以进一步增强这些方法。纯文本通常会使用少于 256 个可能的字节值中的 100 个以下。其余的字符代码可以用于空值、双字母组、三字母组和第 6.4 节描述的其他用途。如果做得好,这会将 cycle hex 的评级提升至 Six,piecewise hex 的评级提升至 Six,columnar hex 的评级提升至 Eight。

9.13 位级分数化

分数化也可以用于表示消息中代表字符的各个位。长度为 N 的字符块将由 8N 位表示。这些可以以几种方式形成矩形,例如 2×4N、4×2N、8×N 和 N×8。例如,5 个字母的块将由 40 位表示,可以写成 2 行 20 位、4 行 10 位、8 行 5 位或 5 行 8 位。这对手工操作来说很麻烦,但在计算机上很容易实现。

这是一个示例,展示了如何将 5 个字符水平写入一个 5×8 的块中,然后垂直读出。此示例使用标准的 UTF-8 字符代码。例如,大写字母 A 表示为 01000001。明文是单词 DELTA。


位按列向下读取。由于每列只包含 5 位,因此每个密文字节必须跨越两列或更多列。第一个密文字节的 8 位位于列 1 和列 2 中,并用中等高亮度显示。第一列包含 00000,第二列的前 3 位为 111,因此密文的第一个字节为 00000111,或十六进制 07。这是控制字符 BELL,可以追溯到电传打字机时代,当时会发出退格铃声。它现在已经没有图形表示。我会用符号 来代表铃声字符。

第二个密文字节来自跨越列 2、3 和 4 的较暗突出部分。第二列的最后 2 位是 11,第三列包含 00000,第四列的第一位是 0。结合这些,第二个密文字节为 11000000。这代表字符 À,是一个带重音符号的大写字母 A

密文的第 3 和第 4 个字节是**“x**,即双引号和小写字母 x。第五个字节来自第 7 和第 8 列,即 000 和 01001。字节 00001001 代表HTAB,或水平制表符,是看不见的。我将使用箭头头部来表示它。因此密文是♪À“x►

这看起来很神秘,但这种方法很弱,因为它在将明文转换为比特和将比特转换回字符时使用了标准字母表。它被评为一。如果这些步骤使用了两个独立的混合密钥字母表,则此密码只是共轭矩阵双字母变体(9.6.1 节)的二进制版本。这种方法可以称为Hex Rectangle。它与共轭矩阵双字母变体密码具有相同的评级,即五。

自然地将八个 8 位字节形成一个 8×8 比特方块。使用一个混合字母表将每个字符的 8 位写入方块中,并使用另一个混合字母表水平地读取它们。这只是十六进制矩形的一个 8×8 方块版本,评级为六。

9.13.1 循环 8×N

提高此密码的强度很容易。对于任何 N 个字符的块,垂直地将它们的 8 位表示写入 8×N 的矩形中。将每行循环地向左移动 0 到 N-1 位位置。例如,abcdefgh 循环左移 2 个位置将得到 cdefghab。然后垂直地读取每个 8 位列。这里有一个使用 8×8 比特方块的示例。每行都按其左侧指示的量向左循环。


这种密码已经达到了手工操作的极限。它需要 3 个密钥,即两个用于混合两个字母表的密钥,以及一个用于指定位移量的 8 位数字密钥。它可以称为Cyclic 8×N。当 N 为 6 或更大时,它被评为七。随着块大小 N 的增加,密码变得更强大。

当矩形是正方形时,你可以同时旋转行和列,得到一个Bicyclic 8×8密码。你应该交替方向进行。水平写入位,垂直循环位,水平循环位,然后垂直读取字符。Bicyclic 8×8 被评为八。

循环 8×N 密码可以重复以获得双循环 8×N密码。这需要 5 个密钥,即 3 个用于混合 3 个字母表的密钥,以及两个用于控制 2 轮移位的 8 位密钥。共有 5 个步骤。(1)使用第一个字母表进行简单替换。生成的 N 个字节被垂直地写入 8×N 位的矩形中。(2)使用第一个移位密钥循环移动行。(3)使用第二个字母表对 N 列执行简单替换。(4)使用第二个移位密钥循环移动行。(5)使用第三个字母表对垂直列执行最终的简单替换。注意,所有的移位都是水平的,所有的替换都是垂直的。双重循环 8×N 密码的评级为九。

如果需要,可以继续进行三重四重等等。所有这些变化都可以通过周期性地或使用随机数发生器来变化块大小来进一步增强。

9.14 其他分数

在第 9.12 和 9.13 节中,我们看过将一个字节分成两个十六进制数字或分成八个单独的位。将 8 位分成许多其他方式,如 3,2,3。如果将每个字符的 3,2,3 位表示垂直地写下来,然后将 3 行按某个位置数循环向左移动,那么每一列仍然会有 3,2,3 位的分布,因此 8 位可以被转换回字节。这里是一个例子。每一行按左边显示的位置数循环左移,即分别为 1 个位置,3 个位置和 2 个位置。


这里明文 RETEAT 已经被转换成了密文**@w«θK_。我们称之为BitCycle Substitution。这种方法的评级为五。与第 9.13.1 节中的循环 8×N 密码一样,这可以加倍、三倍或更多,并且块大小可以变化。

这个基本思想可以以两种强大的方式进行增强。

首先,字节可以被分成几种不同的方式,例如 1,3,2,2 或 2,4,2。例如,你可以首先使用 3,2,3 的分割方式对块进行加密,然后使用 1,3,2,2 的分割方式重新加密,然后再使用 2,4,2 的分割方式重新加密。这将涉及 7 个密钥和 7 个步骤。(1)使用第一个替换产生消息的 3,2,3 位表示。(2)使用第一个移位密钥移动 3 行。(3)使用第二个替换产生字节的 1,3,2,2 位表示。(4)根据第二个移位密钥移动 4 行。(5)使用第三个替换产生字节的 2,4,2 位表示。(6)根据第三个移位密钥移动 3 行。(7)使用第四个替换产生最终的密文字节。

其次,消息区块可以以几种不同的方式划分。假设你使用长的明文区块,比如 32 个字符。对于前一种技术的第 2 步,你可以将 32 字节分成 6、14 和 12 字节的组。对于第 4 步,你可以将 32 字节分成 11、8 和 13 字节的组。对于第 6 步,你可以将 32 字节分成 8、17 和 7 字节的组。每个组都将独立移位。这种划分对每条消息可能是不同的。

或者,你可以采取更包容的方法。对于第 2 步,将整个消息划分为大小为 X 的区块。对于第 4 步,将消息划分为大小为 Y 的区块。对于第 6 步,将消息划分为大小为 Z 的区块。X、Y 和 Z 的长度可以是从 6 字节到整个消息长度的任意长度。

我不会评价所有 BitCycle 替换的变体。可以说,评级可能从五到十不等。在第十二章中,我将描述如何验证一个区块密码是否真正值得得到十分评级。

9.15 更强大的区块

本章描述的几种密码技术适用于明文区块。有几种方法可以对明文区块进行处理,使你的密码对艾米莉来说稍微困难一些。以下是一些想法的简短列表:

  • 周期性或伪随机地改变区块长度。
  • 反转每个区块的前几个字母,周期性或伪随机地。
  • 反转每个区块的最后几个字母,周期性或伪随机地。
  • 周期性或伪随机地将每个区块向左或向右循环。
  • 将区块的最后 N 个字母与下一个区块的前 N 个字母交换。

但要警告一句:如果你手动加密和解密,请谨慎使用这些方法。如果你使你的密码变得如此复杂以至于无法准确加密和解密,那么它就变得毫无价值。

相关文章
|
1月前
|
算法 数据安全/隐私保护
对称密钥加密算法和公开密钥加密算法有什么区别
【4月更文挑战第19天】对称密钥和公开密钥加密算法各有特点:对称密钥加密速度快,适用于大量数据,但密钥管理困难;公开密钥加密安全性高,密钥管理方便,但速度慢,常用于数字签名和身份验证。两者在不同场景下有不同优势。
90 6
|
1月前
|
机器学习/深度学习 算法 安全
【加密算法】RSA非对称加密算法简介
【加密算法】RSA非对称加密算法简介
|
1月前
|
存储 人工智能 安全
密钥密码学(一)(3)
密钥密码学(一)
24 1
|
1月前
|
存储 安全 算法
密钥密码学(一)(1)
密钥密码学(一)
14 1
|
1月前
|
存储 算法 安全
密钥密码学(一)(2)
密钥密码学(一)
21 1
|
1月前
|
开发框架 算法 .NET
密钥密码学(三)(4)
密钥密码学(三)
25 0
|
1月前
|
存储 算法 数据可视化
密钥密码学(二)(1)
密钥密码学(二)
28 0
|
1月前
|
机器学习/深度学习 人工智能 算法
密钥密码学(二)(4)
密钥密码学(二)
21 0
|
1月前
|
存储 机器学习/深度学习 算法
密钥密码学(三)(1)
密钥密码学(三)
22 0
|
1月前
|
存储 人工智能 安全
密钥密码学(二)(2)
密钥密码学(二)
22 0