如何将 AES 初始化向量传递给混合密码系统的客户端

问题描述 投票:0回答:4

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

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

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

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

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

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

我只是想得到一些关于这种方法的意见。其他通信协议SSL等如何解决这个问题

谢谢。

encryption rsa aes public-key private-key
4个回答
11
投票

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

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

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


2
投票

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

您也可以只发送密钥并使用密钥本身生成 IV - 例如,使用密钥哈希的前 128 位作为 IV。只要您为每个会话生成新的 AES 密钥,并且不要在相同的 IV 中一遍又一遍地重复使用相同的 AES 密钥,那么从安全角度来看,这应该是没问题的。


2
投票

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

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


0
投票

请查看下一个链接,IV + KEY https://comunicatte.com.co/encriptacion.php?modo=2

© www.soinside.com 2019 - 2024. All rights reserved.