APP下载

多表密码攻防战(五)

2017-10-16花卷

科学Fans 2017年9期
关键词:口令字母密码

花卷

上期我们讲到,经过了好几位密码学大师的不懈努力之后,多表密码终于出现了一个“集大成”的作品,那就是维热纳尔方表。维热纳尔方表把特里特米乌斯的“方表”系统和贝拉索的“口令”系统进行了完美的整合,这种密码在几百年来一直被认为是“无法破译”的。不过,到了19世纪,终于有两个牛人提出了破译这种密码的系统性方法,其中一个就是堪称“计算机之父”之一的英国数学家和工程师查尔斯·巴贝奇。那么巴贝奇到底是用什么方法破译维热纳尔方表的呢?另一个牛人又是谁呢?

意想不到的动机

巴贝奇这个人不知道是太牛呢还是太牛呢,总之,除了发明了两台计算机之外,他还干过很多神奇的事情,比如说帮助英国建立了现代邮政体系(主要是帮他们把邮费该怎么收这件事给算清楚了),比如说编写了第一套可靠的精算表格,比如说还搞过一大堆各种各样的发明专利。巴贝奇一辈子干了这么多事,破译密码只能算是他的“业余爱好”了。不过他本人貌似还挺喜欢玩这个的,据说巴贝奇小时候就经常破译其他小伙伴的密码,以此对小伙伴在智商上进行无情地碾压。巴贝奇在自传中说:“在我看来,破译密码是迷人的艺术之一。”所以说,巴爷觉着破译密码这种事是“艺术”,跟音乐什么的算是一类的,哦对了,巴爷也很喜欢音乐,好像还造过街头表演用的便携式风琴。

当巴贝奇第一次得知维热纳尔方表的时候,他也觉得这真是一个天才的设计。不过他的观察力也特别敏锐,马上又发现这种密码不可能像传说中那样“无法破译”,这里面肯定有漏洞可以挖。但是我们都知道,巴爷很忙,于是很长一段时间内他就把这件事给忘了。后来,一个偶然的机会,有个不务正业的牙医(按现在的话说就是民科),给艺术学会的期刊投了个稿,介绍自己发明的一种新密码,还说要申请专利。碰巧巴贝奇看到了这篇稿,他一瞅新密码本来还挺有兴趣的,看完之后却大呼上当:这什么新密码啊,不是跟维热纳尔方表一模一样嘛。于是他就给这位牙医回了一封信,说你这个密码根本就不是什么新东西,几百年前就已经有了,很多密码学的专著中都有记载,你回去再补习一下吧。

本来巴贝奇以为这件事就这么过去了,可没想到这位牙医特别执着,跟巴贝奇还“怼”上了。牙医回信说,如果你说我这个密码老早就有了,那你把它破译了给我看看呗?其实吧,就连小学生都能看出来,这位牙医就是在赌气抬杠呐,你这个密码是不是你首创的,跟我能不能破译它有哪门子关系啊?巴贝奇当然也知道对方在抬杠,但是他是个不信邪的人,你不是怼我么,那我就破译给你看看,到时候狠狠打你的脸。

化繁为简

那么巴贝奇到底用了什么样的方法来破译维热纳尔方表呢?我们先来回忆一下维热纳尔方表的结构。维热纳尔方表是用口令来切换置换表的,而相对于整篇文章来说,口令通常是一个比较短的单词,因此需要把口令不断重复才能加密完整篇文章。我们再把之前的那个例子搬出来看一看:

注意看,我们的口令是FANS,只有4个字母,但要加密的原文有12个字母,因此口令就得重复3次。巴贝奇正是注意到了这一点,因为凡是会“重复”的东西都一定是有规律可循的。想想看,维热纳尔方表为什么难以用传统方法破译呢?就是因为它通过口令切换了不同的置换表,这样就没办法从整体上用频率分析来对付了,不过我们也不难发现,正是因为口令决定了所使用的置换表,那么相同的口令字母所对应的原文字母,也就是用相同的置换表来加密的。更重要的是,口令是循环重复的,那么在某一相同间隔下,相同的口令字母必然会重复出现,巴贝奇觉得这就是他苦苦寻找的突破口了。

