OpenJCEPlus および OpenJCEPlusFIPS のプロバイダー
OpenJCEPlus および OpenJCEPlusFIPS 暗号プロバイダは、Java™ Cryptography Extensions(JCE)APIの実装であり、これには、例えば、暗号化、署名、メッセージダイジェスト、MACおよびHMAC、安全な乱数生成、鍵生成などが含まれます。 バージョン 8 の SDK では、このセキュリティー・プロバイダーは IBMJCEPlus プロバイダーと呼ばれていました。
OpenJCEPlus プロバイダーは、 IBM Z® ハードウェアへのネイティブインターフェースを使用し、対応している場合はハードウェアアクセラレーションによる暗号アルゴリズムを提供します。 OpenJCEPlusFIPS プロバイダーは、NIST認定のセキュリティを必要とするアプリケーション向けに、FIPS 140-3準拠の暗号化機能を提供します。 詳細については、 「FIPS 140-3 のテクノロジー プレビュー」 を参照してください。
- z17 メッセージ・セキュリティ・アシスト・エクステンション11を追加
- プロバイダーを通じて OpenJCEPlus プロバイダーを通して、Javaは新しいKMAC-HMAC-SHAファンクションコードを使用する
z17 HMACの性能向上は、次のように追加された。 17.0.15.0.
OpenJCEPlus プロバイダーの有効化
OpenJCEPlus セキュリティ・プロバイダは、 JAVA_HOME/conf/security/java.security ファイルにあるため、デフォルトで有効になっている。 代わりに別のプロバイダーをデフォルトとして使用する場合は、このファイルでそのプロバイダーを OpenJCEPlus プロバイダーの前に移動します。
OpenJCEPlus セキュリティ・プロバイダの適切な動作のために、暗号化機能用セントラル・プロセッサー・アシスト(CPACF)ハードウェア機能のインストールと初期化、および乱数ファイルの設定を行う。 CPACFはさまざまな暗号処理にハードウェア・アクセラレーションを提供し、 OpenJCEPlus、メインCPUからタスクをオフロードすることで暗号処理の効率を高めるために使用される。 CPACFが適切に初期化されていることを確認することは、 OpenJCEPlus が効果的に機能し、エンタープライズ・アプリケーションのセキュリティとパフォーマンスの要求を満たすために不可欠である。 CPACFがインストールされていないか、乱数ファイルが利用できない場合、 OpenJCEPlus、起動時に java.security.ProviderException: Failed to initialize OpenJCEPlus
provider エラーが発生することがある。 乱数ファイルの詳細については、 乱数ファイルを参照のこと。
FIPS 140-3 の技術プレビュー
Linux® on IBM Z および z/OS プラットフォーム上の OpenJCEPlusFIPS プロバイダーにおいて、FIPS 140-3対応の技術プレビューが利用可能です。 FIPS 140-3は、暗号セキュリティ規格における最新の進化形であり、エントロピー要件の強化、より厳格な自己テストプロトコルの導入、および従来の暗号上の脆弱性の解消を実現しています。
FIPS 140-2 から FIPS 140-3 への移行に関する包括的な情報(プラットフォームの対応状況、移行の要因、必要な暗号化および TLS の変更など)については、 「FIPS 140-2 から FIPS 140-3 への移行」 を参照してください。
IBM® Semeru Certified Edition for z/OS で FIPS 140-3 モードを有効にするための手順(プロファイルの選択や構成オプションを含む)については、 「FIPS 140-3 の有効化」を参照してください。
技術的な詳細については、 IBM Semeru Runtimes の FIPS 140-3 暗号ソリューションをご覧ください。
サポートされるアルゴリズム
次の表は、サポートされているアルゴリズムを示したものである。 今後のリリースでは、より多くのアルゴリズムをサポートする予定だ。
17.0.13: では、以下のアルゴリズムのサポートが追加されました- Password Based Encryption (PBE) アルゴリズムのパラメータ。
- PBEWith<digest>And<encryption>: 指定されたメッセージダイジェスト(<digest>)および暗号化アルゴリズム(<encryption>)を使用する、パスワードベースの暗号化アルゴリズム( PKCS#5 )。<digest>と<encryption>の組み合わせによっては、無効なものがある場合があります。
- <digest>には以下の値のいずれかを指定する:MD2、MD5、SHA、SHA1、HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512。
- <encryption>には以下の値のいずれかを指定します:DES、DESede、TripleDES, 2KeyTripleDES、3KeyTripleDES、RC4_40、RC4_128、AES_128、AES_256。
- PBEWith<digest>and<encryption>: 指定されたメッセージダイジェスト(<digest>)と暗号化アルゴリズム(<encryption>)を使ったパスワードベースの秘密鍵ファクトリーアルゴリズム。<digest> と <encryption> の組み合わせによっては有効でないものもあります。
- <digest>には以下の値を指定できます:MD2、MD5、SHA、SHA1、HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512。
- <encryption>には以下の値のいずれかを指定します:DES、DESede、TripleDES, 2KeyTripleDES、3KeyTripleDES、RC4_40、RC4_128、AES_128、AES_256。
- PBKDF2With<digest>:指定されたメッセージダイジェスト(<digest>)を用いたパスワードベースの秘密鍵生成アルゴリズム。
- <digest>には以下の値のいずれかを指定します:HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512。

17.0.4.0 では、AES/CCM モードのサポートが追加されました。
OpenJCEPlus プロバイダーは、2つの量子耐性アルゴリズムのサポートを導入することで、Javaアプリケーションのセキュリティを強化します:- ML-DSA(モジュール格子ベースのデジタル署名アルゴリズム) - FIPS 204で標準化され、データの完全性と身元認証を保証する。
- ML-KEM(モジュール格子ベース鍵カプセル化機構) - FIPS 203で標準化され、対称通信チャネルの保護に公開鍵暗号を使用する。

17.0.18.0: では、以下のアルゴリズムのサポートが追加されました- ML-DSA-44, ML-DSA-65, ML-DSA-87
- ML-KEM-512, ML-KEM-768, ML-KEM-1024

| API | サポートされるアルゴリズム |
|---|---|
| アルゴリズム・パラメーター | AES、CCM、 ChaCha20、 ChaCha20-Poly1305、DESede、DH、DSA、EC、 GCM、OAEP、PBE、 RSASSA-PSS |
| アルゴリズム・パラメーター生成プログラム | CCM、DH、DSA、EC、 GCM |
| 暗号アルゴリズム | AES、ChaCha20、ChaCha20-Poly1305、DESede、PBEWith<digest>And<encryption>、RSA |
| 暗号モード | AESは以下のモードをサポートします:CBC、CCM、 CFB8、 CFB128、CFB、ECB、 GCM、OFBDESede
は以下のモードをサポートします:CBC、ECBRSA は以下のモードをサポートします:null、ECB、 SSL |
| 鍵合意アルゴリズム | DH、ECDH、XDH、 X25519、 X448 |
鍵のカプセル化メカニズム![]() |
ML-KEM-512, ML-KEM-768, ML-KEM-1024![]() |
| キー・ファクトリー | ML-DSA-44, ML-DSA-65, ML-DSA-87, ML-KEM-512, ML-KEM-768, ML-KEM-1024, DH、DSA、EC、 EdDSA, Ed25519、 Ed448、RSA 、RSASSA-PSS、 XDH、 X25519、 X448 |
| 鍵生成プログラム | AES、 ChaCha20、DESede、 HmacMD5、 HmacSHA1、 HmacSHA256、 HmacSHA384、 HmacSHA512、 HmacSHA3-224、 HmacSHA3-256、 HmacSHA3-384、 kda-hkdf-with-sha512 |
| 鍵ペア生成プログラム | DH、DSA、EC、 ML-DSA-44, ML-DSA-65, ML-DSA-87, ML-KEM-512, ML-KEM-768, ML-KEM-1024, EdDSA, Ed25519, Ed448, RSA, RSASSA-PSS, XDH, X25519, X448 |
| メッセージ認証コード (MAC) | HmacMD5, HmacSHA1, HmacSHA224, HmacSHA256, HmacSHA384, HmacSHA512, HmacSHA3-224, HmacSHA3-256, HmacSHA3-384, HmacSHA3-512 |
| メッセージ・ダイジェスト (message digest) | MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA3-224, SHA3-256, SHA3-384, SHA3-512 |
| 秘密鍵ファクトリー | AES、ChaCha20、DESede、PBEWith<digest>And<encryption>、PBKDF2With<digest> |
| セキュア・ランダム | HASHDRBG、 SHA256DRBG (デフォルト)、 SHA512DRBG |
| 署名アルゴリズム | EdDSA, Ed25519, Ed448, ML-DSA-44, ML-DSA-65, ML-DSA-87, NONEwithDSA, NONEwithECDSA, NONEwithRSA, RSASSA-PSS, SHA1withDSA, SHA224withDSA, SHA256withDSA, SHA1withECDSA, SHA224withECDSA, SHA256withECDSA, SHA384withECDSA, SHA512withECDSA, SHA1withRSA, SHA224withRSA, SHA256withRSA, SHA384withRSA, SHA512withRSA, SHA3-224withDSA, SHA3-256withDSA, SHA3-384withDSA, SHA3-512withDSA, SHA3-224withECDSA, SHA3-256withECDSA, SHA3-384withECDSA, SHA3-512withECDSA, SHA3-224withRSA, SHA3-256withRSA, SHA3-384withRSA, SHA3-512withRSA |
サポートされる楕円曲線
secp256r1, 1.2.840.10045.3.1.7, NIST P-256と X9.62
prime256v1 は同じ曲線を参照します。 曲線名を使用して、 ECGenParameterSpec クラスで EC パラメーターを生成するためのパラメーター仕様を作成できます。| 曲線名 | オブジェクト ID | 追加の名前または別名 |
|---|---|---|
secp112r1 |
1.3.132.0.6 |
|
secp112r2 |
1.3.132.0.7 |
|
secp128r1 |
1.3.132.0.28 |
|
secp128r2 |
1.3.132.0.29 |
|
secp160k1 |
1.3.132.0.9 |
|
secp160r1 |
1.3.132.0.8 |
|
secp160r2 |
1.3.132.0.30 |
|
secp192k1 |
1.3.132.0.31 |
|
secp192r1 |
1.2.840.10045.3.1.1 |
NIST P-192, X9.62 prime192v1 |
secp224k1 |
1.3.132.0.32 |
|
secp224r1 |
1.3.132.0.33 |
NIST P-224 |
secp256k1 |
1.3.132.0.10 |
|
secp256r1 |
1.2.840.10045.3.1.7 |
NIST P-256, X9.62 prime256v1 |
secp384r1 |
1.3.132.0.34 |
NIST P-384 |
secp521r1 |
1.3.132.0.35 |
NIST P-521 |
X9.62 prime192v2 |
1.2.840.10045.3.1.2 |
|
X9.62 prime192v3 |
1.2.840.10045.3.1.3 |
|
X9.62 prime239v1 |
1.2.840.10045.3.1.4 |
|
X9.62 prime239v2 |
1.2.840.10045.3.1.5 |
|
X9.62 prime239v3 |
1.2.840.10045.3.1.6 |
|
brainpoolP160r1 |
1.3.36.3.3.2.8.1.1.1 |
|
brainpoolP192r1 |
1.3.36.3.3.2.8.1.1.3 |
|
brainpoolP224r1 |
1.3.36.3.3.2.8.1.1.5 |
|
brainpoolP256r1 |
1.3.36.3.3.2.8.1.1.7 |
|
brainpoolP320r1 |
1.3.36.3.3.2.8.1.1.9 |
|
brainpoolP384r1 |
1.3.36.3.3.2.8.1.1.11 |
|
brainpoolP512r1 |
1.3.36.3.3.2.8.1.1.13 |
既知の制限事項
- RSA 鍵サイズ 512、1024、2048、および 4096 のみがサポートされます。
- RSA 鍵の公開鍵指数は 65537 以上でなければなりません。
- RSA 秘密鍵は CRT (中国剰余定理) 鍵でなければなりません。 CRT パラメーターのない秘密鍵はサポートされません。 生成された鍵ペアには CRT 秘密鍵が含まれます。
- NoPadding オプションを指定した RSA 暗号化解除では、暗号化解除されたテキストに埋め込みバイトが残ることがあります。
- 2 進楕円曲線はサポートされていません。
- OpenJCEPlus のプロバイダーには、独自の鍵ストア実装がありません。 代わりに、鍵ストア実装 (JKS、JCEKS、 PKCS#12) は SUN プロバイダーおよび SunJCE プロバイダーから提供されます。
- OpenJCEPlusは、ECおよびXDHキー・ペア生成機能のrandomに対するユーザー入力をサポートしていないため、randomに対するユーザー入力はスキップされます
- OpenJCEPlus 現在、基盤となるネイティブライブラリで利用可能なすべてのアルゴリズムに対応しているわけではありません。 たとえば、データの暗号化および復号化におけるAES-CTRはサポートされていません。
AES-GCM 暗号化および暗号化解除 Cipher.update 操作は、以下の理由により、保護する必要がある大量のデータに対してのみ実行する必要があります。 認証タグは、 doFinal (Cipher.doFinal()) 操作でのみ検証できます。何らかの理由で doFinal 操作が失敗した場合は、前の update 操作から返されたすべてのプレーン・テキストを破棄する必要があります。 したがって、少量のデータの場合は、 doFinal 操作のみを実行することが賢明です。
AES-GCM は、暗号ストリーム API (CipherInputStream および CipherOutputStream) と共に使用することは推奨されません。これらの API は、前述のような AES-GCMの複雑さに対処するように設計されていないためです。
- RSASSA-PSS 署名は RSA プレーン・キーをサポートしません。
- RSASSA-PSS は、入力ダイジェスト・アルゴリズムとして SHA-1、 SHA-224、 SHA-256、 SHA-384、および SHA-512 をサポートします。
- EdDSA シグネチャーは、 または の2つの純粋なモードをサポートしている。 Ed25519 Ed448