2010-06-30 64 views
0

我想使用TDE,但我不能使用它,所以我選擇使用EncryptByCert和DecryptByCert函數。不過,我也在考慮用c#加密/解密數據,如here所示。EncryptByCert和DecryptByCert是一種安全的加密方式嗎?

我的問題是EncryptByCert和DecryptByCert不安全,因爲證書也存儲在數據庫中?人們如何解決這個問題?

正在使用c#內置加密更好的主意嗎?

在此先感謝您的幫助。 :)

回答

2

有一個Encryption Hierarchy一個具有部署: SQL Server Encryption Hierarchy http://i.msdn.microsoft.com/dynimg/IC272034.gif

使用可以是服務主密鑰的根密鑰(實際上是根是服務的密碼,但是這是透明的服務開始),在這種情況下,應用程序只需連接數據庫並解密即可訪問數據。如果數據庫文件意外丟失,這可以保護數據,但不會保護數據免遭妥協訪問服務器:由於解密密鑰由服務器本身(服務主密鑰)保存,因此任何人有權訪問數據可以看到數據,因爲任何人都可以解密數據。數據受正常訪問權限和權限的保護,但加密不會對授權用戶提供任何保護。

另一個選擇是依靠根加密層次上的密碼,在這種情況下,應用程序必須要求用戶輸入密碼才能訪問數據。例如,如果是網站,用戶將不得不填寫數據解密密碼才能訪問特定頁面。這確實可以保護數據免受通過普通數據訪問權限訪問數據並且不知道密碼的用戶的密碼保護。

SQL Server 2008還提供了利用硬件TPM來存儲解密密鑰(即員工證)的可能性,但這只是企業版功能。

最終,詢問SQL Cryptographic API是安全還是不安全是不成問題的。 API本身當然是安全的。使用對稱密鑰對數據進行加密,然後使用證書對對稱密鑰進行加密,並將證書的私鑰與數據中的數據一起存儲是安全的,只要私鑰得到適當保護即可。加密部署的安全性或不安全性始終最終由密鑰管理驅動(缺乏一些錯誤的實現,但讓我們假設實現是完美的),而密鑰管理則是1%的應用設計和99%的人工過程。

最終,您需要嚴肅地對待threat modeling(對不起,但「威脅是數據是私人信息,不應該被看作純文本。」不是威脅建模)。遵循像STRIDE這樣的方法或其他類似的方法。這是一個非常艱難的域,看似簡單閱讀有關加密的API,並相信你知道如何保護數據:

The world is full of bad security systems designed by people who read Applied Cryptography

+0

好吧,我得到它的工作。 Remus,順便說一句,你是互聯網上最酷的人。 :) – Brandi 2010-07-01 17:10:27

相關問題