早期的加密试图使用换位(Transposition)来对消息进行编码,也就是简单地重新排列消息中字母的顺序。当然,这种重新排列必须遵循某些规则,否则消息接收者将无法恢复消息。公元前5世纪,斯巴达人使用的密码棒是最早使用换位编码模式的记录。密码棒是一种被纸条缠绕的木棒,在木棒的一侧写下消息,解开纸条后,消息便无法读懂。这样,即使送信人被抓,消息也是安全的。安全抵达目的地后,把纸条以同样的方式缠绕在完全相同的木棒上,就可以读出消息了。
其他早期的加密使用替代(Substitution)法。替代法简单地用另一个字符替换消息中的每一个字符。凯撒密码(Caesar cipher)就是一个例子。要使用这种方法,可以在纸上从左到右按顺序列出26个字母,与接收方协商好替换字母A的另一个字母,然后在列出的26个字母下面按序排列出各自对应的替换字母,遇到Z则循环到A继续。比如说,经协商,确定替换字母A的字母是E,则替代关系如下:
有了这个替代关系表之后,要加密某个消息非常简单:对于消息中的任何一个字母,检索表中的第一行,用其下面的字母替换它即可。例如,消息“The administrator password is secret”加密后的结果是“Xli ehqmrmwxvexsv tewwasvh mw wigvix”。要解密消息,只需在替代表的第二行中检索加密后的信息中的每一个字母,用其上面的字母替换它即可。
这些加密方法的有效性,依赖于加密规则或加密算法的保密性。人们早就认识到这种做法并不可靠,因为早晚会有人推导出所用的算法,到那时,所有加密的消息都会被破解。另外,对于单表替代算法(使用一个字母表),如前面的凯撒密码,通过统计每个字母出现的频率就可以轻易地破解。其原理基于这样一个事实:用英语表达的书面语中,某些字母出现的频率要高于其他字母。所以,如果你有足够多的加密消息样本,你就能利用各个字母在书面语中的统计特性破解这些加密的消息。这就是频率分析法,它是密码分析(Cryptanalysis)的一个例子。
因为单表替代算法的这个缺点,后来出现新的替代算法,也即多表替代算法。这些算法使用多个字母表,不会被简单的频率分析法破解。其中最著名的一个算法叫作维吉尼亚(Vigenere)密码,它使用一个密钥字并利用模数运算,来确定对于消息中的每一个字母要使用哪一个字母替换。Vigenere密码把26个字母a、b、c、…、z分别映射成数字0、1、2、…、25。消息的第一字母与密钥字的第一个字母对应,依序排列消息和密钥字的其余字母,密钥字不足则不断重复。加密时,消息中的每一个字母与密钥字中对应的字母相加,除以26的余数对应的字母就是加密后的字母。解密时,加密后的字母减去密钥字对应的字母(如果为负则加上26),结果对应的字母就是加密前的字母。这里有一个简单的例子。假如密钥字是“deceptive”,消息是“wearediscoveredsaveyourself”(为简化,去掉了空白),加密示例如下:
消息: w e a r e d i s c o v e r e d s a v e y o u r s e l f(www.daowen.com)
密钥字: d e c e p t i v e d e c e p t i v e d e c e p t i v e
结果: Z I C V T W Q N G R Z G V T W A V Z H C Q Y G L M G J
Vigenere密码是由16世纪的法国外交家Vigenere设计的,它在长达300年的时间内都没有被破解。其中一个原因是它有无限多种密钥,也就是它的密钥空间非常大。它使用的密钥,可以是一个单词,也可以是字母的随机组合,其长度可变,并且可以使用任意可能的字母组合。
密钥是对消息进行加密的时候使用的秘密值或秘密信息。前面提到的凯撒密码也有密钥,也就是“用哪个字母替换起始字母A”这个信息。容易看出,凯撒密码只有25个密钥。一般来说,密钥空间越大,越难被破解。这也是凯撒密码易被破解的一个原因。
无论哪一种加密方法,如果加密算法被人知晓,在知道密钥的前提下,所加密的任何消息都将被破解。所以,密钥空间大并且密钥不被泄露是保密的关键。一次一密钥是最安全的,原因是它的密钥空间无限大,并且每次使用的密钥都不同;即使推导出密钥,也只会影响当前消息。历史上首次使用一次一密钥,是通过便笺簿来记录各个密钥的。便笺簿的每一页记录一个不同的密钥。通信双方各自有一个内容相同的便笺簿。从第一页开始,双方按序使用密钥。对于每一个消息,使用一个新密钥加密,使用完毕,撕掉那个密钥。这个技术在第一次世界大战期间被成功运用,并且常常在Vigenere密码中使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。