2009-09-24 141 views
2

我需要創建一個.NET應用程序,它將一些機密信息存儲到數據庫(例如密碼和東西)。在我將它們存儲到數據庫之前,我可以使用對稱加密對它們進行加密,但是如果有人反編譯源代碼,對稱密碼可能會受到影響。加密/解密數據到數據庫

既然這將是服務應用程序,我不能要求用戶提供對稱密碼。我也不能使用與機器相關的密碼,因爲這些數據將從不同的計算機中讀取。

這樣做的最好方法是什麼?

更新:哈希不適用於這種情況...因爲有人需要輸入有效的密碼來驗證它與哈希,而事實並非如此。信息必須駐留在數據庫中,但它將被Windows服務應用程序檢索(這裏沒有用戶)。沒有人可以輸入密碼並用哈希驗證它,所以我需要檢索原始密碼...

+0

密碼應該被鹽漬和散列並且存儲散列。 – 2009-09-24 12:04:05

+0

哈希不適用於這種情況...因爲有人需要輸入有效的密碼才能驗證它是否符合哈希值,但情況並非如此。信息必須駐留在數據庫中,但它將被Windows服務應用程序檢索(這裏沒有用戶)。沒有人可以輸入密碼並對其進行驗證,因此我需要檢索原始密碼... – Anne 2009-09-24 12:14:08

+0

爲什麼需要「使用」用戶密碼?這似乎是一種使用useraccounts的奇怪方式。 – Glenner003 2009-09-24 12:19:32

回答

0

所以你有一個應用程序需要加密/解密數據,但不需要用戶輸入密碼來使用它?首先,這聽起來像是一個安全漏洞 - 黑客無需獲得密鑰或密碼 - 他們只需要獲取應用程序。

爲了安全地做到這一點,在不將密鑰存儲在應用程序代碼中的情況下,您必須擁有某種來自用戶的密碼,您可以使用該密碼來加密/解密使用的「真實密鑰」加密和解密實際數據。

如果您使用的是服務來訪問數據,並且沒有輸入密碼,您可以根據機器信息生成一個唯一字符串,並將其用作密碼類型來加密密鑰。

要在多臺機器上執行此操作,每臺機器都會根據機器信息生成自己的「密碼」。這個密碼將被用來生成一個密鑰(對於該機器來說是唯一的),然後該密鑰將被用於加密共享密鑰(用於加密實際數據)。這些信息將存儲在數據庫中的一個帶有兩列的簡單表格中:MachineID和EncryptedSharedKey。

在啓動時,服務將檢查機器信息,生成其密碼,使用該密鑰生成其密鑰,並使用該密鑰從數據庫表中解密共享密鑰。然後它可以使用該共享密鑰來加密/解密數據。

當您使用該服務設置新計算機時,您將擁有一個單獨的程序,用於從文本文件讀取共享密鑰,生成計算機密鑰,使用計算機標識在表中創建一行並加密共享鍵,然後使用其中未加密的共享密鑰刪除程序和文本文件。

這對於將您的程序複製到另一臺機器的人來說是相當安全的,但實際上僅僅依賴於默默無聞。如果有人想知道如何生成機器密鑰,並且可以訪問其中一臺機器,那麼他們可以使用來自受感染機器的信息自行生成機器密鑰。

1

將密碼存儲爲單向哈希值。當用戶輸入密碼進行驗證時,以與密碼相同的方式對其嘗試進行散列,並驗證散列結果是否匹配。

下面是PHP中的例子,但概念是一樣的,不管語言: How to store passwords in databases

編輯

你可能想看看在數據庫級加密。我假設你使用的SQLServer: http://msdn.microsoft.com/en-us/library/cc278098.aspx

甲骨文也有類似的encyption技術,其中使用表中的應用程序不知道的加密。如果您將此服務與您的服務與數據庫的加密連接進行配對,那麼您應該完成它看起來像你之後的事情。

+0

那麼......這裏沒有用戶,也沒有人輸入密碼......服務應用程序需要不時檢索信息... – Anne 2009-09-24 12:11:13

0

散列密碼時,反編譯的源代碼不會給黑客任何破壞密碼的機會。

+0

哈希不適用於我的情況...導致某人需要輸入有效的密碼用哈希來驗證它,但事實並非如此。 – Anne 2009-09-24 12:12:05

2

您可以使用Database Level encryption(假設您使用.net表示Sql Server),並使用Encrypted Connections指向Sql Server。這樣可以在存儲和傳輸到應用程序服務器時保護數據。

這需要在沒有任何特殊密碼的情況下處理安全問題 - 它基於能夠向數據庫服務器進行身份驗證。和你不必加密一樣。

+0

服務應用程序仍然需要存儲數據庫用戶名和密碼。如果她擔心人們反編譯應用程序的源代碼,她可能會擔心人們通過存儲的服務連接字符串獲取應用程序配置文件。 – 2009-09-24 12:36:37

+0

在某些情況下,必須將某些憑證存儲在某處 - 最好不要在遵從的代碼中,而應在受限制的配置文件中。並且可以使用網絡安全來限制與某些計算機的數據庫連接。然而,黑客總是會有一種方法進入。提醒安全的角落石頭的主要原因是我們無法保證任何東西的安全 - 只會使得獲得的價值更高。 – Chad 2009-09-24 12:52:35