2009-11-19 77 views
2

我想使用.NET的RSACryptoServiceProvider加密一些服務器數據,並在有人通過網頁輸入密鑰/密碼時將其解密。我可以選擇什麼方式來保護或理想情況下甚至不在服務器上存儲私鑰?同時避免讓用戶每次都提供所有私鑰?使用密碼或其他方式保護RSACryptoServiceProvider私鑰

  • 使用對稱系統加密私鑰並讓用戶提供密碼?
  • 將大部分私鑰存儲在服務器上,但用戶提供了N個字符?
  • 將其存儲在服務器的MachineKeyStore中並使用密鑰KeyContainerName作爲密碼?
  • 使用CspParameters.KeyPassword以某種方式通過網絡工作?
  • 還有別的嗎?
+0

感謝您使用對稱加密來加密私鑰的想法......我正在開發一個Web應用程序,我需要使用非對稱加密來加密(簡化場景)員工工資(這樣即使我(開發人員)也不能知道任何人的工資)。解決方案是使用公鑰加密工資,然後使用強對稱加密對私鑰進行加密。每次他/她想查看薪水時,人力資源經理將不得不繼續輸入密碼。 – 2016-03-19 13:42:46

回答

1

除了硬件方法(HSM或智能卡),你幾乎不得不用一個祕密來保護另一個祕密。所以你不斷添加密碼。我的建議是使用DPAPI,

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

通過這種方法,你不要再創建一個密碼。用戶體驗也更好,因爲他們只需在登錄時輸入一次密碼即可。

0

您最好的選擇是將私鑰存儲在由HSM保護的硬件安全模塊中,確保密鑰在沒有密碼的情況下無法使用。

如果一個HSM不是一個選項(畢竟它們相當昂貴),你應該使用PBKDF2或類似的強系統來派生一個對稱密鑰,並用它來加密私鑰。使用CSP的密碼保護也是一種選擇,但它對於發生的情況的透明度稍差,並且您必須小心避免讓密鑰訪問域管理員等。