维吉尼亚密码可看作凯撒密码强化版。它通过引入一个密钥词,成功克服了凯撒密码密钥空间小和易受词频分析攻击的主要弱点

核心思想

维吉尼亚密码的核心改进在于:使用多个不同的凯撒密码,即为明文中不同的字母****应用不同的偏移量。

这个“多个不同的偏移量”的序列,就是由一个密钥词来决定的。

加密过程

1. 准备密钥

  • 选择一个密钥词。
  • 将这个密钥词重复书写,直到它的长度与明文一致

2. 建立对应关系

  • 通常我们建立一个表格,将字母 A-Z 对应数字 0-25。

3. 加密运算

  • 对于明文的每一个字母,找到其上方对应的密钥字母。

  • 将明文字母和密钥字母都转换为数字(A=0, B=1, …, Z=25)。

  • 使用公式计算密文: C_i = (P_i + K_i) mod 26

    C_i:第 i 个密文字母的数字

    P_i:第 i 个明文字母的数字

    K_i:第 i 个密钥字母的数字

  • 再将得到的数字转换回字母

举个栗子:

明文: ATTACKATDAWN

密钥词:KEY

第一步:对齐明文和密钥

明文: A T T A C K A T D A W N

密钥: K E Y K E Y K E Y K E Y

第二步:逐个字母加密

  1. 明文字母 A (0),密钥字母 K (10)

    · 加密:(0 + 10) = 10 -> K

  2. 明文字母 T (19),密钥字母 E (4)

    · 加密:(19 + 4) = 23 -> X

  3. 明文字母 T (19),密钥字母 Y (24)

    · 加密:(19 + 24) = 43 -> 43 mod 26 = 17 -> R

  4. 明文字母 A (0),密钥字母 K (10)

    · 加密:(0 + 10) = 10 -> K

  5. 明文字母 C (2),密钥字母 E (4)

    · 加密:(2 + 4) = 6 -> G

  6. 明文字母 K (10),密钥字母 Y (24)

    · 加密:(10 + 24) = 34 -> 34 mod 26 = 8 -> I

  7. …(以此类推)

最终密文: KXRKGIKXPRKB

解密:

解密是加密的逆过程,使用相同的密钥词

  1. 对齐密文和密钥(与加密时相同):

    密文: K X R K G I K X P R K B

    密钥: K E Y K E Y K E Y K E Y

  2. 使用解密公式:

  • P_i = (C_i - K_i) mod 26
  • 注意:如果 C_i - K_i 是负数,加上 26 后再取模。

解密示例:

  1. 密文字母 K (10),密钥字母 K (10)
  • 解密:(10 - 10) = 0 -> A
  1. 密文字母 X (23),密钥字母 E (4)
  • ****解密:(23 - 4) = 19 -> T
  1. …(以此类推)

即可恢复出原始明文 ATTACKATDAWN。

为何比凯撒密码更安全?

  1. 多表替代:这是最关键的一点。同一个明文字母在不同位置可能被加密成不同的密文字母。

在上面的例子中,明文字母 A 在第一个位置被加密成了 K,在第四个位置也被加密成了 K,但在第十个位置却被加密成了 R。

同样,密文字母 K 可能对应明文 A(当密钥是K时),也可能对应明文 Q(当密钥是A时)等。

这打破了原始明文的单字母频率分布,使得简单的词频分析失效。

  1. 更大的密钥空间:密钥不再是 1-25 的一个数字,而是一个任意长度的单词。可能的密钥数量巨大,使得暴力破解变得不现实(尽管对于现代计算机来说,如果密钥较短,仍然可以破解)。

维吉尼亚密码的破译:

尽管很强大,但维吉尼亚密码最终还是被破译了。主要方法是:

  1. 卡西斯基试验:
  • 在密文中寻找重复的片段。
  • 这些重复片段之间的距离很可能是密钥长度的倍数。
  • 通过计算这些距离的最大公约数,可以推测出密钥的可能长度。
  1. 重合指数法:
  • 这是一种更可靠的方法。通过计算密文与自身偏移后的重合指数,来推测密钥长度。
  • 一旦知道了密钥长度,就可以将密文分成若干组(第1、第6、第11…个字母为一组,这些字母都是用同一个凯撒密码加密的)。
  • 然后对每一组使用词频分析(因为每一组内部都是一个简单的单表替换密码),分别解出密钥的每一个字母。