第23章 天才的密码少女(5)

作者:陈雨涵

|

类型:都市·校园

|

更新时间:2019-10-06 14:24

|

本章字节:11276字

在维吉尼亚密码中,发件人和收件人必须使用同一个关键词(或者同一文字章节),这个关键词或文字章节中的字母告诉他们怎么样才能前后改变字母的位置来获得该段信息中的每个字母的正确对应位置。比如如果关键字“big”被使用了,发件人将把信息按三个字母的顺序排列。第一个三字母单词的第一个字母将应当向前移动一个位置(因为b是排在a后面的字母),第二个字母需要向后移动八位(i是a后面第八个字母),而第三个字母需要向前移动六位(g是a后面第八个字母)。然后,文字就可以按下面的顺序来进行加密了:


未加密文字:hebucherhebakerandhecandlesickmaker。(屠夫、面包师和蜡烛匠)。


关键密钥:bigbigbigbigbigbigbigbigbigbigbigbigbigb


加密文字:upkcczdpksbnfjglmxbvjupkdiekbodssbsks


如果知道“big”就是密钥,收件人就可以很容易地通过相应的位置改变字母位置,从而译出经过加密的文字。


自从频率分析法出现后,单字母替换密码完全失去了效用。因此,密码编码者想方设法去编一种更强大的密码。一些编码者对单字母替换密码做了一些改动,如在编码过程中,加入一些特殊的字符,或者令一些字母不代表另一个字母,而是代表一种程式,譬如是代表空格,代表删去前一个字母,代表换行等。但这一切起的作用并不大,聪明的破译师仍然能在里面找到许许多多破译密码的线索。直到有一天,佛罗伦萨的里昂巴蒂斯特?阿尔伯提提出了一种多字母替换密码,即用两个或两个以上的密码表交替使用来进行加密,如:


明码表abcdefghijklmnopqrsuvwxyz


密码表1qweryuiopasdfghkjlzxcvbnm


密码表2ekprjbdncvouhywzxmlasfigq


第一个密码表加密第一个字母,第二个密码表加密第二个字母,第一个密码表又加密第三个字母,不断地重复……那么:


明文fores


密文yyjjll


这样,按原来的方法进行频率分析就没有什么作用了。这只是两个密码表时的情况,如果用三个、四个或以上的密码表后,破译就显得非常非常困难。即使是这样,阿尔伯提未能把他的理念发展成一个完整的系统。这个任务当然由后人完成了。经过几个人的努力,最后,维吉尼亚终于将其完善了。他编出了一个系统而有效的密码,那就是维热纳尔密码,其主要构成是维吉尼亚方阵:


它的明码表后有二十六个密码表,每个表相对前一个发生一次移位。如果只用其中某一个进行加密,那么只是简单的恺撒移位密码。但用方阵中不同的行加密不同的字母,它就是一种强大的密码了。加密者可用第七行来加密第一个字母,再用第二十五行来加密第二个字母,然后根据第八行来加密第三个字母等。


现在来试一下,就用关键词fores来加密beerodowellhanosaywell


关键词foresforesforesforesfor


明文beerodowellhanosaywell


密文gskxwkycusoxqzklsgycjeqpjzc


(看第五行,f开头,明文是b,要用g来加密;第十四行,o开头,明文是e,要用s来加密,如此类推……)


维热纳尔密码既克服了频率分析,又具有数目众多的密钥。发送者和接收者可使用字典里任一个单词,或单词组合,或虚构的词作为关键词。它提供了很好的安全保障,但它的复杂性,却令其等到十九世纪才流行起来。很多年以来,维吉尼亚密码都被认为是不可破解的。不过,也是在十九世纪,查尔斯?巴贝奇——一个性情古怪的天才将其破译了。让我们来看看解密的过程:


这个人也因为其在计算机科学领域方面所进行的先锋性工作而被世人所熟悉。巴贝奇(babbage)通过寻找重复的字母段破解了这个密码系统。当然,维热纳尔密码的优势在于这种密码被假定为它将不同位置的字母进行不同的加密。比如同一段文字中的“he”可能在前面表现为“upk”,但在后面则被表现为“bnf”。同样,像“aker”这样的字母也会被进行不同的加密。但是,第一个和第三个“he”都会被编码为“upk”。第一个“he”中的“”会用“b”来进行编码,而第三个“he”中的“”也同样是用“b”来编码。


