Encryption

區分教科書 RSA 和 RSA/OAEP 的密文

  • February 6, 2018

是否有可能從密文中辨識出,這是使用教科書 RSA 或帶有 OAEP 填充的 RSA 加密的。(僅通過查看密文)?

當教科書RSA被濫用和不安全時,我們可以區分教科書RSA的密文和RSA/OAEP;或者知道私鑰。

有了私鑰的知識,我們只需嘗試 RSA/OAEP 解密。如果成功,我們將賭注 RSA/OAEP(除了極少數可能的明文之外,這將成立);否則我們知道這是教科書 RSA(可以肯定,除非有其他選擇)。

有了私鑰的知識,我們仍然可以利用教科書 RSA 的弱點取得成功;例如:

  • 如果我們可以得到相同的未知明文加密兩次的密文,我們可以比較這些密文。如果它們匹配,我們就押注教科書 RSA(這將以壓倒性的機率成立,除非 RSA-OAEP 的隨機數生成器嚴重損壞)。如果它們不同,我們知道那是 RSA/OAEP。
  • 有了公鑰的知識(假設在這個和接下來的兩個項目符號中),如果我們知道/假設明文是班級卷上的一個名字,我們嘗試加密班級卷上的所有名字(這需要公鑰,但是通過眾所周知的假設),並將每個結果與實際密文進行比較。如果找到任何匹配項,我們幾乎可以肯定地知道這是教科書 RSA;否則,我們押注 RSA/OAEP(賠率取決於我們對明文是班級名單上的名稱的信心)。
  • 正如評論中所建議的:如果密文是公共指數的精確冪 $ e $ ,我們肯定知道那是教科書 RSA。否則,我們押注 RSA/OAEP(賠率取決於明文的可能性有多大) $ M $ 足夠小 $ M^e<N $ ).
  • 如果我們可以獲得單個選擇的明文的實際密文,則可以進行測試。

此外,如果我們知道或可以找到明文的大小限制,這也很重要:教科書 RSA 通常可以將消息加密到 $ \lfloor\log_2(N)\rfloor $ 位或 $ \lfloor\log_2(N)/8\rfloor $ 八位字節;而 RSA-OEAP 的限制要低得多, $ \lceil\log_2(N)/8\rceil-2-2h $ 八位字節,其中 $ h $ 是八位字節的雜湊大小( $ h=32 $ 對於 SHA-256)。

不必要。教科書 RSA 加密可以簡單的看成 $ m^e $ 被標識為RSAEP((n, e), m)。換句話說,它基本上包括使用公共指數對消息進行模冪運算。

RSAEP,RSA 加密原語,在PKCS#2.2中定義 - 定義 RSAES-OAEP 的標準(“RSAES”只是 RSA 加密方案)


RSAEP((n, e), EME-OAEP(n, M)))相反,RSA-OAEP 由EME-OAEP(n, M)執行填充的地方組成。這M是作為八位字節字元串的輸入消息,並且m填充的消息

現在就像m教科書 RSA 中的任何值一樣,結果m = RSAEP((n, e), M)是教科書 RSA 輸入的嚴格子集。這意味著根據定義,不可能在所有情況下區分教科書 RSA 和 OAEP。


您可以做的是使用此處列出的眾多技術之一來破解教科書 RSA 。如果你設法破解它,它就不可能是 RSA-OAEP,因為只要 RSA 承諾成立,它就被證明是安全的。請注意,證明中可能存在錯誤,但通常它應該適用於針對教科書 RSA 的攻擊向量。

如果您無法破解教科書 RSA,那麼您基本上就不走運了。


我為 OAEP 遺漏了許多細節:

  • M對於輸入值(OS2IP),我省略了從字節到整數的轉換;
  • 我省略了 Mask Generation Function 和 Hash 配置參數;
  • 我遺漏了可能的標籤作為 OAEP 填充的輸入(使用不多);
  • 我省略了將模冪運算結果編碼為c八位字節字元串C,使用I2OSP.

如果您是純粹主義者,您可以說您始終可以區分教科書 RSA 和 OAEP,因為第一個對數字進行操作,而另一個對字節/八位字節字元串進行操作。


受 fgrieu 答案啟發的下一部分


如果您看到多個相同的密文,那麼您通常會查看教科書 RSA。教科書 RSA 是確定性的:如果您輸入相同的消息,它總是返回相同的密文。EME-OAEP填充是不確定的,它需要隨機數生成器,並且它的輸出應該與隨機無法區分 - 無論如何都在 [0, n) 範圍內。通常,任何 IND_CPA 安全密碼(包括 PKCS#1 v1.5 填充和 RSA KEM)都應該是​​不確定的。

這種對隨機數生成器的呼叫也可以通過定時攻擊來辨識,這是一種側通道攻擊。


出於同樣的原因,不應該暴力破解 OAEP,因為對手不知道隨機值,因此他無法計算模冪運算的輸入。對於教科書 RSA,簡單的輸入消息可以通過使用公鑰執行模冪運算並比較結果來強制執行。


上述兩種方法當然假設 OAEP 使用已知良好的隨機數生成器。

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