為什麼代理重新加密需要代理?
語境
這是通常的代理重新加密方案:
- Alice , 有密鑰對 $ (pk_a, sk_a) $ 加密消息 $ m $ , 生產 $ c = encrypt(pk_a, m) $
- 愛麗絲拯救 $ c $ 在不受信任的儲存提供商(Dropbox、IPFS 等)上
- Bob , 有密鑰對 $ (pk_b, sk_b) $ 要求Alice訪問 $ c $
- 愛麗絲生成 $ re_{a\rightarrow b} = rekey(sk_a, pk_b) $ ,她將其發送給代理
- 該代理重新加密 $ c $ 在 $ c’ = reencrypt(re_{a\rightarrow b}, c) $
- Bob現在可以下載 $ c’ $ 並獲取明文 $ m = decrypt(sk_b, c’) $
問題
為什麼我們需要代理?Bob 不能重新加密 $ c $ 進入 $ c’ $ 他自己?據我了解,代理的唯一作用是重新加密 $ c $ 僅此而已。
換句話說:Bob 和代理可以是同一個人/設備嗎?
更多詳細資訊
如果愛麗絲發送 $ re_{a\rightarrow b} $ 通過電子郵件發送給 Bob,或者讓其可公開訪問(即儲存在 IPFS 上),Bob 應該能夠重新加密 $ c $ 進入 $ c’ $ 只要他有合適的軟體在他的設備上執行此操作,他自己就可以。
我還感興趣的是了解由代理執行的重新加密步驟是否有任何優勢,而不是由收件人自己執行。我想不出 Bob 可能被迫依賴代理的情況。
如果 Bob 有 Alice 的重加密密鑰,那麼他可以重新加密 Alice 線上儲存的所有密文,然後解密這些消息。這不好,因為 Alice 可能只想向 Bob 透露一小部分消息,而不是全部。如果 Alice 知道 Bob 的重新加密密鑰,也會發生類似的事情。此外,代理也不是完全可信的,即知道 Alice 和 Bob 的重加密密鑰也不足以讓代理解密線上密文(因為它不知道 Alice 和 Bob 的私鑰)。另一方面,如果代理和鮑勃串通一氣,那麼他們就可以解密愛麗絲的所有密文。
不需要代理,主要是為了方便。您可能希望有一個公共位置來提供密鑰,這是儲存重新加密密鑰和執行重新加密的好地方。
此外,如果您的代理重加密算法不是抗串通的,那麼您可能不想將重加密密鑰提供給擁有自己的密鑰的 Bob。
最後,如果您有一個多跳代理重加密算法,您不希望將所有中間跳的重加密密鑰分發給每個最終接收者。也就是說,如果您有一個從 Alice 到 Bob 的重新加密密鑰,以及一個從 Bob 到 Carol 的重新加密密鑰,那麼您不想將 Alice 到 Bob 的密鑰提供給 Carol,以便她可以解密加密給 Alice 的東西。