我有一个简单的加密应用程序,将在其中加密数据库中的“敏感”数据。只有具有访问权限的人才能以解密形式查看这些数据。我一直在寻找有关如何执行此操作的更多信息,这是我的项目方法:

  • 我正在使用AES加密算法。
  • 使用RNGCryptoServiceProvider生成AES key 。使用AES key 加密信息。
  • 使用和RSA公钥加密AES key 。
  • 将私钥存储在USB文件中,我只会将其提供给具有访问权限的人员。
  • 当合法的人需要查看解密的信息时,他们将提供私钥。该应用使用私钥解密AES key ,而AES key 反过来解密信息。

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

    另外,如果更改 key 对,则必须更改公共(public) key ,并使用新的新公共(public) key 再次重新加密AES key 。为此,我发现How to Generate Unique Public and Private Key via RSA这个帖子非常有用。但是,我不确定作者是如何实现的。他是否还将 key 容器名称存储在私钥文件中?还是ToXMLString自动执行此操作?

    谢谢〜

    最佳答案

    解密私钥的问题在于,该 key 将以明文形式传输到计算机的主内存中,并且有可能在存储区的交换中传输。有一些选择可以使用私钥而不将其存储到内存中:

  • 使用智能卡,并且在PIN后面带有私钥(PIN比密码更安全,因为通常使用“重试计数”(因此您不能尝试通过蛮力访问)来保护它们)
  • 使用安全 token ,这基本上是智能卡和智能卡读取器结合在一起的

  • 使用其他棘手的选项:
  • 使用计算机主板上的板载受信任平台模块(TPM),基本上是
  • 板上的智能卡
  • 使用操作系统
  • 提供的某种 protected key 存储区

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

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

    欢迎进入 key 管理领域:)

    关于c# - 在文件中存储RSA私钥,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13947749/

    10-11 04:14
    查看更多