Java加密与解密的艺术(第2版)
上QQ阅读APP看书,第一时间看更新

2.4 古典密码

古典密码(Classical Cipher)起始于古代终止于19世纪末,是现代密码的基础。当时生产力水平较低,普遍采用纸、笔或简单器械完成加密、解密操作,正是密码学发展史上手工加密阶段迅速发展的时期。虽然,古典密码由于安全性较低、效率低等多种缺陷已经退出了历史舞台,但古典密码对于密码学的研究却有着不可替代的作用。

古典密码受限于当时的环境,以语言学为基础对文字进行字符变化,也就是对字符加密,以达到信息加密的目的。古典加密算法最常用、最核心的两种加密技巧是移位和替代,这同样是对称加密算法最常用的方法。

❑ 移位密码(Transposition Cipher):又称错位密码,即将字符的顺序重新排列。例如,将“1234567890”变成“3216549870”。这种加密算法看似简单,但却十分有效。如果不能领会其中的规律,很难辨别其内容的真正含义。

❑ 替代密码(Substitution Cipher):又称置换密码,即将明文中的一组字符替代成其他的字符,形成密文。例如,“Encryption algorithm”变成“Fodszqujpo bmhpsjuin”(每个字母用下一个字母替代)。接收者对密文做反向替代就可以恢复明文。著名的凯撒密码就应用了替代式算法。

在古典加密时代,替代密码发展迅速,而且变得更加复杂,拥有众多分支,具体如下。

❑ 单表替代密码(Monoalphabetic Cipher):又称简单替代密码。明文的一个字符用相应的一个密文字符代替。加密过程就是从明文字母表到密文字母表一一映射的过程。主要包括移位(shift)密码、乘数(multiplicative)密码、仿射(affine)密码、多项式(Polynomial)密码、密钥短语(Key Word)密码。

❑ 同音替代密码(Homophonic Substitution Cipher):又称多名替代密码。与单表替代系统相似,唯一的不同是单个字符明文可以映射成密文的几个字符之一,例如,A可能对应于5、13、25或56,“B”可能对应于7、19、31或42,所以,同音代替的密文并不唯一。电影《风语者》中,美军征召纳瓦霍人加入海军,训练他们使用纳瓦霍语言作为通信密码,这实际上就是应用了多名替代密码。

❑ 多表替代密码(Ployalphabetic Substitution Cipher):明文中的字符映射到密文空间的字符还依赖于它在上下文中的位置。其由多个简单的代替密码构成,例如,可能有5个被使用的不同的简单代替密码,单独的一个字符用来改变明文的每个字符的位置。弗吉尼亚(Vigenere)密码、博福特(Beaufort)密码、滚动密钥(running-key)密码、弗纳姆(Vernam)密码、转子机(rotor machine)密码均为多表替代密码。第二次世界大战中,德军用的转子加密机—Enigma,正是多表替代密码应用的典范。

❑ 多字母替代密码(Polygram Substitution Cipher):明文中的字符被成组加密,例如“ABA”可能对应于“RTQ”,ABB可能对应于“SLL”等。希尔(Hill)密码、Playfair密码均为多字母替代密码。在第一次世界大战中英国就采用了这种密码。

不管是移位算法还是替代算法,终究脱离不开人类语言。针对该特点,通过对密文进行语义分析使得古典密码在破译上有章可循。例如,凯撒密码是单表替代密码,要破解凯撒密码,只要以语言学为基础,找出使用频度最高的字符,如' '(空格符)和 'e',用ASCII码表示就是32和101,差值为69。如果明文中两个出现频率最高的字符的ASCII码相差69,那么加密后密文中相应出现频率最高的字符的ASCII码相差也一定是69。很显然,通过这样的分析方法,只要找出密文中与之对应的字符,计算偏移量—密钥,就可以破译密文,这就是著名的频度分析法。公元1578年,玛丽女王营救计划因密信被破解而以失败告终,当时使用的破解方法就是频度分析法。