Rsa
加密和解密團隊內多個使用者可訪問的數據
我目前正在研究允許發送和檢索數據的網路服務。
數據屬於一個團隊。團隊由使用者組成。
每個經過身份驗證的使用者都可以向/從他們的團隊發送和檢索數據。
我需要根據以下要求為此添加加密:
- 數據在伺服器上加密,伺服器不儲存(可能處理,但不儲存)任何密鑰
- 每個使用者都有不同的密鑰或密碼來解密數據
- 每個使用者在發送數據之前都會對其進行加密(數據當然必須是其他團隊使用者“可解密”的)
在搜尋了幾個小時後,我找到了這個解決方案,但是我想對這是否好用提出一些意見,以及是否可以改進它。
- 每個使用者在創建時都會收到一個 RSA 公鑰和一個私鑰,密鑰由伺服器生成,公鑰儲存在數據庫中,私鑰通過 SSL 安全連接立即發送回使用者並從伺服器記憶體。
- 當第一個使用者添加到新團隊時,伺服器會生成一個 64 位密鑰(用於 AES)。使用者公鑰用於加密 AES 密鑰。加密的 AES 密鑰儲存在數據庫中(使用者/團隊對)。
- 當使用者接收/發送一些數據時,他首先必須從伺服器獲取加密的 AES 密鑰。使用者使用他的私鑰來解密 AES 密鑰。對於“發送”操作,他使用 AES 密鑰來加密數據。對於“接收”操作,他使用 AES 密鑰來解密數據。
- 當需要將使用者添加到團隊時,現有團隊成員將使用新使用者公鑰加密 AES 密鑰,然後將新使用者資訊發送到伺服器(使用者資訊 + 新使用者/團隊對的加密 AES 密鑰)
我不喜歡的兩件事:
- 如果需要從團隊中刪除使用者,他仍然可以保存 AES 密鑰。這不是一個主要問題,因為他將不再經過身份驗證,因此將無法再訪問加密數據。
- AES 需要一個 IV,對於每個加密的數據應該是不同的,所以我需要為每個數據儲存一個 IV。
你有什麼更好的解決方案嗎?
謝謝
一個潛在的風險是您的 AES 密鑰長度。不建議使用 64 位或更短的密鑰長度,因為如今暴力破解相對容易。建議您至少使用 128 位。
至於刪除使用者時的問題,您可能想嘗試類似於 PGP 的方法。每次將文件送出到伺服器時,都會使用隨機生成的對稱密鑰對其進行加密,並使用所有其他合法使用者的公鑰加密該密鑰。這樣,被刪除的使用者將無法再訪問較新的文件。
但我不知道這是否足夠安全,它值兩美分。
如果我正確理解了您的方案,則不需要“RSA”(或任何公鑰方案)。唯一的例外是“必須添加新使用者”,它並不真正需要公鑰方案。首先,您假設只有經過身份驗證的使用者才能訪問,這通常會導致安全、經過身份驗證的連接(此處需要相互身份驗證)。
如果您將 RSA 替換為其他 AES 實例,它的工作方式如下:
- 使用者收到 AES“使用者密鑰”(未儲存在伺服器上)
- 第一個使用者獲得 AES“數據密鑰”(使用公鑰加密沒有意義:雙方都知道密鑰)
- 添加新使用者時,他會從伺服器獲取 AES 使用者密鑰。此時伺服器可以只從現有使用者請求數據密鑰並在不保存的情況下轉發它(在您的假設中可能沒問題),或者向新老使用者發送隨機會話密鑰(然後他們可以直接交談,使用這個密鑰),或者只是以任何其他方式連接使用者。
關於你不喜歡的事情:第一點是需要考慮的。但是您的結論並不完全正確:如果使用者仍在系統中,但只是從特定團隊中刪除,會發生什麼情況?考慮您的第二點:根據操作模式,有一個 IV,但與實際數據相比,它的長度(16-32 字節)應該非常小。
如果你真的想通過“知道一些密鑰”來解決訪問控制問題,你應該問自己這個問題。明顯的問題是,您無法可靠地撤銷訪問權限。也許你可以強制伺服器忘記/刪除東西,但它對使用者不起作用。也許您想在不完全禁止使用者的情況下撤銷某些訪問權限。