发生这种情况是因为第三个“he”是排在第一个“he”后面第二十一个字母,而三字密钥big会在重复七次之后又回到了最开始。在任何比密钥要长得多的加密信息中,都会不可避免地出现类似这样的重复。而一个解密者应该如何才能揭示加密文件的真正面目呢?比如,如果加密文字“upk”出现了两次,中间隔着21个字母,那么他就可以推断出密钥的长度是21的整除数。或者换种说法,他可以推断出21是密钥的倍数。(约数或称除数是一个数字被除之后不会有余数。比如21的除数就是1、3、7和21。)如果获得了足够多类似的线索,解密者就可以知道密钥的确切长度。一旦他知道了密钥长度,他就可以对加密信息进行日常频率分析。注意,数学在解密工作中总是放在首位的:解密者首先会计算出密钥的长度,这步工作甚至是在他要考虑密钥的具体内容是什么之前所要做的。


巴贝奇的独具创意的技巧开创了一片密码术的新天地,并且将数学工具引入到了以前被认为专属于文字学的领域之中。即使一种编密码系统没有明确地使用数学,但其中隐藏的格式却通常需要以数学的方式进行整理。


之后又过了九年,在一八六三年,一位业余数学爱好者、时年五十八岁的普鲁士退役炮兵少校弗里德里希·卡西斯基(friedrichkasiski)出版了一本小册子,名字叫《密写和破译的艺术》(diegeheimschrifenunddiedechiffrierkuns)。简单描述一下它的原理:被加密方指定的这个数列,也就是密钥,在实践中不可能是无限长的;在通常情况下,它的长度不仅不会超过明文长度,甚至往往还相当短——在斯维提斯的例子中,密钥“emily”的长度是五位,也就是说,每加密五个明文字母,就要循环使用“emily”,对后面的明文字母继续加密。


“循环使用密钥进行加密”——整个多表替代的破绽和死穴,也正在这里。


首先,破译的第一步就是寻找密文***现超过一次的字母。有两种情况可能导致这样的重复发生。最有可能的是明文中同样的字母序列使用密钥中同样的字母加了密;另外还有一种较小的可能性是明文中两个不同的字母序列通过密钥中不同部分加了密,碰巧都变成了密文中完全一样的序列。假如我们限制在长序列的范围内,那么第二种可能性可以很大程度地被排除,在这种情况下,我们多数考虑到四个字母或四个以上的重复序列。


破译的第二步是确定密钥的长度,先看看这一段:


关键词foresforesforesforesfor


明文beerodowellhanosaywell


密文gskxwkycusoxqzklsgycjeqpjzc


第一个yc出现后到第二个yc的结尾一共有12个字母(usoxqzklsgyc),


那么密钥的长度应是12的约数——1,2,3,4,6,12之中的一个(其中,1可排除)。


如下面的密文:


iswzpnqckmyyyjkayyezffsweesspgzxqahf


iswzpnqckmvyjoacvehaesazrlpqizmxo


qswmcvudsijggdeuwazrsfxwilkuejqldacb


gdlyjxmylmdqkzmpldilqemwfswdpazezqnw


dywdzxfsaeeazjduelvpmcekwseefurzfsw


dpxacqafkmxwawvezfsdbgdlayuqxgdpekws


eefurzfswdpouezkzmylqnpqqdemjqyguva


zogrwawpvueqafjqjggcomjzahqafkjdkad


mnwpjggcwkpkayeqzzpvkzmqgwdvfahlll


usspxazpgzjggosdwazrkaezqcwkzmmcwil


ezmedazcayqafjrluqlkuqqafjqywhpjfj


flkuqqafjqywhpjpzozdzmwdumwfswaywrzj


kzmisgbfoseejggdgredkmmfdmdparqjahf


udkzozezqyaidxvfahlllkzmmcwzzvdps


ypj


在里面重复序列有iswzpnqckm,bgdl,seefurzfswdp,


jggc,lkuqqafjqywhpj,vfahlll等;


如果每个重复间隔都能被3整除,关键词应该有三个字母。


下一步,仍旧是频率分析,不过,因为关键词有三个字母,我们应分为三组进行。把第1,4,7,10,13……个字母分为一组,称之为l1,把第2,5,8,11,14……个字母又分为一组,称之为l2,余下的归另一组,称之为l3。那么每一组有169个字母。


现在先做一个标准频率分布表:


用169乘以各个字母的标准百分比,如字母a,169x82%=14。


那么由标准频率:


a:82n:67


b:15o:75


c:28p:19


d:43q:0e:127r:60


f:22s:63


g:20:9h:61u:28


i:70v:10


j:02w:24


k:08x:02


l:40y:20


m:24z:0得到标准个数:


a:14n:1b:3o:13


c:5p:3


d:7q:0


e:21r:10


f:4s:1g:3:15


h:10u:5


i:12v:2


j:0w:4


k:1x:0


l:7y:3


m:4z:0


然后,统计l1的169个字母出现的次数,有:


a:22n:b:1o:c:0p:5


d:10q:16


e:10r:5


f:9s:2


g:7:7


h:2u:14


i:9v:j:0w: