手动会话密钥交换

注意

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

 

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

发送加密消息

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

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

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

发送加密会话密钥

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