Encryption 如何通过非对称密钥对加密和使用对称密钥

Encryption 如何通过非对称密钥对加密和使用对称密钥,encryption,rsa,private-key,Encryption,Rsa,Private Key,我有一些邮件在发送时需要加密。它们应该只能由接收方解密 最初,我有一个结构,其中消息使用接收方的公钥进行加密,然后接收方使用其私钥对消息进行解密。但是,由于我使用的是RSA,因此消息的大小非常有限 我正在设想两种可能的解决方案,但不太确定如何实施更好的方案(选项2) (简单)只需将每条消息分成多个较小的部分,加密并存储即可。这只会更改我的应用程序的查询结构,而不会更改加密结构 我可以用对称密钥加密消息,这更快,而且可以在任何大小上工作。然而,我需要用非对称密钥加密对称密钥。然后问题就变成了,我只

我有一些邮件在发送时需要加密。它们应该只能由接收方解密

最初,我有一个结构,其中消息使用接收方的公钥进行加密,然后接收方使用其私钥对消息进行解密。但是,由于我使用的是RSA,因此消息的大小非常有限

我正在设想两种可能的解决方案,但不太确定如何实施更好的方案(选项2)

  • (简单)只需将每条消息分成多个较小的部分,加密并存储即可。这只会更改我的应用程序的查询结构,而不会更改加密结构

  • 我可以用对称密钥加密消息,这更快,而且可以在任何大小上工作。然而,我需要用非对称密钥加密对称密钥。然后问题就变成了,我只能在提供非对称私有密钥时解密对称密钥,即当接收者想要读取他们的消息时。那么在这种情况下,我应该如何加密这些消息呢?因为我不希望发送方也能够访问用于解密的密钥

  • 然后问题就变成了,我只能在提供非对称私有密钥时解密对称密钥,即当接收者想要读取他们的消息时。那么在这种情况下,我应该如何加密这些消息呢

    这很简单,在使用公钥加密数据之前,使用一个短暂的、消息特定的、完全随机的对称密钥进行数据加密。最好在此之后显式销毁对称密钥。您可以在消息的密文之前为包装(加密)对称密钥加前缀,因为它的大小(以字节为单位)始终与模数相同(即RSA密钥大小(以字节为单位)

    您正在考虑的系统称为混合密码系统,它比为RSA拆分消息要好得多。还有很多其他方法可以完成同样的事情,比如RSA-KEM和椭圆曲线的ECIES。但这两种技术在加密库中并不常见

    如果您决定使用RSA/AES发送密码,那么我建议您使用OAEP,例如AES-CTR而不是AES-CBC,因为RSA PKCS#1 v1.5填充和CBC填充都容易受到填充oracle攻击


    强烈建议对消息进行签名,否则对手可能会加密假消息。加密仅用于实现消息的机密性,而不是消息的完整性和真实性。如果可以发送任何消息,对手甚至可以尝试明文甲骨文攻击。如果您不允许您控制的一组私钥,那么您应该先签名再加密,而不是先加密再签名


    和往常一样,如果TLS或其他明确的安全传输协议是传输安全的一个选项,则首选TLS或其他明确的安全传输协议。

    注释不用于扩展讨论;这段对话已经结束。