维热纳尔密码-密码术的奥秘

时间:2024-07-01 19:53:08

维热纳尔密码

维热纳尔密码大概是最为著名的“手工编制”的多字母表密码,它得名于16世纪法国的一位外交家布莱兹·德·维热纳尔(Blaise de Vigenère)。虽然它早在1586年就已问世,但直到200年后才得到广泛承认,最后在19世纪中叶被巴比奇(Babbage)和卡西斯基(Kasiski)破译。有趣的是,在美国南北战争中南部同盟军就使用了维热纳尔密码,而南北战争时期这个密码早已被破译了。这可以从尤利西斯·S. 格兰特将军的一段话中得到印证:“我们有时花太多时间去破译拦截到的信息,得不偿失,不过有时它们提供了很有用的信息。”

维热纳尔密码-密码术的奥秘

维热纳尔密码利用维热纳尔方阵来进行加密。这个方阵最左边的(密钥)列是英文字母表,对于此列的每一个字母,与它相对应的那一行是字母表的一个循环,并以该字母为循环的起始字母。所以最左边这列上的每个字母实际上都对应着一个凯撒密码,其移位由该字母所确定。例如,字母g所对应的就是6移位的凯撒密码。

维热纳尔方阵

利用这个方阵设计密码的最常用的一个方法是选择一个无重复字母的密钥词(或密钥短语)。如果明文信息比密钥词长,那么就重复密钥,重复次数视需要而定,这样,我们就能得到一个跟信息一样长的字母序列。然后把该字母序列写在我们的信息下面。例如当信息是PLAINTEXT而密钥词是“fred”时,我们得到:

下面我们利用该方阵来加密这条信息。

利用维热纳尔方阵以密钥字母f对P进行加密

为了加密第一个字母P,要使用位于它下面的密钥字母,此时是f。于是,加密P时我们从方阵中由f所对应的那行中读出位于P下方的字母,即U。类似地,加密L时,从r所对应的那行中取出位于L下方的字母,即C。用密钥字母fP加密的过程如下图所示。

凡是能弄明白这一过程的读者,应该都能得出以fred为密钥词对PLAINTEXT进行加密所得到的密文是UCELSLIAY

这意味着我们知道:

现在我们能看到,明文字母T在密文中可表示为L,也可表示为Y,而密文字母L既可以代表I,也可以代表T。很清楚,我们利用这种密码,能够防止密文中的字母频率具有与用简单代换密码得出的密文所显示的频率相同的模式。

维热纳尔密码有很多变种,比如其中有一种允许密钥词中出现重复的字母。每个变种都具有一些细微的不同特征,从而引发攻击方式的微小变化。不过我们将只关注前文已经定义的那种简明的系统。

维热纳尔密码是多字母表密码的特例,它以严格的轮换方式重复使用一串(短的)简单代换密码。这种密码所使用的密码组件的数目称为周期,显然,我们在上文所描述的这种版本的维热纳尔密码,其周期等于密钥词的长度。

在继续讨论周期性密码之前,有一点值得关注,例如,一个周期为3的多字母表密码,无非就是三字母词的简单代换密码的特例。这个简单的实例印证了一条具有普遍性的原则,即改变字母表可以改变密码的“性质”。目前我们集中讨论的密码,其基本符号是英语字母表中的字母。在讨论更现代的密码时,我们会倾向于将所有信息都看作是以二进制数字(0和1)为基础的序列。

正如我们已指出的,使用多字母表密码的目标之一就是对基础语言中的字母频率加以伪装。我们画了一个直方图来说明这一目标是如何达到的。该图显示了一篇特定的密文——使用周期为3的维热纳尔密码对一段英文加密所得——的频率图。

