目的
加密 API:下一代(CNG)是 CryptoAPI 的长期替代。 CNG 被设计为可在多个层面进行扩展,并且在行为上不依赖特定的密码技术。
开发人员受众
CNG 旨在供应用程序的开发人员使用,这些应用程序使用户能够在安全的环境中创建和交换文档和其他数据,尤其是在 Internet 等不安全媒体上。 开发人员应熟悉 C 和C++编程语言和基于 Windows 的编程环境。 虽然不需要,但建议了解加密或与安全相关的主题。
如果要开发 CNG 加密算法提供程序或密钥存储提供程序,则必须从Microsoft下载 加密提供程序开发工具包。
运行时要求
从 Windows Server 2008 和 Windows Vista 开始,支持 CNG。 有关特定编程元素的运行时要求的信息,请参阅该元素的参考页的 “要求 ”部分。
在本节中
以下主题提供有关 CNG 以及如何在应用程序中使用它的信息:
| 主题 | 描述 |
|---|---|
| 关于 CNG | 介绍 CNG 功能、加密基元以及密钥存储、检索、导入和导出。 |
| 使用 CNG | 介绍如何使用 CNG 和典型 CNG 编程的加密配置功能。 |
| CNG 参考资料 | CNG 编程元素的详细说明。 这些页面包括用于使用 CNG 的 API 的参考说明。 |
何时使用 CNG
如果需要直接控制Windows应用程序中的加密操作,请使用 CNG。 以下指南可帮助你选择适当的 API:
| Scenario | 推荐的 API |
|---|---|
| 对称加密/解密 (AES, ChaCha20-Poly1305) | CNG (BCryptEncrypt / BCryptDecrypt) |
| 哈希(SHA-256、SHA-384、SHA-512) | CNG (BCryptCreateHash) |
| 非对称操作(RSA、ECDSA、ML-DSA) | CNG (BCryptSignHash、 BCryptVerifySignature) |
| 保护静态用户数据(每用户或每计算机范围) | DPAPI (更简单,无需密钥管理) |
| 保护多个用户或计算机可访问的数据 | DPAPI-NG (NCryptProtectSecret) |
| TLS/SSL 连接 | Schannel (在内部使用 CNG) |
| 已使用 CryptoAPI 的旧代码 | 继续执行 CryptoAPI 进行维护,但计划迁移到 CNG 以获取新功能 |
警告
要避免的常见加密陷阱:
- 请勿使用 ECB 块密码模式 - 它会泄露纯文本模式。 将 CBC 与随机 IV 一起使用,或者最好使用像 GCM 这样的认证模式。
- 不要在源代码中硬编码加密密钥。 使用密钥存储提供程序或 DPAPI 进行密钥保护。
- 不要将 MD5 或 SHA-1 用于完整性或安全目的。 使用 SHA-256 或更强。
- 始终验证 CNG 函数的返回代码。 无提示忽略的失败加密操作可能会导致未加密存储数据。