2010-05-07 34 views
1

我有以下情況:如何在RSACryptoServiceProvider中使用機器中創建RSA密鑰?

不同機器上的幾個應用程序將使用RSA加密技術共享存儲在數據庫中的信息。

今天我以一種不安全的方式來做這件事。這些機器以XML格式共享一個包含RSA密鑰的DLL。

我該如何使用這個XML的信息在不同的機器上生成機器密鑰,然後我怎麼能在RSACryptoServiceProvider中使用它們?

回答

2

我在過去所做的那樣:(這只是一個大綱;如果需要實際的代碼,我可以提供,但它聽起來像你的問題只是尋找創意)

下列情況必須在每臺機器上完成。 (您可以創建一個簡單的控制檯應用程序要做到這一點,或PowerShell腳本。)

  • 使用ProtectedData.Protect加密密鑰
  • 存儲在註冊表中加密的密鑰。您可以在註冊表項上設置ACL權限以獲得更高的安全性。

在您的應用程序,使用ProtectedData.Unprotect拿到鑰匙,然後傳遞到RSACryptoServiceProvider用於加密和解密。

+0

嗨戴夫,我的問題是我怎麼能做到這一點,我不知道一個代碼或一個工具,可以從xml或其他東西生成一個機器鍵。我需要保留這個「主密鑰」來生成這個機器密鑰給其他機器。 – 2010-05-07 14:53:38

+0

ProtectedData類負責照顧你。它使用DPAPI(內置於Windows)來生成用於加密的機器特定(或用戶特定)密鑰。但是,每臺機器上的密鑰都不相同,這就是爲什麼您必須在每臺機器上運行'.Protect'/registry。一旦完成,您可以刪除XML文件。 (將實際的RSA密鑰存儲在KeePass或其他東西中,以備日後需要時使用)。這種方式在任何地方都絕對不存在「純文本」密鑰,並且您的安全性基於Windows標準(帳戶權限/ ACL) – 2010-05-07 15:00:11

+0

對不起,我現在無法得到這個權利。但http://blog.shutupandcode.net/?p=538有第一部分;我只會在私鑰XML上添加上面的ProtectedData東西,以便您的私鑰不會輕易泄露。 – 2010-05-07 15:20:06

1

RSACryptoServiceProvider()的構造函數可用於創建新的密鑰對。如果您想創建機器密鑰或定義創建的密鑰對的其他參數,則應使用RSACryptoServiceProvider(CspParameters parameters)構造函數。因此,請創建一個新的CspParameters實例,例如cspParams,並填寫cspParams.FlagsCspProviderFlags.UseMachineKeyStore。那麼你將能夠在RSACryptoServiceProvider(CspParameters parameters)構造函數中創建一個機器密鑰。

相關問題