跳转到内容

密码学/破解维吉尼亚密码

来自维基教科书,自由的教科书

使用维吉尼亚密码加密明文,首先要选择一个由明文使用的符号字母表中的字母组成的关键字。然后,使用以下示例的方式,使用关键字来加密文本。

使用:明文:我喜欢一本书 并选择:关键字:cta

1. 将所有明文映射到数字 0-25 或字母表的长度

  ilikewikibooks converts to 8 11 8 10 4 22 8 10 8 1 14 14 10 18

2. 以相同方式将关键字映射到数字

  cta maps to 2 19 0

3. 以以下方式将密钥添加到明文中

  8  11  8  10   4  22  8  10  8  1  14  14  10  18
  2  19  0   2  19   0  2  19  0  2  19   0   2  19
  resulting in
  10 30  8  12  23  22 10 29   8  3  33   14  12  37

4. 取每个结果数字 mod 26(或对于一般情况,mod 字母表的字符数)

  resulting in
  10 4   8  12  23  22 10 3    8  3  7    14  12   11 

5. 将每个数字映射回一个字母,以获得生成的密文

  keimxwkdidhoml

使用关键字可以轻松地解密消息,只需反转上述过程即可。关键字可以是任何长度,等于或小于明文的长度。


在没有关键字的情况下,破解维吉尼亚密码的主要方法被称为卡西斯基检验,以第一个发表该方法的普鲁士少校的名字命名。第一步是确定密钥的长度。

确定密钥长度

[编辑 | 编辑源代码]

给定一个加密的消息,例如

Plaintext:  TOBEORNOTTOBE
Keyword:    KEYKEYKEYKEYK
Ciphertext: DSZOSPXSRDSZO

通过检查密文,我们发现有几个重复的二字词,即 DS、SZ 和 ZO。从统计学上讲,这些二字词全部随机出现的可能性很小;重复出现的二字词很可能是明文中的重复出现。如果是这种情况,二字词必须在两次编码时都由密钥的相同部分编码。因此,密钥的长度是文本中重复出现的距离的因子。

二字词 第一个位置 第二个位置 距离 因子
DS 1 10 9 3
SZ 1 10 9 3
ZO 1 10 9 3

公共因子(事实上,在这个简单的例子中是唯一的因子)是 3 和 9。这大大缩小了可能性,而且在文本和密钥更长的情况下,效果更加明显。

频率分析

[编辑 | 编辑源代码]

一旦确定了密钥的长度,就可以应用稍加修改的频率分析技术。假设已知密钥的长度为三个。那么每三个字母就会用密钥的同一个字母进行加密。密文可以分成三个段 - 每段对应一个密钥字母 - 然后可以使用为 凯撒密码 描述的过程。

[编辑 | 编辑源代码]
华夏公益教科书