手动会话密钥交换

注意

本节中所述的过程假定 (或 CryptoAPI 客户端的用户) 已拥有自己的 公钥/私钥对 集,并且也已获取彼此的 公钥

 

下图显示了如何使用此过程发送加密消息。

发送加密消息

此方法容易受到至少一种常见形式的攻击。 窃听者可以获取一个或多个加密消息的副本和加密密钥。 然后,在稍后的某个时间,窃听者可以将其中一条消息发送到接收方,接收方将无法知道消息不是直接来自原始发送方。 可以通过对所有消息进行时间戳或使用序列号来降低此风险。

向其他用户发送加密消息的最简单方法是发送使用随机会话密钥加密的消息,以及使用接收方的 密钥交换公钥加密的会话密钥。

以下是发送加密会话密钥的步骤。

发送加密的会话密钥

  1. 使用 CryptGenKey 函数创建随机会话密钥
  2. 使用会话密钥加密消息。 数据加密和解密中讨论了此过程。
  3. 使用 CryptExportKey 函数将会话密钥导出到密钥 BLOB 中,指定使用目标用户的密钥交换公钥对密钥进行加密。
  4. 将加密消息和加密密钥 BLOB 发送给目标用户。
  5. 目标用户使用 CryptImportKey 函数将密钥 BLOB 导入其 CSP。 这将自动解密会话密钥,前提是目标用户的密钥交换公钥已在步骤 3 中指定。
  6. 然后,目标用户可以按照 数据加密和解密中讨论的过程,使用会话密钥解密消息。