CSP 和加密过程
CryptoAPI 函数使用 加密服务提供商 (CSP) 执行加密和解密,并提供密钥存储和安全性。 这些 CSP 是独立的模块。 理想情况下,CSP 将写入到独立于特定应用程序,以便任何应用程序都使用各种 CSP 运行。 但是,实际上,某些应用程序具有需要自定义云解决方案提供商的特定要求。 这与 Windows GDI 模型进行比较。 CSP 类似于图形设备驱动程序。
系统中密钥的保护质量是云解决方案提供商而不是整个系统的设计参数。 这样,应用程序就可以在不修改的情况下在各种安全上下文中运行。
访问应用程序必须仔细限制加密内部。 这有助于进行安全且可移植的应用程序开发。
以下三个设计规则适用:
- 应用程序无法直接访问密钥材料。 由于所有键控材料都是在云解决方案提供商内生成的,应用程序通过不透明句柄使用,因此应用程序或其关联的 DLL 没有泄露键控材料或从不良随机来源选择键控材料的风险。
- 应用程序无法指定加密操作的详细信息。 云解决方案提供商接口允许应用程序选择加密或签名算法,但每个加密操作的实现由云解决方案提供商完成。
- 应用程序不会处理用户 凭据 或其他用户身份验证数据。 用户身份验证由云解决方案提供商完成;因此,具有高级身份验证功能(如生物识别输入)的未来 CSP 将正常运行,而无需更改应用程序身份验证模型。
至少,云解决方案提供商由动态链接库 (DLL) 和签名文件组成。 签名文件是确保 CryptoAPI 识别云解决方案提供商所必需的。 CryptoAPI 定期验证此签名,以确保检测到任何篡改云解决方案提供商。
某些 CSP 可以在通过本地 RPC 调用的地址分隔服务或通过系统设备驱动程序调用的硬件中实现其功能的一小部分。 隔离地址分隔服务或硬件中的全局密钥状态和中央加密操作,使密钥和操作安全,防止在应用程序数据空间内篡改。
应用程序利用特定于特定云解决方案提供商的属性是不明智的。 例如,通过 CryptoAPI) 提供的 Microsoft 基础加密提供程序 (支持 40 位会话密钥和 512 位公钥。 操作这些密钥的应用程序必须避免假设存储这些密钥所需的内存量,因为如果使用其他云解决方案提供商,应用程序可能会失败。 编写良好的应用程序必须适用于各种 CSP。
有关可用于 CryptoAPI 的加密提供程序类型和预定义 CSP 的详细信息,请参阅 加密提供程序类型和Microsoft 加密服务提供程序。