我需要实现客户端-服务器通信的安全性。我已经实现了以下混合密码系统
为了在混合密码系统中加密发送给 Alice 的消息,Bob 执行以下操作:
为了解密这个混合密文,Alice 执行以下操作:
我使用 RSA 作为公钥加密系统,使用 AES 作为对称密钥加密系统。一切正常,但我不确定如何处理 AES 初始化向量。目前,我正在连接 AES 密钥和初始化向量,用公钥对其进行加密并将其发送到服务器。
我只是想得到一些关于这种方法的意见。其他通信协议SSL等如何解决这个问题
谢谢。
您没有对 IV 进行加密。将其与加密密钥捆绑在一起并将其(以明文形式)发送给收件人。
这方面的标准确实存在。这种方案在 CMS(S/MIME 的基础)中称为“KeyTransRecipientInfo”,PGP 也提供类似的模式。 TLS 还包括初始化向量作为密钥加密算法标识符中的参数,使用与 CMS 相同的 ASN.1 语法。执行此操作的强大开源库可用于许多平台。
至少,研究 CMS 规范可能有助于避免自制实现中的一些陷阱。请参阅 RFC 3369 的§6.1 和 §6.2.1。
我做了同样的事情,并以相同的方式处理它 - 将 AES 密钥与 IV 连接起来并对它们进行加密。
您也可以只发送密钥并使用密钥本身生成 IV - 例如,使用密钥哈希的前 128 位作为 IV。只要您为每个会话生成新的 AES 密钥,并且不要在相同的 IV 中一遍又一遍地重复使用相同的 AES 密钥,那么从安全角度来看,这应该是没问题的。
没有理由加密 IV - 您可以明文发送。只需确保每次选择一个新密钥(与 AES 密钥的操作方式相同)。
也就是说,将 AES 密钥和 IV 打包在一起通常很方便。 16 字节的加密并没有那么昂贵。
请查看下一个链接,IV + KEY https://comunicatte.com.co/encriptacion.php?modo=2