手动会话密钥交换

注意

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

 

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

sending an encrypted message

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

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

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

发送加密会话密钥

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