3 JipherへのFIPS 140準拠を実現するアプリケーションの構成
FIPS 140準拠を実現するには、アプリケーションはCMVP認定の暗号化モジュールによって提供されるFIPS承認またはNIST推奨の暗号化のみを使用する必要があります。 ただし、JDKに含まれるどのプロバイダもCMVP認定を受けていません。
次のステップに従って、JipherへのFIPS 140準拠を実現するようにアプリケーションを構成します:
ノート:
まだ実行していない場合は、「Jipherのダウンロードおよびデプロイ」の説明に従って、Jipherをダウンロードしてデプロイします。-
プロバイダ登録の説明に従って、JCAおよびアプリケーションに必要なJipherおよびその他のセキュリティ・プロバイダを登録します:
-
最も優先されるプロバイダとしてのJipherの登録: Jipherを最も優先するプロバイダとして、セキュリティ・プロバイダのリストの位置1に登録することをお薦めします。
-
JARファイル・シグネチャ検証用のSUNおよびSunRsaSignプロバイダの登録: JCAでは、JARファイルのシグネチャ検証にSUNおよびSunRsaSignプロバイダが必要です。 JDKでは、最初にプロバイダを使用して暗号化操作を実行するときにこれが必要です。
ノート:
JCAでは、JARファイル・シグネチャ検証の前提条件として、非FIPS 140許可アルゴリズムであるMD5withRSA Signatureアルゴリズムが必要です。 SunRsaSignプロバイダによって提供されます。FIPS 140準拠に関して、MD5withRSA Signatureアルゴリズムは、非セキュリティ関連の目的で内部的に使用され、このインスタンスでは許容されます。
-
その他のセキュリティ・プロバイダの登録: この項では、Jipherでサポートされていない暗号化エンジンおよび暗号化エンジン・クラス・アルゴリズム(アプリケーションが必要とする可能性がある)と、これらのアルゴリズムを提供するセキュリティ・プロバイダの登録に関するガイダンスを示します。
暗号化エンジン・クラス・アルゴリズムの提供に使用されていないかぎり、JDKに含まれるプロバイダを登録できます。 (「Java暗号化アーキテクチャ(JCA)、エンジン・クラスおよびプロバイダ」を参照してください) ただし、登録によって暗号化エンジン・クラス・アルゴリズムの提供に使用されないようにすることは困難です。 たとえば、サード・パーティの依存関係およびプロバイダ自体は、他の登録済プロバイダを使用して、暗号化エンジン・クラスのアルゴリズムを提供できます。 したがって、アプリケーションに必要なプロバイダのみを登録することをお薦めします。 1つのオプションは、プロバイダを登録し、アプリケーションが必要なくなったら登録解除することです。 例については、「JARファイル・シグネチャ検証用のSUNおよびSunRsaSignプロバイダの登録」を参照してください。
-
-
SSL、TLSおよびDTLSプロトコルの実装を提供してセキュアなインターネット通信を可能にするSunJSSEプロバイダを使用している場合は、「暗号化を提供するJipherを選択するためのSunJSSEプロバイダの構成」で説明されているステップに従います。 SunJSSEプロバイダは、これらのプロトコルに対して独自の暗号化エンジン・クラス・アルゴリズムを提供しません。 かわりに、JCAを使用して、他のプロバイダからの暗号化エンジン・クラス・アルゴリズムの実装をリクエストします。 これらのステップにより、SunJSSEプロバイダは、Jipherによって提供される暗号化エンジン・クラス・アルゴリズムを使用し、他のプロバイダを使用しないようにします。
-
アプリケーション・コードで、Jipherが暗号化の提供に使用される唯一のセキュリティ・プロバイダであることを確認します。 次の項のガイダンスに従います:
ノート:
前のノートで説明したJCAではなく、アプリケーションで非FIPS 140許可アルゴリズムが必要な場合、FIPS 140準拠を実現するには、その非FIPS 140許可アルゴリズムを使用しないようにアプリケーションを変更する必要があります。 -
必要に応じて、システム・プロパティを使用してJipherの機能の一部を構成します。 「システム・プロパティを介したJipherの構成」を参照してください。
プロバイダ登録
Jipherなど、JDKに含まれていないセキュリティ・プロバイダを使用するには、JCAがセキュリティ・サービスにアクセスできるように、セキュリティ・プロバイダを登録する必要があります。 プロバイダは静的にも動的にも登録できます。
最も優先されるプロバイダとしてのJipherの登録
Jipherを最も優先するプロバイダとして、セキュリティ・プロバイダのリストの位置1に登録することをお薦めします。
アプリケーションが実装を提供するプロバイダを指定せずにアルゴリズムのインスタンスをリクエストすると、JCAは登録済プロバイダのリストを優先順位で検索します。 JCAは、アルゴリズムを提供する最初のプロバイダから実装を返します。 Jipherを最も優先されるプロバイダとして登録すると、JCAは、FIPS 140標準で許可されるアルゴリズムの認定された実装を提供するためにそれを選択します。
ノート:
最も優先されるプロバイダとしてJipherを登録しても、アルゴリズムの実装を提供するためにJipherが選択されることは保証されません。 Jipherが選択されない理由を次に示します:-
このアルゴリズムは、FIPS 140標準によって承認または許可されていません。
-
たとえば、キー・サイズが弱すぎるか、アルゴリズム・パラメータが承認されないため、アプリケーションはFIPS 140標準で許可されていないパラメータを使用してアルゴリズムを初期化します。
-
アプリケーションは、署名するデータをダイジェストするためにSHA-1を使用するか、キー・トランスポートにRSA (PKCS #1パディングを使用)を使用するなど、FIPS 140標準で許可されていない操作にアルゴリズムを使用します。
-
このアルゴリズムは、FIPS 140標準によって承認または許可されていますが、Jipherでは実装が提供されません。
たとえば、SUNプロバイダは、Jipherでは提供されないFIPS 140標準によって承認または許可されるアルゴリズムの実装を提供します。 これには次のものがあります。
- SHA-512/224、SHA-512/256、SHA512/224withDSA、SHA512/256withDSAなどの切り捨てられたダイジェスト
- SHA3を使用する
Signature
アルゴリズム。SHA3-224withDSA、SHA3-256withDSA、SHA3-384withDSAおよびSHA3-512withDSAが含まれます
結果として、SUNプロバイダ(またはFIPS 140検証済暗号化を提供しない別の登録済プロバイダ)を選択し、Jipherが最も優先プロバイダとして登録されている場合でも、FIPS 140標準によって承認または許可されるアルゴリズムの実装を提供する必要があります。
JipherでサポートされていないSUNプロバイダがサポートするアルゴリズムのリストは、「その他のセキュリティ・プロバイダの登録」を参照してください。
次の方法で、Jipherなどのプロバイダを登録します:
java.security
ファイルの登録済プロバイダのリストに指定して、静的に実行- アプリケーション・コードの
java.security.Security
クラスでaddProvider
またはinsertProviderAt
メソッドを動的にコール
これを行うステップについては、「Java Platform, Standard Editionセキュリティ開発者ガイド」の「Java暗号化アーキテクチャでのプロバイダの実装方法」の「ステップ8.1: プロバイダの構成」を参照してください。
ノート:
Jipherを動的に登録するよりも、静的に登録する方が脆弱である可能性があります。 次に、Jipherを誤って構成し、Jipherが予期したとおりに使用されない方法について説明します。 最大の懸念は、この結果が容易に明らかでない可能性があることです。 アプリケーションは引き続き動作し、エラーを報告しませんが、JipherまたはFIPS 140認定の暗号化を使用していません。- たとえば、
jipher-jce-10.35-se.jar
JARファイルがクラス・パスにないため、Jipherプロバイダ・クラスをJVMインスタンスで使用できないとします。 その結果、静的に登録するように構成されている場合、JVMインスタンスは暗黙的にJipherの登録に失敗します。 JVMインスタンスは、Jipherを静的に登録するように構成されていないかのように動作します。 これにより、アプリケーションのFIPS 140準拠に影響します。 - JDKの
java.security
ファイルがJipherを静的に登録するように編集されている場合は、JDKが再インストールされた場合に再編集が必要になることがあります。
次の例は、java.security
ファイルの抜粋です。 プロバイダ・クラスcom.oracle.jipher.provider.JipherJCEを指定して、位置1にJipherを登録します。 また、位置2のSUNプロバイダ、位置3のSunRsaSignおよび位置4のSunJSSEも登録します:
security.provider.1=JipherJCE
security.provider.2=SUN
security.provider.3=SunRsaSign
security.provider.4=SunJSSE
# Other registered providers follow...
ノート:
多くの場合、静的に登録されたプロバイダのリストは長くなります。 より完全なリストにより、Jipherでサポートされていないリクエストされたアルゴリズムが別のプロバイダによって提供されることが保証されます。この例では、Jipherが位置1に登録されているため、JCAは暗号エンジン・クラスのアルゴリズム実装を最初に取得します。 JCAがJipherからリクエストされたアルゴリズムの実装を取得できない場合、他の登録済プロバイダの1つから実装を取得しようとします。 たとえば、MD5メッセージ・ダイジェスト・アルゴリズムに対するリクエストは、FIPS 140で許可されているアルゴリズムではなく、SUNプロバイダによって提供される実装をJCAが取得します。
JARファイル・シグネチャ検証用のSUNおよびSunRsaSignプロバイダの登録
SUNおよびSunRsaSignプロバイダは、JARファイルのシグネチャ検証に必要なアルゴリズム(Jipherでは提供されない)を提供するため、登録する必要があります。
javax.cryptoパッケージのエンジン・クラスにアルゴリズムを提供するJipherなどのセキュリティ・プロバイダは、署名付きJARファイルに存在する必要があります。 JARファイルのシグネチャの検証は、javax.cryptoパッケージのクラスからアルゴリズム・インスタンスを取得するときに行われます。 JARファイルのシグネチャの検証に失敗した場合、実装を提供するプロバイダは選択されません。
JARファイルのシグネチャの検証には、Jipherが提供しない2つのアルゴリズムが必要です:
- SUNプロバイダが提供するX.509 CertificateFactoryアルゴリズム
- SunRsaSignプロバイダが提供するMD5withRSA 「シグネチャ」アルゴリズム
これらのアルゴリズムは、JipherのJARファイル・シグネチャを検証する前に、登録済プロバイダから提供される必要があります。 これを行うには、SUNプロバイダとSunRsaSignプロバイダを登録します。
アプリケーション内の登録済プロバイダの数を最小化する場合は、JARファイルのシグネチャ検証に必要なプロバイダを静的に登録し、JipherのJARファイルのシグネチャが検証されると、それらのプロバイダを動的に登録解除できます。 その方法を示すサンプル・コードを次に示します。
static {
// Dynamically register the "JipherJCE" provider if it has not already been statically registered.
if (Security.getProvider("JipherJCE") == null) Security.insertProviderAt(new JipherJCE(), 1);
// Trigger the javax.crypto.JarVerifier's certificate verification self-test.
// This assumes that the "SUN" and "SunRsaSign" providers have been statically registered.
Cipher.getInstance("AES", "JipherJCE");
// Dynamically unregister the "SUN" and "SunRsaSign" providers
Security.removeProvider("SUN");
Security.removeProvider("SunRsaSign");
}
その他のセキュリティ・プロバイダの登録
「Java暗号化アーキテクチャ(JCA)、エンジン・クラスおよびプロバイダ」で説明されているように、JDKに含まれる一部のプロバイダは、暗号化エンジン・クラス・アルゴリズムと非暗号化エンジン・クラス・アルゴリズムの両方を提供します。 ただし、Jipherでは、暗号化エンジン・クラス以外のアルゴリズムは提供されません。
また、プロバイダJARファイルのシグネチャ検証には、SUNプロバイダとSunRsaSignプロバイダが必要です。 JDKでは、最初にプロバイダを使用して暗号化操作を実行するときにこれが必要です。 「JARファイル・シグネチャ検証用のSUNおよびSunRsaSignプロバイダの登録」を参照してください。
ただし、登録されているセキュリティ・プロバイダが少ないほど、Jipherがサポートしない暗号化エンジン・クラス・アルゴリズムを提供するためにJipher以外のプロバイダが選択される可能性は低くなります(FIPSのため)。140の制限)または、遅延プロバイダ選択の場合(「遅延プロバイダ選択」を参照)、Jipherがサポートしていない「キー」で初期化される暗号化エンジン・クラス・アルゴリズム(FIPS 140の制限により)。
SUNプロバイダはオプションで、次の非暗号化エンジン・クラス・アルゴリズムのサポートを提供する必要があります:
- 証明書のロードと証明書パスの構築/検証:
X.509
CertificateFactoryアルゴリズムPKIX
CertPathBuilderおよびCertPathValidatorアルゴリズムCollection
CertStoreアルゴリズム
- キーストアおよびトラスト・ストアのロード:
PKCS12
KeyStoreアルゴリズム
SunJSSEプロバイダは、必要に応じて、次の非暗号化エンジン・クラス・アルゴリズムを介してTLSサポートを提供する必要があります:
PKIX
KeyManagerFactoryおよびTrustManagerFactoryアルゴリズム- すべてのSSLContextアルゴリズム
SUNおよびSunRsaSunプロバイダは、Jipherでサポートされている暗号化エンジン・クラス・アルゴリズムをサポートしています。 したがって、これらのプロバイダを登録する場合は、「最も優先されるプロバイダとしてのJipherの登録」で説明されているように、Jipherがより高いプリファレンスで登録されることが重要です。
SUNプロバイダは、Jipherでサポートされていない次の暗号化エンジン・クラス・アルゴリズムをサポートしています:
- KeyFactory:
- HSS/LMS
- MessageDigest:
- MD2
- MD5
- SHA-512/224
- SHA-512/256
- 署名:
- HSS/LMS
- NONEwithDSAinP1363Format
- SHA1withDSAinP1363Format
- SHA224withDSAinP1363Format
- SHA256withDSAinP1363Format
- SHA384withDSAinP1363Format
- SHA512withDSAinP1363Format
- SHA3-224withDSA
- SHA3-256withDSA
- SHA3-384withDSA
- SHA3-512withDSA
- SHA3-224withDSAinP1363Format
- SHA3-256withDSAinP1363Format
- SHA3-384withDSAinP1363Format
- SHA3-512withDSAinP1363Format
SunRsaSignプロバイダは、Jipherでサポートされていない次のシグネチャエンジン・クラス・アルゴリズムをサポートしています:
- MD2withRSA
- MD5withRSA
- SHA512/224withRSA
- SHA512/256withRSA
- SHA3-224withRSA
- SHA3-256withRSA
- SHA3-384withRSA
- SHA3-512withRSA
SunJSSEプロバイダは、Jipherでサポートされていない暗号化エンジン・クラス・アルゴリズムをサポートしていません。
プロバイダの遅延選択
キー(KeyGenerator、KeyPairGenerator、KeyFactory、SecretKeyFactory、Cipher、KeyAgreement、MacおよびSignature)で生成、インポートまたは初期化できるJava暗号化APIクラスでは、遅延プロバイダの選択がサポートされます。 getInstance(String algorithm)メソッド・コールは、アルゴリズムをサポートするプロバイダの優先順位付きリストをコンパイルします。 後で、initメソッドがコールされると、(サイズおよび形式に関して)キーもサポートするプロバイダのコンパイル済プリファレンス順序付きリストの最初のプロバイダが選択されます。
暗号化を提供するJipherを選択するためのSunJSSEプロバイダの構成
SunJSSEプロバイダは、SSL、TLSおよびDTLSプロトコルの実装を提供することで、セキュアなインターネット通信を可能にします。 これらのプロトコルに対して独自の暗号化エンジン・クラス・アルゴリズムを提供していません。 かわりに、JCAを使用して、他のプロバイダからの暗号化エンジン・クラス・アルゴリズムの実装をリクエストします。 次の構成ステップに従って、SunJSSEプロバイダがJipherで提供される暗号化エンジン・クラス・アルゴリズムを使用し、他のプロバイダを使用しないようにします:
- 内部JDK APIクラスへのアクセスの許可: これにより、JipherがSunJSSEプロバイダによってリクエストされた暗号化を提供できるようになります。
- 最も優先されるプロバイダとしてのJipherの登録: これにより、サポートされているアルゴリズムの実装を提供するために、他のプロバイダよりも先にJipherが選択されるようになります。 また、「JARファイル・シグネチャ検証用のSUNおよびSunRsaSignプロバイダの登録」の説明に従って、SUNプロバイダおよびSunRsaSignプロバイダを登録します。
- プロトコル・バージョン、暗号スイート、キー・マテリアルおよび名前付きグループの制限: これにより、SunJSSEプロバイダは、Jipherがサポートしていない暗号化をリクエストしません。
これらのステップを組み合せると、SunJSSEプロバイダは、非FIPS 140認定登録プロバイダが提供する暗号化を使用しません。
ノート:
ご使用の環境に関して次のことが当てはまる場合は、ステップ内部JDK APIクラスへのアクセスの許可および少なくとも112ビットのセキュリティを提供するキー・マテリアルを使用したSSLContextの構成のみに従う必要があります:- JDK 21を使用しています。
- 次のような標準のJDKセキュリティ・プロパティ構成を使用します:
jdk.certpath.disabledAlgorithms
セキュリティ・プロパティは、MD2
およびMD5
を指定します。jdk.tls.disabledAlgorithms
セキュリティ・プロパティは、SSLv3
,TLSv1
,TLSv1.1
およびMD5withRSA
を指定します。
- Jipherは最も優先されるプロバイダとして登録され、その他の登録済プロバイダはSUN、SunRsaSignおよびSunJSSEのみです。 「最も優先されるプロバイダとしてのJipherの登録」を参照してください。
内部JDK APIクラスへのアクセスの許可
セキュリティ・プロバイダは、TLSv1.2を提供するためにSunJSSEが必要とする暗号化を提供する場合、内部JDK APIクラスにアクセスする必要があります。
Jipherがそれらにアクセスしようとすると、IllegalAccessExceptionがスローされます。 これを回避するには、Jipher JARファイルの指定場所に応じて、Javaアプリケーションを実行するときに次のいずれかのコマンドライン・オプションを追加
-
クラス・パス:
--add-exports=java.base/sun.security.internal.spec=ALL-UNNAMED
-
モジュール・パスで:
--add-exports=java.base/sun.security.internal.spec=com.oracle.jipher
プロトコル・バージョン、暗号スイート、キー・マテリアルおよび名前付きグループの制限
この項では、Jipherと同じレベルおよび値に制限するSunJSSEパラメータおよびプロパティについて説明します。 これにより、SunJSSEプロバイダは、Jipherがサポートしていない暗号化をリクエストしません。
クライアントおよびサーバーがTLS 1.2およびTLS 1.3のみを使用するようにします
セキュリティ・プロパティjdk.tls.disabledAlgorithms
に、値SSLv3
、TLSv1
およびTLSv1.1
が含まれていることを確認します。
さらに、システム・プロパティjdk.tls.server.protocols
およびjdk.tls.client.protocols
に値TLSv1.2
およびTLSv1.3
が含まれていることを確認します。 これらのシステム・プロパティおよびJSSEをカスタマイズするために指定できるその他のプロパティの詳細は、「Java Platform, Standard Editionセキュリティ開発者ガイド」の「JSSEのカスタマイズ」を参照してください。
コードで、特定のTLSプロトコル・バージョンを指定するかわりに、SSLContext.getInstance("TLS")
をコールします。
ノート:
SSLContext.getInstance("TLS1.3")
をコールすると、プロトコル・バージョンの上限が設定されます。 その結果、この文は、TLS 1.0およびTLS 1.1プロトコル・バージョンを許可するコンテキストを返します。
TLS暗号スイートがJipherのFIPS 140アルゴリズムを使用していることの確認
サポートするTLSプロトコル・バージョン(TLS 1.2またはTLS 1.3)に応じて、システム・プロパティjdk.tls.client.cipherSuites
およびjdk.tls.server.cipherSuites
のカンマ区切りリストとして、Jipherによって提供されるFIPS 140許可暗号化のみを必要とする暗号スイートを指定します。 これらのシステム・プロパティの詳細は、「Java Platform, Standard Editionセキュリティ開発者ガイド」の「デフォルトで有効な暗号スイートの指定」を参照してください。
サポートされている暗号スイートの完全なリストは、「Java Platform, Standard Editionセキュリティ開発者ガイド」の「SunJSSEプロバイダ」を参照してください。
TLS 1.2暗号スイートは、次のように表されます:
TLS_<key exchange algorithm>_<authentication algorithm>_WITH_<cipher algorithm>_<cipher strength>_<cipher mode>_<HASH or MAC>
TLS 1.3暗号スイートは、次のように表されます:
TLS_<cipher algorithm>_<cipher strength>_<cipher mode>_<HASH or MAC>
次の表に、Jipherでサポートされている暗号スイートの名前内の値を示します:
表3-1 Jipherでサポートされている暗号スイートの名前内の値
コンポーネント | サポートされている | サポートされるが推奨されない |
---|---|---|
キー交換アルゴリズム | ECDHE , DHE |
DH |
認証アルゴリズム | ECDSA , RSA |
DSS |
暗号アルゴリズム | AES |
- |
暗号強度 | 256 , 128 |
- |
暗号モード | GCM |
CBC |
HASHまたはMAC | SHA384 , SHA256 |
SHA |
キー交換および認証にRSAを使用する暗号スイートは、次のように表されます:
TLS_RSA_WITH_<cipher algorithm>_<cipher strength>_<cipher mode>_<HASH or MAC>
これらの暗号スイートはサポートされていません。
これらの暗号スイートがサポートされない理由については、「NIST SP 800-52改訂2: Transport Layer Security (TLS)実装の選択、構成および使用に関するガイドライン」の付録D -RSAキー・トランスポートを参照してください。 つまり、TLSバージョン1.0から1.2で使用されるRSAキー・トランスポートは、PKCS #1のv1.5パディング・スキームを使用して実装されるためです。
少なくとも112ビットのセキュリティを提供するキー・マテリアルを使用したSSLContextの構成
キー・マネージャは、ピアに対するローカルTLSエンドポイントの認証に使用されるキー・マテリアルの管理を担当します。 キー・マネージャに次のパラメータを指定してキー・マテリアルを構成し、キー・マテリアルに少なくとも112ビットのセキュリティが提供されるようにします:
- RSA: 2048以上
- DSA: (L、N) = (2048、224)、(2048、256)、または(3072、256)
- EC: secp224r1、secp256r1、secp384r1またはsecp521r1
「Java Platform, Standard Editionセキュリティ開発者ガイド」の「KeyManagerFactoryクラス」に関する項を参照してください。
ノート:
システム・プロパティjdk.tls.disabledAlgorithms
は、ローカルTLSエンドポイントがピアに対して自身を認証するデジタル・シグネチャを生成するために使用するキー・サイズには影響しません。
jdk.tls.disabledAlgorithms=DSA
ではDSAを無効化(DSS暗号スイートを無効化)しますが、jdk.tls.disabledAlgorithms=DSA keySize < 2048
では、DSS暗号スイートを無効化することも、ローカルTLSエンドポイントがピアに対して自身を認証するシグネチャを生成するときに2048ビット未満のDSA秘密キーを使用することを防ぐこともありません。
JSSEでFIPS 140承認済の名前付きグループのみが使用されていることの確認
FIPS 140準拠では、「付録D 」に記載されているように、重要な確立のために承認された楕円曲線と安全プライム・グループを使用する必要があります: 「NIST SP 800-56A改訂3: 離散対数暗号を使用したペア・ワイズ・キー確立スキームの推奨事項」の承認済ECCカーブおよびFFCセーフ・プライム・グループ。
次のもののみを許可するようにシステム・プロパティjdk.tls.namedGroups
を設定します:
- FIPS 140承認された名前付き曲線:
secp256r1
secp384r1
secp521r1
- FIPS 140はFFCセーフ・プライム・グループを承認しました:
ffdhe2048
ffdhe3072
ffdhe4096
暗号化を提供するJipherの明示的な選択
アプリケーションが、MessageDigest、「シグネチャ」、KeyFactory、KeyPairGenerator、「暗号」などのエンジン・クラスからgetInstance
をコールして、暗号化エンジン・クラス・アルゴリズムのインスタンスを取得する場合、次のいずれかをコールして、アルゴリズムを提供するプロバイダを明示的に指定できます:
- getInstance(String algorithm, String provider)
- getInstance(String algorithm, Provider provider)
Jipherが暗号化を提供するために使用される唯一のセキュリティ・プロバイダであることを確認する1つの方法は、暗号化エンジン・クラス・アルゴリズムのインスタンスの取得に使用されるすべてのgetInstance
メソッド・コールで、Jipherがアルゴリズムのインスタンスを提供することを明示的に指定することです。次に例を示します:
Cipher.getInstance("AES", "JipherJCE");
実際には、次の理由により実行できないことがよくあります:
- アプリケーションは多くの場合、他のセキュリティ・プロバイダを使用してより高いレベルの機能を提供する必要があり、これらのプロバイダは内部的に
getInstance(String algorithm)
コールを実行して、提供するより高いレベルの機能を提供するために必要な暗号化エンジン・クラス・アルゴリズムを取得します。 たとえば、SUNプロバイダが提供するPKCS12 KeyStoreアルゴリズムは、他のセキュリティ・プロバイダを内部的に使用して、キー・ストアの保護に使用する暗号化エンジン・クラス・アルゴリズムを提供します。 - アプリケーションでは、多くの場合、提供する機能を提供するために必要な暗号化エンジン・クラス・アルゴリズムを取得するために
getInstance(String algorithm)
コールを内部的に実行するサードパーティ・ライブラリを使用します。
したがって、アプリケーションまたはその依存関係のいずれかがエンジン・クラスからgetInstance(String algorithm)をコールする場合は、アルゴリズムを指定するためにJipherが暗黙的に選択されるようにJVMを構成します。 「暗号を提供するJipherを暗黙的に選択」を参照してください。
暗号を提供するJipherを暗黙的に選択
アプリケーションまたはその依存関係のいずれかがエンジン・クラスのgetInstance(String)メソッドを呼び出すたびにJipherを暗黙的に選択するには、次のステップに従います:
- Jipherを最も優先するプロバイダとして登録します。 「プロバイダ登録」を参照してください。
- Jipherがサポートする暗号化エンジン・クラス・アルゴリズムのみをリクエストするように、アプリケーションとその依存関係を構成します。 たとえば、SunJSSEプロバイダを使用してセキュアなインターネット通信を提供する場合は、「暗号化を提供するJipherを選択するためのSunJSSEプロバイダの構成」で説明されているステップに従います。 アプリケーションで非FIPS 140許可アルゴリズムが必要な場合、FIPS 140準拠を実現するには、その非FIPS 140許可アルゴリズムを使用しないようにアプリケーションを変更する必要があります。
システム・プロパティを介したJipherの構成
次のシステム・プロパティを使用して、Jipherの一部の機能を構成できます:
表3-2 Jipherシステム・プロパティ
システム・プロパティ | 説明 | デフォルト値 |
---|---|---|
|
標準のJavaシステム・プロパティ。 値に |
なし |
|
標準のJavaシステム・プロパティ。 このシステム・プロパティは、一時ファイルのロケーションを指定します。 Jipherは、この値をネイティブ・ライブラリを格納するための一時ディレクトリを作成するデフォルトのロケーションとして使用します。 |
通常、Linuxオペレーティング・システムでは/tmp です
|
|
Jipherがライブラリ・ファイルを格納するための一時ディレクトリの作成に使用するパスのロケーションを指定します。 JVMプロセスを実行しているユーザーは、Jipherを使用する場合、このディレクトリへの書込みアクセス権を持っている必要があります。 また、このディレクトリは、 ノート: /tmp ディレクトリがnoexec オプションを使用してマウントされる場合もあります。 その場合は、jipher.user.dir システム・プロパティを、書込みアクセス権があり、noexec オプションでマウントされていないファイル・システム上にある別のディレクトリに設定します。
|
java.io.tmpdir の値(通常はLinuxオペレーティング・システムでは/tmp )
|
|
Javaセキュリティ・プロバイダ・レイヤーで適用されるFIPS 140強制ポリシーを指定します。 次の値のうち1つを取ることができます。
「受理可能」は、アルゴリズムおよびキー長が安全に使用できることを意味するためにNISTによって使用されます。 「レガシーの使用」は、アルゴリズムまたはキーの長さが、暗号テキスト・データの復号化やデジタル・シグネチャの検証など、すでに保護されている情報の処理にのみ使用できることを意味します。 詳細は、「NIST SP 800-131A改訂2: 暗号化アルゴリズムとキー長の使用の移行」および「FIPS 140強制ポリシー」を参照してください。 |
FIPS |
jipher.fips.deactivateSecurityPatches |
Jipherがセキュリティ(false )またはコンプライアンス(true )のどちらを優先するかを指定します。
Jipher JARファイルには、サポートされているプラットフォームごとに、OpenSSL FIPSモジュールの2つのコピーが埋め込まれています:
システム・プロパティ
注意:
ただし、FIPS 140検証後にOpenSSL FIPSモジュールを変更すると、非準拠がレンダリングされるため、 |
false |
FIPS 140強制ポリシー
Jipherは、アルゴリズムおよびキーの使用方法に応じて、FIPS 140アルゴリズムの使用状況およびキー・サイズの強制を実行できます。
jipher.fips.enforcement
システム・プロパティを使用して、FIPS 140強制ポリシーを指定できます。 「システム・プロパティを介したJipherの構成」を参照してください。 デフォルト・ポリシーFIPS
は、レガシーの使用を許可します。 つまり、「レガシー使用」ステータスのアルゴリズムまたはキー長を使用できますが、暗号テキスト・データの復号化やデジタル・シグネチャの検証など、すでに保護されている情報を処理するためにのみ使用できます。 FIPS_STRICT
ポリシーでは、承認ステータスが「許容可能」のアルゴリズムおよびキーの長さのみが許可されます。 これはより制限的ですが、時間の経過とともに安定する可能性が高くなります。 詳細は、「NIST SP 800-131A改訂2: 暗号化アルゴリズムとキー長の使用の移行」を参照してください。
通常、デフォルトのFIPS
ポリシーはFIPS_STRICT
ポリシーと似ていますが、FIPS_STRICT
ポリシーでは、デジタル・シグネチャ検証に長いキー長が必要で、様々なアルゴリズムにMACが必要になる点が異なります。 次の表に、boldのこれらの違いを示します。
表3-3 デフォルトのFIPSポリシーおよびFIPS_STRICTポリシーの最小キー長
ルール | FIPSポリシー | FIPS_STRICTポリシー |
---|---|---|
AESキー・ビット |
対称暗号化および復号化の場合は128以上 |
対称暗号化および復号化の場合は128以上 |
DESedeキー・ビット |
対称暗号化ではサポートされていません = 192(対称復号化の場合) |
対称暗号化「および復号化」ではサポートされていません |
DHキー・ビット |
キー生成およびキー承諾の場合は2048以上 |
キー生成およびキー承諾の場合は2048以上 |
DSAパラメータ・ビット |
(プライム・サイズ、サブプライム・サイズ)は、キー生成およびシグネチャ生成の(2048、224)、(2048、256)または(3072、256)のいずれかです |
(プライム・サイズ、サブプライム・サイズ)は、キー生成およびシグネチャ生成「および検証」の(2048、224)、(2048、256)または(3072、256)のいずれかです |
DSAパラメータ・ビット |
シグネチャ検証のための素数size> 512bits |
この列の前の表のセルを参照してください |
EC曲線ビット |
キー生成、シグネチャ生成およびキー承諾の場合は224以上 |
キー生成、シグネチャ生成、「確認」およびキー承諾の場合は224以上 |
EC曲線ビット |
シグネチャ検証の場合は160以上 |
この列の前の表のセルを参照してください |
HMACキー・ビット |
MACの場合は0以上 |
MACの場合は112以上 |
メッセージ・ダイジェスト・アルゴリズム |
!= SHA-1(シグネチャ生成用) |
シグネチャ生成用の!= SHA-1 「および検証」 |
RSAキー・ビット |
非対称暗号化および復号化キーの生成およびシグネチャの生成の場合は2048以上 |
非対称暗号化および復号化キーの生成およびシグネチャの生成の場合は2048以上「および検証」 |
RSAキー・ビット |
シグネチャ検証の場合は1024以上。 |
この列の前の表のセルを参照してください |
RSAパディング |
!= PKCS1(非対称暗号化の場合) |
!= PKCS1(非対称暗号化の場合) |