7 Jipher診断
JavaアプリケーションがJipherを使用していることの確認
システム・プロパティjava.security.debug
をprovider
に設定すると、JVMは、アプリケーションの実行中にトレース・メッセージ(通常はstderr)を出力し、各サービスおよびアルゴリズムの提供に使用されているプロバイダを示します。 出力は、次のようなものです。
Provider: MessageDigest.SHA-256 algorithm from: JipherJCE
Provider: Signature.SHA256withRSA verification algorithm from: JipherJCE
Provider: KeyGenerator.SunTls12Prf algorithm from: JipherJCE
システム・プロパティjava.security.debug
をjipher
に設定すると、Jipherは、最初の使用時のライブラリ・ロード・ステップのロギングなど、追加のデバッグ情報を出力します。 出力は、次のようなものです。
jipher: Libraries found in classpath JAR, loading from jar.
jipher: Attempting to locate libraries in classpath JAR file
jipher: Found jar:file:/usr/local/lib/jipher-jce-10.35-se.jar!/libs/linux_x64/libjipher.so
jipher: Found jar:file:/usr/local/lib/jipher-jce-10.35-se.jar!/libs/linux_x64/patched-fips.so
jipher: Found jar:file:/usr/local/lib/jipher-jce-10.35-se.jar!/libs/linux_x64/patched-openssl.cnf
jipher: Creating temporary directory to store libraries: /tmp/jiphertmp-10.35-1510124983029925122
jipher: Copying jar:file:/usr/local/lib/jipher-jce-10.35-se.jar!/libs/linux_x64/libjipher.so contents to file /tmp/jiphertmp-10.35-1510124983029925122/libjipher.so
jipher: Copying jar:file:/usr/local/lib/jipher-jce-10.35-se.jar!/libs/linux_x64/patched-fips.so contents to file /tmp/jiphertmp-10.35-1510124983029925122/fips.so
jipher: Copying jar:file:/usr/local/lib/jipher-jce-10.35-se.jar!/libs/linux_x64/patched-openssl.cnf contents to file /tmp/jiphertmp-10.35-1510124983029925122/openssl.cnf
jipher: Loading /tmp/jiphertmp-10.35-1510124983029925122/libjipher.so...
jipher: ...Done
jipher: Configuring openssl to load FIPS module from dir: /tmp/jiphertmp-10.35-1510124983029925122
jipher: Configuring openssl using configuration in file: /tmp/jiphertmp-10.35-1510124983029925122/openssl.cnf
jipher: FIPS ctx: fips available = 1, default available = 1; NULL ctx: fips available = 0, default available = 0
jipher: Setting FIPS enforcement policy = FIPS
詳細は、「Java Platform, Standard Editionセキュリティ開発者ガイド」の「java.security.debugシステム・プロパティ」を参照してください。
jdk.SecurityProviderService Java Flight Recorder (JFR)イベントを使用したセキュリティ・プロバイダの使用状況の追跡
JDK 20以降では、Java Flight Recorder (JFR)イベントjdk.SecurityProviderService
にjava.security.Provider.getService(String type, String algorithm)コールの詳細が記録されます。 このイベントには次のフィールドが含まれます:
表7-1 JFRイベントjdk.SecurityProviderServiceフィールド
フィールド名 | 説明 |
---|---|
type | サービスのタイプ |
algorithm | アルゴリズム名 |
provider | セキュリティ・プロバイダ |
JFRイベントjdk.SecurityProviderService
を使用して、JavaアプリケーションがJipherを使用していることを確認できます。 このJFRイベントはデフォルトで無効になっています。 JFR構成ファイルまたは標準のJFRオプションを使用して有効にできます。
FIPS 140の制限の実施を報告
FIPS 140の制限を適用する場合、Jipherは、次のものを生成するように指示されるとInvalidParameterExceptionをスローします:
- セキュリティ強度が112ビット未満のSecretKeyまたはKeyPair
-
FIPS 140で許可されているサイズ(P=2048、Q=224)、(P=2048、Q=256)、および(P=3072、Q=256)以外のドメイン・パラメータを使用するDSA AlgorithmParametersまたはDSA KeyPair
-
FIPS 140で承認された安全なプライム・グループではないドメイン・パラメータを使用するDiffie-Hellman KeyPair(付録D を参照): 「NIST SP 800-56A改訂3: 離散対数暗号を使用したペア・ワイズ・キー確立スキームの推奨事項」の承認済ECCカーブおよびFFCセーフ・プライム・グループに関する項
-
FIPS 140が承認した
secp
曲線ではない曲線を使用する楕円曲線KeyPair(付録D: 承認されたECC曲線とFFCセーフ・プライム・グループ」を参照)。
同様に、Jipherは、次を使用するように指示された場合、ProviderExceptionをスローします:
- セキュリティ強度が80ビット未満のKeyPairで、シグネチャの検証や暗号テキストの復号化など、保護されたデータを処理
- たとえば、デジタル・シグネチャの生成やプレーンテキストの暗号化など、データを保護するためのセキュリティ強度が112ビット未満のSecretKeyまたはKeyPair
- SHA-1シグネチャを生成
- FIPS 140で許可されているドメイン・パラメータを使用しないDSA KeyPair (以前にリストしたもの)
特定のアルゴリズムとキー長の推定セキュリティ強度については、NIST SP 800-57 Part 1 Rev. 5: Recommendation for Key Management: Part 1 - Generalの"Table 2: Comparable security strengths of symmetric block cipher and asymmetric-key algorithms"を参照してください。
構成ミスを報告しています
Jipherが、埋込みネイティブ・ライブラリをファイル・システムの一時ディレクトリに抽出できず、そこからJVMプロセスにロードできない場合は、ProviderExceptionがスローされます。 これは、JVMプロセスを実行しているユーザーに一時ディレクトリを作成する権限がないか、または包含するファイル・システムに格納されているバイナリを実行する権限がない場合に発生します。
Jipherが静的に登録され、ネイティブ・ライブラリのロード時にProviderExceptionがスローされた場合、プロバイダは登録されません。 統計的に登録された他のプロバイダも登録されます。
OpenSSLネイティブ・コードでの異常操作のレポート
OpenSSLネイティブ・コードで発生するエラー条件は、次の方法でアプリケーションにレポートされます:
- java.lang.Error (java.lang.OutOfMemoryErrorなど)
- プログラミング・エラーを示すjava.lang.RuntimeException (java.lang.ArrayIndexOutOfBoundsExceptionまたはjava.lang.IllegalArgumentException)
- 連鎖した原因が内部
OpenSslException
であるProviderException。この内部メッセージには、デバッグおよびトラブルシューティングで使用するOpenSSLエラー・スタックが記述されています