R – Protecting RSACryptoServiceProvider private key with password or otherwise

asp.netcryptographyencryptionnetrsa

I want to encrypt some server data using .NET's RSACryptoServiceProvider and decrypt it when someone enters a key/password via a web page. What are my options for protecting, or ideally not even storing, the private key on the server, whilst avoiding having the user supply it all each time?

  • Encrypt the private key using a symmetric system and have the user supply the password for that?
  • Store most of the private key on the server but have the user supply N characters of it?
  • Store it in the server's MachineKeyStore and use a secret KeyContainerName as a password?
  • Use CspParameters.KeyPassword in some way which works over the web?
  • Something else?

Best Answer

Other than the hardware approach (HSM or Smartcard), you pretty much have to use one secret to protect another secret. So you keep adding password. My suggestion is to use DPAPI,

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

With this approach, you don't create yet another password. User experience is also better because they only have to type in password once at login.

Related Topic