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® のアップデートにより、 z/OS® プラットフォームで HMAC の以下のパフォーマンス向上が利用可能になりました。
  • z17 メッセージ・セキュリティ・アシスト・エクステンション11を追加
  • プロバイダーを通じて OpenJCEPlus プロバイダーを通して、Javaは新しいKMAC-HMAC-SHAファンクションコードを使用する

z17 HMACの性能向上は、次のように追加された。 17.0.15.0.

OpenJCEPlus プロバイダーの有効化

OpenJCEPlus セキュリティ・プロバイダは、 JAVA_HOME/conf/security/java.security ファイルにあるため、デフォルトで有効になっている。 代わりに別のプロバイダーをデフォルトとして使用する場合は、このファイルでそのプロバイダーを OpenJCEPlus プロバイダーの前に移動します。

注: プロバイダー・リストとプロバイダー・フェイルオーバー・メカニズムを使用する代わりに、プロバイダー名へのハードコードされた参照をアプリケーションに含んでいる場合、 java.security ファイルへの変更はアプリケーションに影響しない可能性があります。

17.0.13.00の変更開始 OpenJCEPlus セキュリティ・プロバイダの適切な動作のために、暗号化機能用セントラル・プロセッサー・アシスト(CPACF)ハードウェア機能のインストールと初期化、および乱数ファイルの設定を行う。 CPACFはさまざまな暗号処理にハードウェア・アクセラレーションを提供し、 OpenJCEPlus、メインCPUからタスクをオフロードすることで暗号処理の効率を高めるために使用される。 CPACFが適切に初期化されていることを確認することは、 OpenJCEPlus が効果的に機能し、エンタープライズ・アプリケーションのセキュリティとパフォーマンスの要求を満たすために不可欠である。 CPACFがインストールされていないか、乱数ファイルが利用できない場合、 OpenJCEPlus、起動時に java.security.ProviderException: Failed to initialize OpenJCEPlus provider エラーが発生することがある。 乱数ファイルの詳細については、 乱数ファイルを参照のこと。17.0.13.00の変更終了

FIPS 140-3 の技術プレビュー

17.0.19.0 への変更の開始Linux® on IBM Z および z/OS プラットフォーム上の OpenJCEPlusFIPS プロバイダーにおいて、FIPS 140-3対応の技術プレビューが利用可能です。 FIPS 140-3は、暗号セキュリティ規格における最新の進化形であり、エントロピー要件の強化、より厳格な自己テストプロトコルの導入、および従来の暗号上の脆弱性の解消を実現しています。17.0.19.0 の変更は以上です

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 暗号ソリューションをご覧ください。

サポートされるアルゴリズム

次の表は、サポートされているアルゴリズムを示したものである。 今後のリリースでは、より多くのアルゴリズムをサポートする予定だ。

重要:OpenJCEPlusFIPS プロバイダーを使用してFIPS 140-3モードで実行する場合、NIST承認済みのアルゴリズムのみが利用可能です。 この表に記載されているアルゴリズムの中には、FIPS 140-3 に基づき使用が制限または禁止されているものがあります。 FIPS 140-3 のアルゴリズムに関する要件および制限の詳細については、 「FIPS 140-2 から FIPS 140-3 への移行」 を参照してください。
17.0.13.00の変更開始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.13.00の変更終了

変更開始 17.0.14.017.0.4.0 では、AES/CCM モードのサポートが追加されました。変更終了 17.0.14.0

17.0.18.0 の変更開始OpenJCEPlus プロバイダーは、2つの量子耐性アルゴリズムのサポートを導入することで、Javaアプリケーションのセキュリティを強化します:
  • ML-DSA(モジュール格子ベースのデジタル署名アルゴリズム) - FIPS 204で標準化され、データの完全性と身元認証を保証する。
  • ML-KEM(モジュール格子ベース鍵カプセル化機構) - FIPS 203で標準化され、対称通信チャネルの保護に公開鍵暗号を使用する。
どちらも、将来の量子コンピューティングによる脅威に耐えられるよう特別に設計されています。 17.0.18.0 の変更終了
17.0.18.0 の変更開始17.0.18.0: では、以下のアルゴリズムのサポートが追加されました
  • ML-DSA-44, ML-DSA-65, ML-DSA-87
  • ML-KEM-512, ML-KEM-768, ML-KEM-1024
17.0.18.0 の変更終了

表 1. OpenJCEPlus プロバイダーでサポートされるアルゴリズム
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
17.0.18.0 の変更開始鍵のカプセル化メカニズム17.0.18.0 の変更終了 17.0.18.0 の変更開始ML-KEM-512, ML-KEM-768, ML-KEM-102417.0.18.0 の変更終了
キー・ファクトリー 17.0.18.0 の変更開始ML-DSA-44, ML-DSA-65, ML-DSA-87, ML-KEM-512, ML-KEM-768, ML-KEM-1024, 17.0.18.0 の変更終了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、 17.0.18.0 の変更開始ML-DSA-44, ML-DSA-65, ML-DSA-87, ML-KEM-512, ML-KEM-768, ML-KEM-1024, 17.0.18.0 の変更終了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, 17.0.18.0 の変更開始ML-DSA-44, ML-DSA-65, ML-DSA-87, 17.0.18.0 の変更終了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

サポートされる楕円曲線

以下の表に、 OpenJCEPlus プロバイダーがを実装する楕円曲線、それらのオブジェクト ID、およびそれらを参照するために使用される追加の名前または別名をリストします。 1 行に現れるすべてのストリングは、同じ曲線を参照します。 例えば、ストリング secp256r1, 1.2.840.10045.3.1.7, NIST P-256X9.62 prime256v1 は同じ曲線を参照します。 曲線名を使用して、 ECGenParameterSpec クラスで EC パラメーターを生成するためのパラメーター仕様を作成できます。
表 2. OpenJCEPlus によって実装される楕円曲線
曲線名 オブジェクト 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