密码学(Cryptology)的历史
“cryptology” 和 “cryptography” 两个词在现代的文献中常常是无差别混用的,这就把对它们实际意义的混淆延伸到了语义学中。实际上,这几个不同的词语最好这样解释:
Cryptology(密码学) —— 对保密技术的艺术性 以及/或者 密码系统科学性的研究
Cryptography(密码设计学)—— 设计密码系统来保密的实用方法
Cryptoanalysis(密码学分析)—— 致力于发现无需得知密钥或算法就能从密文中反推出明文的漏洞
译者注:正如作者所说,在现代的文献中,“cryptology” 和 “cryptography” 基本上是没有差别的了,都是 “密码学” 的意思,而且,密码学虽然脱胎于加密方法研究,但现代的密码学早已不止于研究加解密,而是延伸到了研究如何保障通信中的 “机密性”、“身份同一性” 等属性上。因此,可以说,作者这里的定义即使不算过时,也至少是窄化了密码学。不过,出于理解作者原意的需要,对下文中的相应词语,我们仍沿用此处的翻译。
本文的绝大部分篇幅是在解释 “Cryptography(密码设计学)”,也就是今时今日的密码学实践,也希望读者能意识到这几个词的含义和区别。
就其本身而言,密码学作为一种科学的研究已经存在了很多年,已知最早的一个密码设计学的例子是在一段刻于公元前 1900 年的铭文,是在埃及贵族 Khnumhotep 二世墓地的主墓室里发现的。那个雕刻者到处使用一些奇怪的符号来代替更常见的符号。不过目的似乎并不是隐藏信息,只是为了改变其形式,让它看起来更高贵一些。
在罗马帝国的鼎盛时期(公元前 100 年),Julius Caesar(凯撒大帝)也因使用加密技术向前线将军传送消息而闻名。这种字符替换型加密方法(cipher)被称为 “凯撒密码”,可能是文献中最常提到的人类曾用过的加密方法。(所谓 “cipher”,就是用来加密或者解密的算法)。所谓 “字符替换型加密方法”,就是把明文(我们想要加密的消息)中的每个字母都换成另一个字母,形成密文(即被编码过的消息)。凯撒所用的方法是把每个字母位移三位,比如,“A” 会被换成 “D”,“B” 会被换成 “E”,以此类推(都是换成该字母后面第三个字母)。相应地,最后的几个字母会被换成开头的字母,比如 “X” 会被换成 “A”。
在第二次世界大战期间,美国海军从纳瓦霍人(Navajo)中招募并训练了许多熟练使用纳瓦霍语的人。从编码消息的角度来看,这是个绝妙的办法,因为很少有纳瓦霍人以外的人学过怎么说这种语言,而且当时还没有用纳瓦霍语出版的书。但是除了词语之外,纳瓦霍人的口语并不是十分复杂(按密码设计学的标准来看),一个母语为纳瓦霍语的人再加上一个训练有素的密码学家,合作起来完全可以破解这套密码。日本人曾经有过一次机会,就是在 1942 年 “巴丹死亡行军(Bataan Death March)” 期间他们在菲律宾抓住了 Joe Kieyoomia。Joe 是美国海军的一位纳瓦霍中士,但他并不是密语播报员,只负责翻译无线电消息。只不过,因为他没有参与过密语训练,这些词语是什么意思他一点也不懂。当他说自己不能解读这些消息时,日本人就开始严刑拷打他。因此,日本陆军和海军从来没有破译过这些密语。
再到 1970 年代,IBM 发现他们的客户需要某种形式的加密手段,所以他们成立了一个密码学小组,由 Horst-Feistel 领头。他们设计出了一种加密算法叫 “Lucifer”。1973 年,美国国家标准局(现在叫做国家技术与标准局,NIST)放出话来,希望大家能提议一种够格成为国家标准的数据加密方法。他们显然已经意识到,自己买了很多并没有什么密码学基础的商业产品。Lucifer 最终被接受了,因此叫做 “DES(数据加密标准)”。1997 年以后,DES 被穷举式搜索攻击攻破。DES 的主要问题在于加密密钥的位数太小。随着计算机运算力的增加,通过暴力穷举所有可能的密钥组合来破解密文慢慢变成了一种可行的办法。
在 80 年代,大家几乎只有一个选择,就是 DES。今天的情形已经大不相同了,有一大堆更健壮、更快,设计也更好的算法可供选择。问题已经变成了你如何厘清这些选择。
1997 年,NIST 再次征求新的加密算法提案,最终收到了 50 份提案。2020 年,NIST 接受了 “Rijndael” 算法,并命名为 “AES”,高级加密标准。