多表密码攻防战(四)
2017-09-06花卷
花卷
上期我们讲到,意大利密码学家贝拉索提出了一种新的多表密码,我们试过之后发现这其实是特里特米乌斯方表的一种改良版,贝拉索首创了一种叫作“口令”(Countersign)的机制,消除了密钥轮换的规律性。那么,贝拉索的这种密码到底能不能解决特里特米乌斯方表所遗留的“隐匿式安全”的问题呢?后来还有没有更先进的多表置换密码呢?这些密码又该如何破解呢?别急,我们一个一个来看。
口令的妙用
通过和特里特米乌斯方表的对比,我们很容易看出来,其实贝拉索的密码就是特里特米乌斯的方表,只是比它多了一个口令的设计,这个口令,看上去是一小步,其实可是关键性的一大步。为什么这么说呢?因为对于贝拉索的密码来说,哪怕别人拿到了那张表——或者这么说吧,贝拉索把他的密码表就写在书里,那本书是公开出版的,谁想看都能看到——即便如此,决定查表方法和顺序的是“口令”,这个口令特别关键,因为只要不知道“口令”,仅凭那张表你也不知道该怎么个查法,也就没办法破译密文了。
这意味着什么呢?也就是说,贝拉索的密码实现了密码系统与密钥的相互分离,密码系统本身是公开的,而密钥是私密的(只有收发双方才知道的),这不就是符合了我们前面说过的那个“柯克霍夫原则”了吗?换句话说,这不就是解决了“隐匿式安全”的问题了吗?
这可真是个振奋人心的消息呐!从阿尔伯蒂密码盘,到特里特米乌斯方表,再到贝拉索密码,我们一步一步地解决了好几个问题。首先,阿尔伯蒂密码盘开创了多表密码的先河,从根本上带来了比单表密码更高的安全性;然后,特里特米乌斯方表解决了密钥需要手动轮换的问题;接下来,贝拉索密码又解决了“隐匿式安全”问题。那么到了这一步,贝拉索密码是不是就已经是多表密码的“集大成”之作了呢?可是既然如此,为啥这种密码好像没啥人知道,反倒是我们之前提过的“维热纳尔方表”才是最著名的多表密码呢?嗯,这个问题确实诡异,那我们就来看看维热纳尔方表到底是何方神圣吧。
维热纳尔方表
不用我说你也知道,维热纳尔方表肯定是个叫“维热纳尔”的人提出来的,这个人名字叫布莱斯·德·维热纳尔(Blaise de Vigenère),是16世纪时的一位法国外交官。说句题外话,如果你碰巧看过其他一些密码学的书,可能大多数书里面把Vigenère翻成了“维吉尼亚”,连维基百科的中文词条都是维吉尼亚,凡是这么翻的一看就不懂法语,咱可不能跟他们学坏了。
维热纳尔17岁就进了外交部,这应该得益于他会说好几门外语,而且他这一干就是30多年,也算是为法国的外交事业奋斗终生了。据说维热纳尔曾经在1549年和1566年两次被外派意大利,说实话,那时候在驻外大使馆工作其实挺闲的,闲得我们这位维热纳尔同学都开始研究起密码学了。还记得之前我们提到的贝拉索先生吗?贝拉索的那本讲他发明的那个密码的书,就是1553年出版的,所以我们谨慎地猜测,工作清闲,而且又对密码学颇有兴趣的维热纳尔同学,在1566年那次外派意大利的时候,没理由不去看这本新鲜出炉的著作啊!甚至,说不定他在1549年那次外派的时候,就已经认识了贝拉索,说不定还跟他喝过几杯咖啡。
不管维热纳尔到底有没有看过贝拉索的书,反正他后来搞出来的“维热纳尔方表”,本质上跟贝拉索的密码完全没区别——或者准确地说,维热纳尔就是把贝拉索密码跟特里特米乌斯方表搞了个合体,也就是把贝拉索密码改成了方表的形式。
维热纳尔方表的样子跟特里特米乌斯方表一模一样,再回忆一下,特里特米乌斯方表是每加密一个字母,就切换到下面一行,这种切换方式是固定的,而且有规律,有点太弱鸡。维热纳尔觉得贝拉索的那个口令是个聪明的点子,太妙了,把它搬到方表上来不就好了吗?也就是说,我们先想好一段口令,然后按照口令上的字母来切换方表中的行。还是我们之前的那个例子:TI AMO TU MI AMI,口令还是和原来一样吧,用FANS,我们把原文和口令先写出来:
现在我们开始查表,第一个字母T,对应的口令是F,先从表上左侧一列找到F行,然后从上面的表头中找到T列,看看它们交叉的位置是啥?对了,是Y。第二个字母I,对应的口令是A,一样的方法,我们找到了字母I。以此类推,最后得到的结果就是这样的:
如果你单看维热纳尔方表的设计,估计你会觉得这个设计真是太巧妙了,简直惊为天人啊!但如果我们一路从阿尔伯蒂密码盘看下来,你就能明白,离开了前人的智慧,维热纳尔绝对想不出这种巧妙的设计。不过也有人說,明明是贝拉索设计出来的密码,维热纳尔拿来捏巴捏巴就改成自己的名字了?这要是放在有专利保护的年代,绝对算是侵权呐!确实,维热纳尔方表和贝拉索密码在原理上是一回事,不过维热纳尔的这种改法也不能说完全没有价值,至少在易用性上面,方表比贝拉索书里的那个表格要好一些,你觉得呢?
此外,还有一种说法认为,维热纳尔方表这个名字是纯粹的“张冠李戴”,跟维热纳尔本人其实毫无关系,方表的形式也是贝拉索自己搞出来的。当然了,维热纳尔本人也确实提出过一种方表密码,这种密码也很厉害,但却不是我们说的这种。好吧,历史上的事情总是有很多争议,我也不是历史学家,讲不清哪种说法才是对的,不过这对于我们讨论这种密码似乎也没太大影响吧。
无法破译的密码?
维热纳尔方表可以说是当之无愧的古典多表置换密码的巅峰之作了,据说后来还有人提出过各种各样其他类型的多表密码,但它们也都是跟维热纳尔方表大同小异,完全没办法撼动它的霸主地位。想想看,维热纳尔方表是16世纪的产物,而处于同一时代的玛丽女王却还在用弱不禁风的单表密码,也是件很讽刺的事情吧。
你可能要说了,实践才是检验真理的唯一标准,维热纳尔方表到底有多厉害,实践中有没有高手能破译它呢?我觉得肯定有,但是那些破译很有可能是非常侥幸的,有点像瞎猫碰到死耗子,而类似于用频率分析破译单表密码这种通用方法,至少在300年内都没人搞出来过,也正是因为如此,坊间给维热纳尔方表起了个很牛的外号,叫作“无法破译的密码”(le chiffre indéchiffrable)。对于一种密码来说,这可以算是头顶青天至高无上了吧。
当然,外号归外号,维热纳尔方表的不败金身终究还是在300年后被打破了。到底是哪位大牛这么厉害呢?其实,先后有两个人几乎在同一时期找到了破译维热纳尔方表的通用方法,我们一个一个来介绍吧。
计算机之父
说起“计算机之父”这个称号,好像能够想到的不止一个人,比如说计算模型理论的先驱艾伦·图灵,以及电子计算机逻辑结构的先驱冯·诺依曼,不过这两位都是20世纪的人物了,我们要说的这位计算机之父可是他们俩的前辈,他就是查尔斯·巴贝奇(Charles Babbage)。
巴贝奇出生在18世纪末的英格兰,比图灵和冯·诺依曼早了100多年。这个人也是个传奇般的人物。他是个地道的富二代,老爹是搞金融的,有钱,不过跟别的那些富二代不一样,巴贝奇居然还是个学霸!俗话说得好,不怕别人比你有钱,怕的是别人不但比你有钱,还比你聪明,比你努力。
巴贝奇后来考上了剑桥大学,主业研究数学,成就不小,拿到了皇家天文学会的金奖。不过他这个人心思特别活络,除了数学之外,还精通机械、工程,甚至连经济学也颇有研究。巴贝奇之所以有“计算机之父”这个称号,得归功于他设计的两台特别厉害的机器——差分机(Difference engine)和分析机(Analytical engine)。这两个玩意儿,说白了就是蒸汽驱动的机械式计算机。现在我们用的计算机是电子的,但巴贝奇那个年代,还搞不出电子的,即便如此,巴贝奇这两个玩意儿可是正经的十进制数字计算机。其中差分机专门用来算多项式数表,而分析机就更厉害了,它不但支持条件分支和循环,还可以编程,把100年后图灵的模型套进去一看,巴贝奇的分析机居然是“图灵完全”的!也就是说,现在的计算机能做的事情,巴贝奇的那台蒸汽老古董都能做,也就是慢点而已。
不过遗憾的是,巴贝奇的那两台机器,其实一台都没造出来,为啥呢?主要是因为在当时制造这么复杂的一台机器,管理上的难度实在是太大了,而巴贝奇这个人又是想一出是一出,还特别固执,跟当时项目的总工程师克莱门特天天吵,你说这活还怎么干?还有一个问题就是钱,一开始巴贝奇在皇家天文学会发表差分机论文的时候,英国政府那是相当感兴趣,主要是因为这货有一定的军事价值,于是政府就说,我给你赞助,你帮我造一个出来呗。结果不知道是不是巴贝奇追求完美的强迫症作怪,不但严重超了预算,而且还自己倒贴了好多钱,即便是这样,差分机还是没能造出来!政府一看这还怎么玩?算了就当我的钱打水漂了,后面我也没钱给你了,你自己看着办吧。结果差分机就这么流产了。
后来巴贝奇又设计了一个威力加强版的“差分机2号”,计算精度达到了31位十进制数。当然了,有了上次的教训,政府再也不敢跳这个坑了,没钱,所以巴贝奇又没造出来。再后来的分析机就更复杂了,巴贝奇连编程语言都设计好了,可惜,还是沒钱,造不出来,这几张设计图只能跟着他进了棺材。可怜的是,巴贝奇去世了还遭到各种冷嘲热讽,说他的差分机根本就是骗钱的,就算造出来也不能用。对于这种人身攻击,英国人觉得有必要帮这位大牛证明一下他的实力,不能让他遭受不白之冤呐!于是在1989年,也就是巴贝奇200周年诞辰的时候,英国搞了个项目,用巴贝奇的“差分机2号”设计图,完全仿照19世纪的制造水平和精度,花了两年时间,还真把这玩意儿给造出来了!而且开动起来一试,还真的能算,结果完全正确!总算是帮巴贝奇狠狠地出了一口恶气。这台差分机现在摆在伦敦的科学博物馆里,有机会的话可以去瞻仰一下。
(那么,巴贝奇到底是用什么方法破解维热纳尔方表的呢?另外一个破解维热纳尔方表的人又是谁呢?我们下期揭晓答案。)