密码是什么(三):多表代替密码
单表代替密码出现的年代,数学的发展还比较落后,人们对于统计、概率的认识还不深,唯一的破译方法就是猜测,结合文字和语言的特点进行关联性的猜测。但这个工作量太大了,当时又没有计算机,甚至连纸都没有(中国的造纸术12世纪才传入欧洲),总不能拿着树枝在土地上穷尽猜测这些字母吧!
16世纪,文艺复兴开始了,各种各样的文化、艺术、自然科学开始蓬勃发展,欧洲的外交、军事交流开始频繁,传统的密码已经无法满足保密性的需求了。
特里特米乌斯密码方阵
在意大利,有一个叫约翰尼斯·特里特米乌斯的修道士兼密码学家,开始想对单表代替密码动动手脚了。他寻思:既然只用一张代替表,无法掩盖字母的频率特性,那我多用几张表行不行?第一个字母用第一个代替表,第二个字母用第二个代替表......,这样字母的频率特性不就被掩盖掉了吗?
于是,这位老兄设计了这样一张26×26的字母方阵:
表格的每一行都相当于一个代替表。加密的时候,第一个明文字母用第一行代替表(实际上代替完还是自己),第二个字母先从第一行找到这个字母,然后用第二行同一个位置的字母代替,之后都类似。举个例子:
明文“MEET” →
M(第1位)→ 第1行M列 → M
E(第2位)→ 第2行E列 → F
E(第3位)→ 第3行E列 → G
T(第4位)→ 第4行T列 → W
输出密文:MFGW
用不同的多张代替表来替换明文,同样的字母就被替换成了不同的形态,文字频率特性和跟随特性就都被掩盖掉了。但是,这种相对比较固定的变换方式,也存在很大的风险隐患:如果每一次传递的消息内容格式相对固定,比如说明文消息的开头总是time、date、to Alice之类内容,那么密文的开头也都是相似的,密文消息数量很多的情况下,这种规律可以被用来回推代替表。
贝拉索密码
对于特里特米乌斯字母方阵的缺陷,意大利的另外一位密码学家吉奥万·巴蒂斯塔·贝拉索又开始琢磨,特老兄的方阵太有规律了,为啥非要按照顺序使用这些代替表呢?能不能我自己选择一些表,自己确定一个顺序?于是,贝拉索引入了可变密钥,用一个“密钥”,来选择一次加密所使用的代替表,例如密钥为“key”选择第k行、第e行、第y行3行代替表,并按照这个顺序依次替换明文信息。还用上面的例子:
明文“MEET”,密钥“key” →
M(第1位)→ 第k行M列 → W
E(第2位)→ 第e行E列 → I
E(第3位)→ 第y行E列 → C
T(第4位)→ 第k行T列 → D
输出密文:WICD
发送消息的加密方和收到消息的脱密方必须事先约定每一次的“密钥”,才能够正常加脱密,得到正确的信息。贝拉索引入“可变密钥”的密码,他算是多表代替密码的真正发明者。
维吉尼亚密码
后来,法国的一位外交家布莱斯·德·维吉尼亚在贝拉索密码的基础上进一步改进,采用自生密钥(Autokey):初始密钥加密后,后续密钥由明文字母自动延伸,还是用上面的例子:
明文“MEET”,初始密钥“key” →
M(第1位)→ 第k行M列 → W
E(第2位)→ 第e行E列 → I
E(第3位)→ 第y行E列 → C
T(第4位)→ 第t行T列 → M(用明文字母来选择代替表的行)
输出密文:WICM
这样,就解决了密钥短,代替表重复使用的问题,进一步增加了破译的难度,增强了多表代替密码的实用性和安全性。对于维吉尼亚的这一贡献,人们把维吉尼亚密码作为多表代替密码的典型代表。
多表代替密码的缺陷
如果密钥比较短,代替表就存在周期性重复使用的问题,如果明文中也存在一些重复或跟随特性,就会在密文中体现出来。例如,英文中经常出现th、qu、an、er、the等字母组合,如果统计密文字母中相同2字母组合或3字母出现的间距,出现最多频次的间距,说明代替表重用了,有可能就是代替表的数量。然后就可以按照这个数值,把多表代替密码分解成若干单表代替密码进行破译了。