回答

0

編輯:這是不正確(請參閱Daniel的評論)。

您可以修改任何算法以允許通過生成會話密鑰來允許兩個密鑰,使用該密鑰加密有效負載,然後使用兩個密鑰對會話密鑰進行加密。

例如,如果Ak是管理的關鍵,Uk是用戶的關鍵,Sk是隨機會話密鑰,並e(k, p)是對稱加密功能,那麼你可以使用:

ciphertext = e(Ak, Sk) . e(Uk, Sk) . e(Sk, p) 
+0

您的提議沒有用戶只能解密的期望屬性。由於用戶可以解密Sk,他們可以使用Sk來加密不同的有效載荷p,並從中構造一個新的密文。 – 2013-01-21 17:01:51

+0

D'oh!你說得很對。謝謝。我將在這裏留下我的答案,作爲警告如何不這樣做。 – 2013-01-21 18:11:29

2

你可以做這與RSA通過使用私鑰進行加密(就好像你將簽名一樣)。元組(d,n)將是管理密鑰(通常稱爲私鑰),(e,n)將是用戶密鑰(通常稱爲公鑰)。管理密鑰用於加密,用於解密的用戶密鑰。只有管​​理員擁有管理員密鑰,而用戶和管理員都知道用戶密鑰。現在只有管理員可以加密,而用戶只能解密。

注意,我特意選擇了加密管理的關鍵,而不是反之亦然指數d,因爲e通常選擇爲獲得更好的性能非常小,如果你這樣做與管理的關鍵,而不是用戶密鑰,那麼系統將被破壞。

請注意,如果爲此構建混合系統,則僅需要解密屬性就會中斷,因爲用戶也可以獲得對稱會話密鑰並修改消息。

我懷疑你可能希望只用解密的屬性來真正實現潛在的大量加密數據的認證(即,使用戶知道數據必須來自管理員並且沒有被篡改)。如果是這樣,你真正需要的是一個更復雜的方案,它具有適當的數字簽名(提供認證)和某種形式的機密性加密。使用對稱密碼進行批量加密以及例如RSA用於加密對稱密鑰。

但是,在設計像這樣的密碼系統時,您應該非常小心,因爲存在可能出錯並且完全危及系統安全性的事情lot。尋求專家意見。