上面这段太绕了?我们还是拿例子说话吧。例子中,我们的口令“FANS”长度是4个字母,重复了3次,那么就意味着,每隔4个字母,我們就会遇到相同的口令字母,而相同的口令字母就意味着用相同的置换表加密,比如例子中第1、5、9个位置的口令字母都是“F”,那么这三个原文字母“T”“O”“I”就是用同一张置换表来加密的。

发现了这个有什么用呢?当然有用!我们刚才说过,“多表”是抵御频率分析的最大障碍,如果我们把“多表”密码中使用相同置换表加密的那些字母给抽出来,那这些字母不就相当于是“单表”了吗?如果是单表,那频率分析就可以重振雄风了呀!拿上面的例子来看,如果我知道口令的长度是4个字母,那我就可以把整篇文章以4为间隔拆成4份:第1、5、9个字母为一份;第2、6、10个字母为一份;第3、7、11个字母为一份;第4、8、12个字母为一份。我们之前分析过,这样拆分之后,每一份里面的字母都是用同一张置换表加密的,也就是相当于用单表加密的,我们就可以对每一份分别使用频率分析,然后再合起来就可以得到非常多的破译线索,最终破译整篇文章。

就这么简单?No,no……要想把多表密码给拆分成单表密码,我们需要知道一个关键的信息,那就是口令的长度。可问题是,怎样才能知道口令的长度呢?口令的长度可以是从1开始的任意正整数,不过一般都不会很大,我们可以从1开始往上猜,但问题是我们怎么判断猜对了没有呢?巴贝奇用的方法大概是这样的:

首先,从整篇密文中找出重复出现的片段,每个片段必须包含3个或更多的字母,比如说一篇密文中我们找到了两处“FVQT”,这就是一组重复的片段。为什么要找重复的片段呢?因为相同的字母排列之所以会重复出现,很大可能性是“相同的原文字母序列,经过相同的口令序列加密”之后所得到的结果。之所以一定要3个字母以上,就是为了尽量排除“原文字母和口令都不同,但依然得到了相同的密文”这种偶然情况。

接下来,计算每组重复片段中,字母序列重复出现的间隔。比如说,刚才我们找到了两处“FVQT”,我们就数一数第一个“FVQT”和第二个“FVQT”之间隔了多少个字母,注意是从第一个“F”数到第二个“F”为止,假设这个间隔是90。我们应该找到不止一组重复片段,对于每一组重复片段都要数出每次重复之间的间隔,这样我们就得到了若干个间隔。endprint

最后,我们对这些间隔的值进行因数分解,并找到它们的公因数。如果我们找到了足够多的重复片段,那么一般来说只能找出唯一的公因数,如果找不到公因数,就看所有的因数中哪个出现的次数最多。比如说,我们找到了三组重复片段,它们的重复间隔分别是90、10和35,那么我们就可以找出它们的唯一公因数——5,而这个公因数“极有可能”就是口令的长度。

殊途同归

巴贝奇找出破译维热纳尔方表的方法大概是在1854年,不过我们天才的巴爷有个很不好的习惯,他有很多成果都是做出来了之后懒得整理发表,只留下一大堆神奇的手稿,这一点倒是跟传奇人物达芬奇有点像,毕竟这俩人都是多才多艺的大忙人。更何况破译密码对于巴贝奇来说本来就是业余爱好,所以毫无悬念地,这个破译维热纳尔方表的方法最终没有被发表出来,是后来人们整理他的笔记的时候才发现的。当然,也有人认为这可能是英国军方的要求,毕竟涉及密码的事情,英国人都很谨慎,就算已经破译了一种密码也要装傻充愣,让别的国家以为这种密码还挺安全的,继续再用个几十年,然后自己在背地里就可以偷窥人家的机密了,这种暗爽的事儿英国可真没少干。

