9

我需要为客户端-服务器通信实现安全性。我已经实现了以下混合密码系统

为了在混合密码系统中加密发给 Alice 的消息,Bob 执行以下操作:

  1. 获得 Alice 的公钥。
  2. 为数据封装方案生成一个新的对称密钥。
  3. 使用刚刚生成的对称密钥在数据封装方案下对消息进行加密。
  4. 在密钥封装方案下,使用 Alice 的公钥加密对称密钥。
  5. 将这两种加密都发送给 Alice。

为了解密这个混合密文,Alice 执行以下操作:

  1. 使用她的私钥解密包含在密钥封装段中的对称密钥。
  2. 使用此对称密钥来解密数据封装段中包含的消息。

我将 RSA 用于公钥密码系统,将 AES 用于对称密钥密码系统。一切正常,但我不确定如何处理 AES 初始化向量。目前,我正在连接 AES 密钥和初始化向量,用公钥对其进行加密并将其发送到服务器。

我只是想就这种方法获得一些意见。其他通信协议 SSL 等如何解决此问题。

谢谢。

4

3 回答 3

11

您不加密 IV。将其与加密密钥捆绑在一起并将其(以明文形式)发送给收件人。

这方面的标准确实存在。该方案在 CMS(S/MIME 所基于)中称为“KeyTransRecipientInfo”,PGP 提供了类似的模式。TLS 还将初始化向量作为参数包含在密钥加密算法标识符中,使用与 CMS 相同的 ASN.1 语法。用于执行此操作的强大的开源库可用于许多许多平台。

至少,研究 CMS 规范可能有助于避免自制实现中的许多陷阱。参见RFC 3369 的 §6.1 和 §6.2.1。

于 2009-10-08T21:42:33.130 回答
2

我做了同样的事情,并且以同样的方式处理它 - 将 AES 密钥与 IV 连接并加密它们。

您也可以只发送密钥并使用密钥本身生成 IV - 例如通过使用密钥哈希的前 128 位作为 IV。只要您为每个会话生成一个新的 AES 密钥并且不使用相同的 IV 反复使用相同的 AES 密钥,这在安全方面应该是可以的。

于 2009-10-08T21:18:03.123 回答
2

没有理由加密 IV - 您可以明文发送。只需确保每次都选择一个新的(与使用 AES 密钥的方式相同)。

也就是说,将 AES 密钥和 IV 打包在一起通常很方便。16 字节的加密并不昂贵。

于 2009-10-08T21:22:33.783 回答