【问题标题】:AES encrypted communication using RSA for key exchange in Go在 Go 中使用 RSA 进行密钥交换的 AES 加密通信
【发布时间】:2014-08-23 17:19:39
【问题描述】:

我正在尝试在基于 Ruby Sinatra 的网络后端和 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?

提前致谢!

【问题讨论】:

    标签: encryption go aes rsa


    【解决方案1】:

    您应该使用 RSA 加密并发送 aesRand 或称为密钥。

    您还需要传递一个 IV,具体取决于您使用的 crypto mode。

    len(KEY) + len(IV) 必须小于 len(PubKey) 假设您要在初始 RSA 交易中同时加密它们。

    仔细阅读docs for the rsa module,了解每种模式的弱点。您应该使用DecryptPKCS1v15SessionKey 来解密上述内容。请注意有关在新协议中使用 RSA-OAEP 的注释。

    如果您这样做是为了获得学习经验,那很好,但如果这是保护信息的代码,如果信息被泄露,那么我会使用TLS,它将完成上述所有操作以及更多操作经过良好测试的框架。

    【讨论】:

    • 好吧,看来添加应用层安全确实不是个好主意。我只会使用 HTTPS。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多