2011-06-28 135 views
5

某些高度敏感的信息(付款信息,用戶名,密碼等)在被保存到我的數據庫之前應該加密。數據庫安全性不夠安全

後來,該信息必須被解密,以便從提取的持久性和在稍後的時間使用。

如果我使用,比方說,AES256加密的帳單地址,我仍然需要存儲在持久性AES256密鑰/密碼爲好。

如果加密進入數據庫的信息是爲了保護這些信息,以防有人竊聽我的數據庫,並且我存儲密鑰以解密數據庫中的相同信息,那麼什麼是首先加密數據的點?

如果有人黑客到我的數據庫,他們將能夠找到持久密鑰和解密他們想反正任何加密的數據。

我失去了一些東西在這裏?

+1

作爲消費者說話。感謝您對此進行教育。我見過供應商銷售的產品是安全的和加密的,並發現他們正在做你正在努力不做的事情。 –

回答

0

更好的選擇是使用證書,這可以在大多數RDBMS中輕鬆完成。

+0

嗨@Chris Bint - 你能詳細點嗎? – Cheryl

0

有關密碼的最佳選擇是對它們進行哈希處理。這是一種單向散列,並且不被解密。基本上,當用戶登錄時,你需要對他們的輸入密碼進行哈希處理,然後將哈希值與存儲在數據庫中的哈希值進行比較 - 併成功登錄。

關於支付信息,您將需要一個隨機生成的私鑰。取決於系統和實施,這可以以多種不同的方式存儲。 您可以將其存儲在一個配置文件中,例如使用RSA容器進行加密,使其不可讀。 還有其他解決方案。

您也可以加密的數據庫連接字符串,並與RSA容器方法類似上面,以防止任何人真正看到你的數據庫應用程序將用於訪問數據庫的用戶名密碼。

+0

Thanks @Franky - 這個新手有什麼好的RSA參考資料/文章? – Cheryl

+0

當然 - 在MS環境中,您可以這樣做 - http://msdn.microsoft.com/en-us/library/ff650304.aspx。希望這可以幫助。 – TheITGuy

+0

要求PHP參考會太貪婪嗎? – Cheryl

2

有句古話:「加密容易,密鑰管理困難」。這在這裏非常適用。

如果您需要將數據存儲在一個加密的格式(你經常這樣做不是因爲你只需要散列數據未加密的話),你不想加密密鑰存儲在數據庫中。當您的應用程序需要解密數據時,您希望可以訪問該密鑰,但不希望像訪問所有加密數據的DBA這樣的人能夠獲得密鑰。您希望確保密鑰已經備份,以便您可以恢復數據,但不希望這些備份與數據庫備份混在一起。因此,密鑰管理成爲一個非常棘手的問題需要解決。

在絕大多數情況下,你想購買一些第三方密鑰管理解決方案,它可以處理這些矛盾。就像你不想自己實現加密算法一樣,你不想自己做密鑰管理。試圖自行解決關鍵管理的人通常不會成功。