第 2 部分: 对称密码术
对称密码术(也称作秘钥密码术)早已被人们使用了数千年,它有各种形式:从简单的替换密码到较复杂的构造方式。不过,数学的发展和计算能力的不断进步使得创建牢不可破的密码成为可能。对称系统通常非常快速,却易受攻击,因为用于加密的密钥必须与 需要对消息进行解密的所有人一起共享。IBM 开发的密码 DES 已被广泛使用,但如今已到了其使用寿命的尽头,应该要更换了。无论开发人员在他们的应用程序中使用哪种密码,都应该考虑使用的方法、认识到发生的折衷方案以及规划功能更强大的计算机系统的前景。
简介
对称或秘钥密码术早已被人们使用了数千年,它包括任何加密形式,其中同一个密钥既用于加密也用于解密所涉及的文本。最简单的形式之一往往被称为“恺撒(Caesar)”密码 ― 据说是 Julius Caesar 用来隐蔽消息的方法 ― 其过 程很简单,就是将字母表沿某一方向或反方向移动数位。第 1 部分中提供的 HAL/IBM 示例正是这种形式,它的密钥指示将字母向前移动一位进行解密。在这个普通示例中,解密密钥是一个加密密钥的镜像(mirror image),而不是它的复制品,但这并没有损害作为对称机制的保密级别。
这种简单方案的变体涉及使用一个任意排序的字母表,它和用于明文消息的字母表有同样的长度。在这种情况下,密钥可能是由数字组成的一个长序列,例如:5, 19, 1, 2, 11 ... 表明 A 应该映射为 E、B 为 S、C 为 A、D 为 B、E 为 K 等等 ― 也可能是许多有点独创性方案中的一种,这些 方案包含的字母(假定)是从特定小说的句子中选取的。
当然,这样的系统是极其脆弱的,而现代的系统则使用基于难解的数学问题的复杂算法,并因此趋于极端强壮。
非对称密码术的过程有一个公共元素,而且几乎从不共享私钥。与非对称密码术的这种情况不同,对称密码术通常需要在一个受限组内共享密钥并同时维护其保密性。对于一个查看用对称密码加密的数据的人来说,如果对用于加密数据的密钥根本没有访问权,那么他完全不可能查看加密数据。如果这样的秘钥落入坏人之手,那么就会马上彻底地危及使用该密钥加密的数据的安全性。因此,使用秘钥方法的这个组中的所有系统所共享的内容是密钥管理的难点,将在关于实际问题的特性中(紧接在本系列后)更详细地讨论。
通常提到的密钥都有特定的位长度,如 56 位或 128 位。这些长度都是对称密钥密码的长度,而非对称密钥密码中至少私有元素的密钥长度是相当长的。而且,这两组的密钥长度之间没有任何相关性,除非偶尔在使用某一给定系统的情况下,达到某一给定密钥长度提供的安全性级别。但是,Phil Zimmermann,非常有效而且重要的软件包 ― 称为“PGP 加密软 件(Pretty Good Privacy,PGP)”的创始人,提出 80 位的对称密钥目前在安全性方面与 1024 位的非对称密钥近似相等;要获得 128 位对称密钥提供的安全性,可能需要使用 3000 位的非对称密钥。有些人肯定会对其中一些比较、(毫无疑问)甚至对比较的尝试持反对意见。
但是,在任何特定组中,所用密钥的长度通常是确定安全性时的一个重要因素。而且,密钥长度并不是线性的,而是每增加一位就加倍。二的二次方是四,三次方是八,四次方是十六,依次类推。Giga Group 提供一个简单的比喻,它提出如果一个茶匙足够容纳所有可能的 40 位的密 钥组合,那么所有 56 位的密钥组合需要一个游泳池来容纳,而容纳所有可能的 128 位的密钥组合的体积将会粗略地与地球的体积相当。一个用十进制表示的 128 位的值大概是 340,后面跟 36 个零。
对称密钥方法比非对称方法快得多,因此加密大量文本时,对称密钥方法是首选机制。诸如 DES(qv)的密码在软件中至少比非对称密码 RSA(在关于非对称系统的特性中有所讨论)快 100 倍,而且在专门的硬件上实现时可能高达 10,000 倍。秘钥密码最适合用于在单用户或 小型组的环境中保护数据,通常都是通过使用密码实现。实际上,正如在别处已提到的,广为散布或大规模实际使用的最令人满意的方法往往都同时组合了对称和非对称系统。
对称密码的类型
现在,通常使用分组密码(block cipher)或序列密码(stream cipher)实现对称密码,我们将在此讨论这两种密码。这一特性中还要考虑称为“消息认证代码(Message Authentication Code,MAC)”的一种使 用秘钥的校验和机制。MAC 与消息摘要 是完全不同的,消息摘要是在数字签名中使用的,将在关于非对称密码术(第 3 部分)的特性中讨论。
分组密码
分组密码将定长的明文块转换成等长的密文,这一过程在秘钥的控制之下。使用逆向变换和同一密钥来实现解密。对于当前的许多分组密码,分组大小是 64 位,但这很可能会增加。
明文消息通常要比特定的分组大小长得多,而且使用不同的技术或操作方式。这样的方式示例有:电子编码本(ECB)、密码分组链接(CBC)或密码反馈(CFB)。ECB 使用同一个密钥简单地将每个明文块一个接一个地进行加密;在 CBC 方式中,每个明文块在加密前先与前一密文块进行“异或”运算,从而增加了复杂程度,可以使某些攻击更难以实施。 “输出反馈”方式(OFB)类似 CBC 方式,但是进行“异或”的量是独立生成的。 CBC 受到广泛使用,例如在 DES(qv)实现中,而且在有关密码术的技术性方面的相应书籍中深入讨论了各种方式。请注意:您自己建立的 密码系统的普遍弱点就是以简单的形式来使用某些公开的算法,而不是以提供了额外保护的特定方式使用。
迭代的分组密码是那些其加密过程有多次循环的密码,因此提高了安全性。在每个循环中,可以通过使用特殊的函数从初始秘钥派生出的子密钥来应用适当的变换。该附加的计算需求必然会影响可以管理加密的速度,因此在安全性需要和执行速度之间存在着一种平衡。天下没有免费的午餐,密码术也是如此;与其它地方一样,应用适当方法的技巧中有一部分是源于对需要进行的权衡以及它们与需求平衡的关系如何的理解。
分组密码包括 DES、IDEA、SAFER、Blowfish 和 Skipjack ― 最后一个是“美国国家安全局(US National Security Agency,NSA)”限制器芯片中使用的算法。
序列密码
与分组密码相比,序列密码可以是非常快速的,尽管某些方式下工作的一些分组密码(如 CFB 或 OFB 中的 DES)可以与序列密码一样有效地运作。序列密码作用于由若干位组成的一些小型组,通常使用称为密钥流的一个位序列作为密钥对它们逐位应用“异或”运算。有些序列密码基于一种称作“线形 反馈移位寄存器(Linear Feedback Shift Register,LFSR)”的机制,该机制生成一个二进制位序列。
序列密码是由一种专业的密码,Vernam 密码(也称为一次性密码本(one-time pad)),发展而来的。序列密码的示例包括 RC4 和“软件优化加密算法(Software Optimized Encryption Algorithm,SEAL)”,以及 Vernam 密码或一次性密码本的特殊情形。
消息认证代码
消息认证代码(MAC)并不是密码,而是校验和(通常是 32 位)的一种特殊形式,它是通过使用一个秘钥并结合一个特定认证方案而生成的,并且附加在一条消息后。消息摘要是使用单向散列函数生成的,紧密联系的数字签名是使用非对称密钥对生成并进行验证的。与这两者相比,预期的接收 方需要对秘钥有访问权,以便验证代码。
对称密码的示例
DES
数据加密算法(Data Encryption Algorithm,DEA)的数据加密标准(Data Encryption Standard,DES)是规范的描述,它出自 IBM 的研究工作,并在 1997 年被美国政府正式采纳。它很可能是使用最广泛的秘钥系统,特别是在保护金融数据的安全中,最初开发的 DES 是嵌入硬 件中的。通常,自动取款机(Automated Teller Machine,ATM)都使用 DES。
DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环。
攻击 DES 的主要形式被称为蛮力的或彻底密钥搜索,即重复尝试各种密钥直到有一个符合为止。如果 DES 使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。随着计算机系统能力的不断发展,DES 的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过 ,DES 现在仅用于旧系统的鉴定,而更多地选择新的加密标准 ― 高级加密标准(Advanced Encryption Standard,AES)。
DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。
IBM 曾对 DES 拥有几年的专利权,但是在 1983 年已到期,并且处于公有范围中,允许在特定条件下可以免除专利使用费而使用。
IDEA
国际数据加密算法(International Data Encryption Algorithm,IDEA)是由两位研究员 Xuejia Lai 和 James L. Massey 在苏黎世的 ETH 开发的,一家瑞士公司 Ascom Systec 拥有专利权。IDEA 是作为迭代的分组密码实现的,使用 128 位的密钥和 8 个循环。这比 DES 提供了更多的 安全性,但是在选择用于 IDEA 的密钥时,应该排除那些称为“弱密钥”的密钥。DES 只有四个弱密钥和 12 个次弱密钥,而 IDEA 中的弱密钥数相当可观,有 2 的 51 次方个。但是,如果密钥的总数非常大,达到 2 的 128 次方个,那么仍有 2 的 77 次方个密钥可供选择。
通过支付专利使用费(通常大约是每个副本 $6.00),可以在全世界广泛使用 IDEA。这些费用是在某些区域中适用,而其它区域并不适用。IDEA 被认为是极为安全的。使用 128 位的密钥,蛮力攻击中需要进行的测试次数与 DES 相