c# - 将 RSA 私钥存储在文件中

标签 c# encryption aes rsa

我有一个简单的加密应用程序,我将在其中加密数据库中的“敏感”数据。只有拥有访问权限的人才能看到这些解密后的数据。我一直在四处寻找有关如何做到这一点的更多信息,这是我的项目方法:

  1. 我正在使用 AES 加密算法。
  2. 使用 RNGCryptoServiceProvider 生成 AES key 。使用 AES key 加密信息。
  3. 使用 RSA 公钥加密 AES key 。
  4. 将私钥存储在USB文件中,我只会将其提供给有访问权限的人。
  5. 当合法的人需要查看解密后的信息时,他们会提供私钥。该应用程序使用私钥解密 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/

相关文章:

Android AES 和初始化向量

c# - 从加密流读取到流的末尾

c# - View 中具有多个(单独的)键的 Entity Framework 关联

c# - 我可以将自定义属性传递给 NLOG 并输出到文件吗?

java - 如何从内存中获取 'Zero out' Java 中的 AES SecretKeySpec key

mysql - 加密数据库主键以在客户端进行混淆

python - 使用字典输入和在 python 中使用 sigma 的函数

c# - 在 Asp.net 中,如何将子类呈现给 html 帮助程序?

c# - 你能中止一个属性(property)的设定程序吗

security - 使用证书的服务器身份验证(过程)