密码学的起源可以追溯到几千年前古埃及的象形文字,人类使用密码的历史几乎与使用文字的时间一样长。历史上,密码学的发展大致经历了3个阶段:第1个阶段是1949年之前的古典密码学阶段,第2个阶段是1949年至1975年的近代密码学阶段,第3个阶段则是1976年以后的现代密码学阶段。
早在公元前400多年,斯巴达人就发明了“塞塔式密码”。他们把一张长条纸螺旋缠绕在一根多棱棒上,将文字沿棒的水平方向书写,写完一行再另起一行,直至写完全部文字。解下来后,纸条上的文字看起来杂乱无章,无法理解,这就是密文。如果将它绕在另一根同等尺寸的多棱棒上,就能看到原始文字。这就是最早的密码技术。
在古罗马时期,恺撒大帝也曾经设计过一种简单的移位密码,用于战时通信。其加密方法是将明文字母按照字母顺序,往后依次递推相同的字母,就可以得到加密的密文。
我国古代也早有以藏头(尾)诗、漏格诗及绘画等形式,将要表达的真正意思或“密语”隐藏在诗文或画卷中特定位置的记载。一般人只注意诗或画的表面意境,而不会去注意或很难发现隐藏其中的“话外之音”。
这一阶段的密码学并不能称为科学,而更像是艺术。其特点是数据的安全主要依赖于加密方法的保密。
在古典密码学发展后期,荷兰语言学家和密码学家 Kerchoffs 于1883年提出:密码机制的安全性不应该依赖于算法的保密性,而应该仅依赖于密钥的安全性,只要密钥不泄露,密文信息就是安全的。这一原则被称为Kerchoffs原则,在一定程度上推动了近代密码学的发展。
1949年,Shannon 发表了《保密系统的通信理论》,从信息论和概率论的角度,奠定了密码学的数学基础,将密码学从艺术变成了科学,密码学的发展自此进入了近代密码学阶段。
近代密码学发展中的一个重要突破是数据加密标准(Data Encryption Standard,DES)的出现。DES的意义在于:首先,它使密码学得以从政府走向民间,其设计主要由IBM公司完成,最终经美国国家标准协会公开征集遴选后,确定为美国联邦信息处理标准;其次,DES 密码设计中的很多思想(Feistel结构、S盒等)后来被大多数分组密码所采用;最后,DES不仅在美国联邦部门中使用,而且风行世界,并在金融等领域广泛使用。
这一阶段的特点是:计算机的出现使得基于复杂计算的密码成为可能,数据的安全依赖于密钥的保密,而不再依赖于加密方法的保密。
1976年,Diffie和Hellman发表了《密码学的新方向》一文,他们提出了“公钥密码”的全新概念。在此类密码中,加密和解密使用不同的密钥,用于加密的叫作公钥,用于解密的叫作私钥。公钥密码概念的提出,标志着现代密码学的诞生,在国际密码学发展史上是具有里程碑意义的大事件。
1977年,Rivest、Shamir和Adleman共同提出了第一个建立在大数因子分解基础上的公钥密码算法,即著名的 RSA 算法。之后,ElGamal、椭圆曲线、双线性对等公钥密码相继被提出,密码学真正进入了一个新的发展时期。
这一阶段的特点是:公钥密码使得发送端和接收端无密钥传输的保密通信成为可能,密码学得到了广泛应用。
一个典型的密码系统由明文、密文、密钥及密码算法等组成,如图2-1所示。
图2-1 典型密码系统的组成
(1)明文和密文
明文是指人们能看懂的语言、文字与符号等。明文一般用 m 表示,它可能是位序列、文本文件、位图、数字化的语音序列或数字化的视频图像等。明文经过加密后称为密文,密文一般用 c 表示。
(2)加密与解密
把明文加密成密文的算法称为加密算法,把密文解密成明文的算法称为解密算法。
(3)密钥
密钥是控制加密算法和解密算法得以实现的关键信息,可以分为加密密钥和解密密钥。密钥参数的取值范围叫作密钥空间。密钥一般用 k 表示,由通信双方掌握。加密密钥与解密密钥可以相同,也可以不相同。
(4)密码算法
密码算法从功能上可以分为加/解密算法、签名算法、摘要算法(散列算法),以及鉴别算法等;从密码结构上可以分为不使用密钥的算法和使用密钥的算法,前者又称为散列算法,后者包括对称密钥算法和非对称密钥算法。
可以用一个五元组( M , C , K , E , D )来表示密码系统。其中 M 为明文空间, C 为密文空间, K 为密钥空间, E 和 D 分别表示加密算法和解密算法。这个密码系统应满足下列条件:
对于任意 k ∈ K ,使得 E k ( M )∈ C 和 D k ( C )∈ M ,且 D k ( E k ( x ))= x ,这里 x ∈ M 。
现代加密算法的安全性都依赖于密钥的安全性,而不是加密算法的安全性。加密算法是公开的,可以被人们分析。一切秘密寓于密钥,即使攻击者知道加密算法,但不知道密钥,也不能轻易地获得明文。
在密码系统中,经过加密后的密文在公开信道中传输时,有可能被第三方窃取。由于不知道解密密钥,第三方会用尽各种方法去分析和破解密文,以得到明文。因此,密码系统在设计时应满足以下基本要求。
(1)密码系统应达到实际上不可破译的要求。不可破译准则要求密码系统在理论上和实际上均不可破译。所谓理论上不可破译是指密码系统的密钥空间无穷大,用任何方法都无法破译。理论上不可破译的密码系统是一种理想的系统,是很难实现的。目前,现实中所使用的都是实际上不可破译的密码系统。实际上不可破译的密码系统在不同情况下可以有不同要求,如要破译该密码系统的实际计算量(计算时间和费用)十分巨大以致无法实现,或者要破译该系统所需要的计算时间超过该信息保密的有效时间,或者破译费用超过该信息的价值以致不值得去破译等。
(2)加/解密算法适用于整个密钥空间。
(3)加密体制易于在计算机和通信系统中实现,并且使用简单、费用低廉。
(4)密码系统的保密性仅依赖于密钥。密码系统的安全性不是依赖于加密算法的保密,而是依赖于密钥的保密。密钥空间要足够大,使攻击者无法轻而易举地通过穷举法得到密钥。