Encryption
允許使用多個密鑰的加密方法?
我目前正在開發一個 web 應用程序,我希望在其中幾乎所有使用者數據都被加密,但可由多個使用者訪問(即加密的文件應該可以由各方 A、B、C 獨立解密)。有什麼辦法可以做到這一點?
我意識到的一個問題是,根據我的知識,附加使用者訪問文件幾乎是不可能的(即允許 D 方現在訪問該先前的文件),因為我需要重新加密明文,但是作為我無法訪問它,我不能,對嗎?
這很容易做到。這稱為密鑰包裝。您生成一個隨機的“主”對稱密鑰(稱為 DEK,或數據加密密鑰)並使用它來加密數據。然後,您從使用者的密碼或其他密鑰材料中派生一個稱為 KEK(密鑰加密密鑰)的密鑰。KEK 用於加密 DEK。加密的 DEK 或 eDEK 與加密的數據一起儲存。
要添加新使用者,請使用有效的 KEK 解密 DEK,然後讓新使用者提供新的 KEK,用於再次加密 DEK。然後可以將新的 eDEK 附加到數據中。
假設您已為三個使用者加密,您儲存的數據最終將如下所示:
eDEK_1 || eDEK_2 || eDEK_3 || encrypted_data
有關如何完成此操作的範例,請參閱RFC 3394 。