我有一个简单的加密应用程序,我将加密数据库中的“敏感”数据。只有拥有访问权限的人才能以解密的形式查看这些数据。我一直在寻找有关如何做到这一点的更多信息,这是我的项目方法:
现在,我的问题是我如何安全地存储该私钥?根据我一直在阅读的内容,我可以使用FromXMLString获取私钥。但是,我想如果有人以某种方式获取USB文件和XMLFile,他可以通过类似地使用FromXMLString找到私钥。那么,我如何保护该文件,例如,使用密码? c#中是否有任何功能可用于此?
此外,如果我更改密钥对,我必须更改公钥并使用新的新公钥重新加密AES密钥。为此,我发现这篇文章How to Generate Unique Public and Private Key via RSA非常有用。但是,我不确定作者如何实现它。他是否还将密钥容器名称存储在私钥文件中?或者ToXMLString会自动执行此操作吗?
感谢〜
答案 0 :(得分:3)
不知何故,解密密钥或获取解密密钥的RSA
密钥必须保存为纯文本。如果它不是一个USB驱动器,它必须在用户的头脑中。
您可以做的事情就是进行多因素身份验证。只有用户知道的密码(他会把它放在脑中或者写在便利贴上;而不是你的电话)和包含其他解密密钥的USB驱动器。
因此,攻击者必须同时拥有密码和USB驱动器才能获取加密信息。
查看PBKDF2如何从用户输入的密码中获取加密安全密钥。
答案 1 :(得分:1)
我建议将证书与私钥一起存储在PKCS兼容容器(* .pfx)中。在C#中,这可以通过Bouncy Castle库完成。
这是创建对的方法:
Is it possible to programmatically generate an X509 certificate using only C#?
这就是如何将它存储在容器中(步骤3):
答案 2 :(得分:1)
解密私钥的问题是密钥将以明文形式传输到计算机的主内存中,并可能传输到存储中的交换中。有一些选项可以使用私钥而无需将其存入内存:
其他更难以使用的选项:
此外,您还可以选择使用可通过PIN或密码保护的USB驱动器。 Ironkey在USB密钥本身的硬件中执行认证的认证 USB驱动器。当然,这个将将您的私钥移动到内存中。
如果您必须在内存中使用私钥,请确保您的系统强化正确,例如加密交换,确保你有一个系统来维护访问权限等。
欢迎来到密钥管理领域:)