Windows Vista。我在以前的文章中从未提到过这两个词,所以撰写此专栏让我感到有点茫然失措。该产品有很多值得一谈的功能,有很多值得探索的东西,而且讨论的可行途径也有很多。
前段时间,在我浏览安全专家 Bruce Schneier 的博客时,碰巧读到一篇关于 BitLocker™ 的文章,当时我对 BitLocker™ 还不熟悉。我很快搜寻了一下,了解到 BitLocker™ 的初衷是在 Windows Vista® 中提供加密功能,我马上感到很吃惊,“哦,不会吧,Windows Vista 提供加密功能?这肯定没什么益处。即使它的加密功能确实很不错,也会留有后门。”
关于人们为何难以信任 Windows® 的内置安全功能的原因过去一直有争论,不论其观点是否真实可靠。然而,这并不是我撰写此专栏的原因所在。实际上,我想构建一个案例来详细说明为什么我认为有充分的理由支持 BitLocker。我还想占用一点篇幅,讨论一下确保加密软件和硬件生命力的基本原理类型。
但是不要弄错了:我并不是主张将 BitLocker 作为处理安全问题的灵丹妙药 — BitLocker 只是众多安全措施中的一种。它的目的是针对某些威胁模型提供恢复功能。
特别是,BitLocker 将目光投向了丢失(或被盗)的便携式计算机。移动工作人员经常携带着各种机密信息四处走动 — 火车和飞机、饭店和旅馆、总公司和分公司。他们将这些信息存在便携式计算机和其他移动设备中,而这些设备通常缺乏真正的安全性,导致存储在这些设备上的数据的安全性极差。如果用户将便携式计算机遗落在某处,那么里面的数据会怎么样呢?
人们难免会粗心大意。幸运的是,您可以控制接下来可能发生的不幸。对公司来说,与处理机密数据泄露所花费的成本相比,更换一部便携式计算机所花费的成本微不足道,而这就是 BitLocker 致力于提供的安全性意义之所在。
信任之旅
在本文中,我将从一个有趣的角度来讨论 BitLocker。其实我也未试用过 BitLocker。我知道您可能会想:连用都没用过,对 BitLocker 还能有什么看法?更别提还能对此发表什么有用的言论了!请稍安勿躁。我真正想讨论的是较高级别的加密技术和对成功解决方案至关重要的设计理念。
这要从我在 Bruce Schneier 的博客中看到的内容讲起。假设您想看一部新电影。根据电影预告片和主要演员阵容,您可能会对这部电影有一些设想。确实,强大的演员阵容并不能保证一定会是部好电影。但是,从演员表中可以透出与电影相关的许多信息,您也可能据此对影片有所期待。是由 Chris Rock 和 Ben Stiller 主演?还是由 Kate Winslet 和 Johnny Depp 主演?
同样,当看到享誉全球的安全专家在博客上介绍 BitLocker 时,我也做了一些假想。首先,我想到这项新技术不是好得令人众口称赞,就是差到极点,不得不提出来让大家注意。令我惊讶的是,Bruce Schneier 最后的结论是肯定的。
在他的评论文章中,有一句话尤为显眼:“没有为管控人员留任何后门。”这句话颇有强力回击的味道。Bruce Schneier 说这句话时非常自信,还附上了包含指向 Microsoft® System Integrity 团队博客的链接。打开该链接,我看到了 Niels Ferguson(Microsoft 中一位专门处理安全性的开发人员)的一篇博客文章,他驳斥了关于 Microsoft 出于执行法律行动目的刻意在 BitLocker 中留有后门的谣传。Ferguson 公开声明无法接受后门,他也从未参与任何支持后门的项目。(他还解释说,即使 Microsoft 根据法律不得不留有后门,公司也会公开宣布该后门或者完全撤消该功能。)
博客文章的作者是 Niels Ferguson,这足以让 Schneier 信任,也让我产生了信任。Ferguson 很清楚自己所谈论的内容,他建立了跟踪记录,足以让人们相信他所说的话。Bruce Schneier 和 Niels Ferguson 合作编写了《密码学实践》(一本有重大影响的书籍,介绍如何简单、正确、安全地应用安全的加密技术),他们还合作设计了块密码 Twofish — 一种 128 位的 Feistel 网络,该网络是高级加密标准 (AES) 选择过程的最终选择对象,成为密码分析领域的中流砥柱。
当然,即使有经验丰富的加密人员参与项目,也不能保证最终产品一定是安全的。甚至此项技术的专家也不能总是万无一失。但无论 BitLocker 的结果随着时间的流逝会怎样,您至少可以确定合理的设计策略会在其创建中发挥一定作用。
谈到失误,这可能是由于真诚的开发人员进行了一些认真的试验,但这些开发人员缺乏对加密的基本认识;也可能是由于一些不真诚的开发人员只关心能否推出产品。这两种情形(不管意图如何)都会导致开发安全性解决方案过程中的失败。不过,BitLocker 看起来不属于这两种情形。至少有一位能够胜任的加密人员参与开发,还有丰富的资源作后盾,这都是好的预兆。
关于信任
不久以前,Phil Zimmerman(PGP 加密的创建者)和我分享了一些经验法则。如果真有“开发人员安全信条”,那么他的建议勿庸置疑会放在第一章。尽管他的观点并不是特定于 BitLocker,但是这些观点中所提倡的设计理念却适用于绝大多数的加密解决方案。您可能会认为这些观点太浅显或太啰嗦。然而考虑到当前的安全状况,很有必要明确地将这些观点指出来。
设计加密基础结构时,开发人员必须力求简单、正确、安全。虽然错误不可避免,但是不应该将它们视为理所当然会发生的事而不去尽量避免。开发人员必须坚定不移地拥护完美主义。正如 Zimmerman 所说,“在设计时应该考虑到错误将会导致付出生命代价。”您认为这是夸大之辞?在 2005 年度计算机安全应用大会上,NSA 加密人员 Brian Snow(他在此后便退休)说,“我需要的是安全设备的功能和保证。我们不会拿客户做试验。如果我的产品失败了,有人可能会付出生命的代价。”因此请切记 — 错误导致的不仅仅是付出金钱上的代价。
应该给予用户保证。获得并维护用户的信任是关键所在。Zimmerman 阐述得很清楚:“一定要取得用户的信任。一旦肩负此任,就不能卸下。”这样做可使公司维持住用户对自己的信任感,保住公司在安全方面的声誉。这些东西一旦失去就无法挽回。
我希望 Microsoft 在设计 BitLocker(或公司的任何其他产品 — 就这一方面而言)时考虑到了这些观点。也就是说,我想要说明为什么我相信 Microsoft 实际已经这样做了,而且应对其推出的这项加密技术持认真态度。
穷人和他的 Elephant
本质上,BitLocker 就是 Windows Vista(具体地讲,Enterprise 和 Ultimate 版)对所有的系统卷数据加密所用的方法。听起来好像是一种很直接的应用,但我们来考虑一下它的限制。因为 BitLocker 是在各扇区级别上对数据进行加密,而且密文不能超过明文的长度,所以没有多余空间用于其他项,如 Nonce(只供在加密时使用一次的数字或字符串)、初始化向量 (IV) 或消息身份验证代码 (MAC)。我想他们强加这些严格的限制和条件是有道理的,我也知道可以通过某种方式来解决消息身份验证。
BitLocker 依赖于通常所称的穷人身份验证。这一折衷验证方法不像您通常所想的那样保守,因为它假设对密文进行操作不会产生有意义的明文。换个方式,举例来说,如果操作密文,并不能让敌方执行某些功能,而是会导致系统崩溃。
BitLocker 的 Microsoft 支持小组知道,对全新的块密码进行分析所需的时间超过了人们能接受的限度,但是现有的设计不是未提供足够的分析功能,就是效率不够高。因此,在处理加密方面,Microsoft 选择了 CBC(Cipher Block Chaining,密码块链)模式中的 AES,我将其称为 AES-CBC。在所选的明文攻击模式(缩写为 IND-CPA)下这很难区分,但是它不能保持完整性。因为没有为 MAC 提供空间,CBC 又属于机密模式,所以根本没有完整性保持。这就是 Elephant 登场的信号。
这个新的 Elephant 组件采用两个扩散器,构建这两个扩散器是为了提供比传统的 AES-CBC 更优的穷人身份验证。(不过我必须指出,对那些必须遵守严格的遵从规则策略的人来讲,还是可以选择不借助 Elephant 就运行 AES-CBC。)虽然穷人身份验证并不总是很理想,但在特定的约束下却是最合适的解决方案,而 Elephant 旨在充分利用该解决方案。那它究竟如何运行呢?
图 1 显示了理解流程。进行加密时,明文通过 XOR 和扇区密钥结合在一起。然后,文本流动到两个未经过加密的扩散器。在这里,使用 AES-CBC 对文本进行加密。扇区密钥和 AES-CBC 都需要密钥材料,因此两者被分别加密。这种方法简化了证明降低 AES-CBC 及 AES-CBC 的 Elephant 部分的安全性的形式。Elephant 是新基元,而新基元在经过严格的分析前可能会遇到一定阻碍。因为 BitLocker 可以表明将 AES-CBC 和 Elephant 一起使用比单独使用 AES-CBC 不容易遭受攻击,所以此方法可以均衡等级。
图 1 穷人身份验证和 Elephant
扇区密钥和 AES-CBC 组件都可以接收 256 位的密钥材料,使密钥长度增至 512 位。然而,默认情况下,这些组件仅使用 128 位的密钥材料,这意味着没有用到某些密钥材料。原因很简单,当密钥长度发生变化时,丢弃不需要的位比更改密钥管理基础结构更简单一些。
块的长度为 2 的任意次幂,但仅限于 512 至 8192 字节之间。为了确保密文的任何变动都会以随机方式修改所有扇区明文,分块加密法设计为以可变块大小实施操作。另外,如果分块加密法和可调整的分块加密法行为类似(如 Liskov、Rivest 和 Wagner 所述),扇区之间的算法也有细微的更改,那么敌方就无法成功将某个扇区的密文移动到另一个扇区中。
只有时间会告诉我们一切
对 BitLocker 的加密安全性的思考遗漏了很重要的一部分。对于 BitLocker 来说,它的责任不仅仅是保证安全。因为 BitLocker 本身并不是解决方案 — 它只是 Windows Vista 的众多附加产品之一。Microsoft 称 BitLocker 与 Windows Vista 紧密集成。但如果与操作系统紧密集成,那另一组件的失败不就有可能导致 BitLocke 失败或受到影响吗?
从个人角度来讲,我相信模块化和故障隔离。没有模块化的紧密集成会使情况更加复杂。当然,对于 Windows Vista 和 BitLocker,情况未必如此,但只有时间(和足够的分析)能告诉我们这是否如此。
那么我对 BitLocker 的看法是怎样的呢?我向 Microsoft System Integrity 团队致敬,这个团队依赖真实、可靠的加密人员,他们尽到了自己的职责。显然此功能是专为加密而非营销活动设计的。因此,我对此问题的回答是应该认真看待 BitLocker。请注意,此时我们先将它是否具有可靠的安全性搁置一边。再重申一遍,只有时间和真实的评估会告诉我们一切。很多加密基元和协议已经被破解。但是至少 Microsoft System Integrity 团队让我们有机会了解一些内容,也为我们提供了构建更佳解决方案的平台。
Justin Troutman是一位经验丰富的加密人员,目前正在攻读数学专业。他的主要研究领域是对称加密,同时他还是 Extorque 的创始人,这是一家专门致力于加密研究和咨询的公司。
摘自 October 2007 期刊 TechNet Magazine.
欢迎您提出宝贵意见。欢迎您给我们发送反馈.