Asp.net

數據庫加密還是應用程序級加密?

  • April 2, 2012

當您需要儲存 CC 或 SSN 等敏感數據時,您是否:

  1. 在應用程序中建構自己的加密常式,在配置文件的某處定義密鑰,然後手動加密/解密進入數據庫的數據。

2)將所有問題推送到數據庫,使用內置的數據庫功能(我認為大多數供應商稱之為透明數據庫加密)。

您為您的解決方案找到了哪些權衡取捨?與 TDE 相比,編寫自己的常式是否表現不佳?是程式碼可維護性,還是相反的數據庫供應商鎖定問題?

我使用了多種加密技術,我相信在應用程序端使用經過驗證的加密常式(即 .NET 庫)進行加密更容易也更安全。

如果您在數據庫上加密,這意味著數據以未加密的形式傳入和傳出數據庫。這可能允許在應用程序和數據庫上的加密常式之間進行窺探/篡改。即使您將密鑰儲存在應用程序端,仍然需要在數據庫端執行加密。如果數據庫遭到破壞,您的數據將面臨嚴重風險(想像一下有人在您的應用程序執行時執行分析器)。

如果您在應用程序中加密/解密,敏感數據(包括密鑰)永遠不會在應用程序伺服器之外洩露。有人必須同時破壞 Web 伺服器和數據庫伺服器才能訪問您的所有數據。

另外,我強烈建議您不要推出自己的加密程序。您可能會犯錯誤,從而降低解決方案的整體安全性。

編輯:

還想添加另一個會影響您的決定的因素。您是否需要查詢該加密數據?如果您在應用程序級別加密,則需要將數據帶到應用程序、解密並從那里工作。隨著數據集變得越來越大,這變得令人望而卻步——而使用數據庫加密,您可以在將數據發送回應用程序之前對其進行過濾。

引用自:https://stackoverflow.com/questions/4002184