密码学 - 转置密码



现在让我们讨论转置密码算法。到目前为止我们使用的密码都是替换密码,其中明文中的字符被更改为其他字符、数字或符号。转置密码是一种附加类型的密码。转置密码重新排列明文消息中的字母,同时仍然使用它们。

转置密码应该很容易识别,因为字母频率应该类似于英语,字母 a、e、i、n、o、r、s 和 t 的频率很高。然而,转置密码可能难以进行密码分析。关键词策略是将密文字母重新排列成“有意义的”文字,即字母的重新排列模式包含了密码的秘密。

例如,单词 LAUGH 有五个不同的字母。五个不同的字母可以以 5! = 120 种方式排列,并且恰好有一种排列应该构成一个单词。暴力攻击将尝试不同的字母组合,直到识别出该单词;最多需要 120 次尝试。利用语言模式来连接单词片段并将其排列以构成单词是一种更有效的策略。

在本章中,我们将看到不同类型的转置密码算法、它们的工作原理以及它们以不同方式的实现。

转置密码是如何工作的?

正如我们上面所看到的,转置密码的工作原理是根据特定的模式或规则重新排列消息中的字母。所以让我们假设你有一条消息“HELLO”,你想保密。我们不是更改字母本身,而是根据规则重新排列它们。

例如,让我们假设规则是在具有特定列数的网格中写入消息。如果我们使用 2 列,“HELLO”将变成:

Columnar Transposition

现在,我们将以不同的顺序读取给定的列,例如从左到右,从上到下。因此,加密后的消息将是“HLOEL”。

要解密它,我们只需要知道用于重新排列字母的规则。在本例中,我们知道它是一个 2 列的网格,因此我们将字母重新排列回“HELLO”。

这就是转置密码工作原理的主要概念。这就像以秘密的方式玩一个重新排列字母的游戏。

转置密码算法类型

  • 栅栏密码 - 称为“栅栏”密码的转置密码的名称来源于其编码方式。栅栏密码的明文向下写在虚构栅栏的连续“栏”上,在底部向上移动。然后,读出消息的行。

  • 路线密码 - 路线密码在将明文写入给定维度的网格后,按照密钥中给出的模式读取明文。与栅栏密码相比,路线密码的密钥要多得多。实际上,即使使用目前的科技,对于合适长度的消息,可能的密钥数量也可能过大。但并非所有密钥都是平等的。路线选择不当会导致明文的大部分内容只是被反转——这将为密码分析员提供关于路线的线索。

  • 列置换密码 - 当消息逐列转置时,它以特定长度的行写出,然后再次读取,并按不规则顺序选择列。在大多数情况下,关键字同时定义行宽和列排列。不规则列置换密码中的任何空位置都保持未填充,而在标准列置换密码中,空格用空值填充。最后,消息按关键字指定的顺序逐列读出。

  • 双重转置 - 攻击单一列置换的一种方法是估计可能的列长,将消息写入其列中,然后搜索可能的字谜。因此,经常使用双重转置来增强其强度。这里所做的只是两次列置换。对于两次转置,可以使用一个密钥或两个单独的密钥。

  • 密斯基沃斯基转置法 − Emile Victor Theodore Myszkowski 在 1902 年创建了一种变体的列式转置法,但它需要一个包含重复字母的关键词。通常情况下,当关键词中的字母重复出现时,会被视为字母表中的下一个字母。

  • 扰乱转置法 − 在扰乱转置法中,某些网格点会被空出不用,在填充明文时跳过这些点。这会扰乱规则模式,增加密码分析师的任务难度。

  • 格栅:格栅,或带有切口的实际遮罩,是一种不同类型的转置密码,它不依赖于数学公式。通信双方必须保持物理密钥的机密性,才能实现高度不规则的转置,这种转置的持续时间由格栅的大小决定。

  • 检测和密码分析 − 密码分析师可以使用频率计数来快速识别基本的转置密码,因为它不会影响单个符号的频率。如果密文的频率分布与明文的频率分布匹配,则很可能是一种转置密码。一种常见的攻击方法是字母改组,它涉及到移动密文的部分内容,寻找看起来像是英语单词的字母组合,然后解决这些字母组合。一旦找到这样的字母组合,就可以扩展它们,因为它们提供了关于转置模式的信息。

  • 组合 − 转置法经常与其他方法结合使用。例如,可以通过将列式转置与简单的替换密码结合起来来避免两者的弱点。由于转置的存在,当高频密文字母被替换为高频明文字母时,明文的部分内容仍然隐藏起来。这种替换使得无法对转置进行字母改组翻译。这种方法与分馏法结合使用时非常有效。

  • 分馏法 − 当使用分馏法时,转置法可以很好地工作,分馏法是一个预先的步骤,它将每个明文字符分成多个密文字符。例如,可以将明文字母表在一个网格中打出来,然后用每个字母在消息中的坐标来替换它。另一种分馏消息的方法是简单地将消息翻译成摩尔斯电码,摩尔斯电码使用点、划和空格符号。

使用 Python 实现

此实现向您展示了如何使用 Python 中给定的密钥对消息进行加密和解密。这是这种密码学的非常基本的实现。代码中使用的密钥显示了加密和解密网格的行数。

示例

以下是使用 Python 的转置密码的基本实现。请检查下面的代码 −

def transposition_encrypt(message, key):
   # Create an empty grid 
   grid = [''] * key

   # Fill the grid with the message 
   for i, char in enumerate(message):
      row = i % key
      grid[row] += char

   # Join the rows together 
   encrypted_msg = ''.join(grid)
   return encrypted_msg

def transposition_decrypt(encrypted_msg, key):
   # Calculate the number of columns
   cols = len(encrypted_msg) // key

   # Create an empty grid 
   grid = [''] * key

   # Fill the grid
   for i in range(cols):
      for j in range(key):
         grid[j] += encrypted_msg[i * key + j]

   # Join the columns 
   decrypted_msg = ''.join(grid)
   return decrypted_msg

# function execution
message = "HI THIS IS RIYA"
key = 2
encrypted_msg = transposition_encrypt(message, key)
print("The Encrypted message:", encrypted_msg)

decrypted_msg = transposition_decrypt(encrypted_msg, key)
print("The Decrypted message:", decrypted_msg)

以下是上述示例的输出 −

输入/输出

Encrypted message: H HSI IAITI SRY
Decrypted message: HHIIIIS S AT R

转置密码的特性

以下是转置密码的一些特定特性 −

  • 转置密码很容易被破解,因为它只重新排列字母,而不是改变它们。

  • 还有其他重新排列字母的方法,例如将它们写在网格中或将它们移到特定距离。

  • 要解码消息,我们必须理解应用于字母重新排列的算法或模式。

缺点

正如我们所看到的,与其他一些加密方法相比,转置密码并不十分安全。原因如下 −

  • 此技术只改变字母的顺序,这意味着黑客很容易找出模式并解密消息。

  • 由于我们不改变字母,因此可以找出字母的频率并猜测用于重新排列它们的模式。

  • 转置密码的安全性主要依赖于保持重新排列字母的方法的秘密。如果模式或规则已知,则可以轻松解密消息。

  • 它不适用于大型消息,因为重新排列过程可能非常耗时。

总而言之,转置密码简单易用,但其简单性使其在保护敏感数据方面安全性较低。

总结

在本章中,我们学习了转置密码,其工作机制、特性、缺点以及在 Python 中的基本实现。在接下来的章节中,我们将学习转置密码的加密和解密算法。

广告