4 JDKプロバイダ・ドキュメント
このドキュメントには、JDKに含まれるプロバイダの技術的詳細が含まれています。読者がJava暗号化アーキテクチャとプロバイダ・アーキテクチャを詳しく理解していることが前提となります。
ノート:
Javaセキュリティ標準アルゴリズム名には、このドキュメントで使用されている標準名に関する詳細な情報が含まれています。JDKプロバイダの概要
Javaプラットフォームでは、暗号化、公開キー・インフラストラクチャ、認証、安全な通信、アクセス制御など、主要なセキュリティ分野に渡る一連のAPIが定義されています。これらのAPIによって、開発者はアプリケーション・コードにセキュリティ・メカニズムを簡単に統合できます。
Java暗号化アーキテクチャ(JCA)およびそのプロバイダ・アーキテクチャは、Java Development Kit (JDK)のコア概念です。このアーキテクチャについて十分理解していることが前提となります。
注意: JDKでの暗号化実装は、歴史的な理由および提供するサービスの種類により、様々なプロバイダによって配布されています(Sun、SunJSSE、SunJCE、SunRsaSign)。汎用アプリケーションは、特定のプロバイダから暗号化サービスを要求しないようにする必要があります。つまり、
getInstance("...", "SunJCE");  // not recommendedと
getInstance("...");            // recommended後者のようにしないと、アプリケーションは特定のプロバイダに結び付けられることになり、そのプロバイダはほかのJava実装で使用できない可能性があります。特定の要求されたプロバイダよりも優先順位が高い、使用可能な最適化されたプロバイダ(たとえば、PKCS11によるハードウェア・アクセラレータまたはMicrosoftのMSCAPIなどのネイティブOS実装)を利用できない場合もあります。
次の表では、モジュール、およびサポートされているJava暗号化サービス・プロバイダをリストします。
表4-1 モジュールおよびJava暗号化サービス・プロバイダ
| モジュール | プロバイダ | 
|---|---|
| java.base | SUN、SunRsaSign、SunJSSE、SunJCE、Apple | 
| java.naming | JdkLDAP | 
| java.security.jgss | SunJGSS | 
| java.security.sasl | SunSASL | 
| java.smartcardio | SunPCSC | 
| java.xml.crypto | XMLDSig | 
| jdk.crypto.cryptoki | SunPKCS11 | 
| jdk.crypto.ec | SunEC | 
| jdk.crypto.mscapi | SunMSCAPI | 
| jdk.security.jgss | JdkSASL | 
暗号化アルゴリズムの輸入制限
デフォルトでは、アプリケーションは、どの強度の暗号化アルゴリズムでも使用できます。ただし、一部の場所での輸入規制のため、それらのアルゴリズムの強度を制限する必要がある場合があります。JDKでは、ディレクトリ<java-home>/conf/security/policyに、暗号化アルゴリズムの強度を決定する管轄ポリシー・ファイルのセットが2つ用意されています。管轄ポリシー・ファイル、およびそれらのアクティブ化の方法については、暗号化強度の構成を参照してください。
                     
自分の場所のための正確な要件を決定する際は、輸出入管理コンサルタントまたは弁護士に相談してください。
制限付きの構成のために、次の表では、制限付きの一連の管轄ポリシー・ファイルで許可されている最大キー・サイズをリストします。
表4-2 暗号化アルゴリズムの最大キー・サイズ
| アルゴリズム | 最大キー・サイズ | 
|---|---|
| DES | 64 | 
| DESede | * | 
| RC2 | 128 | 
| RC4 | 128 | 
| RC5 | 128 | 
| RSA | * | 
| その他すべて | 128 | 
暗号の変換
javax.crypto.Cipher.getInstance(String transformation)ファクトリ・メソッドは、algorithm/mode/padding形式の変換を使用してCipherオブジェクトを生成します。モード/パディングを省略すると、SunJCEプロバイダとSunPKCS11プロバイダは、多くの対称暗号でECBをデフォルト・モードとして、PKCS5Paddingをデフォルト・パディングとして使用します。
                  
デフォルトを使用するのではなく、アルゴリズム、モードおよびパディングを完全に指定した変換を使用することをお薦めします。デフォルトは、プロバイダ固有であり、プロバイダによって異なる可能性があります。
ノート:
ECBモードは最も簡単に使用できるブロック暗号モードであり、デフォルトの暗号モードになっています。ECBは、単一のデータ・ブロックに対しては正常に機能し、パラレル化可能ですが、モードの特性により、通常は複数のデータ・ブロックの暗号化には使用しないでください。これにより、機密データが簡単かつ完全に開示される可能性があります。このモードは使用可能ですが、関連する暗号化リスクを理解している場合にのみ使用してください。SecureRandom実装
次の表に、利用可能なSecureRandom実装のデフォルトの優先順位を示します。
                  
表4-3 デフォルトのSecureRandom実装
| OS | アルゴリズム名 | プロバイダ名 | 
|---|---|---|
| Solaris | 1. PKCS11脚注1脚注2 | SunPKCS11 | 
| 2. NativePRNG脚注3 | SUN | |
| 3. DRBG | SUN | |
| 4. SHA1PRNG脚注3 | SUN | |
| 5. NativePRNGBlocking | SUN | |
| 6. NativePRNGNonBlocking | SUN | |
| Linux | 1. NativePRNG脚注3 | SUN | 
| 2. DRBG | SUN | |
| 3. SHA1PRNG脚注3 | SUN | |
| 4. NativePRNGBlocking | SUN | |
| 5. NativePRNGNonBlocking | SUN | |
| macOS | 1. NativePRNG脚注3 | SUN | 
| 2. DRBG | SUN | |
| 3. SHA1PRNG脚注3 | SUN | |
| 4. NativePRNGBlocking | SUN | |
| 5. NativePRNGNonBlocking | SUN | |
| Windows | 1. DRBG | SUN | 
| 2. SHA1PRNG | SUN | |
| 3. Windows-PRNG脚注4 | SunMSCAPI | 
脚注1 SunPKCS11プロバイダはすべてのプラットフォームで利用可能ですが、これがデフォルトで有効になっているのは、ネイティブのPKCS11実装が自動的にインストールおよび構成される唯一のOSであるSolarisのみです。他のプラットフォームでは、アプリケーションまたはデプロイヤが特にネイティブPKCS11ライブラリをインストールして構成し、それを使用できるようにSunPKCS11を構成して有効にする必要があります。
脚注2 SolarisのPKCS11 SecureRandom実装は、小さいサイズの要求のパフォーマンス・オーバーヘッドが原因で、無効になっています(JDK-8098581: SecureRandom.nextBytes() hurts performance with small size requestsを参照)。再度有効にするには、sunpkcs11-solaris.cfgを編集します。
                     
