如何使用 elGamal 進行重新加密?
例如,“心理撲克”協議要求 Bob 用他的密鑰加密每張牌,洗牌,然後將它們傳遞給 Alice。Alice 然後用她的密鑰加密每張卡,將它們洗牌,然後將它們交還給他們。Bob 取出他原來的鑰匙,然後……
查看同態密碼系統,elGamal 似乎執行良好,但任何加密的結果都會給出兩個數字:
[Math Processing Error] $ a = G^k \mod P\ b = y^k \ DATA \mod P $
這讓我問:如何使用 elGamal 進行重新加密?
**首先,**我找不到 RSA 心理撲克報告的副本,所以我不能確定他們想要使用哪種“交換加密”,但一種類型是 Pohlig-Hellman 密碼,您可以在其中加密一個組元素[Math Processing Error] $ x $ 使用鑰匙[Math Processing Error] $ k $ 通過計算[Math Processing Error] $ x^k $ . 解密[Math Processing Error] $ y $ 使用鑰匙[Math Processing Error] $ k $ , 你計算[Math Processing Error] $ y^{k^{-1}} $ , 其中逆是模組順序計算的。
在這種情況下,意思是像在 Shamir 的三遍協議中一樣使用它。愛麗絲使用加密[Math Processing Error] $ k_A $ . Bob 使用加密[Math Processing Error] $ k_B $ . 愛麗絲解密使用[Math Processing Error] $ k_A $ . 鮑勃使用解密[Math Processing Error] $ k_B $ .
其次, ElGamal 是一種公鑰密碼系統,因此加密密文並沒有立即意義。然而,事實證明,可以用 ElGamal 做類似的事情。
所以 Alice 有一個公鑰 $ y = g^a $ Bob 有一個公鑰 $ z = g^b $ .
- 愛麗絲加密了一條消息[Math Processing Error] $ m $ 作為 $ (x,w) $ 和 $ x = g^k $ 和 $ w = y^k m $ .
- Bob 重新加密 $ (x,w) $ 作為 $ (x’, w’) $ 和 $ x’ = x g^u $ , $ w’ = w y^u (x’)^b $ .
- 愛麗絲“重新解密” $ (x’,w’) $ 作為 $ (x’’,w’’) $ 和 $ x’’ = x’ g^v $ , $ w’’ = w’ z^v (x’)^{-a} $ .
- 鮑勃解密 $ (x’’,w’’) $ 作為 $ w’’ (x’’)^{-b} $ .
注意
- $ x’ = g^{k+u} $ 和 $ w’ = y^{k+u} ; m ; z^{k+u}; $ 和
- $ x’’ = g^{k+u+v} $ 和 $ w’’ = y^{k+u} ; m ; z^{k+u+v} y^{-k-u} = m z^{k+u+v} $
所以 $ w’’ (x’’)^{-b} = m $ . 這裡, $ (x,w) $ 是一種加密[Math Processing Error] $ m $ 在下面[Math Processing Error] $ y $ , $ (x’,w’) $ 是一種加密[Math Processing Error] $ m $ 在下面 $ yz $ 和 $ (x’’,w’’) $ 是一種加密[Math Processing Error] $ m $ 在下面[Math Processing Error] $ z $ .
我懷疑這些加密可能足夠獨立以在這種情況下有用,但有一些證明可以完成。
在這種情況下,Alice 可以使用密文 $ (c_1,c_2)=(g^r,h_B^r m) $ 在 Bob 的公鑰下加密 m $ h_B=g^{s_B} $ 連同她的秘鑰 $ s_A $ 在密鑰下為 m 創建密文 $ s_A+s_B $ : $ (d_1,d_2)=(c_1,c_2 * c_1^{s_A}) $ . 然後 Bob 可以使用這個密文和他的密鑰 $ s_B $ 在 Alice 的密鑰下為 m 創建密文:[Math Processing Error] $ (d_1,d_2 / d_1^{s_B}) $ . 愛麗絲稍後可能會解密。
如果您擔心它們都具有相同的第一個組件,也可以在每一步重新隨機化密文。