2011-08-03 241 views
1

這更多的是有關使用AES_ENCRYPT對插入MySQL數據庫的數據進行加密的安全問題。存儲AES_ENCRYPT密鑰

什麼是存儲用於加密數據的密鑰的最佳位置?顯然不在數據庫中! :)

回答

1

那麼,你沒有太多的選擇。無論您將該密鑰(數據庫,代碼,文件)放在哪裏,只要其他人可以訪問該機器,就可以輕鬆找到該密鑰。

你可以做的是,你使用另一個密鑰加密該密鑰,該密鑰基於某個密碼(該密碼不存儲在任何地方,至少不是本地),並在應用程序啓動時要求密碼。這樣,您可以將加密的AES_ENCRYPT密鑰存儲到您的數據庫中,使用您的密碼登錄並解密,然後開始使用它。

1

Security by obscurity

如果您的網絡服務器遭到入侵,那麼攻擊者無論存儲在哪裏都可以訪問密鑰 - 因爲代碼必須能夠找到執行加密/解密的密鑰 - 並且代碼解釋了它在哪裏找到密鑰。這增加了真正價值的唯一場景是保護應用程序之外的數據(例如在備份磁帶上)。但是,由於您損害DBM優化查詢和創建更大數據佔用空間的能力,出於備份等目的,加密備份或文件系統更有意義 - 而不是單個數據項。

即使您使用的密鑰不是永久存儲在您的應用程序中(例如,通過SSL提供的HTTP基本身份驗證密碼),仍然存在很多數據會受到危害的風險 - 並且您遇到共享問題不同用戶之間的數據。

爲了提供一個合理的答案,我們需要知道威脅模型是什麼,以及你是否有外部制約因素,如PCI-DSS

+0

正確的。我傾向於維護一個兩級密鑰,其中一半存儲爲數據庫中的隨機值,另一半存儲在PHP腳本中。如果有人可以同時訪問PHP腳本和數據庫,那麼沒有其他任何事情可以做到。 – Ben

+0

在數據庫中存儲一半數據是沒有意義的,就像有人可以訪問PHP一樣,他也可以訪問數據庫。 – mgutt