Rsa

我應該如何解決 RSA 加密中的消息大小限制?

  • June 6, 2019

我正在使用RSA在 Java 中製作端到端加密軟體程序。我正在使用 BigIntegers 及其數論方法。(我知道這是一種非常慢的方法,但我只是想通過這個學習加密的概念)。我有很多問題,請隨意回答你想回答的問題。 我已經完成了大部分加密,但我對 RSA 的大小限制及其技術細節有疑問。 假設我為我的 RSA 生成了位長為 256 和 257 的素數 p 和 q。根據我對它背後的數論(使用模數)和許多測試案例的直覺,**我應該能夠安全地加密和解密任何位長 L < 513 (256+257) 且不會失去資訊的數字。**這個對嗎

並且會 100% 的工作?此外,如果 L 恰好是一個5 位數字,它的加密版本仍將是大約 512 位長

我想將我的 BigInteger(Java 類)加密抽象為加密任何字節

$$ $$數據的。我的計劃是拆分字節$$ $$成 512 位(64 字節)塊並通過將它們轉換為 BigInteger 然後加密它們來加密這些塊。這是一個好主意嗎?工業界是怎麼做到的? 我是否應該使 p 和 q 的位長更小/更大,並使加密塊的大小更小/更大以優化性能?

此外,在我加密一個數字後,加密版本的範圍在 0 到 512 位之間。我應該如何向這個字節添加填充

$$ $$,為了保持它們的大小一致,以便於解密?我是否應該在最高有效位側添加 0 並填充直到它始終為 512 位? 非常感謝您提前提供的幫助!

我應該能夠安全地加密和解密位長 L < 513 (256+257) 的任何數字而不會失去資訊。這個對嗎

$$ ? $$

,RSA 操作 $ x \mapsto x^e \bmod n $ 甚至不適合直接“加密”短消息。

這是你應該做的:

  • 選擇一個雜湊函式 $ H $ 像 SHA-256 或 SHAKE128 一樣,然後將其烘焙到您的程序中。(不要讓使用者選擇它——使用者更不知道發生了什麼。)

  • 預先選擇一個經過對稱密鑰驗證的密碼,例如 AES-GCM 或 NaCl crypto_secretbox_xsalsa20poly1305,然後將其烘焙到您的程序中。(同樣,不要讓使用者選擇它。)

  • 加密消息 $ m $ ,這是一個任意長度的位串,用於公鑰 $ n $ :

    1. 選擇一個整數 $ x $ 和 $ 0 \leq x < n $ 均勻隨機。
    2. 計算 $ y = x^3 \bmod n $ .
    3. 計算 $ k = H(x) $ , 在哪裡 $ x $ 以某種標準方式編碼為位或八位字節字元串,例如little-endian。
    4. 加密 $ m $ 在密鑰下使用您經過身份驗證的密碼 $ k $ ,給出密文 $ c $ .
    5. 發送 $ y $ 和 $ c $ . $ y $ 被稱為密鑰的封裝 $ k $ .
  • 解密密文 $ c $ 帶密鑰封裝 $ y $ :

    1. 解決 $ y \equiv x^3 \pmod n $ 為了 $ x $ . (例如,計算 $ x = y^d \bmod n $ 在哪裡 $ d $ 解決 $ e d \equiv 1 \pmod{\phi(n)} $ , 或計算 $ x_p = y^{d_p} \bmod p $ 和 $ x_q = y^{d_q} \bmod q $ ,然後用中國剩餘定理組合起來。 )

    2. 計算 $ k = H(x) $ .

    3. 解密 $ c $ 在密鑰下使用您經過身份驗證的密碼 $ k $ .

      • 如果解密失敗,請將其全部扔在地板上並停在這裡。 (如果你跳過這一步,你就會失敗。)
      • 否則,它返回一條消息 $ m $ ,也就是你最後返回的明文消息。

該系統——生成對稱密鑰 $ k = H(x) $ 對於均勻隨機 $ x $ 並將其隱藏為 $ x^3 \bmod n $ ——稱為RSA-KEM ,它是****公鑰密鑰封裝機制的一個例子,它通常可以與經過身份驗證的密碼組合以獲取公鑰(匿名)加密。

此外,如果 L 恰好是一個 5 位數字,它的加密版本仍將是大約 512 位長?

使用上面的系統,經過驗證的密碼的密文成本是 128 位(或者更多,如果它是一個特別低效的經過驗證的密碼),加上模數的大小 $ n $ ,無論消息有多長。

您不應使用 512 位模數。幾十年來,它們在實踐中一直被公眾破解。您應該至少使用 2048 位模數。 更多細節。

或者:只需使用 NaCl crypto_box 或 libsodium crypto_box_seal。比 RSA 更快、更小、更安全!

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