我需要为客户端 - 服务器通信实现安全性。我已实施以下hybrid cryptosystem
为了加密在混合密码系统中发给Alice的消息,Bob执行以下操作:
为了解密这个混合密文,Alice执行以下操作:
我正在使用RSA用于公钥密码系统,AES用于对称密钥密码系统。每件事都很好,但我不知道如何处理AES初始化向量。目前,我正在连接AES密钥和初始化向量,用公钥加密它并将其发送到服务器。
我只想对这种方法有所了解。如何通过其他通信协议SSL等解决此问题。
感谢。
答案 0 :(得分:10)
您不加密IV。将其与加密密钥捆绑在一起并将其(以明文形式)发送给收件人。
确实存在这方面的标准。该方案在CMS中称为“KeyTransRecipientInfo”(S / MIME基于该方案),并且PGP提供类似的模式。 TLS还包括初始化向量作为密钥加密算法标识符中的参数,使用与CMS相同的ASN.1语法。许多很多平台都可以使用强大的开源库来执行此操作。
至少,研究CMS规范可能有助于避免家庭酿造实施中的一些陷阱。见§6.1 and §6.2.1 of RFC 3369.
答案 1 :(得分:2)
我做了同样的事情,我以相同的方式处理它 - 将AES密钥与IV连接并加密它们。
您也可以发送密钥并使用密钥本身生成IV - 例如,通过使用密钥散列的前128位作为IV。只要您为每个会话生成一个新的AES密钥而不是使用相同的IV重复使用相同的AES密钥,这应该是安全的。
答案 2 :(得分:2)
没有理由对IV进行加密 - 你可以清楚地发送它。只需确保每次都选择一个新的(与执行AES密钥的方式相同)。
也就是说,将AES密钥和IV打包在一起通常很方便。 16字节的加密并不昂贵。