CNG 功能

CNG 包含以下功能。

加密灵活性

CNG 的关键价值主张之一是加密灵活性,有时称为与加密不可知性。 但是,需要将安全套接字层协议 (SSL) 或传输层安全性 (TLS)、CMS (S/MIME)、IPsec、Kerberos 等协议的实现转换为 CNG,以使此功能具有价值。 在 CNG 级别,必须为所有算法类型(对称、非对称、哈希函数)、随机数生成和其他实用工具函数提供替换和可发现性。 协议级别更改更为重要,因为在许多情况下,协议 API 需要添加以前不存在的算法选择和其他灵活性选项。

CNG 首先在 Windows Vista 中可用,并定位为在整个 Microsoft 软件堆栈中取代 CryptoAPI 的现有用途。 第三方开发人员将在 CNG 中找到许多新功能,包括:

  • 新的加密配置系统,支持更好的加密灵活性。
  • 更精细的密钥存储抽象(以及存储与算法操作的分离)。
  • 对使用长期密钥的操作进行流程隔离。
  • 可替换的随机数生成器。
  • 解除导出签名限制。
  • 整个堆栈中的线程安全性。
  • 内核模式加密 API。

此外,CNG 还支持所有必需的套件 B 算法,包括 椭圆曲线加密 (ECC)。 随着 CNG 的可用,现有的 CryptoAPI 应用程序将继续工作。

认证和符合性

CNG 通过了联邦信息处理标准 (FIPS) 140-2 的验证,是 Windows 通用标准认证评估目标的一部分。 CNG 可作为 FIPS 2 级验证系统的一个组件使用。

CNG 通过安全流程存储和使用长期密钥,符合通用标准要求。

Suite B 支持

CNG 的一个重要功能是支持套件 B 算法。 2005年2月,美国国家安全局 (NSA) 宣布了一组协调的对称加密、非对称机密协议(也称为密钥交换)、数字签名和哈希功能,供美国政府将来使用,名为 Suite B。国家安全局已宣布,经过认证的套件 B 实现可以并将用于保护指定为最高机密、机密和过去被描述为敏感但未分类的私人信息。 因此,套件 B 支持对于应用程序软件供应商和系统集成商以及 Microsoft 都非常重要。

所有套件 B 算法都是公开已知的。 它们是在与加密算法开发相关的政府保密范围之外开发的。 在同一时间范围内,一些欧洲国家和地区也提出了保护其信息的相同套件 B 要求。

套件 B 加密建议在许多现有协议中使用椭圆曲线 Diffie-Hellman (ECDH),例如 Internet 密钥交换(IKE,主要用于 IPsec)、传输层安全性 (TLS) 和安全 MIME (S/MIME)。

CNG 包括对扩展到所有必需算法的套件 B 的支持:AES(所有密钥大小)、SHA-2 系列(SHA-256、SHA-384 和 SHA-512)的哈希算法、ECDH 以及基于 NIST 标准素数曲线 P-256、P-384 和 P-521 的椭圆曲线 DSA (ECDSA)。 Windows Vista 随附的 Microsoft 算法提供程序不支持二进制曲线、Koblitz 曲线、自定义黄金曲线和椭圆曲线 Menezes-Qu-Vanstone (ECMQV)。

旧版支持

CNG 支持 CryptoAPI 1.0 中的当前算法集。 CNG 将继续支持 CryptoAPI 1.0 中当前支持的每个算法。

内核模式支持

CNG 支持内核模式下的加密。 内核和用户模式下使用的相同 API 完全支持加密功能。 除了将使用 CNG 的启动进程外,SSL/TLS 和 IPsec 都在内核模式下运行。 并非所有 CNG 函数都可以从内核模式调用。 无法从内核模式调用的函数的参考主题将明确声明无法从内核模式调用该函数。 否则,如果调用方在 PASSIVE_LEVEL IRQL 上运行,则可以从内核模式调用所有 CNG 函数。 此外,某些内核模式 CNG 函数可以在 DISPATCH_LEVEL IRQL 中调用,具体取决于提供程序的功能。

Microsoft 内核安全支持提供程序接口 (Ksecdd.sys) 是一个通用的、基于软件的加密模块,驻留在 Windows 的内核模式级别。 Ksecdd.sys 作为内核模式导出驱动程序运行,并通过其记录的接口向内核组件提供加密服务。 Ksecdd.sys不支持的唯一内置 Microsoft 提供程序算法是 DSA。

Windows Server 2008 和 Windows Vista: CNG 不支持内核模式下的可插入算法和提供程序。 内核模式中唯一支持的加密算法是 Microsoft 通过内核模式 CNG API 提供的实现。

审核

为了符合一些通用标准要求,除了提供全面的安全性外,CNG 层中发生的许多操作都会在 Microsoft 软件密钥存储提供程序 (KSP) 中接受审核。 Microsoft KSP 遵循以下准则,在安全日志中创建审核记录:

  • 必须审核密钥和密钥对生成失败(包括自测试失败)。
  • 密钥的导入和导出必须经过审核。
  • 密钥销毁失败必须经过审核。
  • 写入文件并从文件读取时,需要审核持久性密钥。
  • 成对一致性检查失败必须经过审核。
  • 密钥验证失败(如有)必须接受审核,例如 3DES 密钥的奇偶校验。
  • 必须审核加密、解密、哈希、签名、验证、密钥交换和随机数字生成方面的失败。
  • 加密自测必须经过审核。

通常,如果密钥没有名称,则它是一个临时密钥。 临时密钥不会持久存在,Microsoft KSP 不会为临时密钥生成审核记录。 Microsoft KSP 仅在 LSA 进程中以用户模式生成审核记录。 内核模式 CNG 不会生成审核记录。 管理员需要配置审核策略,以便从安全日志获取所有 KSP 审核日志。 管理员必须运行以下命令行来配置 KSP 生成的其他审核:

auditpol /set /subcategory:"other system events" /success:enable /failure:enable

可替换的随机数生成器

CNG 提供的另一项改进是能够替换默认随机数生成器 (RNG)。 在 CryptoAPI 中,可以提供备用 RNG 作为加密服务提供商 (CSP) 的一部分,但无法重定向 Microsoft Base CSP 以使用另一个 RNG。 CNG 可以在特定调用中明确指定要使用的特定 RNG。

线程安全

在不同线程调用时,任何同时修改同一内存区域(关键部分)的函数都不是线程安全的。

操作模式

CNG 支持通过加密 API 与对称块加密一起使用的五种操作模式。 下表列出了这些模式及其可支持性。 可以通过使用 BCryptSetProperty 函数设置算法提供程序的 BCRYPT_CHAINING_MODE 属性来更改操作模式。

操作模式 BCRYPT_CHAINING_MODE 值 算法 Standard
ECB(电子密码本) BCRYPT_CHAIN_MODE_ECB 对称块密码 SP800-38A
CBC(Cipher Block Chaining,密码块链接) BCRYPT_CHAIN_MODE_CBC 对称块密码 SP800-38A
CFB(Cipher Feedback,密码反馈) BCRYPT_CHAIN_MODE_CFB 对称块密码 SP800-38A
CCM(带 CBC 的计数器) BCRYPT_CHAIN_MODE_CCM AES SP800-38C
GCM(Galois/Counter Mod,伽罗瓦/计数器模式) BCRYPT_CHAIN_MODE_GCM AES SP800-38D

 

注意

Windows Vista 中仅定义了 ECB、CBC 和 CFB 操作模式。 GCM 和 CCM 需要带有 Service Pack 1 (SP1) 的 Windows Vista 或 Windows Server 2008。