2

概述: 我正在尝试设计一个应用程序,该应用程序将加密文件以安全地通过Snail Mail(大数据集)发送。我计划使用 .Net 中的 AES/RijndaelManaged 加密最初加密文件,使用随机生成的密钥使用RNGCryptoServiceProvider. 然后我用 RSA 公钥加密这个随机的 AES 密钥。数据的接收者是唯一拥有 RSA 私钥来解密它的人。

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

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

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

4

4 回答 4

3

除非有充分的理由不使用PGP 。PGP 是电子邮件中常用的混合加密的开放且普遍的标准。PGP有很多实现。我知道的唯一 .NET 是BouncyCastle 加密项目的 C# 库。PGP 实际上提供了您描述的功能的超集;例如,PGP 还可以对消息进行数字签名。

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

如果 PGP 能满足您的要求,请不要重新实现它。PGP 得到了相当广泛的支持。此外,像我这样的凡人(大概还有你自己)几乎没有机会把所有事情都做好。

于 2010-05-13T18:59:41.550 回答
3

至于你的第一部分,这绝对是解决问题的方法。它被称为混合密码系统

于 2010-05-13T18:45:01.037 回答
2

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

于 2010-05-13T18:57:06.827 回答
0

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

于 2010-05-24T20:05:20.430 回答