如何将AES初始化Vector传递给客户端以实现混合密码系统

时间:2009-10-08 21:06:39

标签: encryption rsa aes public-key private-key

我需要为客户端 - 服务器通信实现安全性。我已实施以下hybrid cryptosystem

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

  1. 获得Alice的公钥。
  2. 为数据封装方案生成新的对称密钥。
  3. 使用刚生成的对称密钥加密数据封装方案下的消息。
  4. 使用Alice的公钥加密密钥封装方案下的对称密钥。
  5. 将这两种加密方式发送给Alice。
  6. 为了解密这个混合密文,Alice执行以下操作:

    1. 使用她的私钥来解密密钥封装段中包含的对称密钥。
    2. 使用此对称密钥来解密数据封装段中包含的消息。
    3. 我正在使用RSA用于公钥密码系统,AES用于对称密钥密码系统。每件事都很好,但我不知道如何处理AES初始化向量。目前,我正在连接AES密钥和初始化向量,用公钥加密它并将其发送到服务器。

      我只想对这种方法有所了解。如何通过其他通信协议SSL等解决此问题。

      感谢。

3 个答案:

答案 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字节的加密并不昂贵。