Encryption
這是實現多方解密 E2EE 的安全方法嗎?
問題
我有一個中央伺服器來儲存內容。使用者可以創建內容並控制誰可以解密該內容。這需要使用 E2EE 確保安全。
另一個使用者如何知道是否要獲取此內容以嘗試解密它超出了此問題的範圍。
我最初的解決方案
要求:
- 內容必須使用與創建內容的使用者不同的密鑰對進行加密/解密。否則,使用者用他們的私鑰加密的內容可以用他們的公鑰解密。只有選定的使用者才能解密此內容。
- 可以解密內容的人的公鑰不應該公開。含義 - 所有使用者的公鑰都是已知的,但不是特別是那些可以解密的人。
- 必須對內容進行簽名,以便最終使用者對其進行驗證。
- 理想情況下,這個過程應該盡可能簡單和快速。
我不使用其他使用者的公鑰( , 等)加密內容的原因
PK(A)
是PK(B)
因為這個內容可能很大 - 我不希望在擴大可以解密的使用者時重複內容。我想出了以下我認為滿足所有要求的方法。但是,我的邏輯是否存在缺陷或執行了一些不必要的工作?
在這裡,我們
A
將數據發送到伺服器。它可以通過A
、B
、C
和解密D
。的密鑰X
是在本地創建的 userA
。PK
表示公鑰,PS
表示私鑰。要發送到伺服器的數據
A
:Data = encrypt(content, PS(X)) Keys = [ encrypt(PK(X), PK(A)), encrypt(PK(X), PK(B)), encrypt(PK(X), PK(C)), encrypt(PK(X), PK(D)) ] Signature = encrypt(hash(content + Keys), PS(A))
這只能通過
A
、B
、C
和來解密D
。他們會找到 PK(X) 來解密Data
以獲取內容。然後用的公鑰 ( )Signature
解密並比較雜湊值。A``PK(A)
這是實現 E2EE 的安全方式嗎?
這是我在這裡的第一篇文章,所以如果我做錯了什麼,請告訴我。
但是,我的邏輯是否存在缺陷或執行了一些不必要的工作?
實際上,您正在執行大多數常見的做法,除了:
- 你為什麼做 $ X $ 非對稱密鑰?對稱密鑰(例如 AES 密鑰)會簡單得多,並且不需要“只有公鑰的人不能執行私鑰操作”屬性(更不用說,對於大多數公鑰系統,你不能有意義地’用私鑰加密)。
- 您需要小心的一件事(因為您關心接收者的匿名性)是並非所有的公鑰加密方法都能提供給您。舉一個簡單的例子,如果你使用 RSA,並且 E 有一個 4k 的 RSA 密鑰,並且沒有一個密鑰密文是 4k 長,我們可以很確定 E不是預期的接收者。而且,是的,人們可以想出不那麼瑣碎的例子。
- 您的範例包括 ’encrypt(PK(X), PK(A))’; 是否有特定的原因 $ A $ 將自己包括在收件人列表中?
- 你有’Data = encrypt(content, PS(X))‘和’Signature = encrypt(hash(content + Keys), PS(A))’。嘆息,簽名不是“用私鑰加密”;除了 RSA,簽名方法不能以這種方式有用地描述(甚至對於 RSA,因為對填充方法的要求不同,即使這並不是那麼有用……)