Rsa

使用 RSA 分別加密每個數字是否安全?

  • December 12, 2021

假設 RSA 被認為是一種“安全”的加密方法。RSA 旨在編碼一系列整數基數 $ 27 $ . 如果我們使用 $ n=pq $ 這很難考慮,如果我們單獨編碼每個整數(字母)而不是整個片語一次,它仍然安全嗎?

編輯:我沒想到會得到這麼好的答案。感謝大家!

教科書/普通 RSA 不應用於直接加密消息。這是因為密文是基於消息的確定性的。給定一個竊聽的密文 $ c_i $ . 針對您的計劃的有效攻擊是:

  1. 獲取密文 $ c_0, …, c_{26} $ 通過使用公共模數加密整數 0-26 $ n $ 和指數 $ e $ .
  2. 為了 $ j $ 在$$ 0,26 $$, 檢查是否 $ c_i=c_j $ . 如果我們找到這樣一個 $ j $ ,那麼您的原始消息是 $ j $ .

通過適當的填充(例如OAEP),使用 RSA 加密單個字節或字元甚至位確實是安全的*。當然,這也非常浪費,因為您將每 8 位明文轉換為 2048 位或更多位的密文,並在此過程中花費大量 CPU 時間,但效率低下(通常)不是安全問題。

然而,如果沒有填充,使用 RSA 加密單個字元短消息是不安全的,因為這種“教科書 RSA”加密容易受到多種攻擊,允許在沒有私鑰的情況下解密消息。其中一些攻擊包括:

  • 猜測攻擊:生成幾百(或幾萬億)個或多或少似是而非的明文列表,並用公鑰加密每個明文。檢查結果是否與您要解密的消息匹配。如果是這樣,您剛剛找到了正確的明文。

這種攻擊將徹底破壞任何使用教科書 RSA 加密單個字元或字節的方案,因為使用公鑰很容易加密每個字元或字節,從而獲得所有可能密文的完整字典。但它也適用於任何時候明文空間足夠小(或者攻擊者可以猜測明文可能屬於某個足夠小的集合),它可以在電腦(或電腦集群)上列舉。

  • 這 $ e $ -th 根攻擊:如果公共模數 $ e $ 很小(例如 $ e = 3 $ ) 和明文 $ m $ (在被編碼為數字之後)也足夠小 $ m^e < n $ ,那麼教科書 RSA 加密可以簡單地通過計算 $ e $ - 密文的根 $ c = m^e \bmod n $ . 這種攻擊的變體也可以起作用,如果 $ m^e < kn $ 對於一些小整數 $ k $ (比如說,不到一萬億),只需通過蠻力測試,如果 $ e $ - 的根 $ c + jn $ 是一個整數 $ j $ 從 $ 0 $ 取決於 $ k $ . 雖然這種攻擊很容易避免(例如,通過使用適當的加密填充和/或通過使用更大的公共指數,如常見的 $ e = 2^{16} + 1 = 65537 $ ),令人驚訝的是,許多由業餘愛好者設計的幼稚 RSA 方案(或被設計為故意破壞,例如在 CTF 中)可能會落入它。

*) 在針對被動竊聽攻擊者提供機密性和語義安全的意義上,假設 RSA 密鑰已正確生成並且足夠長以承受因式分解攻擊,用於 OAEP 的隨機數生成器沒有受到損害並且沒有其他明顯的執行錯誤,並且消息的存在和長度不是機密的。即便如此,任何一次加密一個字元的“ECB”樣式方案當然具有高度可塑性,因此容易受到主動攻擊者的操縱。

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