所以你有一個應用程序需要加密/解密數據,但不需要用戶輸入密碼來使用它?首先,這聽起來像是一個安全漏洞 - 黑客無需獲得密鑰或密碼 - 他們只需要獲取應用程序。
爲了安全地做到這一點,在不將密鑰存儲在應用程序代碼中的情況下,您必須擁有某種來自用戶的密碼,您可以使用該密碼來加密/解密使用的「真實密鑰」加密和解密實際數據。
如果您使用的是服務來訪問數據,並且沒有輸入密碼,您可以根據機器信息生成一個唯一字符串,並將其用作密碼類型來加密密鑰。
要在多臺機器上執行此操作,每臺機器都會根據機器信息生成自己的「密碼」。這個密碼將被用來生成一個密鑰(對於該機器來說是唯一的),然後該密鑰將被用於加密共享密鑰(用於加密實際數據)。這些信息將存儲在數據庫中的一個帶有兩列的簡單表格中:MachineID和EncryptedSharedKey。
在啓動時,服務將檢查機器信息,生成其密碼,使用該密鑰生成其密鑰,並使用該密鑰從數據庫表中解密共享密鑰。然後它可以使用該共享密鑰來加密/解密數據。
當您使用該服務設置新計算機時,您將擁有一個單獨的程序,用於從文本文件讀取共享密鑰,生成計算機密鑰,使用計算機標識在表中創建一行並加密共享鍵,然後使用其中未加密的共享密鑰刪除程序和文本文件。
這對於將您的程序複製到另一臺機器的人來說是相當安全的,但實際上僅僅依賴於默默無聞。如果有人想知道如何生成機器密鑰,並且可以訪問其中一臺機器,那麼他們可以使用來自受感染機器的信息自行生成機器密鑰。
密碼應該被鹽漬和散列並且存儲散列。 – 2009-09-24 12:04:05
哈希不適用於這種情況...因爲有人需要輸入有效的密碼才能驗證它是否符合哈希值,但情況並非如此。信息必須駐留在數據庫中,但它將被Windows服務應用程序檢索(這裏沒有用戶)。沒有人可以輸入密碼並對其進行驗證,因此我需要檢索原始密碼... – Anne 2009-09-24 12:14:08
爲什麼需要「使用」用戶密碼?這似乎是一種使用useraccounts的奇怪方式。 – Glenner003 2009-09-24 12:19:32