花卷
被忽略的高级货
前面我们讲了发生在英国和法国的两段故事,这两段故事都是发生在16世纪到17世纪的欧洲。看完这两段故事,你可能会觉得,那时候的密码虽然下了不少功夫,做了不少改良,但好像还是道高一尺魔高一丈,总有高手能搞定这些密码,如果这样的话,那加密还有什么意义,不是跟玩过家家一样了吗?
其实,你想的还确实有点道理,脆弱的密码跟裸奔没什么区别,不对,应该说,脆弱的密码还不如裸奔呢。这话放到现在也一点都不过时,就好像我要送人一个东西,又不想让别人看到里面是啥,于是就在外面套个黑的塑料袋,如果你手里没有黑塑料袋,你恐怕会犹豫一下我还要不要送这个东西。其实密码就是这个黑塑料袋,如果没有密码的保护,人们也不会轻易地把那些性命攸关的敏感信息发出去。但反过来说,一旦有了密码,人们的胆子可就大多了,他们心想反正我已经加密了,里面的内容应该不会泄露出去吧?这就是为什么我们说脆弱的密码还不如裸奔,因为脆弱的密码只是给你壮了胆,却丝毫没能保护你的信息安全,这不是妥妥的“猪队友”嘛。
实际上,我们说的这些,当时欧洲的密码学家也都知道,他们也从来没停止过对更强大的密码的追求,要不然也不会把单表密码整得越来越复杂。在这里告诉你们一个秘密吧,其实无论是玛丽女王也好,还是路易十四也罢,他们用的密码完全不能代表当时的最高水平,换句话说,更高级的密码其实早就出现了,只不过这些人“不识货”而已。这话看起来有点玄乎,难道这正是传说中的“高手在民间”?这次的故事,讲的就是这种当时没有怎么被重用,但却特别具有划时代意义的高级货。
超越单表密码
要讲这种高级货,我们先来总结一下之前讲了很久的老熟人——单表密码。包括玛丽女王的密码、路易十四的“伟大密码”在内的大部分当时常见的密码,其实都属于单表密码这个大类,说白了,就是换汤不换药,本质上大同小异。单表密码的特点也很容易总结,它基本上都是“一對一”的置换,举个简单的例子,把A置换成1,把B置换成2,把C置换成3,以此类推。当然了,我们之前也提到过,为了提高单表密码的强度,人们又搞出了一字多码,比如说,A现在不仅可以置换成1,还可以置换成51和81,显然这是为了对付频率分析用的“障眼法”。
看到这里你可能要问了,一字多码不就不是“一对一”置换了么?唔,怎么说呢,你说得对,这种不是一对一了,我们姑且算它“一对多”吧。然而,尽管一个字母可以对应多个码,但是反过来看,每个码还是只能对应一个确定的字母,比如说看到51,我可以确切地知道它肯定代表A,而不可能代表别的字母。对于破译者来说,他们手上最强大的武器就是阿拉伯人发明的频率分析,也就是根据密文中字母的频率分布去猜测原文。尽管一字多码可以对频率分析造成一些麻烦,但这个麻烦基本上是“可逆”的,也就是说,它只是把一个字母的频率给“拆散”了,只要我能把拆散的几块原样拼起来,就能够还原出原本的频率了对不对?也正是因为这样,这种“障眼法”无论搞出多少花样,还是只能骗骗菜鸟,对高手来说只能是隔靴搔痒。
我估计当时的某些密码学家也隐隐约约意识到,要想设计出更厉害的密码,就必须彻底打破单表密码的这个“单一映射”的框框,不然再怎么搞都是白搭。然而怎么才能打破这个框框,这里面可是需要灵感和技术的……算了还是不卖关子了,直接说答案,要想超越单表密码,不仅需要“拆散”,还需要“打乱”,也就是说,一个明文字母必须能够被置换成多个密文字母,而且反过来,一个密文字母也必须能够对应多个明文字母,即必须建立一种“多对多”的映射才行。拿ABC三个字母来说,加密的时候,A可以置换成A、B、C中的任意一个,而解密的时候,A也可以对应A、B、C中的任意一个。
这种“多对多”的映射说起来好像挺简单的,但实际设计出来又是另一回事,这里面也是经历了很多波折,更糟心的是,真的设计出来了,还要被人们嫌弃,并没有多少人愿意用它,这到底是怎么回事呢?
天才的密码盘
那么到底是谁最先设计出这种超越单表密码的“多对多”映射密码的呢?不用说,这个人一定是一位超级天才,而且是闪闪发亮的那种,他的名字叫莱昂·巴蒂斯塔·阿尔伯蒂(Leon Battista Alberti)。但凡对文艺复兴时代大牛有点了解的人应该都对阿尔伯蒂这个名字不陌生,没错,他就是文艺复兴时期意大利的一位鼎鼎大名的建筑师,佛罗伦萨有很多著名地标建筑都是他的杰作,比如鲁切拉宫和新圣母教堂。
等等,为啥一个专门盖房子的,会跟密码学扯上关系?你可别忘了,文艺复兴时代的大牛很多都是十八般武艺样样精通的全才,达·芬奇就是一个再好不过的例子。阿尔伯蒂也不例外,除了特别会盖房子,人家还有很多头衔:作家、艺术家、诗人、哲学家、语言学家……(感觉“狗眼”也要被闪瞎了。)除了这些头衔之外,阿尔伯蒂也被称为当时最伟大的密码学家之一,他最伟大的功绩就是打破了单表密码的框框,打开了新世界的大门。说实话,就凭这一点,就已经比当时甚至是之后一两百年的密码学家们不知高到哪里去了。为什么这么说呢?因为阿尔伯蒂在他1467年发表的专著中就已经描述了这种划时代的密码,这比玛丽女王还早100年,比路易十四还早200年,不仅如此,400多年后声名大噪的德军密码机Enigma,可以说也是由阿尔伯蒂设计的这种密码发展而来的,你说厉害不厉害。
那么阿尔伯蒂设计的这种密码到底长什么样呢?它的核心是一个圆盘一样的装置,我们可以管它叫“密码盘”,阿尔伯蒂管它叫“Formula”。这种密码盘由两个同心圆环组成,外面一圈圆环是固定的,上面刻着20个大写字母和4个数字;里面一圈圆环是可以转动的,上面刻着23个小写字母和一个“&”符号。
至于这个密码盘的用法,我只能说还是蛮复杂的,不过既然我们要介绍这个天才的突破,再复杂也得讲一讲对吧,别嫌我啰唆就行。现在假设我们要加密的文字是“TI AMO, TU MI AMI.”(意大利语“我爱你,你爱我”的意思),然后假设我们和接受信息的对方各自都有一套一模一样的密码盘,请大家看着下面那个密码盘的图,我们要开始加密啦。
首先,我们需要跟对方事先约定一个位于内圈上的字母作为“基准字母”,在这个例子里,假设我们约定的基准字母是k。然后,在开始加密第一个字母之前,我们还要先确定密码盘的“配置”。还记得吗,这个密码盘的内圈是可以转的,这意味着内圈和外圈可以产生24种不同的位置组合,也就是24种不同的配置。假设我们现在就用图上所示的这个配置,这时基准字母k所对应的外圈字母是B,于是我们就在密文的开头写上B。
搞好上面两步之后,我们就可以开始加密正文啦。正文的加密方法不难,对于明文的每个字母,我们先找到它在外圈上的位置,然后再找到相对应的内圈字母,就是我们要的密文了。举个例子,正文的第一个字母是T,我们在外圈先找到T,然后看看对应的内圈字母是啥?哦,是i,好了,我们就在刚才的B后面写下i。以此类推,“TI AMO”加密之后就是“Bivg&y”,注意,我们在加密的时候需要把空格和标点都去掉。
不知道你发现了没有,到这里为止,阿尔伯蒂的密码还只是一个普通的單表密码,因为明文字母和密文字母是一对一的映射,不过别急,马上就是见证奇迹的时刻,别走神。接下来,我们把密码盘的内圈转一转,于是密码盘就变成了另外一种配置,每个字母的对应关系也就跟着变了。不过这里有一个问题,聪明的你一定发现了,对方在解密的时候,也必须在同样的地方将密码盘变成同样的配置,才能正确解密后面的内容。问题是对方怎么知道应该在什么地方如何改变密码盘的配置呢?答案其实很简单,还记得我们在密文开头需要先写一个B么?那个字母就代表密码盘的配置,也就是说,对方看到B,就知道现在要将密码盘内圈上事先约定好的基准字母k,对准外圈上的字母B。那么,当需要改变密码盘的配置时,我们用一个外圈字母来提示对方就行了,比如说,现在我们把内圈顺时针转动一个位置,这时基准字母k对应的外圈字母变成了C,于是接下来我们需要在密文中也写上这个字母C,代表“现在要改变密码盘配置啦”!
后面的事情就很简单了,对于正文的后半部分,我们需要用新的密码盘配置来加密,比如说下一个字母是T,之前T对应的是i,但现在不一样了哦,我们再看一下,现在对应的应该是q,好,那么以此类推,后半部分“TU MI AMI”加密之后就变成了“Cqiztezt”,注意,由于外圈密码盘上没有字母U,所以这里我们用V来代替它。最后,把前后两部分拼起来,我们就得到了最终的密文:“Bivg&yCqiztezt”。
那么这种密码又该怎么解密呢?如果你看懂了加密的操作,那么解密的操作也就不难想象了,因为只要把上面的过程反过来做就行了嘛。先回忆一下我们一开始说的前提条件:解密的人也有一个一模一样的密码盘,而且他知道双方事先约定好的基准字母(在这里是k)。当解密的人看到密文中的大写字母或数字(它们属于外圈)时,就知道这代表密码盘的配置,比如说他先看到B,就要转动密码盘的内圈,让基准字母k指向外圈的字母B。接下来,他只要在内圈中找到密文中的字母,再看一下外圈的对应字母,就可以解密出明文了,不过,当他再次遇到大写字母或数字时,就需要重新转动密码盘来改变配置才能继续解密后面的内容。
(那阿尔伯蒂的密码是不是真的能抵抗频率分析?这种密码又有什么弱点呢?我们下期继续讲。)