Rsa

如何生成用於 RSA 多態乘法的多個加密密鑰

  • June 29, 2020

我是一個長期滾動者,第一次在加密堆棧中發布海報。我最近發現自己離開了主流/標準加密領域(imo,由對稱/非對稱加密、一些密碼和單向雜湊函式等組成)。我目前面臨一個關於通過多方計算使用 RSA 算法的問題。我正在使用 RSA 使用多個密鑰進行乘法同態加密。在將所有值相乘後,我能夠證明生成加密密鑰以及最終密文。但是我無法生成正確的解密密鑰。

使用 RSA MPC 進行加密的過程

$$ \begin{align} C_1 &= a^{e_1} \pmod n \ C_2 &= a^{e_2} \pmod n \ C_{final}&= C_1 \cdot C_2 = a^{e} \pmod n,\ \text{where} \ e=e_1 + e_2 \end{align} $$

問題是我只能用一個加密密鑰真正做到這一點(所以如果你考慮 $ e_1=e_2 $ ),而我想使用多個加密密鑰( $ e = e_1 + e_2 $ 或等效的東西),加密一個值對該加密值進行一些操作,然後能夠解密它並接收一些有意義的輸出。

有人可以幫我解決在哪裡可以找到有關在 RSA 中使用多個加密密鑰並直接使用加密值的詳細資訊的問題嗎?

我的研究基於:https ://www.researchgate.net/publication/335743662_Enhanced_Homomorphic_Encryption_technique_using_RSA_ALGORITHM_with_multiple_keys

除了迪米特里給自己的答案之外,我想補充一些東西,即使我不確定我是否理解他想要解決的原始問題。

您使用相同的消息 a 並使用不同的 e 值對其進行加密,但使用相同的模數 N。並且您添加了不同的指數 e。

據我所知,RSA 的同態乘法特性是以某種方式定義的,即使用相同的 e 和 N,您要麼想通過操縱 c 來獲得 m 的倍數,要麼想將兩個 c 值相乘。

RSA中數字的簡單加密和解密很簡單:要加密數字m,計算c = m^e mod N。要解密密文c,只需計算m’ = c^d mod N = m^( e*d) 模 N = m。

要查看 RSA 是部分同態的,請考慮兩個數字 m1 和 m2 以及它們各自的密文 c1 和 c2。要計算同態的乘積 m1 * m2,需要計算密文的乘積 c1 * c2。然後解密為 m1 * m2: (c1 * c2)^d mod N = (c1^d) * (c2^d) mod N = (m1^(e * d)) * (m2^(e * d) ) 模 N = m1 * m2。

RSA 方案只是部分同態的,因為它只能執行乘法運算。

以類似的方式,您可以建構一個將 c 修改為 c’ 的攻擊,使得接收者得到 m’ = k*m。

但是,我可能不理解這個問題,而您正在談論另一種多方通信。如果是這樣,您能否更詳細地解釋該場景。

請注意,在 RSA 中,知道給定模數的任何“加密密鑰”N的“解密密鑰”的人可以計算相同模數的任何“加密密鑰”的“解密密鑰”。換句話說,在擁有時要小心 $ e₁ $ 和 $ e₂ $ 使用相同的模數,如果有人知道 $ d₁ $ 如 $ 1 = e₁ \times d₁ (\bmod \phi(N)) $ ,他可以學到一些“ $ d_i $ “對於任何其他” $ e_i $ “, 包含 $ e₂ $ . 您可能想要定義如何建構密鑰共享以避免在讀者心中引起注意。

在多方計算方案中通常有一些設置,有明確定義的參與者,例如受信任的經銷商、誠實但好奇的參與者,以及一個明確的目標,例如“我希望n不同的人執行協議以使用私鑰計算某些東西沒有人知道私鑰”。您可能希望定義設置和上下文以更好地突出密碼系統的目標,例如這個 answer

請注意,您連結的論文也有點臭,但是當您需要同態時,我會說 Elgamal 通常是首選,因為例如,當不使用填充(例如 OAEP)時,RSA 在語義上對某些攻擊並不安全。

我不是這些主題的內行,但您可能想閱讀關於圍繞 Elgamal 進行 MPC 的“基於分佈式 El Gamal 加密的高效加密協議設計”和關於為什麼填充是一個東西的“二十年對 RSA 密碼系統的攻擊” RSA。

引用自:https://crypto.stackexchange.com/questions/81570