Enterprise Library 加密应用程序块的设计

加密应用程序块包含了对下列特性的支持:
  • 加密算法
  • 哈希算法
  • 多种加密提供程序
  • 加密提供程序的其他实现
  • 使用 DPAPI 的密钥保护

设计目标

加密应用程序块被设计为以达到下列目标:
  • 为通常需要的功能提供简单且直观的接口。
  • 封装用于执行绝大多数常规应用程序加密任务的逻辑。
  • 为常规加密任务提出了一个标准一致的模型。
  • 确定应用程序块是可扩展的。
  • 确定与手工编写加密代码以完成同样的功能相比对性能的影响最小或者很小。
  • 提供了一种密钥保护模型,可以定制来满足组织安全需求。

设计亮点

图1示例了加密应用程序块的设计。

图片

加密应用程序块的设计


加密应用程序块分隔了如何实现加密功能和应用程序如何使用它们的决定。应用程序块被设计为修改加密提供程序的行为而不用修改应用程序代码。

Cryptographer 类是一个介于客户代码和加密应用程序块加密功能之间的外观。客户代码调用 Cryptographer 类的静态方法创建哈希、比较哈希、加密数据和解密数据。每个静态方法使用了一个工厂类,并传递配置源到工厂类的构造函数。工厂使用配置数据来决定要创建的提供程序的类型。

DpapiCryptographer 类使用 DPAPI 来加密和解密数据。DPAPI 使用登录凭证来加密数据。登录凭证可能是用户的登录凭证,也可以是本地计算机的登录凭证。如果使用了本地计算机的登录凭证,DPAPI 允许运行在那些凭证下的所有应用程序解密数据。要消除此影响,可以使用附加秘密来保护数据。这附加的秘密名叫熵。DpapiCryptographer 类有接受熵值的 EncryptDecrypt 方法的重载。

注意:开发人员必须小心的保存熵值。如果它简单的保存为未保护的文件,攻击者将可以访问文件,获取熵的值,然后使用它来解密应用程序的数据。

SymmetricCryptographer 类封装了派生自抽象基类 SymmetricAlgorithm 的提供程序的实现,基类在 .NET Framework 的 System.Security.Cryptography 命名空间中。这意味着可以和任何 .NET Framework 对称算法一起使用 SymmetricCryptographer ,如 Rijndael 对称加密算法。应用程序块使用 DPAPI 加密和解密对称算法密钥。

密钥管理模型

在 Enterprise Library - January 2006 中,可以使用配置控制台来选择加密提供程序的算法。如果算法需要密钥,配置控制台将提示选择一个已存在的密钥或者生成一个密钥。在创建一个新的密钥时,配 置控制台使用加密应用程序块加密密钥,然后保存加密的密钥到它自己的文本文件中。应用程序块使用 DPAPI 加密密钥。在应用程序运行时,应用程序块使用 DPAPI 解密密钥,然后使用密钥加密或解密数据。

加密应用程序块设计时组件包含了加密密钥向导。使用向导可以创建一个新的密钥也可以使用一个已存在的密钥。可以选择一个包含已用 DPAPI 加密的密钥的文件来使用已存在的密钥。通常,此是一个以前用配置控制台生成的密钥。

也可以使用配置控制台导出已存在的密钥到一个文件中。在导出密钥时,配置控制台提示你提供一个用于加密密钥的密码。应用程序块 KeyManager 类调用 KeyReaderWriter 类加密密钥并生成文件。文件包含一个版本号、salt 值和已加密的密钥。

最 后,可以使用加密密钥向导导入以前导出的密钥。这意味着,如果必须分发密钥到多个计算机,就可以使用配置控制台导出密钥到加密的文本文件,传送密钥文件到 需要密钥的计算机,然后使用配置控制台再导入加密的文本文件。在导入加密的密钥文件时,配置控制台将提示需要用于加密文件的密码。
posted @ 2007-11-08 23:54  Dorian Deng  阅读(757)  评论(0编辑  收藏  举报