不管是出于哪种原因,巴贝奇的名字很遗憾地没能跟这种划时代的破译方法绑定起来。1863年,德国密码学家弗雷德里希·卡西斯基(Friedrich Kasiski)发表了一部题为《密码与破译艺术》(Die Geheimschriften und die Dechiffrir-Kunst)的著作。在这本书里,卡西斯基提出了一种针对多表密码的破译方法,后来人们发现这种方法跟巴贝奇的方法本质上是完全一样的,只不过比巴贝奇晚了差不多10年,谁让巴爷没发表自己的成果呢?你看,功劳让德国人给抢去了吧。直到现在,我们依然管这种破译方法叫“卡西斯基测试(Kasiski examination)”,不过估计以巴爷的性格,他大概也不会计较这种名分吧,反正他的名分已经很多了。

其实卡西斯基提出的这个方法在当时也没有得到多大的关注,在出版这本著作的时候,卡西斯基已经从军队退休了,后来他一看这本书没什么人看嘛,于是晚年又改行研究考古學去了,也是够寂寞的。可是为什么这样一种巧妙的破译方法居然会遇冷呢?我觉得主要还是因为以维热纳尔方表为代表的多表密码本身在当时并没有得到大规模的运用。

多表密码与自动化时代

我们在这个主题的开头就讲过,16、17世纪的欧洲,尽管以维热纳尔方表为代表的多表密码已经出现了,也证明了它的确比单表密码更安全可靠,但我们看到的大量史料都表明,当时单表+辞典的nomenclator密码依然稳稳地占据着主导地位,多表密码则很少大规模推广,可这是为什么呢?

其中最主要的一个原因是多表密码用起来效率太低了,换句话说,就是太麻烦了。当时,无论是加密还是解密都是靠人工来完成的,一个小黑屋里面坐一大堆秘书,一天到晚专门干这个事儿。然而随着国家之间的秘密通信越来越多,军队里面的秘密通信还要多,于是密码就被迫要在安全性和效率之间做出权衡,鱼和熊掌不可兼得。

单表+辞典的nomenclator在效率上的优势很明显。一来这种密码已经运用了很长时间,也就存在大量的熟练人才储备。二来单表密码不需要轮换密钥,比较符合人类的记忆习惯,也就是说,一个人可以通过一定时间的训练熟练掌握一种单表密码的加密和解密,对于大部分常见单词甚至不需要查表就可以默写出来,但多表密码就不行,因为每个字母都要轮换置换表,以人脑要处理这么复杂的规则,实在是太吃力了。

于是,多表密码虽然比单表密码安全,但无奈效率太低了,实在没办法大规模推广,只能用在少数需要较高安全级别的场合。也正是出于这个原因,多表密码的价值一直被低估,所以卡西斯基破译多表密码的书也就没什么人关心了,毕竟大部分人连这种密码本身都还不太了解呢,还谈什么破译呢?

然而,是金子总会发光的。多表密码在安全性上的优势毋庸置疑,而且只要改进密钥轮换的方式,就可以进一步提高强度。到了19世纪,随着两次工业革命的到来,人类开始迈入机械和自动化时代,密码学当然也跟着沾了光。机械可以提高手工劳动的效率,那么它能不能提高多表密码的效率呢?不用说,答案显然是肯定的。在两次世界大战时期,各国都搞出了各式各样的“密码机”,其中就包括大名鼎鼎的传奇密码机“Enigma”。实际上,这些密码机就相当于能够自动轮换密钥的多表密码,也就是说,到了机械和自动化时代,多表密码才得以真正发挥它的威力。

(完)endprint

猜你喜欢

口令字母密码
密码里的爱
缓存:从字母B到字母Z
高矮胖瘦
口 令
密码抗倭立奇功
好玩的“反口令”游戏
字母派对
SNMP服务弱口令安全漏洞防范
密码藏在何处
夺命密码