我有一个简单的加密应用程序,我将在其中加密数据库中的“敏感”数据。只有拥有访问权限的人才能看到这些解密后的数据。我一直在四处寻找有关如何做到这一点的更多信息,这是我的项目方法:
- 我正在使用 AES 加密算法。
- 使用 RNGCryptoServiceProvider 生成 AES key 。使用 AES key 加密信息。
- 使用 RSA 公钥加密 AES key 。
- 将私钥存储在USB文件中,我只会将其提供给有访问权限的人。
- 当合法的人需要查看解密后的信息时,他们会提供私钥。该应用程序使用私钥解密 AES key ,进而解密信息。
现在,我的问题是如何安全地存储私钥?根据我一直在阅读的内容,我可以使用 FromXMLString 获取私钥。但是,我在想,如果有人以某种方式 获得 USB 文件和 XMLFile,他可以通过类似的方式使用 FromXMLString 找到私钥。那么,我如何保护该文件,例如,通过使用密码?我可以使用 C# 中的任何函数吗?
此外,如果我更改 key 对,我必须更改公钥并使用新的新公钥再次重新加密 AES key 。为此,我找到了这篇文章 How to Generate Unique Public and Private Key via RSA非常有用。但是,我不确定作者是如何实现它的。私钥文件中他是否也存储了 key 容器名称?或者 ToXMLString 自动执行此操作?
谢谢~
最佳答案
不知何故,解密 key 或用于获取解密 key 的 RSA
key 必须以纯文本形式保存。如果它不是 USB 驱动器,它就必须存在于用户的脑海中。
因此,您可以做的就是进行多重身份验证。一个只有用户知道的密码(他会把它记在脑子里或写在便利贴上;不是你的电话)和包含另一个解密 key 的 USB 驱动器。
因此攻击者必须同时拥有密码和 USB 驱动器才能获取加密信息。
看看PBKDF2关于如何从用户输入的密码中导出加密安全 key 。
关于c# - 将 RSA 私钥存储在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947749/