第五部分:实际应用
密码术可能是一种有趣的智力锻炼,但其最终价值却在于部署它来以各种方式便利具有已知完整性的通信或者保护或控制访问。可以结合不同方法,就象广泛使用的程序 PGP 那样。尽管对数字签名的使用存在一些担忧,但数字签名仍然可以成为确认身份的一种有用手段。隐蔽方法(尤其是隐写术)有时可能会很有用。智能卡和生物测量学的使用日趋广泛,它们用来取代传统密码系统或者同传统密码系统一起工作。与此同时,就密码学的部署而言,价值的电子转帐方面的增长也是一个很重要的领域。
简介
前面的文章研究了特别的密码技术。本文将考虑不同类型的密码,不管是单独的还是相互结合的,是如何在诸如数字签名的领域及诸如 PGP 这样的流行程序中得到实际应用的。相关的问题是应该怎样处理那些与其说是技术上的倒不如说是社会、管理或法律上的问题。例如,声称自己就是某人并且是特定公钥的所有者,对这一断言的认证是通过发放证书来处理的。下一篇文章杂项问题考虑这样的问题,以及脆弱性、密钥管理、法律方面的问题以及其它相关问题。
结合密码方法
数字签名
密码术方面的某些密码学家和作者因为各种原因反对术语“数字签名”这一提法,这些原因包括:数字签名过程同通常理解的“签名”之间有许多重要的差异。这种观点当然完全正确,但我认为这种观点有些不得要领。签名通常可能就是亲笔附上某人的姓名,但其基本要点是将某种标识符同某些或行为关联起来,以致签名者为相关事物的完整性负责。如果因为不识字在文档上按了个手印,或者因为双手骨折而用脚或嘴做了一个合适的标记,或者象 Whistler 在平版画的角上描绘了一只蝴蝶 ― 或者使用文本签名回复一封电子邮件,那么我都是对文档进行了签名。更具争议的是,当我将一个戒指挤进热火漆时,或者当我与聋子用手语交谈时,或者在舞会上扬扬眉毛或者将头歪向门时,我都可以说我在签名。可以通过伪造(“名字不是由我写的”)、欺骗(“偷走图章戒指”)、强迫(“除非我签名,否则就威胁对我加以伤害”)、诈称(象达利所说的,“稍后在我签名的白纸上所做的画都是赝品”)、误解(“舞会上我朋友前面的那位妇女以为我在指她”)等等来使这些签名全都无效。如果我仔细对此进行了分析,会发现原因是将传统的签名同亲笔签名简单地关联是天真的。重要的一点是任何签名都将某人同某事相关联。数字签名验证使用了某个特殊密钥,而不是验证某个特定个体实际签署了该项,虽然注意这一点是很重要的,但关联后来被证明是无效的却完全是另外一回事。
使用非对称密钥进行加密要比使用对称密钥加密慢得多,通常的做法是首先制作一个消息摘要,然后用某人的私钥对其进行加密。这就是本系列中的第一篇文章中所提到的机制。非对称密码术易遭诈称的攻击,通常通过发放数字证书来对给定个体及其公钥间的关系进行认证。第六部分“杂项问题”对此进行了讨论。数字签名的本质是使用私钥进行加密。这一做法,在经常提及的告诫条件下,既认证文档是来自私钥的持有者,也确认文档自签名之后就没有被更改过。使用消息摘要可能相当方便,但并不必要。
交易通常需要不赖帐的保证。虽然数字签名可能好象提供了这一保证,但它也确实比诸如前面所考虑的任何其它形式的签名好不到那里去。然而,数字时间戳记 ― 涉及第三方将文档签名同特定时刻捆绑起来的机制 ― 在提供必要的安全性方面向前迈进了很多,这一点也将在“杂项问题”中讨论。
Pretty Good Privacy
人们总是用其首字母大写 PGP 来简称这个程序,它由 Phil Zimmerman 开发以使用互补机制提供安全文件存储和电子邮件。原始的实现使用 IDEA 作为对称密码、MD5 作为创建消息摘要的单向散列函数、RSA 作为非对称密码。PGP 包括伪随机数生成器(PRNG),它对用户击键的时间间隔进行抽样,作为其生成种子值所需的一部分。它还包括分析以及(如果需要的话)随后压缩文本的算法。
假定压缩产生的密文总是比由未压缩的明文产生的密文要小,那么压缩文本节省了磁盘空间和传输时间。然而,压缩文本受明文中的模式干扰。这些将随语言的不同以及特定语言内文档类型的不同而不同,但它几乎总是存在的并可以被知识渊博的密码分析专家所利用。类似地,字母频率有时也可用来帮助识别。例如,在许多英语文本中,最高频率出现的字母(由高到低)顺序是 E、T、A、O、I、N S、H、R、D、L、U(这是 Soundex 算法中使用的列表),一旦对文本进行了压缩,就不存在这些顺序了。当文件很短,且已压缩或不能被很好地压缩时,就不对其再进行压缩了。使用的压缩实用程序是免费软件 ZIP 程序,其功能同 PKWare PKZip 2 中使用的算法在功能上相等。
PGP 使用 PRNG 来生成种子值,种子值用于创建会话密钥。会话密钥用来通过使用对称密码来加密明文。然后使用预期接收方的公钥对会话密钥进行加密并将该捆绑包发送出去。可选地,PGP 也将使用用发送方私钥加密的消息摘要创建数字签名。大多数数字证书遵守 X.509 标准,因此,至少从理论上说它们在不同应用程序间是可相互交换的。然而,PGP 认为 X.509 某些方面存在不足,并且已开发了一套类似的系统,在 PGP 看来这套系统弥补了这些不足。这被称为 PGP 证书格式,稍后也将对其进行讨论。PGP 同时支持 PGP 和 X.509 格式。
PGP 现在也提供三重 DES(Triple-DES)和 CAST 作为对称密码。还有从 RSA 到新形式密码的转变,新形式密码遵守 NIST 数字签名方案(NIST Digital Signature Scheme (DSS))― 虽然仍然支持 RSA。同时,除了在 RSA 继续被使用的地方之外,MD5 已被散列函数替代;使用 DSS 时,采用的散列函数是 SHA。
对 PGP 中使用算法的注释在某种意义上容易让人产生误解。而且,自从 PGP 程序于 1991 年出现以来,由于其不断发展,相关的问题已经变得有些令人困惑。PGP Inc. 于 1997 年被收购,现在由 Network Associates(NAI)所拥有,该公司现在对 PGP 的商业使用收取许可证费用。除了不是免费的之外,PGP 也是开放源码。从目前对开放源码这个词的理解来说,PGP 并不是完全的开放源码,但它确实对那些对其进行修改和编译或者使用发布的代码作为创建兼容产品的标准的任何人开放过。这种情况曾经 ― 即便是现在,在某种程度上仍然 ― 因美国对密码系统出口的管制而被搞得很复杂,该管制规定:禁止合法地从美国以二进制形式出口美国创建的 PGP 版本,但可以从已发布的源代码在国外进行创建。
目前存在大量的 PGP 版本,其中 PGP 6.5.1 是最新的 NAI 版本。该版本可免费用于私人的、非商业用途。较早的版本,主要是 2.6n 的变体,可以广泛获得,许多怀疑后来有商业组织参与开发新版本的用户更愿意使用这些版本。同从标准 PGP 源代码创建的版本(如版本 5.0i 和 5.5i)一样,将这些版本用于商业用途仍然需要向 NAI 支付许可证费用。最后,比利时的 Highware Inc. 提供一种称为 SafeMail 的 Mac 产品,它是一种根据 OpenPGP 规范创建的 PGP 兼容产品。如果您考虑采用这条路线来开发您自己的版本,那么无需向 NAI 支付许可证费用就可以自由开发,虽然您将不得不同您使用的密码(在某些国家,如 IDEA 和 RSA 这样的密码)的任何专利持有人就许可证费用达成一致。如果使用得当并且具有安全的文件、密码和密码短语,PGP 是牢不可破的。然而,如同所有其它密码产品一样,PGP 容易遭到多种攻击,杂项问题一文将讨论其中一些攻击。然而,作为公开代码,PGP 也存在潜在的脆弱性。任何人都可生成一个声称是 PGP 的副本,然后使之可用于分发。加入一些后门入口是十分可能的,这些后门入口允许读取好象是很安全的消息。我假定这些并非是为了鼓励偏执和怀疑,实际上已经有了太多偏执和怀疑,我只是想指出:不管您的 PGP 副本是来自 NAI 转售商还是来自某些其他可信的来源,设法确信其完整性总不失为谨慎之举。
隐蔽通信
隐写术
隐写术是一种将消息隐藏在单纯的制品里的方法。需要交换的信息总是不易被发现的。用非计算机术语这可以解释为用显隐墨水书写消息以供随后恢复,在送信人的光头上用墨水写上一些消息,然后用重新长起来的头发掩盖起来,或者交换印刷书籍,消息可以根据特殊公式获取。
在计算机数据流中,可以以不同方式设置或清除顺序高位信息,或者将非打印字符放入数据流中。经常将数据隐藏在复杂文件中,多半是隐藏在图片或音乐文件中,在图片或音乐文件中通常有数量相当可观的冗余,以致于在其中包含其它内容通常不会产生明显的影响。如果文件是一段技术摘录,那么任何人无论如何也不会注意到其中包括了其它内容。
同所有密码技术一样,其主要风险并不在于加密被破解(虽然对于隐写术这是很容易的),而在于人为错误。用于这一目的的图片和音乐必需非常恰当。如果画家或摄影师同一家广告公司相互发送和接收图像,那当然很好。但如果他在一家公司工作并且定期同在竞争对手所在公司的同事相互发送和接收相同的图片,那么麻烦就来了。
安全性机制
SecurID
密码和代码用来保护重要的数据、位置和类似的东西,防止对其进行未经授权的访问。假定没有(例如,通过将它们写在粘贴在桌上或显示器上的便条上而)泄露这些密码或编码,那么破解它们需要一定的时间。各种产品通过将通行码同物理设备相联系以及每隔很短的间隔就改变密钥来进行局部防御。
RSA Security 的 SecurID 使用一种称为令牌的由电池供电的手持设备。它存储当前时间并拥有一个只有该令牌才有的 64 位值。每隔指定的间隔,通常是每隔一分钟,令牌计算并显示一个新的代码。用户以某种方式将该代码同个事先协商的密码结合起来,在任何需要通行码的地方都输入该代码。认证服务器每隔那一特定的时间就计算令牌代码,并以指定的方式将该代码同用户的秘码的副本相结合,如果两个通行码相互匹配,就允许访问。
智能卡
智能卡是一种设备,通常采