CNG 功能

CNG 具有以下功能。

加密敏捷性

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

CNG 首先在 Windows Vista 中可用,可用于替换整个 Microsoft 软件堆栈中 现有的 CryptoAPI 用法。 第三方开发人员会在 CNG 中找到许多新功能,包括:

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

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

认证和合规性

CNG 根据联邦信息处理标准 (FIPS) 140-2 进行验证,并且是 Windows 通用标准认证的评估目标的一部分。 CNG 设计为可作为 FIPS 2 级验证系统中的组件使用。

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

Suite B 支持

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

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

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

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

旧版支持

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

内核模式支持

CNG 支持采用内核模式加密。 在内核和用户模式下使用相同的 API,以完全支持加密功能。 除了将使用 CNG 的启动进程外,SSL/TLS 和 IPsec 在内核模式下运行。 并非所有 CNG 函数都可以从内核模式调用。 无法从内核模式调用的函数的参考主题将明确指出,不能从内核模式调用该函数。 否则,如果调用方在 IRQL PASSIVE_LEVEL运行,则可以从内核模式调用所有 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 基本 CSP 以使用另一个 RNG。 CNG 可以显式指定在特定调用中使用的特定 RNG。

线程安全性

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

操作模式

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

操作模式 BCRYPT_CHAINING_MODE值 算法 Standard
欧洲央行 (电子代码手册) BCRYPT_CHAIN_MODE_ECB 对称块密码 SP800-38A
CBC (密码块链接) BCRYPT_CHAIN_MODE_CBC 对称块密码 SP800-38A
CFB (密码反馈) BCRYPT_CHAIN_MODE_CFB 对称块加密 SP800-38A
使用 CBC) 的 CCM (计数器 BCRYPT_CHAIN_MODE_CCM AES SP800-38C
GCM (Galois/Counter Mode) BCRYPT_CHAIN_MODE_GCM AES SP800-38D

 

注意

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