文章作者:Murdoch Mactaggart
Murdoch Mactaggart 是一位自由撰稿者及业务顾问,他撰写有关软件开发、因特网以及围绕这些领域的业务与管理问题的文章。尽管他试图做到灵活多样,但是读者是否能够准确理解其所写的文章尚在争论中,但他通常坚持用英语,而不是引入他自己创造的语言。可以通过
IBMDev@TextBiz.com 与他联系。
适当构造的、并具有足够长度、严格保护的强密钥的密码,目前来说实际上是不可攻破的。然而,弱点依然存在,并且在非对称密码术的情况下,知道公钥的真实性十分重要。数字证书可以确认这一点,虽然这不是绝对的,而是依赖于某种级别的信任。此外,有些情况下需要特殊形式的签名,可能允许不查看内容而进行签名;或者某人需要不暴露内容而向另外一个人确认:他知道某些秘密的事情。可能需要验证数字签名的确切时间,这可以通过时间戳记进行处理。
简介
密码术的数学基础和用来构建有用系统的技术本身非常有趣。但是,密码系统通常是作为整个安全性策略的一部分,如同 Counterpane Security 的 Bruce Schneier 所评论的:“安全性是一个过程而不是一个产品”。而且,安全性是管理风险而不是消除风险,而且总是需要平衡成本与效益。可能从经济上考虑花上 10,000 美元来保护价值 1,000 美元的东西没有多大意义,然而也有许多不那么切实考虑成本与效益的情况。考虑人们实际如何使用系统是必需的;从技术的观点看好象合适的解决方案实际上可能是有缺陷的,因为人们可能会找到方法绕过其不方便的元素。而且,可能还会有法律责任,例如需要确保有关个人的数据严格禁止未经授权的第三方访问,加密可以方便地实现这一需求。
虽然其中的许多问题超出了本系列文章的范围,但是本系列最后的这篇文章会涉及其中的某些问题。特别地,本文将考虑通过密码分析学或其它方法,使系统可能会受到攻击的某些领域,还将讨论有关密钥管理、数字证书及数字时间戳记的问题。
攻击与弱点
密码分析
密码通常基于按现在的知识很难解决的数学问题。这一告诫十分重要。例如,分解大质数极其困难,这一困难的实际结果是:即便使用数量巨大的计算能力,平均也要花费成百或上千年来确定公钥中相关的质数从而计算相应的私钥。因此,目前可以认为,比如说,使用具有足够长度密钥的 RSA 进行加密的明文对于所有实用目的而言是绝对安全的。虽然绝对安全是不可能的,但这可能已经足够发生了,因此继续使用经过良好评估、良好测试并被认为是安全的密码是有意义的。
一个更重要的问题是:某个特定的算法是否有缺陷;是否存在某种形式的密钥组,相对容易破解,或者什么时候用于特定的环境;又或者有时,如前所示一些辅助性方法(如伪随机数发生器(PRNG))具有引入弱点的缺陷。这就是为什么同级评审是必需的,以及为什么应该采用各种密码分析以试图破解加密的原因。那些长期以来经受了极其详细的检验,并且在范围很广的环境中保持安全的算法和实现,越来越可能成为可靠的算法和实现。
BugTraq 报告的一个近期事件给出了可能发生的事情的一个示例,它涉及以前由 Mattel 拥有现在属于 SurfControl 的审查程序 CyberPatrol。为什么无论谁都曾经想注册该程序,真是生活中的一个难解的谜,但任何寻求这么做的人都不安地了解到:如同 BugTraq 所指出的,CyberPatrol 的站点并不使用 SSL,而是以明文发送除信用卡号码之外的所有详细信息 — 包括失效日期。该站点确实对信用卡号码进行了加密,虽然站点使用的是一种替代密码,这种密码如同警告所评论的那样是“等同于那种 ... 可以在报纸的游戏版面上找到的密码”,任何使用便笺簿和铅笔的人几乎肯定能破解。这不是一件孤立的事情。遗憾的是,许多软件供应商如此缺乏能力,如此专注于短期财政收益,如此轻视其客户,如此痴迷于不需努力就能发大财的美事,以致于他们开发的以次充好的产品对私有数据的保护简直令人发笑,并且对那些揭露他们疏忽的人以提起诉讼来威胁。
穷举搜索是一种尝试所有可能的密钥组合直到找到一个合适的组合的技术,它在许多情形下,尤其是如果搜索的可能性的范围可以被缩小,不失为一种切实可行的解决方案。SIM 卡和 PDA,如各种 Pocket PC 或 Palm 设备,通常可以通过使用一种要求恰好输入四位数字的四位通行码来保证安全。虽然这好象等同于一个提供 232(4,294,967,296)种可能性的 32 位密钥,因此好象相当安全,但实际上,所提供的可能性数目只和四个 0-9 数字轮组合锁提供的 10,000 种可能性相同,或者只比 213 多一点。虽然就 PDA 或电话本身来说,这并不十分要紧,但当 PDA 用于连接到其它安全网络时,真正的问题就出现了;对 10,000 种可能的密钥进行蛮力攻击,平均需要尝试其中一半的可能,会在极短的几秒钟内获得成功。
对于对称块密码,可能的攻击机制包括微分与线性的密码分析、代数攻击以及利用弱密钥。后两种机制依赖于识别特殊的对称性。DES 有四个弱密钥,当使用这样一种密钥加密的明文在再次加密时,原始的明文就暴露了。就象以前提过的,IDEA 有更加多的弱密钥,在每种情况下,都要确保排除这些已知的密钥,这是很重要的。攻击散列函数的主要形式是以前所描述的生日攻击 — 一种特殊的蛮力攻击。注:正如所讲过的那样,对散列函数成功的生日攻击并没有泄露密钥。
更一般地,如果可以分析密文以显示其规律性,或者如果能将明文样本与由其派生的密文进行比较 — 并且,尤其是在流密码的情形下,如果可以进行动态分析以比较通过微分加密密钥流的小部分所获得的结果,并将其与使用密码获得的实际结果进行比较 — 那么找到密钥的可能性会大大提高。
窃听与其它攻击
攻破具有良好密钥的标准密码通常极其困难。因此,一条更富有成效的攻击路线是用某种方式查看明文或者绕过密码的安全性。前面,我曾提到过在许多电子邮件是完全公开的地方,任何人利用适当的工具就可阅读。特洛伊木马程序以及诸如 Back Orifice 的程序允许远程用户轻易地从特殊的系统获取信息。系统中存在错误并且可以加以利用。Ralph Senderek 最近的文章声称:添加到 PGP 更新版本中的附加解密密钥(Additional Decryption Key,ADK)在其实现中含有缺陷,这使得在某些情况下获取明文十分容易。
就象传真以明文的形式出现一样,电子邮件和其它文档也需要明文形式以便在监视器上阅读。监视器发射电磁辐射,据称在有些情况下,可以截获该辐射并将其复制到另一个显示器上。美国政府已经开发了某些用代码 TEMPEST(但现在称为 EMSEC — 发射安全性 (Emission Security))标识的屏蔽标准,据称可以提供保护。剑桥大学的 Ross Anderson 最近宣布了一个防止截获此类辐射的软件。
可以将嗅探器(sniffer)应用于局域网或广域网上,并且通常任何可以实际访问网络的人都可以调察另一个系统或者截获正在传送的数据。被删除的文件通常在一段时间内并不被覆盖,“删除”只是通过在目录表中适当地标记相关项来释放磁盘块。Windows 使用虚拟内存,意味着 RAM 中的瞬态数据,包括供阅读的明文,将被定期复制到磁盘上的交换文件并且可以被任何有权访问该驱动器的人查看。使用 Word、Lotus Notes、Excel 及类似软件创建的文件可能受内置的密码系统保护,但这些密码系统是如此脆弱,以致于通常可以使用廉价并可广泛获得的程序在几秒钟之内攻破其保护。
密钥管理及相关问题
秘密共享
本地共享密钥有时非常有用。密钥可能非常有价值,因为如果丢失了它,大量的文件就不能使用。当然可以通过存储密钥的多个备份副本来解决这一问题,但考虑到这会增加非法使用的风险,因此最好使这些备份的数量减到最小。在其它情况下,如对于传统的银行保险库情形,在安排一些事情时要很小心谨慎,以便于在钥匙生效之前,只有最少数目的授权用户需要同意使用钥匙。
注:秘密共享机制涉及的不仅仅是将给定的密钥划分成几部分并简单分发给不同的持有者。在这种情况下,缺一个人就意味着不能使用密钥。相反,当维护安全性时,秘密共享方案设计成允许选定数目的共享份额以及选定数目的必需用户。例如,密钥可能分给五个持有人,以便任意三个人在一起就能破解密码。两个广泛使用的方案是 Shamir 方案和 Blakley 方案,前者基于多项式内插法,后者本质上是几何学。也有可视的形式,由 Naor 和 Shamir 开发,其中单个元素呈现为幻灯片形式并可在持有者间适当共享。这些幻灯片可以采取看上去完全是很平常的图片的形式。
零知识证明与特殊签名方案
当某人见证签名时,通常很容易隐藏文档内容。类似地,对于电子文档,有时可能需要让某人签名而不让其了解内容。有时候,让某人证明他知道某事而不泄露任何信息也是必需的。
第二个方面(让某人知道某事而不泄露信息)通常可以通过某种形式的提问-应答活动来处理。一人被要求做某件事件 — 只有知道可以被验证的相关秘密的人才能完成这件事情。经常举的一个小例子是阿里巴巴的山洞。它呈矩形,三面环绕走廊,第四面是一块公共的空地,挑战者可以站在那儿。正对着这个地方的矩形边上有一道只有念魔咒才能打开的门,它在那里封闭了走廊。验证者检查门确实存在并且很安全,然后他要求另外一个人按照他希望的次数出现在他指定的一个走廊出口,直到他确信那人确实知道魔咒。注:验证者收到了确认另一个人知道魔咒的证明,但验证者却不能向任何其他人证明这一点。
标准数字签名有这样的特性:任何拥有相关公钥的人都可以验证用来签署文档的相应的私钥,而无需签名者在场。这种签名方案称为自认证(self-authenticating)。然而,通常所说的不可抵赖的签名方案的签名方案要求签名者证明签名的有效性。为了避免签名者谎称未进行过签名,不可抵赖签名方案涉及添加通常所说的抵赖组件。然后可以使用提问-应答机制进行验证。如果使用了合理长度的密钥,比如 768 位,那么签名者否认文档的可能性微乎其微。
盲签名方案(blind signature scheme)是一种允许一个人让另一个人签署文档,而第一个人不向签名者泄露任何关于文档内容的方案。这一点通过引入隐藏所交换信息的随机值来完成。盲签名方案与许多领域都有关联,包括时间戳记方面及匿名相关时的情形,例如关系到数字现金时。当前它是一个广泛研究的领域。
证书
非对称密码术具有的一个风险是:有人会谎称拥有给定的公钥。当所有人都相互认识时,这一问题很容易解决,但公钥密码术的一个相当大的优点是:它可以在人们相互不认识的特别群体内准确地使用,因此需要一些方法来认证某人与其公钥之间的联系。目前,通过发放数字证书来处理这一问题,这是一种有效的凭证形式。
通常,证书将包含公钥及相关名称、失效日期以及其它相关信息。证书本质上是来自可信任的第三方的数字签名,第三方证明公钥的可靠性及其与指定的个人或组织的相关性。
X.509 标准定义了一种广泛使用的证书格式,而其它现有的格式是由使用更广泛的 PGP 设计的。PGP 格式包括用来创建同证书相关的密钥的 PGP 版本号、持有者的公钥及其它标识信息(可能包括照片)、证书的有效期、对首选的对称加密算法(目前是 CAST、IDEA 或 Triple-DES )的注释以及证书所有者的数字签名(即,使用与证书上显示的公钥对应的私钥元素生成的签名)。还可能有其它几种数字签名,它们都证明所提供信息的真实性,并且证明了“认为证书值得信任的人验证了其中的一些信息”这种假设的正确性。
信任的这种识别是认证的一个重要组成部分。PGP 证书未采用给人印象深刻的层次结构的认证,这好象很奇怪,但任何证书的价值最终都只依赖于某种级别的信任。假定可以轻易地伪造护照、出生证明及其它传统形式的身份,同时假定未来的(比如说)个人身份部(Ministry of Personal Identity)的某个公务员真正认识我的机会微乎其微,那么同来自更小级别上互相联系的圈子的证书相比,出自那里的证书的真实性可能很值得怀疑。
实际上,无论如何还是需要发放证书链。我部门领导可能认识我,他将发放一份认证我所提供的密钥的证书。这将由部门签名来证明,然后由公司签名来证明,可能进一步由专业或商业团体签名来证明,并且甚至再由一些具有国际声誉的国家组织(如邮局)来证明。
很显然,所到达的链的级别越高,有关支持所提供数字签名的密钥的完整性的关键点就越多。某人对高级别的认证机构持有的密钥进行的成功攻击(可能以偷窃或行贿而不是密码分析的方式),会对依赖于这些密钥的文档的安全性造成巨大的损害。如果密钥本身被泄露,那么会危及相关文档的安全,而如果认证机构的密钥成为人所共知的东西,那么,虽然以前的证书仍然有效,但却可以轻易地发放假证书。
经常需要取消证书。证书过期时自然会被取消,但是,密钥的安全受到威胁或某人离开特殊工作岗位时,证书也可能会被取消。会定期地发布这些已取消的密钥列表,检查以确定提供的证书未被取消十分重要。
数字时间戳记
数字签名仅仅确认使用了特殊的私钥来加密文档,或者更有可能的是加密该文档的消息摘要。某人可能通过声称签名时密钥已经泄露来试图不诚实地否认对该文档的签名。或者,某人可能会签署某文档,尽管相关密钥已经被取消了。假定在任何时候任何东西都可与文件很容易地关联,那么就需要一些其它机制来及时将这样的签名与特定时刻捆绑到一起。如果准确知道进行签名的时间,那么就可以对签名的有效性做出正确判断。
使用打上时间戳记的数字签名的人向时间戳记服务发送消息摘要,然后该服务返回一个时间戳记证书。然后任何想验证签名时间的人使用该证书(及适合于该特殊证书并其指定的算法)来验证所声称的时间是否正确。
结束语
密码术是整个安全性的重要组成部分,尤其是随着国际性电子活动的普及。此外,密码已经发展到这一点:使用正确并且密钥长度适当,它们就牢不可破。对于需要确保加密后仍可使用的用户来说很重要 — 这要求对相关密钥进行切实有效的管理。同时,将密钥泄露给他人意味着加密文档还不如使用明文,因此确保密钥的安全很重要。私钥很长且不灵活,因此,需要将其存放在硬盘或某种可移动磁盘上,然后通过使用适当的密码短语进行更高一级的加密来进行保护。通过使用普通密码短语的用户媒体,记下这些密码短语、用明文在网络上发送、用明文在屏幕上显示、留在高速缓存或虚拟内存里,以及由支持人员泄露给冒充拥有者的呼叫者,或者通过某种常犯错误,使得这一级别上也存在