将RSA私钥存储在文件中

cof*_*eak 5 c# encryption rsa aes

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

  1. 我正在使用AES加密算法.
  2. 使用RNGCryptoServiceProvider生成AES密钥.使用AES密钥加密信息.
  3. 使用和RSA公钥加密AES密钥.
  4. 将私钥存储在USB文件中,我只会将其提供给拥有访问权限的人员.
  5. 当合法的人需要查看解密的信息时,他们将提供私钥.该应用程序使用私钥解密AES密钥,该密钥依次解密信息.

现在,我的问题是如何安全地存储该私钥?根据我一直在阅读的内容,我可以使用FromXMLString获取私钥.但是,我想如果有人以某种方式获取USB文件和XMLFile,他可以通过类似地使用FromXMLString找到私钥.那么,我如何保护该文件,例如,使用密码?在c#中我可以使用任何功能吗?

此外,如果我更改密钥对,我必须更改公钥并使用新的新公钥重新加密AES密钥.为此,我发现这篇文章如何通过RSA生成唯一的公钥和私钥非常有用.但是,我不确定作者如何实现它.他是否还将密钥容器名称存储在私钥文件中?或者ToXMLString自动执行此操作?

谢谢〜

Ran*_*ray 5

不知何故,某处解密密钥或 RSA获取解密密钥的密钥必须以纯文本形式保存。如果它不是一个 USB 驱动器,它必须在用户的脑海中。

因此,您可以做的是进行多因素身份验证。只有用户知道的密码(他会把它记在脑子里或写在便利贴上;而不是你的电话)和包含另一个解密密钥的 USB 驱动器。

因此,攻击者必须同时拥有密码和 USB 驱动器才能获取加密信息。

查看PBKDF2,了解如何从用户输入的密码中派生出加密安全密钥。

  • 如果密码以某种方式掌握在对手手中,他就可以解密信息。但是,如果考虑多个因素,攻击者也需要访问 USB 驱动器。您的来电。 (2认同)

Maa*_*wes 3

解密私钥的问题在于,密钥将被简单地传输到计算机的主内存中,并且可能会传输到存储内的交换中。有几种选择可以使用私钥而不将其放入内存:

  • 使用智能卡,PIN 码后面有私钥(PIN 码比密码更安全,因为它们通常受到“重试计数”的保护(因此您无法尝试暴力访问)
  • 使用安全令牌,它基本上是智能卡和智能卡读卡器的组合

其他使用起来比较棘手的选项:

  • 使用计算机主板上的板载可信平台模块 (TPM),它基本上是板载智能卡
  • 使用操作系统提供的某种受保护的密钥存储

此外,您还可以选择使用可通过 PIN 或密码保护的 USB 驱动器。Ironkey 生产经过认证的USB 驱动器,并在 USB 密钥本身的硬件中执行 AES 加密。当然,这会将您的私钥移至内存中。

如果您必须在内存中使用私钥,请确保您的系统已正确加固,例如加密交换,确保您有一个系统来维护访问权限等。

欢迎来到密钥管理领域:)