RSA_PKCS_V21(PolarSSLライブラリを使用)を使用して暗号化するクリアテキストがあります。問題は、アルゴリズムを実行する前に暗号文のサイズを知る必要があることです(動的メモリ割り当ての目的で)。RSAキーのサイズとクリアテキストの長さを知っています。
入力クリアテキストの長さの制限についても知りたいです。
何か案が?
1 に答える
RSA PKCS#1 v2.1標準、第7.2章を確認してください。
RSAES-PKCS1-V1_5-ENCRYPT((n、e)、M)
入力:
- (n、e)受信者のRSA公開鍵(kはモジュラスnのオクテット単位の長さを示します)
- 暗号化されるMメッセージ、長さmLenのオクテット文字列。ここでmLen <= k-11
したがって、入力はキーサイズによって異なります。k
そのキーサイズですが、オクテット単位です。したがって、1024ビットキーの場合、最大プレーンテキストとして1024/8-11=117バイトになります。
上記は、PKCS#1v1.5パディングを使用したRSAの最大サイズであることに注意してください。新しいOAEPパディングについては、7.1章に次の内容があります。
RSAES-OAEP-ENCRYPT((n、e)、M、L)
..。
入力:
- (n、e)受信者のRSA公開鍵(kはRSAモジュラスnのオクテット単位の長さを示します)
- 暗号化されるMメッセージ、長さmLenのオクテット文字列。ここで、mLen <= k-2hLen-2
- メッセージに関連付けられるLオプションのラベル。Lが指定されていない場合、Lのデフォルト値は空の文字列です。
ここで、hLenは、マスク生成関数に使用されるハッシュ関数の出力サイズです。デフォルトのSHA-1ハッシュ関数が使用されている場合、メッセージの最大サイズはk --42です(SHA-1の出力サイズは20バイトであり、2 * 20 + 2 = 42であるため)。
通常、ランダムに生成された秘密鍵は、メッセージの代わりに暗号化されます。次に、メッセージはその秘密鍵で暗号化されます。これにより、ほぼ無限に長いメッセージが可能になり、対称暗号(CBCモードのAESなど)は非対称暗号よりもはるかに高速です。この組み合わせは、ハイブリッド暗号化と呼ばれます。
パディングを使用したRSA暗号化または署名生成の出力サイズは、バイト単位のモジュラスのサイズと同じです(もちろん、切り上げられます)。したがって、1024ビットキーの場合、1024/8=128オクテット/バイトと予想されます。
計算されたサイズの出力配列には、ゼロに設定された先行バイトが含まれる場合があることに注意してください。これは正常と見なす必要があります。