這種“對稱 RSA”方案能否提供抗密鑰洩露的通信?
這個問題,以及 fkraiem 的回答,讓我想知道使用“對稱 RSA”提供部分防妥協的安全通道的安全性和實用性。
具體來說,假設 Alice 和 Bob 希望通過不受信任的網路安全地通信,這樣其他人就無法讀取或偽造他們的通信。顯然,假設 Alice 和 Bob 可以預先建立一個共享秘密,他們可以簡單地使用任何標準的 IND-CCA2 安全對稱認證加密方案來實現這一點。
然而,讓我們假設 Alice 和 Bob 也希望將任何一方的密鑰材料被洩露的影響降到最低;具體來說,即使攻擊者知道 Alice 的密鑰,她也不應該能夠讀取 Alice 發送給 Bob 的消息或偽造 Bob 給 Alice 的消息,反之亦然。
正如我在對連結問題的回答中指出的那樣,這可以通過結合公鑰加密和數字簽名來實現:基本上,Alice 和 Bob 各自生成一個加密密鑰對和一個簽名密鑰對(即總共四個密鑰對,用於雙向通信),交換相應的公鑰,並對他們的消息進行加密和簽名。但是,fkraiem 給出了一個僅涉及單個 RSA 密鑰對的替代建議,我將其解釋如下:
- Alice 和 Bob 一起生成一個 RSA 模數 $ n $ ,即兩個大素數的乘積 $ p $ 和 $ q $ .
- 他們選擇一個隨機指數 $ e_A $ 互質於 $ \lambda(n) = \operatorname{lcm}(p-1,q-1) $ , 然後讓 $ e_B \equiv e_A^{-1} \pmod{\lambda(n)} $ .
- Alice 儲存模數 $ n $ 和指數 $ e_A $ , 而 Bob 儲存 $ n $ 和 $ e_B $ . 兩者都擦除所有其他中間值,包括 $ p $ , $ q $ 和另一個指數。
- 發送(填充)消息 $ m $ 對於 Bob,Alice 將其加密為 $ c \equiv m^{e_A} \pmod n $ , 並傳輸 $ c $ 給鮑勃。為了解密消息,Bob 計算 $ c^{e_B} \equiv m^{e_A e_B} \equiv m \pmod n $ . 同樣,Bob 可以用同樣的方式向 Alice 發送消息,只是交換 $ e_A $ 和 $ e_B $ .
顯然,這種方案對於任意未填充的消息是不安全的,原因與教科書 RSA 不安全的原因相同。 也就是說,可以將其與合適的隨機填充方案結合使用以確保安全,儘管我不確定是否有任何標準的 RSA 填充方案可以在這里工作;我所知道的所有 RSA 填充方案都適用於加密或簽名,而該方案似乎有效地同時需要兩者。
因此,我的問題是:
- 這個方案是否可以工作,或者是否有一些通用攻擊會破壞它而不管填充?
- 如果可以使用合適的填充方案使該方案安全,那麼這種填充方案會是什麼樣子?
(我希望至少可以讓這個系統在密鑰封裝模式下工作,但是如果一方的密鑰被洩露,這似乎很容易受到雙向偽造:如果 Eve 知道 Alice 的密鑰,她不僅可以偽造來自Alice 發送給 Bob,但也可以攔截 Bob 發送的任何消息,對其進行解密以學習封裝的臨時密鑰,然後使用此密鑰將她喜歡的任何消息發送給 Alice。這樣至少看起來是一個非起動機。)
是的,這似乎是有道理的,這是一個合理的解決方案。KEM 方法不起作用,除非您使用一些技巧,例如在 KEM 中包含消息的散列。(當然,這可以工作。)
安全目標
我們正在研究的方案類型由三種算法組成 $ (K,E,D) $ . 密鑰生成算法 $ K $ 輸出兩個鍵,比如說 $ k_0 $ 和 $ k_1 $ . 加密算法 $ E $ 將密鑰和消息作為輸入並輸出密文。解密算法 $ D $ 將密鑰和密文作為輸入並輸出消息或 $ \bot $ .
我們要求任何 $ (k_0, k_1) $ 輸出 $ K $ 和任何消息 $ m $ ,
$$ D(k_{1-\beta}, E(k_\beta, m)) = m \text. $$ 這裡有兩個目標,機密性和完整性。您希望使用加密的消息 $ k_\beta $ 對所有不知情的人保密 $ k_{1-\beta} $ . 而沒有的人 $ k_\beta $ (但可能有 $ k_{1-\beta}) $ 應該無法創建看起來好像是用 $ k_{\beta} $ .
保密
在保密遊戲中,模擬器生成密鑰對 $ (k_0, k_1) $ 並給出 $ k_1 $ 給對手。對手選擇兩條消息 $ m_0 $ 和 $ m_1 $ . 模擬器擲硬幣 $ b $ 並創建一個密文 $ c^* $ 作為 $ E(k_1, m_b) $ . 模擬器發送 $ c^* $ 給對手,對手最終發送 $ b’ $ 到模擬器。在整個過程中,攻擊者被允許向模擬器發送消息或密文,模擬器返回結果為 $ E(k_0, m) $ 或者 $ D(k_0, c) $ , 分別。
如果對手獲勝 $ b=b’ $ . 他的獲勝次數不應多於(或少於)一半。
正直
在完整性博弈中,模擬器生成密鑰對 $ (k_0, k_1) $ 並給出 $ k_1 $ 給對手。攻擊者被允許向模擬器發送密文和消息,模擬器返回結果為 $ E(k_0, m) $ 或者 $ D(k_0, c) $ , 分別。最後,攻擊者發送密文 $ c^* $ 到模擬器,模擬器使用 $ k_1 $ .
對手獲勝,如果 $ c^* $ 正確解密並且它不是由模擬器創建的。對手的成功率應該可以忽略不計。
分析建議
我會嘗試像 OAEP+ 這樣的東西,但為了簡單起見,我會“個性化”散列函式,以便我們可以為兩個發送者使用不同的隨機預言。保密遊戲看起來很像通常的 RSA-OAEP+ 遊戲,但您需要為接收者創建密文。當您使用單獨的隨機預言機時,這會變得容易得多。
我懷疑它會成功的。甚至可以將安全性“降低”到普通 RSA-OAEP+ 的安全性。