存储会话密钥

注意

本部分假定用户拥有一组 公钥/私钥对。 有关创建密钥对的说明和示例,请参阅 示例 C 程序:创建密钥容器和生成密钥

 

存储会话密钥

  1. 使用 CryptExportKey 函数创建简单的密钥 BLOB。 这会将会话密钥从 CSP 传输到应用程序的内存空间。 指定使用交换公钥对密钥 BLOB 进行签名。
  2. 将已签名的密钥 BLOB 存储到磁盘。 假定所有磁盘都不安全。
  3. 如果需要密钥,请从磁盘读取密钥 BLOB。
  4. 使用 CryptImportKey 函数将密钥 BLOB 导入回 CSP。

有关创建 会话密钥 并将该密钥导出到可写入磁盘文件的 简单密钥 BLOB 的示例,请参阅 示例 C 程序:导出会话密钥

此过程仅提供最低的安全性。 如果存储的会话密钥稍后将用于加密数据,则前面的过程不会提供足够的安全性。

若要提供更高的安全性,请在将密钥 BLOB 存储到磁盘之前,使用交换私钥对密钥 BLOB 进行签名。 以后从磁盘读取密钥 BLOB 时,可以验证其签名,以确保密钥 BLOB 保持不变。

如果密钥 BLOB 未签名,有权访问存储密钥的磁盘或其他媒体的任何人都可以创建新的会话密钥。

可以使用原始用户的 公钥交换密钥加密新会话密钥,而此新密钥可以替换为原始密钥。 如果用户在不知不觉中使用了替换的会话密钥来加密文件和消息,则创建替代密钥的个人可以轻松解密它们。

哈希和数字签名中详细介绍了数字签名。