这个直方图与我们在前面给出的那个直方图之间存在着许多明显的区别。最突出的几点是,在第二张图中每个字母都出现了,而且没有一个字母处于如第一张图中H那样明显的主宰地位。第二张图无疑比第一张图平缓些,因此潜在的攻击者无法立即从中获得帮助。查看第二张直方图的人可能会被迷惑而推断图中的密文字母R代表明文中某处的字母E,然而他们不会知道这个字母E出现的具体位置。

使用三个严格轮换的简单代换密码加密的一份密文的频率直方图

一般来说,我们预期该直方图的平缓性反映了周期的长度,而密码的周期越长就越难破译。在某种意义下,这一论断是正确的。然而,实际上使用周期性多字母表密码的最大好处,就是使得密码分析学家需要知道更多的密文才能开始攻击。为了说明其中的缘由,我们来关注维热纳尔密码。我们的某些断言对于任一多字母表密码来说都是正确的,而其他一些结论则依据我们所定义的维热纳尔密码的特征的不同而变化。对读者而言,区分这两种情况是很重要的。因此,改变多字母表密码可能会改变攻击的细节,并对密码系统有所“加强”。然而,那些密钥比信息短得多的多字母表密码,还是很容易遭受这里提到的攻击形式的某些变种的袭击。

为了破译维热纳尔密码,确定出密钥词就足够了。如果已知周期,而且周期不太长,那么可以编写一个计算机程序来对密钥进行穷举搜索。作为具体的例证,读者不妨对密文TGCSZ GEUAA EFWGQ AHQMC进行密钥搜索,假定它原是一条英文信息,是使用密钥词字长为3的维热纳尔密码进行加密后所得。任何一位读者,只要试着去做,都会面临一个有关如何认出正确的密钥词的有趣问题。基本的假定是这个三字母词是唯一的,它使所得到的明文是有意义的。而真正的问题所在,恰是如何确认明文是有意义的。有一种办法是坐在屏幕前检查应用每个密钥得出的结果。显然这是一件既乏味又费时的事。但是,必须找出各种各样的选择。

当我们要对长度为p的密钥词进行穷举搜索时,系统地尝试所有由p个字母组成的那些序列,也许比只考虑英文词要容易些。于是,对已知周期为p的维热纳尔密码进行密钥穷举搜索大概需要26 p次试算。这意味着周期加长时,密钥穷举搜索将很快变得难以驾驭。无论如何,如果周期已知,总是可以比较直接地确定密钥而无须进行搜索。一种方法是将密文改写为p行,并使得每一列都按原来的顺序写。例如,对于p=3,若密文为c1c2c3c4c5c6c7c8c9……我们则可以把它写为

c1c4c7c10

c2c5c8c11

c3c6c9c12

这样排列之后,每一行都是使用同一简单代换密码所得出的,这种密码作为维热纳尔密码的一个特例,乃是一种加法密码。我们可以对每一行使用上一节提及的统计论证。事实上,对于维热纳尔密码来说,若密文长度与周期p相比较而言很长,那么足以确定出每一行中出现频率最高的字母并推定这些字母代表ETA中的某个字母。这一观察充分利用了如下事实,即对每一行而言,其所使用的简单代换密码就是凯撒密码。正如我们已提到过的,这意味着掌握了一组对应的明文与密文就足以确定出密钥。因此,如果凭借聪明的猜想与好运,能从每一行确定出与一个密文对应的字母,那么密钥便可确定出来。

到目前为止的论述表明,试图破译维热纳尔密码的攻击者所面临的真正问题是周期p的确定。一种可能的办法是系统地尝试各种小值的p。但是也有一些简单巧妙的方法可用。最为著名的是卡西斯基检测,巴比奇就使用过它——巴比奇是破译该密码的第一人。他的方法是在密文中搜索重复的(长)字母串。这种现象的出现很可能代表了用相同的密钥字母加密的信息中一些相同的段落。它意味着两个重复模式之间的距离可能等于周期的整数倍(对维热纳尔密码进行的密码分析,在辛格所著的《码书》中有详细讨论)。