多表密码攻防战(三)

时间:2022-09-16 09:33:23

方表探秘

既然特里特米乌斯的方表这么厉害,你一定特别想看看它到底长啥样(如果你还记得的话,就知道上期你已经见过了)――不过我估计你一看就晕了:这什么鬼?呃,这张表乍一看确实挺晕的,不过仔细一看其实并不难,我们这就来捋一捋。

首先,方表方表,顾名思义,它是一张正方形的表(废话),横排是26个字母,竖排也是26个字母。接下来我们一行一行地看,先看第1行吧。第1行的内容是ABCDE……XYZ,哦,这不就是26个英文字母吗?再看第2行,是BCDEF……YZA,还是26个英文字母,只不过整个字母表往左挪了一个位置。再看第3行、第4行……剩下的你就明白了吧,每一行都把整个字母表往左挪一个位置,其实没什么难的对吧?

不知道大家还记不记得,我们在玛丽女王的故事里曾经梳理过一遍单表密码的发展史,其中提过一种应该是最古老的单表密码――恺撒密码。啥?不记得了?好吧,我们简单回忆一下啦。恺撒密码特别简单,它实际上就是把字母表整个挪若干个位置,假设我们挪3个位置,那么A加密之后就变成了D,R就变成了U,Z就变成了C。我们当时也说过,恺撒密码特别脆弱,根本用不着频率分析那种高大上的技术,因为这种密码一共只有26种可能性,一个一个试过来也不费事儿啊。

等等,我们不是在讲特里特米乌斯的方表吗,为啥又要提恺撒密码这种老古董呢?聪明的你肯定看出来了,特里特米乌斯的方表不就是把恺撒密码的全部26种可能性给展开成了一张二维的表吗?比如,我们上面说的那个挪3个位置的例子,其实就相当于方表的D行(第4行),我们先在最顶上的表头中找到A,然后在D行中找到对应的字母,你看是不是D?再找找R和Z的对应字母,看看是不是U和C?

说了这么多,原来特里特米乌斯的方表就是恺撒密码的展开,可是恺撒密码只是“战五渣”啊,展开之后难道就能变成超级赛亚人吗?好吧,也许确实变不成超级赛亚人,不过肯定比原来的“战五渣”要厉害多了。特里特米乌斯的方表到底怎么用呢?实际上,它的用法跟恺撒密码真的差不多,在刚才的例子中我们已经操练过了,先在表头中找到原文的字母,然后从表中找到同一列中对应的密文字母就可以了。那么问题来了,这张表一共有26行,我到底应该看哪一行呢?特里特米乌斯的设计是这样的,每一个字母都要换一行,比如原文中的第1个字母看A行,第2个字母就看B行,第3个字母就看C行,以此类推。拿我们讲阿尔伯蒂密码盘的时候用的那句话来模拟一下的话,就是这个样子:

看起来怎么样?回想一下我们曾经提到过的多表密码的一个重要特点,没错,就是通过“多对多”的关系来消除频率分布的特征,让频率分析这个当时最厉害的大杀器失灵。那么,特里特米乌斯的方表有没有做到这一点呢?我们看上面的例子,原文里出现了3次M,到了密文里分别变成了P、T、W;而密文里出现了3次T,但分别对应不同的原文字母T、M、I。你看,一个原文字母可以对应多个密文字母,一个密文字母也可以对应多个原文字母,这不正是“多对多”的关系么?面对这样的密文,频率分析怕是又要抓瞎了。

哗,这个方表好神奇呐,把古老的弱鸡恺撒密码这么一展开,居然就能达到如此境界。不过先别高兴得太早,还记得我们前面说的阿尔伯蒂密码盘存在的两个弱点不?简单回忆一下吧:第一个弱点是密钥轮换的频率太低,第二个弱点是对方知道了密码盘的结构和用法就基本等于破解了密码。现在问题又来了,特里特米乌斯方表到底有没有解决这两个问题呢?我们还是一个一个看。

首先,特里特米乌斯方表解决了密钥轮换频率太低的问题。阿尔伯蒂密码盘由于密钥轮换比较繁琐,因此一般是逐句轮换密钥,但特里特米乌斯方表则做到了逐字母轮换密钥,因为每加密一个字母就要在方表里换一行嘛,这个“换一行”的动作,其实就是换了一张置换表。因此,要说特里特米乌斯方表相比密码盘最大的改进是啥,那就非这个逐字母轮换密钥的机制莫属了。这个机制是一个伟大的进步,赶紧画重点吧!

然而,对于第二个弱点,也就是“隐匿式安全”的问题,特里特米乌斯方表并没有解决,或者说,在这个问题上居然一丁点改进都没有。为什么这么说呢?因为特里特米乌斯方表的密钥轮换方法是固定的,而且是有规律的,这个规律就写在表上,只要破译者知道一段信息是用这种方表加密的,就可以秒破这种密码。换句话说,方表的秘密就是它自己,这和密码盘是一样的,而如果不把“密码系统”(System)和“密钥”(Key)拆分成两个部件,那么这个问题就没办法解决,这可怎么办呢?

