文章作者:Murdoch Mactaggart
Murdoch Mactaggart 是一个自由撰稿人和商业顾问,他编写有关软件开发、因特网以及围绕这些领域的商业和管理事项的文章。读者是否能正确理解他所写的内容还是一个有争议的问题,但是,尽管他尝试达到灵活,他通常坚持用英语,而不是引入他自己创造的语言。您可以通过
IBMDev@TextBiz.com 与他联系。
对称密码术(也称作秘钥密码术)早已被人们使用了数千年,它有各种形式:从简单的替换密码到较复杂的构造方式。不过,数学的发展和计算能力的不断进步使得创建牢不可破的密码成为可能。对称系统通常非常快速,却易受攻击,因为用于加密的密钥必须与 需要对消息进行解密的所有人一起共享。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 相比会明显增大,甚至允许对弱密钥测试。而且,它本身 也显示了它尤其能抵抗专业形式的分析性攻击。
CAST
CAST 是以它的设计者 — Nortel 的 Carlisle Adams 和 Stafford Tavares 命名的。它是一个 64 位的 Feistel 密码,使用 16 个循环并允许密钥大小最大可达 128 位。其中变体 CAST-256 使用 128 位的分组大小,而且允许使用最大 256 位的密钥。
虽然 CAST 相当新,但是它看来对各种攻击(蛮力和分析性)都非常安全。虽然非常快,但是它的主要优势是安全性,而不是速度。在 PGP 的最新版本及 IBM、Microsoft 等厂商的产品中都使用了它。
Entrust Technologies 拥有 CAST 的专利权,但是据说在商业或非商业应用中,无需支付专利使用费就可以使用它。
一次性密码本
一次性密码本或 Vernam 密码具有被认为是十分安全的优点,所以在某些特殊情况中(通常是在战争中)有很高的应用价值。它使用完全与消息一样长的随机生成的密钥。通常使用位的“异或”运算,将其应用于明文中,以 产生加密文本。应用同一密钥和适当的算法,可以方便地解密消息:
一次性密码本加密/解密的简单例证
00101100010....11011100101011 原始明文消息
01110111010....10001011101011 与消息长度相等的随机生成的密钥
01011011000....01010111000000 加密后的消息
01110111010....10001011101011 重用于解密的密钥
00101100010....11011100101011 恢复的原始消息
虽然一次性密码本是完全且绝对安全的,但是它常常是不太实用的,因为需要以某种安全的方法将与消息长度相等的密钥传送给接收方,以允许解密。而且,密钥只使用一次,然后就被丢弃,虽然这明显对安全性有利,但增加了密钥管理问题。目前可能使用一次性密码本的一个领域是在 MAC 中。
AES
如果 DES 已经到了它使用寿命的尽头,预计高级加密标准(AES)会代替 DES 作为新的安全标准。在 1997 年,美国国家标准和技术研究所(US National Institute of Standards and Technology,NIST)曾宣布一项竞 赛,将 15 个原始项减少到 5 个。 最终的获胜者是比利时的 Joan Daemen 和 Vincent Rijmen 提交的一个名为 Rijndael 的产品(当前正在处于大规模试验和评估中)。
从技术上讲,Rijndael 的结构是复杂的而且有点不同寻常,却似乎非常安全且通用,因为它的执行速度很快,十分适合于现代需求(如智能卡),而且能够使用的密钥大小范围很广。
结束语
密钥长度是确定密码提供的安全性程度的众多因素之一。在所有安全性问题中,最重要的一个是平衡成本、时间、金钱和其它元素的风险。例如,用于 DES 的 56 位密钥的确不太安全,但普通的 Yale 锁也是不安全的, 但多数屋主仍信赖它,因为即使是插芯锁也不足以防范坚定的入侵者。
开发人员需要结合开发成本、执行速度、专利使用费和安全性强度来评估需要的是什么。也就是,应当清楚地知道尽可能使用强安全性,与其它因素保持一致并考虑应用程序的预期寿命。计算机速度越快意味着可以迅速处理越长的密钥,但是也意味着可以更容易地破解旧系统中的短密钥。
考虑应用特定算法的方法、认识到简单的应用程序可能不是非常安全的,也是非常重要的。与此相关的是允许公众详细审查的问题,为确保产品的信任度,这是绝对必要的。那些阻止使他们的应用程序的密码元素可以公开获得的开发人员或软件出版商完全不值得信赖,而且几乎肯定在提 供一种较差的产品。