使用密码或其他方式保护RSACryptoServiceProvider私钥

时间:2009-11-19 17:59:51

标签: .net asp.net encryption cryptography rsa

我想使用.NET的RSACryptoServiceProvider加密某些服务器数据,并在有人通过网页输入密钥/密码时对其进行解密。我有什么选择保护服务器上的私钥,或者甚至不存储服务器上的私钥,同时避免让用户每次都提供私钥?

  • 使用对称系统加密私钥并让用户提供密码?
  • 将大部分私钥存储在服务器上,但用户是否提供了N个字符?
  • 将其存储在服务器的MachineKeyStore中并使用密钥KeyContainerName作为密码?
  • 以某种方式使用CspParameters.KeyPassword吗?
  • 别的什么?

2 个答案:

答案 0 :(得分:1)

除了硬件方法(HSM或智能卡)之外,您几乎必须使用一个秘密来保护另一个秘密。所以你不断添加密码。我的建议是使用DPAPI,

http://en.wikipedia.org/wiki/Data_Protection_API

使用此方法,您不会再创建另一个密码。用户体验也更好,因为他们只需在登录时输入一次密码。

答案 1 :(得分:0)

您最好的选择是将私钥存储在受密码保护的硬件安全模块中,并使用HSM确保密钥在没有密码的情况下无法使用。

如果HSM不是一个选项(毕竟它们非常昂贵),你应该使用PBKDF2或类似的强系统派生对称密钥,并使用它加密私钥。使用CSP的密码保护也是一种选择,但它的透明度稍微低一些,你必须小心避免让域名管理员可以访问密钥等。