Encryption

多重(RSA)公鑰加密如何驗證其他人收到相同的資訊?非確定性加密

  • January 3, 2020

我在多方之間有一個 RSA 系統。Alice 獲取目標(Bob 和 Oliver)的公鑰並使用它們加密消息並將其發送給他們。各方都知道對方的公鑰和收到的密文。

我想驗證所有目標都收到相同的消息,所以我認為 Bob 可以使用 Oliver 的公鑰並加密收到的消息(在用他自己的私鑰解密後)並進行比較,但我使用的是非確定性加密,因此,對於相同的消息和公鑰,產生的密碼是不同的。

我知道使用容易受到攻擊的確定性加密,所以我想知道是否還有其他解決方案,或者我是否必須冒險使用確定性。作為參考,我使用 JavaScript 和 AES 進行加密。

如何驗證 Oliver 和 Bob 是否收到相同的消息,而無需相互發送?

只要您不拘泥於 RSA,這是一種完全解決問題的方法(並且可以擴展到兩個以上的目標)。

總體構想是我們在配對友好曲線(即具有可計算函式的橢圓曲線)中進行 EC-ElGamal $ e(X, Y) $ 滿足身份 $ e(aG, bG) = e(G, G)^{ab} $ , 對於任何整數 $ a, b $ (和 $ G $ 是生成點),並且對於 $ e(G, G) \ne 1 $ . 右邊的冪通常是有限域的乘法組(這取決於您使用的曲線),此時這並不重要。

在任何情況下,Bob 和 Oliver 都會選擇私鑰 $ b $ 和 $ c $ (對於 Oliver,我將使用 c 而不是 o,因為 o 很容易與 0 混淆),並且它們的公鑰是 $ B = bG $ 和 $ C = cG $ .

加密,Alice 接收消息 $ m $ , 並以一種可逆且不確定的方式將其映射到一個點 $ M $ (它必須是不確定的,否則第三方猜測 $ m $ 可以驗證他的猜測使用 $ e $ 功能)。然後,她選擇一個隨機值 $ r $ ,並生成兩個密文:

$$ rG, rB + M $$

$$ rG, rC + M $$

(注意:每個密文可以使用相同的 $ rG $ 重視,或使用不同的;兩個品種都有效)。

Bob 和 Oliver 首先檢查密文中的所有點是否實際上都是曲線中的點(如果不是,我不確定會出現什麼問題,但檢查起來很容易)。

然後,Bob 可以解密他收到的密文 $ X, Y $ 通過計算 $ M = Y - bX $ 然後映射 $ M $ 回到原來的 $ m $ .

然後 Bob 可以通過重構來驗證 Oliver 是否收到了相同的消息 $ rC $ (使用值 $ M $ 他在解密期間得到),然後驗證 $ e( G, rC ) = e( rG, C ) $ (在哪裡 $ rG $ 是奧利弗密文中的值);如果他們收到相同的消息,那麼兩個值都是 $ e( G, G )^{rc} $

這取決於你要保護什麼。如果場景是每一方都不信任另一方,那麼就沒有解決方案

Alice 可以與 Bob 達成一致反對 Oliver。

場景一:Alice 可以向 Oliver 發送消息 X1,向 Bob 發送消息 X2,消息 X2 的意思是“假裝你收到了消息 X1”。如果 Oliver 想要驗證 Bob 收到了什麼(例如通過散列或類似的簽名算法),Bob 將只生成 X1 所需的所有內容。

場景 2:Alice 可以生成一個隨機密碼,用對稱算法加密消息並將其發送給 Bob 和 Oliver,或者只是將這條加密消息公開,這樣每一方都可以看到只有一條消息。她將此密碼發送給 Bob 和 Oliver,並分別使用他們的 RAS 公鑰對其進行加密。但是同樣不能保證奧利弗愛麗絲沒有向鮑勃發送一些其他消息。

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