2014-01-11 7 views
9

デフォルトのRSAパディングが何であるかを指摘してもらえますか?SUN JCE/Oracle JCEのデフォルトのRSAパディング

次のように暗号インスタンスを作成すると、javaは暗号化テキストバイトとして何らかのパディングを使用していることを確認してください。長さはプレーンテキストに関係なく常に2048 RSAキーで256バイトを示します。

Cipher.getInstance("RSA") 

私はパディングがCipher.getInstance(「RSA」)に指定されていない場合、デフォルトのパディングJavaの使用が内部であるかを知りたかったです。それはPKCS#1 v 1.5ですか?

おかげで、 サム

答えて

15

は、それが操作のブロック暗号モードを実装していないと(それが「ブロックサイズ」よりも平文で拡大処理しない、ECBは誤った名称のビットです"RSA/ECB/PKCS1Padding"と同じです)。 "RSA/None/PKCS1Padding"は、より良い名前だったでしょうか、またはあなたの推測通りに"RSA/None/RSASSA-PKCS1-v1_5"がパディングメカニズムが正しいと思います。

これは古い暗号化モードを使用していることを意味します。 OAEPは攻撃に対してより耐性があり、セキュリティの証明が含まれています。残念ながら、既存のすべての暗号文はもう解読できないので、OAEPはもちろん新しいデフォルトにすることはできません。これは、デフォルトを使用することが最初は愚かである理由の1つです。

PKCS#1 v1.5パディングは、入力が最大キーサイズから11バイトを引いた値に制限されていることも意味します。生成される暗号文のサイズは、PKCS#1の鍵サイズと常に同じであることに注意してください。たとえ結果の整数がより小さくても、0バイトでパディングされたままになります。ここでは鍵のサイズが8の倍数であると仮定しています。

アルゴリズム仕様のデフォルトに頼るべきではありません。コードが分かりにくくなり、デフォルトはプロバイダごとに異なる場合があります(ほとんどの場合、Oracleの主導に従って非互換性を回避しようとします)。既存のコードでどのアルゴリズムが設定されているかを理解するためにのみ使用してください。プラットフォームのデフォルトが意味を成す唯一の場所は、私の意見ではSecureRandomです。

関連する問題