web-dev-qa-db-ja.com

RSA暗号化出力サイズ

2048ビットの鍵とpkcs1paddingを使用する場合のRSA暗号化出力サイズとは何ですか。

入力サイズに関係なく常に256バイトですか?

他の鍵のサイズを計算するにはどうすればよいですか?

18
hyda

はい、そうです。

output-sizeshouldは常にModulus(キーの一部)のサイズに等しいので、 :

_2048 bit Modulus -> 2048 bit output
1024 bit Modulus -> 1024 bit output
...
_

そうでない場合、[〜#〜] rsa [〜#〜]への多数の攻撃が存在します。その基本的な情報については here を参照してください。

したがって、暗号化するinputであってもoutputが_2048 bit_であることを保証するには、_7_としましょう。
パディングは常に適用する必要があります!

16
i_turo

RSAEP(RSA暗号化プリミティブ) の出力(整数として)は常に0からnの間です。

  1. Mを表すメッセージが0とn-1の間にない場合、範囲外のメッセージを出力して停止します。

  2. C = m ^ e mod nとします。

  3. 出力c。

もちろん、c数値です。そのため、使用できるようにバイトに変換する必要があります。 cについて知られている唯一のことは、nの大きな値に対してmよりも小さいことです。 cが大きい場合でも、mは数バイト小さい場合があります。


PKCS1Padding について説明しましたが、これは RSAES-PKCS1-V1_5-ENCRYPT 暗号化スキームの一部です。パディングにより、mが常に大きくランダム化されます。安全なRSA暗号化の要件。

cのエンコーディングがそこに指定されていることがわかります。

...

ステップ4:暗号文の代表cを長さkオクテットの暗号文Cに変換します:C = I2OSP(c、k)

...

ここで、kはオクテット(バイト)単位の係数のサイズです。

yesなので、答えは常にkであり、モジュラスのサイズ(バイト単位)です。規格がそのように要求しているからです。これは、必要なだけのゼロバイトが前に付いた符号なしビッグエンディアン番号としてエンコードされた値です。


ノート:

  • モジュラスサイズはキーサイズを定義します。したがって、RSA暗号化の出力は、鍵のサイズと同じです:浮動小数点数を使用するceil(keySize / 8.0)または整数を使用する(keySize + 8 - 1) / 8

  • RSAとOAEPパディングは同じ手法を使用するため、OAEP(およびRSA-KEMなどのあまり知られていない他のほとんどのスキーム)でも正しい答えが得られます。

  • 「生の」RSA(パブリック指数によるメッセージのモジュラ指数のみ)を実行する多くのライブラリルーチンは、I2OSP機能を実行しますが、確認することをお勧めします。

4
Maarten Bodewes

プレーンRSAの出力サイズ(いくつかの埋め込みスキームを使用しますが、 ハイブリッド暗号化 は使用しません)は常にキーサイズです。その理由は、いくつかの公開鍵nの結果は、いくつかの整数c0<=c<n。 RSAの紹介はたくさんあります。 http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011/lecture-notes/MIT6_045JS11_rsa.pdf

2
Perseids