贝拉索的口令

特里特米乌斯方表只解决了阿尔伯蒂密码盘的其中一个弱点,不过这也算是一个很大的进步啦,怎么能把好事儿都给一个人做完了呢?于是后来有人发现,特里特米乌斯提出的这个方表,其实还有不小的潜力可以挖,只不过特里特米乌斯本人没把它发挥到极致而已。只要在用法上稍加改进,阿尔伯蒂密码盘的第二个弱点还是有希望搞定的。

当时,各种单表密码依然是绝对的主流,至于多表密码,大概只有那些最顶尖的密码学家才听说过。尽管如此,还是有很多人琢磨着怎么把多表密码弄得更厉害一点,吉W万・巴蒂斯塔・贝拉索(Giovan Battista Bellaso)就是其中之一。贝拉索是意大利的一位密码学家,一辈子都在研究各种密码,特别是那些最尖端的、最诡异的密码,全都是他的菜。1553年,贝拉索出了一本书,名字就叫《吉奥万・巴蒂斯塔・贝拉索先生的密码》,这名字起得真臭屁,居然拿自己的名字当书名,牛顿、爱因斯坦这些大牛可都没这么干过呐。

那么这位贝拉索先生到底在书里写了点啥呢?他在书里描述了一种新的多表密码,这种密码跟特里特米乌斯方表长得不太一样,不过本质上大同小异。废话少说,我们来看图吧(劳驾您眼睛往下一页瞅),这张图应该就是那本标题很臭屁的书上的原图,这张表从上到下分为11个组,每组的左边有两个大写字母,我们管它叫索引(Index),右边有两行小写字母,每行11个字母。说到这里你大概隐隐约约有点感觉了吧,其实这每一组都是一个单表,11个单表组成了这个多表密码,至于每个单表里面是怎么置换的,其实也很简单:如果原文字母在上面一行,那么就替换成下面一行的对应字母;反过来,如果原文字母在下面一行,那么就替换成上面一行的对应字母。

还是举个例子吧。我们先只看第一组,假设原文字母是A,我们发现A在上面一行,下面一行的对应字母是N,那么A加密之后就变成了N,反过来,N就应该替换成A,换句话说,上下两行的字母都是一对一对的。那么这11组之间又有什么区别呢?仔细看看就发现了,这11组的上面一行字母都是相同的,下面一行字母的顺序也是相同的,只是位置进行了平移而已。实际上,我们可以把贝拉索的这种密码改写成一张方表的形式,这也就是为什么我说“本质上大同小异”。至于怎么个改法,我就不在这里灌水啦,要不大家自己试试看?

话说到这里,你肯定要问了,既然贝拉索的密码实质上就相当于一张方表,那么它跟特里特米乌斯的方表有啥区别啦?其实,贝拉索和特里特米乌斯在表的设计上并没有什么本质区别,但贝拉索提出了一个新的“用法”,而这个新的用法,正是解决“隐匿式安全”这个老大难遗留问题的关键。哇,到底什么样的新“用法”能这么神奇?这个新的“用法”就是引入了一种叫“口令”(Countersign)的机制。这个口令是什么意思呢?嗯……你可以理解为是登录淘宝时输入的那个“密码”(Password),也就是说,口令是一串保密的字母,只有信息的发送者和接收者才知道这个口令。

口令到底怎么用来加密呢?我们还是拿例子说话吧,赶紧把之前那个用烂的例子再翻出来,假设我们要加密的原文是“TI AMO TU MI AMI”。跟特里特米乌斯方表不同,我们这次还需要想一个口令,嗯,比如说“FANS”吧。接下来,我们把原文和口令排列在一起,口令一般都比原文短,但可以像敲图章一样不断重复,像这样:

好了,现在我们可以开始查表加密啦。首先看第一个字母T,对应的口令是F,我们先在表上从左侧的索引中找到F,也就是写着EF的第3组。然后,在这一组中找到字母T,找到了,在下面一行,看一看上面一行的对应字母是啥?是H,好了,于是我们的第一个密文字母就是H。再看第二个字母I,对应口令是A,这个口令对应的是表中写着AB的第1组,从这一组中找到字母I,这个字母在上面一行,它对应的下面一行字母是X,于是我们的第二个密文字母就是X。后面的不用一个一个说了吧,大家自己试试看啦,整条消息加密之后就是这个样子:

怎么樱学会了没?大家可以把上面这段内容和特里特米乌斯方表对比一下,聪明的你一定发现了,其实这个“口令”就是特里特米乌斯方表中的“行号”嘛,它们都是用来切换置换表的,作用其实是一样一样的,唯一不一样的地方是,行号是按ABCDE这样的固定顺序来轮换的,这个方式是有规律的,你知我知,别人也知,而口令则是由加密者自行设定的,只有通信双方才知道。

(那么,贝拉索的密码能不能解决“隐匿式安全”的问题呢?后来还有没有更先进的多表置换密码呢?这些密码又该如何破解呢?我们下期继续讲。)

上一篇:我累我有病,这是真的么? 下一篇:人工智能与未来教育