使用AES加密文件,使用RSA加密密钥 - 我是否走在正确的轨道上?

时间:2010-05-13 18:37:47

标签: .net encryption rsa aes rijndaelmanaged

概述: 我正在尝试设计一个应用程序来加密文件,以便通过蜗牛邮件(LARGE数据集)安全地发送。我打算使用.Net的AES / RijndaelManaged加密来初始加密文件,使用RNGCryptoServiceProvider随机生成的密钥。然后我用RSA公钥加密这个随机AES密钥。数据接收者是唯一一个使用RSA私钥解密的数据。

我的问题:这是做这样事情的正确方法吗?如果是这样,使用数据发送此RSA加密密钥是否安全,因为它需要私钥解密?

编辑 - 根据答案,这确实是正确的方法。

编辑 - 感谢您的回复。现在我真正想知道的是:
当让最终用户生成他们的公钥/私钥对时,保存私钥的最佳方法是什么?我不希望它只能从一台机器上访问,所以我试图避免使用用户的密钥库。但是MSDN说将密钥保存到文件是不安全的,那么你怎么能做到这一点呢?

4 个答案:

答案 0 :(得分:3)

关于你的第一部分,这绝对是解决问题的方法。它被称为hybrid cryptosystem

答案 1 :(得分:3)

使用PGP,除非有充分的理由不这样做。 PGP是电子邮件中常用的混合加密的开放且无处不在的标准。 PGP有很多实现。我所知道的唯一一个.NET是BouncyCastle crypto project's C# library。 PGP实际上提供了您描述的功能的超集;例如,PGP也可以对消息进行数字签名。

关于私钥存储。典型的解决方案是在将私钥写入磁盘之前对称地加密私钥。只有私钥的真正所有者知道密码,他们不会告诉任何人。这样,即使攻击者获得私钥文件,他们仍然必须妥协秘密或暴力破解对称密码。我所知道的所有PGP实现都是这样做的。

如果它符合您的要求,请不要重新实现PGP。 PGP得到了广泛的支持。此外,像我这样的凡人(可能是你自己)几乎没有机会把事情做好。

答案 2 :(得分:2)

这基本上就是SSL的作用。 RSA用于对称会话密钥(例如,AES)的认证和密钥交换,然后用于通信主体。

答案 3 :(得分:0)

保存私钥(在GPG / PGP / PKCS#1 / PKCS#8中使用)的传统方法是使用强密码对其进行密码保护并将其粘贴到文件中。大多数密钥库管理工具都有一种以PKCS#1 / PKCS#8格式导出密钥的方法 - 在一台机器上生成密钥,用密码导出密钥,然后在另一台机器上导入密钥;密钥只在密钥库之外,以便在机器之间进行传输。