Rsa

考慮到 RSA 加密不是分組密碼,為什麼要使用填充?

  • December 31, 2021
  1. 在 AES 中,我們在消息末尾使用一些填充字節來適應 128/256 字節塊。但是由於 RSA 不是分組密碼,為什麼要使用填充?
  2. 消息大小可以是任何字節長度(加密代理可以自由選擇)還是必須是某個字節長度才能使用 RSA 加密?

沒有填充的 RSA 也稱為 Textbook RSA。這個問題已經回答 了為什麼沒有填充的 RSA 不安全的問題

我們可以通過引入填充來解決一些問題。

  1. 延展性:如果我們對消息有嚴格的格式,即第一個或最後一個字節包含特定值,那麼簡單地將消息和密文相乘將降低創建有效(就填充而言)消息的機率。
  2. 語義安全性:添加隨機性,使 RSA 不再具有確定性(確定性加密方案總是產生相同的 $ x $ 對於每個實例 $ x = enc_{pubkey}(m) $ 為常數 $ m $ 和 $ pubkey $ )。請參閱OAEP作為如何實現此目的的範例。

編輯:要回答第二個問題,RSA 純文字(與 AES 純文字不同)受上限限制。消息不得長於 $ N $ 的公鑰。同樣值得注意的是,普通密碼方案根本不處理或填充 RSA 密文塊。通常,消息使用對稱密碼(如 AES)進行加密,並且只有此單獨密文的密鑰使用非對稱密碼(如 RSA)進行加密。這也稱為混合加密

1、為什麼要使用padding?

塊密碼和 RSA 都是塊上的排列(RSA 的塊不是整數字節),因此很明顯,如果數據大小與塊大小不對應,它們都需要某種填充。

對於分組密碼,填充並沒有多大作用:它填充了塊的其餘部分,並告訴您有多少填充。

對於 RSA,填充對於其核心功能至關重要。RSA有很多數學結構,這導致了弱點。使用正確的填充可以防止這些弱點。

例如,RSA 加密填充是隨機的,確保多次加密的同一消息每次看起來都不同。它還避免了其他弱點,例如使用不同的 RSA 密鑰加密相同的消息洩漏消息,或者攻擊者創建從其他一些密文派生的消息。

應始終使用 RSA 填充,它的最小大小為幾十個字節,而不是大多數塊密碼填充的單個字節。

  1. 消息大小可以是任意字節長度還是必須是特定字節長度才能使用 RSA 加密?

使用單個 RSA 操作,您只能加密少量恆定的字節(100 左右)。

原則上,可以連結多個 RSA 操作,類似於我們連結塊密碼的方式。在實踐中(幾乎)沒有人這樣做。RSA 很慢,使用 AES 解密的速度可能是 100kB/s 而不是 >100MB/s。填充也不必要地使密文膨脹。

我們實際上做的是生成一個隨機對稱密鑰,並使用該密鑰和 AES 加密消息。然後我們用 RSA 加密密鑰。這是有效的,並且至少與使用 RSA 加密消息一樣安全。

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