2009-07-11 83 views
1

我正在構建一個服務器端應用程序,它要求在數據庫中加密存儲數據。當客戶端訪問數據時,它也必須被加密傳送。客戶端都有唯一的登錄名。多用戶訪問加密數據

我最初的想法是存儲用AES等對稱算法加密的數據。因此,當客戶想要訪問數據時,加密數據將傳輸到客戶端,而密鑰則使用客戶端的公鑰加密。

這是一種安全的方式來存儲和傳輸數據或有更好的解決方案來解決這個問題嗎?

更新:如果遵循Søren的建議,保留使用每個客戶端公鑰加密的AES密鑰的副本,那麼將不包括要存儲在某處的密鑰以添加額外的客戶端,或者可能以任何方式生成?

+1

如果您以後需要授予其他客戶端對數據的訪問權,那麼使用管理公鑰也可以存儲對稱密鑰。需要其中一個私鑰才能獲得原始AES密鑰並使用新公鑰重新加密。 – Thorarin 2009-07-11 18:13:52

回答

3

首先,你應該定義你想提供一些安全特性,例如啓動:

  1. 它是確定給不同的用戶訪問相同的密鑰?也就是說,如果File1使用密鑰K進行AES加密,如果用戶Alice和用戶Bob都給出了K,則會出現問題。

  2. 如何從系統中撤銷用戶? (事實上​​情況1中的Bob實際上是一名中國間諜,爲我們公司工作,我如何安全地將他踢出系統)。

  3. 是否需要搜索保存在數據庫中的加密數據? (這個問題很好研究,很難解決!)

  4. 多少(如果有)和什麼明文數據將被放置到數據庫中以幫助組織它?數據庫期望數據具有與它們相關聯的唯一鍵。您需要確保這些密鑰不泄漏信息,但足以用於稍後檢索數據。

  5. 祕密密鑰多久更換一次?如果您正在存儲文件並且允許多個用戶訪問加密文件,那麼當用戶X修改文件時會發生什麼?密鑰是否更改?新密鑰是否應該發送給所有用戶?

  6. 2個用戶同時修改相同的數據會發生什麼?數據庫能夠在不修改的情況下處理這個問題嗎?

還有很多其他的。

如果服務器不可信且永遠不會看到純文本數據,那麼下面是可能的解決方案的總體概述。

讓客戶完全管理加密。客戶端與服務器進行身份驗證,並允許將數據存儲到數據庫中。客戶負責確保數據的加密。 在這種情況下,密鑰應僅安全地保存在客戶端計算機上。如果它們必須放置在其他地方,則可以創建「主密鑰」。

0

這確實是常見的方法,例如,也被NTFS文件加密使用。

3

安全嗎?你需要更清楚地定義你的目標。

該解決方案將在傳輸過程中保護數據,但從描述中,服務器將具有對數據的完全訪問權限(因爲它需要存儲未加密的AES密鑰)。換句話說,有權訪問服務器的黑客或竊賊可以完全訪問數據。

如果安全傳輸是您想要的,請在數據庫連接周圍使用SSL/TLS包裝。這是來自所有主要供應商的標準解決方案。

爲了保護數據服務器端,服務器不應該有AES密鑰。如果客戶端數量有限,服務器可以爲每個客戶端存儲一份AES密鑰的副本,密鑰的每個副本已經使用每個客戶端的公鑰加密,以便服務器不會看到純文本數據,也不會任何未加密的AES密鑰。