我想使用.NET的RSACryptoServiceProvider加密某些服务器数据,并在有人通过网页输入密钥/密码时对其进行解密。我有什么选择保护服务器上的私钥,或者甚至不存储服务器上的私钥,同时避免让用户每次都提供私钥?
答案 0 :(得分:1)
除了硬件方法(HSM或智能卡)之外,您几乎必须使用一个秘密来保护另一个秘密。所以你不断添加密码。我的建议是使用DPAPI,
http://en.wikipedia.org/wiki/Data_Protection_API
使用此方法,您不会再创建另一个密码。用户体验也更好,因为他们只需在登录时输入一次密码。
答案 1 :(得分:0)
您最好的选择是将私钥存储在受密码保护的硬件安全模块中,并使用HSM确保密钥在没有密码的情况下无法使用。
如果HSM不是一个选项(毕竟它们非常昂贵),你应该使用PBKDF2或类似的强系统派生对称密钥,并使用它加密私钥。使用CSP的密码保护也是一种选择,但它的透明度稍微低一些,你必须小心避免让域名管理员可以访问密钥等。