脚注3 Solaris、LinuxおよびOS Xでは、java.securityのエントロピ収集デバイスをfile:/dev/urandomまたはfile:/dev/randomに設定すると、SHA1PRNGよりNativePRNGが優先されます。それ以外の場合は、SHA1PRNGが優先されます。
                     
脚注4 Windowsには現在NativePRNGはありません。同等の機能を利用するには、SunMSCAPIプロバイダを使用します。
SunPKCS11プロバイダ
暗号化トークン・インタフェース標準(PKCS#11)は、ハードウェア暗号化アクセラレータやスマート・カードなどの暗号化メカニズムに対するネイティブ・プログラミング・インタフェースを提供しています。SunPKCS11プロバイダを適切に構成すると、アプリケーションは標準のJCA/JCE APIを使用してネイティブPKCS#11ライブラリにアクセスできるようになります。SunPKCS11プロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とネイティブPKCS11プロバイダ間のコンジットとして機能します。このプロバイダの詳細は、「PKCS#11リファレンス・ガイド」を参照してください。
                     
SUNプロバイダ
アルゴリズム
SUNプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-4 SUNプロバイダでのアルゴリズム
| エンジン | アルゴリズム名 | 
|---|---|
| AlgorithmParameterGenerator | DSA | 
| AlgorithmParameters | DSA | 
| CertificateFactory | X.509 | 
| CertPathBuilder | PKIX | 
| CertPathValidator | PKIX | 
| CertStore | Collection | 
| Configuration | JavaLoginConfig | 
| KeyFactory | DSA | 
| KeyPairGenerator | DSA | 
| KeyStore | PKCS12脚注5 JKS DKS CaseExactJKS | 
| MessageDigest | MD2 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 | 
| Policy | JavaPolicy | 
| SecureRandom | DRBG (次のメカニズムとアルゴリズムがサポートされています。SHA-224、SHA-512/224、SHA-256、SHA-512/256、SHA-384およびSHA-512を使用するHash_DRBGおよびHMAC_DRBG。AES-128、AES-192およびAES-256を使用するCTR_DRBG (導出関数を使用する場合と使用しない場合がある)。各組合せでサポートされている予測耐性と再シード、およびセキュリティ強度は、112から、それがサポートする最大強度まで要求できます。) SHA1PRNG (初期シードは、現在、システム属性と NativePRNG ( NativePRNGBlocking ( NativePRNGNonBlocking ( | 
| Signature | NONEwithDSA SHA1withDSA SHA224withDSA SHA256withDSA NONEwithDSAinP1363Format SHA1withDSAinP1363Format SHA224withDSAinP1363Format SHA256withDSAinP1363Format ノート:署名の生成では、ダイジェスト・アルゴリズムのセキュリティ強度が署名に使用されたキーのセキュリティ強度より弱い場合(SHA1withDSA署名による(2048、256)ビットのDSAキーの使用など)は、操作が失敗し、次のエラー・メッセージが表示されます: 「SHA1ダイジェスト・アルゴリズムのセキュリティ強度が、このキー・サイズに対して十分ではありません。」 | 
脚注5 PKCS12 KeyStore実装は、KeyBagタイプをサポートしていません。
SHAメッセージ・ダイジェストとDSA署名に関連付けられたOID
次の表に、SHAメッセージ・ダイジェストに関連付けられたOIDを示します。
表4-5 SHAメッセージ・ダイジェストに関連付けられたOID
| SHAメッセージ・ダイジェスト | OID | 
|---|---|
| SHA-224 | 2.16.840.1.101.3.4.2.4 | 
| SHA-256 | 2.16.840.1.101.3.4.2.1 | 
| SHA-384 | 2.16.840.1.101.3.4.2.2 | 
| SHA-512 | 2.16.840.1.101.3.4.2.3 | 
| SHA-512/224 | 2.16.840.1.101.3.4.2.5 | 
| SHA-512/256 | 2.16.840.1.101.3.4.2.6 | 
| SHA3-224 | 2.16.840.1.101.3.4.2.7 | 
| SHA3-256 | 2.16.840.1.101.3.4.2.8 | 
| SHA3-384 | 2.16.840.1.101.3.4.2.9 | 
| SHA3-512 | 2.16.840.1.101.3.4.2.10 | 
次の表に、DSA署名に関連付けられたOIDを示します。
表4-6 DSA署名に関連付けられたOID
| DSA署名 | OID | 
|---|---|
| SHA1withDSA | 1.2.840.10040.4.3 1.3.14.3.2.13 1.3.14.3.2.27 | 
| SHA224withDSA | 2.16.840.1.101.3.4.3.1 | 
| SHA256withDSA | 2.16.840.1.101.3.4.3.2 | 
キー・サイズの制限
SUNプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
                     
表4-7 KeyPairGeneratorアルゴリズムのキー・サイズの制限
| アルゴリズム名 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| DSA | 2048 | キー・サイズは、512から1024の範囲で64の倍数であるか、2048および3072である必要があります。 | 
表4-8 AlgorithmParameterGeneratorアルゴリズムのキー・サイズの制限
| アルゴリズム名 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| DSA | 2048 | キー・サイズは、512から1024の範囲で64の倍数であるか、2048および3072である必要があります。 | 
CertificateFactory/CertPathBuilder/CertPathValidator/CertStore実装
CertificateFactory、CertPathBuilder、CertPathValidatorおよびCertStoreのSUNプロバイダ実装の詳細は、「Java PKIプログラマーズ・ガイド」の「付録B: SUNプロバイダでのCertPath実装」を参照してください。
                     
SunRsaSignプロバイダ
アルゴリズム
SunRsaSignプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-9 SunRsaSignプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| AlgorithmParameters | RSASSA-PSS | 
| KeyFactory | RSA RSASSA-PSS | 
| KeyPairGenerator | RSA RSASSA-PSS | 
| Signature | MD2withRSA MD5withRSA SHA1withRSA SHA224withRSA SHA256withRSA SHA384withRSA SHA512withRSA SHA512/224withRSA SHA512/256withRSA RSASSA-PSS | 
キー・サイズの制限
SunRsaSignプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
                     
表4-10 SunRsaSignプロバイダのキー・サイズの制限
| アルゴリズム名前 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| RSAおよびRSASSA-PSS | 2048 | キー・サイズは、512から16384ビットの範囲内である必要があります。キーのサイズが3072を超えると、公開指数の長さは64ビットを超えることはできません。 | 
SunJSSEプロバイダ
アルゴリズム
SunJSSEプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-11 SunJSSEプロバイダでのアルゴリズム
| エンジン | アルゴリズム名 | 
|---|---|
| KeyFactory | RSA ノート: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 | 
| KeyManagerFactory | PKIX:  SunX509:  ノート: SunX509ファクトリは、以前のリリースとの下位互換性のためにあるため、使用しなでください。 | 
| KeyPairGenerator | RSA ノート: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 | 
| KeyStore | PKCS12 ノート: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 | 
| Signature | MD2withRSA MD5withRSA SHA1withRSA ノート: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 | 
| SSLContext | SSL SSLv3 TLS TLSv1 TLSv1.1 TLSv1.2 TLSv1.3 DTLS DTLSv1.0 DTLSv1.2 | 
| TrustManagerFactory | PKIX:  SunX509:  ノート: SunX509ファクトリは、以前のリリースとの下位互換性のためにあるため、使用しなでください。 | 
SunJSSEプロバイダのプロトコルのパラメータ
SunJSSEプロバイダは、表4-12に示すprotocolパラメータをサポートしています。
                     
表4-12 SunJSSEプロバイダのプロトコルのパラメータ
| プロトコル | クライアントではデフォルトで有効 | サーバーではデフォルトで有効 | 
|---|---|---|
| SSLv3 | いいえ | いいえ | 
| TLS | はい | はい | 
| TLSv1脚注6 | いいえ | いいえ | 
| TLSv1.1脚注6 | いいえ | いいえ | 
| TLSv1.2 | はい | はい | 
| TLSv1.3 | はい | はい | 
| SSLv2Hello | いいえ | はい | 
| DTLS | はい | はい | 
| DTLSv1.0 | はい | はい | 
| DTLSv1.2 | はい | はい | 
脚注6 TLS 1.0および1.1は、安全とはみなされなくなったTLSプロトコルのバージョンであり、より安全で最新のバージョン(TLS 1.2および1.3)に置き換えられました。これらのバージョンは、デフォルトで無効になっています。問題が発生した場合は、自己責任になりますが、java.security構成ファイルのjdk.tls.disabledAlgorithmsセキュリティ・プロパティからTLSv1またはTLSv1.1を削除すると、これらのバージョンを再度有効化できます。
                     
ノート:
新しいプロトコルが開発され、古いプロトコルの有効性が以前よりも低下したと判断されると、JDKのリリースでデフォルトで使用可能なプロトコルは変更されます。JDKでは、次の2つのメカニズムで、これらのプロトコルを使用するかどうかを制限します:
- jdk.tls.disabledAlgorithmsセキュリティ・プロパティ: プロトコルおよび暗号スイートのカテゴリを無効にします。たとえば、このセキュリティ・プロパティに- SSLv3が含まれている場合、SSLv3プロトコルが無効になります。このセキュリティ・プロパティの詳細は、「無効化された制限付き暗号化アルゴリズム」を参照してください。
- 表4-12に示すように、デフォルトで有効になっていないプロトコルのリストにプロトコルを移動します。
SunJSSE暗号化方式群
次に、このJDKリリースで現在実装されているSunJSSE暗号化方式群を優先度順に示します。これらの暗号化方式群の一部はデフォルトで使用可能になっていません。各暗号化方式群でサポートされているプロトコルを確認するには、『Javaセキュリティ標準アルゴリズム名』の「JSSE暗号化方式群名」を参照してください。
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
- SSL_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
- SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
- SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
- TLS_EMPTY_RENEGOTIATION_INFO_SCSV
- TLS_DH_anon_WITH_AES_256_GCM_SHA384
- TLS_DH_anon_WITH_AES_128_GCM_SHA256
- TLS_DH_anon_WITH_AES_256_CBC_SHA256
- TLS_ECDH_anon_WITH_AES_256_CBC_SHA
- TLS_DH_anon_WITH_AES_256_CBC_SHA
- TLS_DH_anon_WITH_AES_128_CBC_SHA256
- TLS_ECDH_anon_WITH_AES_128_CBC_SHA
- TLS_DH_anon_WITH_AES_128_CBC_SHA
- TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
- SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
- TLS_ECDHE_RSA_WITH_RC4_128_SHA
- SSL_RSA_WITH_RC4_128_SHA
- TLS_ECDH_ECDSA_WITH_RC4_128_SHA
- TLS_ECDH_RSA_WITH_RC4_128_SHA
- SSL_RSA_WITH_RC4_128_MD5
- TLS_ECDH_anon_WITH_RC4_128_SHA
- SSL_DH_anon_WITH_RC4_128_MD5
- SSL_RSA_WITH_DES_CBC_SHA
- SSL_DHE_RSA_WITH_DES_CBC_SHA
- SSL_DHE_DSS_WITH_DES_CBC_SHA
- SSL_DH_anon_WITH_DES_CBC_SHA
- SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
- SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
- SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
- SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
- SSL_RSA_EXPORT_WITH_RC4_40_MD5
- SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
- TLS_RSA_WITH_NULL_SHA256
- TLS_ECDHE_ECDSA_WITH_NULL_SHA
- TLS_ECDHE_RSA_WITH_NULL_SHA
- SSL_RSA_WITH_NULL_SHA
- TLS_ECDH_ECDSA_WITH_NULL_SHA
- TLS_ECDH_RSA_WITH_NULL_SHA
- TLS_ECDH_anon_WITH_NULL_SHA
- SSL_RSA_WITH_NULL_MD5
ノート:
- 暗号化方式群の優先順位は今後のリリースで変更される可能性があります。
- TLS_EMPTY_RENEGOTIATION_INFO_SCSVは、RFC 5746をサポートする擬似暗号化方式群です。
新しいアルゴリズムが開発され、旧アルゴリズムの有効性が以前よりも低下したと判断されると、JDKリリースのデフォルトで使用可能な暗号化方式群は変更されます。Oracle JDKでは次の2つのメカニズムを使用して、これらのアルゴリズムの使用可能性を制限します。
- jdk.tls.disabledAlgorithmsセキュリティ・プロパティ(暗号化方式群のカテゴリを無効化)。たとえば、このセキュリティ・プロパティに- RC4が含まれていると、すべてのRC4ベースの暗号化方式群が無効化されます。
- 暗号化方式群を、デフォルトで有効化されない方式群のリストに移動。
 jdk.tls.disabledAlgorithmsセキュリティ・プロパティの詳細は、「無効化された制限付き暗号化アルゴリズム」を参照してください。
                     
デフォルトで使用可能な暗号化方式群の現行リストの確認
デフォルトで使用可能な暗号化方式群の現行リストを確認するには、アプリケーションAvailableCipherSuites.javaを実行します。
                     
import java.util.*;
import java.security.*;
import javax.net.ssl.*;
public class AvailableCipherSuites {
    public static void main(String[] args) throws Exception {
        // If an argument is present, then remove the
        // jdk.tls.disabledAlgorithms restrictions and
        // print all implemented cipher suites. 
        if (args.length != 0) {
            Security.setProperty("jdk.tls.disabledAlgorithms", "");
        }
        SSLContext sslc = SSLContext.getDefault();
        SSLSocketFactory sslf = sslc.getSocketFactory();
        SSLSocket ssls = (SSLSocket) sslf.createSocket();
        ArrayList<String> enabled = new ArrayList(
                Arrays.asList(ssls.getEnabledCipherSuites()));
        ArrayList<String> supported = new ArrayList(
                Arrays.asList(ssls.getSupportedCipherSuites()));
        supported.removeAll(enabled);
        System.out.println("Enabled by Default Cipher Suites");
        System.out.println("--------------------------------");
        enabled.stream().forEach(System.out::println);
        System.out.println();
        System.out.println("Not Enabled by Default Cipher Suites");
        System.out.println("------------------------------------");
        supported.stream().forEach(System.out::println);
    }
}引数が指定されていない場合、このアプリケーションはSSLSocket.getSupportedCipherSuites()およびSSLSocket.getEnabledCipherSuites()メソッドを呼び出して、jdk.tls.disabledAlgorithmsセキュリティ・プロパティで無効化されていない、有効かつサポートされている使用可能な暗号化方式群を出力します。引数を指定してこのアプリケーションを実行すると、セキュリティ・プロパティにより無効化制限が削除され、使用可能なすべての暗号化方式群が出力されます。
                     
別の方法として、デフォルトで使用可能なプロトコルおよび暗号化方式群の現行リストを取得するには、次のコマンドを実行します:
java -XshowSettings:security:tlsこれらのコマンドによって生成されるリストには、jdk.tls.disabledAlgorithmsセキュリティ・プロパティが無効化されている方式群は含まれないことに注意してください。
                     
EncryptedPreMasterSecretバージョン番号チェックの強化
JDK 7リリースより前のSSL/TLS実装では、PreMasterSecret内のバージョン番号がチェックされず、SSL/TLSクライアントからデフォルトで正しいバージョン番号が送信されませんでした。システム・プロパティcom.sun.net.ssl.rsaPreMasterSecretFixがtrueに設定されないかぎり、TLSクライアントはアクティブなネゴシエートされたバージョンを送信しますが、クライアントでサポートされる予想最大バージョンは送信しません。
                     
SSLバージョン3.0およびTLSバージョン1.0では、互換性のため、この動作は保持されます。しかし、TLSバージョン1.1以降の実装では、RFC 5246の要求に従って、PreMasterSecretバージョン番号のチェックが強化されています。クライアントは常に正しいバージョン番号を送信し、サーバーはバージョン番号を厳密にチェックします。TLS 1.1以降では、システム・プロパティcom.sun.net.ssl.rsaPreMasterSecretFixは使用されません。
                     
SunJCEプロバイダ
アルゴリズム
SunJCEプロバイダでは、次のアルゴリズムを使用できます。
表4-13 SunJCEプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| AlgorithmParameterGenerator | DiffieHellman | 
| AlgorithmParameters | AES Blowfish DES DESede DiffieHellman GCM OAEP PBE PBES2 PBEWithHmacSHA1AndAES_128 PBEWithHmacSHA224AndAES_128 PBEWithHmacSHA256AndAES_128 PBEWithHmacSHA384AndAES_128 PBEWithHmacSHA512AndAES_128 PBEWithHmacSHA1AndAES_256 PBEWithHmacSHA224AndAES_256 PBEWithHmacSHA256AndAES_256 PBEWithHmacSHA384AndAES_256 PBEWithHmacSHA512AndAES_256 PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBEWithSHA1AndRC2_128 PBEWithSHA1AndRC4_40 PBEWithSHA1AndRC4_128 RC2 | 
| Cipher | 表4-14を参照してください | 
| KeyAgreement | DiffieHellman | 
| KeyFactory | DiffieHellman | 
| KeyGenerator | AES ARCFOUR Blowfish DES DESede HmacMD5 HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 RC2 | 
| KeyPairGenerator | DiffieHellman | 
| KeyStore | JCEKS | 
| Mac | HmacMD5 HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 HmacSHA512/224 HmacSHA512/256 HmacPBESHA1 PBEWithHmacSHA1 PBEWithHmacSHA224 PBEWithHmacSHA256 PBEWithHmacSHA384 PBEWithHmacSHA512 | 
| SecretKeyFactory | DES DESede PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBEWithSHA1AndRC2_128 PBEWithSHA1AndRC4_40 PBEWithSHA1AndRC4_128 PBKDF2WithHmacSHA1 PBKDF2WithHmacSHA224 PBKDF2WithHmacSHA256 PBKDF2WithHmacSHA384 PBKDF2WithHmacSHA512 PBEWithHmacSHA1AndAES_128 PBEWithHmacSHA224AndAES_128 PBEWithHmacSHA256AndAES_128 PBEWithHmacSHA384AndAES_128 PBEWithHmacSHA512AndAES_128 PBEWithHmacSHA1AndAES_256 PBEWithHmacSHA224AndAES_256 PBEWithHmacSHA256AndAES_256 PBEWithHmacSHA384AndAES_256 PBEWithHmacSHA512AndAES_256 | 
暗号の変換
次の表では、SunJCEプロバイダで使用できる暗号変換を示します。
表4-14 SunJCEプロバイダの暗号変換
| アルゴリズム名 | モード | パディング | 
|---|---|---|
| AES | ECB、CBC、PCBC、CFB脚注7、CFB8..CFB128、OFB脚注7、OFB8..OFB128 | NoPadding、PKCS5Padding、ISO10126Padding脚注8 | 
| AES | CTR、CTS、GCM | NoPadding | 
| AES_128、AES_192、AES_256 | ECB、CBC、OFB、CFB、GCM | NoPadding | 
| AESWrap | ECB | NoPadding | 
| AESWrap_128 | ECB | NoPadding | 
| AESWrap_192 | ECB | NoPadding | 
| AESWrap_256 | ECB | NoPadding | 
| ARCFOUR | ECB | NoPadding | 
| Blowfish、DES、DESede、RC2 | ECB、CBC、PCBC、CTR、CTS、CFB脚注7、CFB8..CFB64、OFB脚注7、OFB8..OFB64 | NoPadding、PKCS5Padding、ISO10126Padding | 
| DESedeWrap | CBC | NoPadding | 
| PBEWithMD5AndDES、PBEWithMD5AndTripleDES脚注9、PBEWithSHA1AndDESede、PBEWithSHA1AndRC2_40、PBEWithSHA1AndRC2_128、PBEWithSHA1AndRC4_40、PBEWithSHA1AndRC4_128、PBEWithHmacSHA1AndAES_128、PBEWithHmacSHA224AndAES_128、PBEWithHmacSHA256AndAES_128、PBEWithHmacSHA384AndAES_128、PBEWithHmacSHA512AndAES_128、PBEWithHmacSHA1AndAES_256、PBEWithHmacSHA224AndAES_256、PBEWithHmacSHA256AndAES_256、PBEWithHmacSHA384AndAES_256、PBEWithHmacSHA512AndAES_256 | CBC | PKCS5Padding | 
| RSA | ECB | NoPadding、PKCS1Padding、OAEPPadding、OAEPWithMD5AndMGF1Padding、OAEPWithSHA‑1AndMGF1Padding、OAEPWithSHA‑1AndMGF1Padding、OAEPWithSHA‑224AndMGF1Padding、OAEPWithSHA‑256AndMGF1Padding、OAEPWithSHA‑384AndMGF1Padding、OAEPWithSHA‑512AndMGF1Padding、OAEPWithSHA‑512/224AndMGF1Padding、OAEPWithSHA‑512/256AndMGF1Padding | 
脚注7 値指定なしのCFB/OFBは、デフォルトでアルゴリズムのブロック・サイズになります(たとえば、AESは128で、Blowfish、DES、DESedeおよびRC2は64です。)
脚注8 パディング・バイトがランダムであることが標準で規定または要求されているわけではありませんが、Java SE ISO10126Padding実装では、ランダムなバイトで埋められます(最後のバイトまで埋められるため、指定どおりのパディングの長さになります)。
脚注9 PBEWithMD5AndTripleDESは、標準化されていない独自のアルゴリズムです。
キー・サイズの制限
SunJCEプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
表4-15 KeyGeneratorキー・サイズの制限
| アルゴリズム名 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| AES | 128 | キー・サイズは128、192、または256にする必要があります。 | 
| ARCFOUR (RC4) | 128 | キー・サイズは、40から1024の範囲内である必要があります。 | 
| Blowfish | 128 | キー・サイズは、32から448の範囲で、8の倍数である必要があります。 | 
| DES | 56 | キー・サイズは56にする必要があります。 | 
| DESede (トリプルDES) | 168 | キー・サイズは112または168にする必要があります。 キー・サイズが112の場合には2つの中間キーを保持するトリプルDESキーが、168の場合には3つの中間キーを保持するトリプルDESキーが、それぞれ生成されます。 「Meet-In-The-Middle」問題のため、112ビットまたは168ビットのキー・データが使用されますが、有効なキー・サイズはそれぞれ80ビットまたは112ビットです。 | 
| HmacMD5 | 512 | キー・サイズの制限はありません。 | 
| HmacSHA1 | 512 | キー・サイズの制限はありません。 | 
| HmacSHA224 | 224 | キー・サイズの制限はありません。 | 
| HmacSHA256 | 256 | キー・サイズの制限はありません。 | 
| HmacSHA384 | 384 | キー・サイズの制限はありません。 | 
| HmacSHA512 | 512 | キー・サイズの制限はありません。 | 
| RC2 | 128 | キー・サイズは、40から1024の範囲内である必要があります。 | 
ノート:
各種のパスワードベース暗号化(PBE)アルゴリズムは、様々なアルゴリズムを使用してキー・データを生成し、最終的にターゲットのCipherアルゴリズムに依存します。たとえば、PBEWithMD5AndDESは常に56ビットのキーを生成します。
表4-16 KeyPairGeneratorアルゴリズムのキー・サイズの制限
| アルゴリズム名 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| Diffie-Hellman (DH) | 2048 | キー・サイズは、512から1024の範囲で64の倍数であるか、1536、2048、3072、4096、6144、8192である必要があります。 | 
表4-17 AlgorithmParameterGeneratorアルゴリズムのキー・サイズの制限
| アルゴリズム名 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| Diffie-Hellman (DH) | 2048 | キー・サイズは、512から1024の範囲で64の倍数であるか、2048および3072である必要があります。 | 
SunJGSSプロバイダ
アルゴリズム
SunJGSSプロバイダでは、次のアルゴリズムを使用できます。
表4-18 SunJGSSプロバイダ・アルゴリズム名
| OID | 名前 | 
|---|---|
| 1.2.840.113554.1.2.2 | Kerberos v5 | 
| 1.3.6.1.5.5.2 | SPNEGO | 
SunSASLプロバイダ
アルゴリズム
SunSASLプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-19 SunSASLプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| SaslClient | CRAM-MD5 DIGEST-MD5 EXTERNAL NTLM PLAIN | 
| SaslServer | CRAM-MD5 DIGEST-MD5 NTLM | 
XMLDSigプロバイダ
アルゴリズム
XMLDSigプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-20 XMLDSigプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| KeyInfoFactory | DOM | 
| TransformService | 
 | 
| XMLSignatureFactory | DOM | 
SunPCSCプロバイダ
SunPCSCプロバイダを使用すると、アプリケーションはJavaスマート・カードI/O APIを使用して、ベースとなるオペレーティング・システムのPC/SCスマート・カード・スタックと相互に作用することができます。詳細は、オペレーティング・システムのドキュメントを参照してください。
SolarisおよびLinuxでは、SunPCSCはlibpcsclite.soライブラリを使用してPC/SCスタックにアクセスします。これは、ディレクトリ/usr/$LIBISAおよび/usr/local/$LIBISA内でこのライブラリを検索します。$LIBISAは、64ビットのSolarisではlib/64、64ビットのLinuxではlib64にそれぞれ展開されます。システム・プロパティsun.security.smartcardio.libraryが、代替のlibpcsclite.so実装の完全なファイル名に設定される場合もあります。Windowsでは、SunPCSCは常にwinscard.dllを呼び出すため、Javaレベルの構成は不要であり、行うことができません。
                     
ホスト・プラットフォームでPC/SCが使用可能な場合、SunPCSC実装はTerminalFactory.getDefault()およびTerminalFactory.getInstance("PC/SC")を介して取得できます。PC/SCが使用可能でないか、または正しく構成されていない場合、getInstance()の呼出しはNoSuchAlgorithmExceptionで失敗し、getDefault()は端末をサポートしないJDK組込み実装を返します。
                     
アルゴリズム
SunPCSCプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-21 SunPCSCプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| TerminalFactory | PC/SC | 
SunMSCAPIプロバイダ
SunMSCAPIプロバイダを使用すると、アプリケーションは標準のJCA/JCE APIを使用して、Windowsのネイティブ暗号化ライブラリ、証明書ストアおよびキー・コンテナにアクセスできます。SunMSCAPIプロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とWindowsのネイティブ暗号化サービス間のコンジットとして機能します。
                  
アルゴリズム
SunMSCAPIプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-22 SunMSCAPIのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| Cipher | RSA RSA/ECB/PKCS1Paddingのみ | 
| KeyPairGenerator | RSA | 
| KeyStore | Windows-MY-CURRENTUSER (Windows-MYとも呼ばれます): ネイティブMicrosoft Windows MYキーストアを識別するキーストア・タイプ。現在のユーザー・アカウントのみがアクセスできる、ユーザーの個人証明書および関連する秘密キーが含まれています。 Windows-ROOT-CURRENTUSER (Windows-ROOTとも呼ばれます): ネイティブMicrosoft Windows ROOTキーストアを識別するキーストア・タイプ。現在のユーザー・アカウントのみがアクセスできる、ルート認証局の証明書および他の信頼できる自己署名証明書が含まれています。 Windows-MY-LOCALMACHINE: ネイティブMicrosoft Windows MYキーストアを識別するキーストア・タイプ。システム上のすべてのアカウントがアクセスできる、証明書および関連する秘密キーが含まれています。 Windows-ROOT-LOCALMACHINE: ネイティブMicrosoft Windows ROOTキーストアを識別するキーストア・タイプ。システム上のすべてのアカウントがアクセスできる、ルート認証局の証明書および他の信頼できる自己署名証明書が含まれています。 | 
| SecureRandom | Windows-PRNG: ネイティブ擬似乱数生成(PRNG)アルゴリズムの名前。 | 
| Signature | MD5withRSA MD2withRSA NONEwithRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA RSASSA-PSS | 
キー・サイズの制限
SunMSCAPIプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
KeyGenerator
表4-23 SunMSCAPIプロバイダのキー・サイズの制限
| アルゴリズム名前 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| RSA | 2048 | キー・サイズの範囲は512ビットから16,384ビットです。ベースとなるMicrosoft Windows暗号化サービス・プロバイダによって異なります。 | 
SunECプロバイダ
SunECプロバイダは、楕円曲線暗号(ECC)を実装します。RSAのような従来の暗号システムと比べて、ECCではより小さいキー・サイズで同等のセキュリティが提供されるため、計算の高速化、消費電力の削減、メモリーと帯域幅の節約を実現できます。アプリケーションは、(SunPKCS11を通じて)外部のECCライブラリに依存せずに、標準のJCA/JCE APIを使用してECCの機能にアクセスできます。
                  
アルゴリズム
SunECプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-24 エンジン・クラスのSunECプロバイダ名
| エンジン | アルゴリズム名 | 
|---|---|
| AlgorithmParameters | EC | 
| KeyAgreement | ECDH脚注10、X25519、X448、XDH | 
| KeyFactory | EC、X25519、X448、XDH | 
| KeyPairGenerator | EC脚注10、X25519、X448、XDH | 
| Signature | NONEwithECDSA脚注10 SHA1withECDSA脚注10 SHA224withECDSA脚注10 SHA256withECDSA脚注10 SHA384withECDSA脚注10 SHA512withECDSA脚注10 NONEwithECDSAinP1363Format脚注10 SHA1withECDSAinP1363Format脚注10 SHA224withECDSAinP1363Format脚注10 SHA256withECDSAinP1363Format脚注10 SHA384withECDSAinP1363Format脚注10 SHA512withECDSAinP1363Format脚注10 | 
脚注10 SunECプロバイダのネイティブ・ライブラリを削除した場合、このアルゴリズムをJCA/JCE APIを介してSunECプロバイダから使用することはできません。「SunECプロバイダのネイティブ・ライブラリを削除することの影響」を参照してください。
                     
ノート:
- XDHアルゴリズムは、X25519またはX448のパラメータまたはキーを使用して初期化できます。
- X25519アルゴリズムはX25519のパラメータおよびキーのみをサポートします。同様に、X448アルゴリズムはX448のパラメータおよびキーのみをサポートします。
SunECプロバイダのネイティブ・ライブラリを削除することの影響
SunECプロバイダは、一部のECC機能の提供にネイティブ・ライブラリを使用しています。このネイティブ・ライブラリを使用しない場合は、(ご使用のオペレーティング・システムに応じて)次のファイルを削除してください:
                     
- Linux: $JAVA_HOME/lib/libsunec.so
- macOS: $JAVA_HOME/lib/libsunec.dylib
- Windows: %JAVA_HOME%\bin\sunec.dll
ネイティブ・ライブラリを削除すると、表4-24で脚注の付いているアルゴリズムは、JCA/JCE APIを介してSunECプロバイダから使用できなくなります。
                     
ノート:
インストールされているその他のプロバイダ(SunPCKS11など)では、引き続きこれらのアルゴリズムが提供されます。
                     これらのアルゴリズムを使用するライブラリやツール(JSSE、XML Digital Signature、keytoolなど)は、機能が少なくなります。たとえば、JSSEでは、ECキーペアの生成や、ECベースのピア証明書の使用、SSL/TLS/DTLS接続用のECDH/ECDHEキー協定の実行ができなくなります。TLS_*_ECDSAやTLS_ECDHE_*などの暗号化方式群は使用できなくなります。SSL/TLS接続でも、RSA/DSAベースの証明書や、DH/DHE (RFC 2631)、FFDHE (RFC 7919)、XDH/x25519/x448 (RFC 7748)をベースとしたキー協定など、かわりのアルゴリズムを使用して引き続き接続を保護できます。
残りのアルゴリズム(脚注のないアルゴリズム)はネイティブ・ライブラリ・コードで実装されていないため、ネイティブ・ライブラリが削除されても、引き続きSunECプロバイダから使用できます。
                     
キー・サイズの制限
SunECプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します:
                     
表4-25 SunECプロバイダのキー・サイズの制限
| KeyPairGeneratorアルゴリズム名 | デフォルトのキー・サイズ | 制限/コメント | 
|---|---|---|
| EC | 256 | キー・サイズは、112から571の範囲内である必要があります。 | 
| X25519 | 255 | キー・サイズは255にする必要があります | 
| X448 | 448 | キー・サイズは448にする必要があります | 
| XDH | 255 | キー・サイズは255または448にする必要があります | 
サポートされる楕円曲線名
SunECプロバイダには、楕円曲線(EC)、楕円曲線Diffie-Hellman (ECDH)および楕円曲線デジタル署名アルゴリズム(ECDSA)の各アルゴリズムで使用する様々な楕円曲線の実装が含まれます。これらの曲線の中には、サイドチャネル攻撃の防止に役立つ最新の式と技術を使用して実装されたものがあります。それ以外には、攻撃に対して脆弱である可能性があるため、使用すべきではないレガシー曲線があります。次の表に、これらの各カテゴリに分類される曲線を示します。
                     
次の表の1列目「曲線名」に、SunECが実装する名前を示します。2列目「オブジェクト識別子」には、EC名のオブジェクト識別子を指定します。3列目「その他の名前/別名」には、その曲線のその他の名前または別名を指定します。(値N/Aは、その他の名前がないことを意味します。)1行に表示されている文字列はすべて同じ曲線を表します。たとえば、文字列secp256r1、1.2.840.10045.3.1.7、NIST P-256およびX9.62 prime256v1は同じ曲線を表します。曲線名を使用して、曲線X25519およびX448のECGenParameterSpecクラスまたはNamedParameterSpecクラスでECパラメータ生成のパラメータ仕様を作成できます。
                     
推奨曲線
次の表に、SunECプロバイダによって提供され、最新の式と技術を使用して実装される楕円曲線を示します。これらの曲線は推奨されており、「互換性のために保持されるレガシー曲線」に示されている曲線よりも優先する必要があります。
                     
表4-26 SunECプロバイダにより提供される推奨曲線
| 曲線名 | オブジェクト識別子 | その他の名前/別名 | 
|---|---|---|
| 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 | 
| X25519 | 1.3.101.110 | なし | 
| X448 | 1.3.101.111 | なし | 
互換性のために保持されるレガシー曲線
ノート:
新しい曲線に移行することをお薦めします。次の表に、SunECプロバイダによって提供され、最新の式と技術を使用して実装されていない楕円曲線を示します。これらの曲線は、互換性の理由から引き続き使用でき、レガシー・システムが新しい曲線に移行する時間を確保できます。これらの実装は、JDKの将来のバージョンで削除または置換されます。
表4-27 互換性のために保持されるSunECプロバイダのレガシー曲線
| 曲線名 | オブジェクト識別子 | その他の名前/別名 | 
|---|---|---|
| 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 | なし | 
| 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 | なし | 
| sect113r1 | 1.3.132.0.4 | なし | 
| sect113r2 | 1.3.132.0.5 | なし | 
| sect131r1 | 1.3.132.0.22 | なし | 
| sect131r2 | 1.3.132.0.23 | なし | 
| sect163k1 | 1.3.132.0.1 | NIST K-163 | 
| sect163r1 | 1.3.132.0.2 | なし | 
| sect163r2 | 1.3.132.0.15 | NIST B-163 | 
| sect193r1 | 1.3.132.0.24 | なし | 
| sect193r2 | 1.3.132.0.25 | なし | 
| sect233k1 | 1.3.132.0.26 | NIST K-233 | 
| sect233r1 | 1.3.132.0.27 | NIST B-233 | 
| sect239k1 | 1.3.132.0.3 | なし | 
| sect283k1 | 1.3.132.0.16 | NIST K-283 | 
| sect283r1 | 1.3.132.0.17 | NIST B-283 | 
| sect409k1 | 1.3.132.0.36 | NIST K-409 | 
| sect409r1 | 1.3.132.0.37 | NIST B-409 | 
| sect571k1 | 1.3.132.0.38 | NIST K-571 | 
| sect571r1 | 1.3.132.0.39 | NIST B-571 | 
| X9.62 c2tnb191v1 | 1.2.840.10045.3.0.5 | なし | 
| X9.62 c2tnb191v2 | 1.2.840.10045.3.0.6 | なし | 
| X9.62 c2tnb191v3 | 1.2.840.10045.3.0.7 | なし | 
| X9.62 c2tnb239v1 | 1.2.840.10045.3.0.11 | なし | 
| X9.62 c2tnb239v2 | 1.2.840.10045.3.0.12 | なし | 
| X9.62 c2tnb239v3 | 1.2.840.10045.3.0.13 | なし | 
| X9.62 c2tnb359v1 | 1.2.840.10045.3.0.18 | なし | 
| X9.62 c2tnb431r1 | 1.2.840.10045.3.0.20 | なし | 
| 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 | なし | 
OracleUcryptoプロバイダ
Solaris専用のセキュリティ・プロバイダであるOracleUcryptoは、Solaris Ucryptoライブラリを利用して、Oracle SPARC T4ベースのオンコア暗号化命令でサポートされる暗号化操作のオフロードと委譲を行います。OracleUcryptoプロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とSolaris Ucryptoライブラリ間のコンジットとして機能します。
                     
基盤となるSolaris Ucryptoライブラリが特定のアルゴリズムをサポートしない場合は、OracleUcryptoプロバイダもそれをサポートしません。その結果、実行時にサポートされるアルゴリズムは、Solaris UcryptoライブラリがサポートするアルゴリズムとOracleUcryptoプロバイダが認識するアルゴリズムの共通部分になります。
                     
アルゴリズム
OracleUcryptoプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-28 OracleUcryptoプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| Cipher | AES RSA AES/ECB/NoPadding AES/ECB/PKCS5Padding AES/CBC/NoPadding AES/CBC/PKCS5Padding AES/CTR/NoPadding AES/GCM/NoPadding AES/CFB128/NoPadding AES/CFB128/PKCS5Padding AES_128/ECB/NoPadding AES_192/ECB/NoPadding AES_256/ECB/NoPadding AES_128/CBC/NoPadding AES_192/CBC/NoPadding AES_256/CBC/NoPadding AES_128/GCM/NoPadding AES_192/GCM/NoPadding AES_256/GCM/NoPadding RSA/ECB/PKCS1Padding RSA/ECB/NoPadding | 
| Signature | MD5withRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA | 
| MessageDigest | MD5 SHA SHA-224 SHA-256 SHA-384 SHA-512 SHA3-224 SHA3–256 SHA3-384 SHA3-512 | 
キー・サイズの制限
OracleUcryptoプロバイダは、デフォルトのキー・サイズまたはキー・サイズ制限を指定しません。これらは、基盤となるSolaris Ucryptoライブラリで指定されます。
                     
OracleUcryptoプロバイダの構成ファイル
OracleUcryptoプロバイダには、$JAVA_HOME/conf/securityディレクトリに配置されたucrypto-solaris.cfgという名前の構成ファイルがあります。デフォルトで無効にするアルゴリズムを指定するには、この構成ファイルを変更します。たとえば、次の構成ファイルは、CFB128モードでのAESをデフォルトで無効にします。#
# Configuration file for the OracleUcrypto provider
#
disabledServices = {
  Cipher.AES/CFB128/PKCS5Padding
  Cipher.AES/CFB128/NoPadding
}Appleプロバイダ
Appleプロバイダは、macOSキー・チェーンへのアクセスを提供するjava.security.KeyStoreを実装します。
                  
アルゴリズム
Appleプロバイダでは、次のアルゴリズムを使用できます。
                     
表4-29 Appleプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 | 
|---|---|
| KeyStore | KeychainStore |