存储会话密钥
注意
本部分假定用户拥有一组公钥/私钥对。 有关创建密钥对的说明和示例,请参阅示例 C 程序:创建密钥容器和生成密钥。
存储会话密钥
- 使用 CryptExportKey 函数创建简单的密钥 BLOB。 这会将会话密钥从 CSP 传输到应用程序的内存空间。 指定用于对密钥 BLOB 进行签名的交换公钥。
- 将已签名的密钥 BLOB 存储到磁盘。 假定所有磁盘都是不安全的。
- 需要密钥时,请从磁盘读取密钥 BLOB。
- 使用 CryptImportKey 函数将密钥 BLOB 导入 CSP。
有关创建会话密钥并将该密钥导出到可写入磁盘文件的简单密钥 BLOB 的示例,请参阅示例 C 程序:导出会话密钥。
此过程仅提供最低限度的安全性。 如果存储的会话密钥将在以后用于加密数据,则上述过程无法提供足够的安全性。
若要提高安全性,请在将密钥 BLOB 存储在磁盘之前使用交换私钥对密钥 BLOB 进行签名。 以后从磁盘读取密钥 BLOB 时,可以验证其签名,以确保密钥 BLOB 保持不变。
如果未对密钥 BLOB 进行签名,则有权访问磁盘或其他存储密钥的媒体的任何人都可以创建新的会话密钥。
新会话密钥可以使用原始用户的公钥交换密钥进行加密,并且此新密钥可以替换为原始密钥。 如果用户在不知情的情况下使用替换会话密钥来加密文件和消息,则创建替换密钥的个人可以轻松解密它们。
哈希和数字签名中详细介绍了数字签名。