12

セキュリティで保護されていないチャネルを介してメッセージを送信するには、RSA 経由でメッセージを復号化する必要がありますが、パディング オラクル攻撃が怖いです。したがって、私はすでに次の質問をしています。

  1. RSA 暗号化メッセージの整合性を確認するにはどうすればよいですか?
  2. javax.crypto.Cipher を使用して RSA 暗号のメッセージ整合性を確保する方法

最初の質問で提案したように、

ただし、高レベルの暗号化ライブラリを使用しているため、これは心配する必要はありません。そのライブラリの作成者がそれを処理する必要がありました。

などと考えてはいけません。私の知る限り、 の RSA 実装は、 OAEPPKCS#1 v1.5がそうでない場合に脆弱です(正しく実装されていると仮定します) Padding Oracale Attack

javax.crypt.Cipherしたがって、Java 7でどのパディング実装が使用されているかを知りたい

4

3 に答える 3

18

次のように完全に修飾せずに Cipher をインスタンス化するときに、どのパディングが実際に使用されるかは、選択したプロバイダーまたはデフォルトのプロバイダーによって異なります。

Cipher.getInstance("RSA")

Java 実装を切り替えると、デフォルトが異なる可能性があり、突然、古い暗号文との互換性がなくなるため、これは悪い習慣です。暗号は常に完全修飾してください。

前に言ったように、デフォルトはおそらく (多くのプロバイダーがあり、確かではありません) PKCS#1 v1.5 パディングになります。別のものが必要な場合は、それを指定する必要があります。OAEP を使用する場合は、ここからの完全修飾暗号文字列を次に示します

Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
于 2015-08-16T10:11:59.793 に答える
8

これは、暗号化サイトへの最初のリンクで与えられた適切なアドバイスではありません。暗号化ライブラリの暗号化アルゴリズムのデフォルトに決して依存しないでください。これにはいくつかの理由があります。

  1. さまざまな実装、さまざまなデフォルト (ほとんどの場合、Oracle/Sun のデフォルトをコピーしますが、デフォルトに関する暗号化プロバイダーの要件はありません)。
  2. 現在安全であるものは、明日は安全とは見なされない可能性があります。下位互換性のために、デフォルトを変更することはできません。
  3. あなたのソフトウェアを読んでいる人には、デフォルトが何であるかはわかりません (それを文書化することはできますが、その場合は書き出すこともできます)。

オラクルが提供するは、歴史的な理由SunJCEProviderから PKCS#1 パディング ( "PKCS1Padding") にデフォルト設定されています (上記の理由 #2 を参照)。これは十分に文書化されていません。

そのデフォルトが設定された時点では、基本的に安全でないテキスト RSA ( "NoPadding") と PKCS#1 v1.5 バージョン ("PKCS1Padding"または RSAES-PKCS1-v1_5PKCS#1 v2.1 標準) しかありませんでした。当時RSAES-PKCS1-v1_5は間違いなくより安全な選択でした。デフォルトを OAEP に変更すると、デフォルトを使用するすべての RSA 実装が機能しなくなります。

otus のアドバイス (この回答の最初のリンクにあります) は、暗号化アルゴリズムよりもライブラリのプロトコル実装に適しています。最終的には、どのような選択をしても、その選択のセキュリティを守ることができるはずです。

于 2015-08-16T10:12:10.393 に答える
0

指定したときの bouncy-castle のデフォルトRSARSA/NONE/NOPADDING

これも同じ結果RSA/ECB/NOPADDINGです。

于 2020-03-27T18:13:48.130 に答える