使用RSA进行AES密钥交换的AES加密通信

Paddi91:

我正在尝试在基于Ruby Sinatra的Web后端和Google Go应用程序之间建立安全的通信。Go应用程序包含公用密钥,并最初打开连接。然后,它使用其公钥加密随机生成的AES,并将其发送到Web后端。所有即将到来的(大型)数据将使用AES密钥进行加密。通常这是一种可用的方法吗?

Go代码如下所示

aesRand := make([]byte, 32)
rand.Read(aesRand)
AESBlock, _ = aes.NewCipher(aesRand)

// Encrypt AES key with RSA
data, err := rsa.EncryptPKCS1v15(rand.Reader, PubKey, aesRand)

现在的问题是,通过行加密并发送随机字节是否正确,还是应该加密并发送AESBlock?

提前致谢!

尼克·克雷格·伍德(Nick Craig-Wood):

您应该aesRand使用RSA 进行加密并发送(否则称为密钥)。

您还需要根据所使用的加密模式传递IV

len(KEY)+ len(IV)必须小于len(PubKey),前提是您要在初始RSA事务中同时对它们进行加密。

仔细阅读rsa模块文档,以注意每种模式的弱点。您应该使用DecryptPKCS1v15SessionKey解密以上内容。请注意有关在新协议中使用RSA-OAEP的注释。

如果您将其作为学习经验来做,那很好,但是如果代码是为了保护信息,如果这些信息受到破坏,它将花费大量金钱,那么我将使用TLS,它将在经过充分测试的框架中完成上述所有工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章