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脚注1、Apple

java.naming

JdkLDAP

java.security.jgss

SunJGSS

java.security.sasl

SunSASL

java.smartcardio

SunPCSC

java.xml.crypto

XMLDSig

jdk.crypto.cryptoki

SunPKCS11脚注1

jdk.crypto.ec

SunEC脚注1

jdk.crypto.mscapi

SunMSCAPI脚注1

jdk.crypto.ucrypto

OracleUcrypto脚注1

jdk.security.jgss

JdkSASL

脚注1 署名付きJARファイルとして前に説明した、JCE暗号プロバイダを示します(JCEプロバイダにはCipher/KeyAgreement/KeyGenerator/Mac/SecretKeyFactory実装が含まれます)。

暗号化アルゴリズムの輸入制限

デフォルトでは、アプリケーションは、どの強度の暗号化アルゴリズムでも使用できます。ただし、一部の場所での輸入規制のため、それらのアルゴリズムの強度を制限する必要がある場合があります。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脚注2脚注3 SunPKCS11
2. NativePRNG脚注4 SUN
3. DRBG SUN
4. SHA1PRNG脚注4 SUN
5. NativePRNGBlocking SUN
6. NativePRNGNonBlocking SUN
Linux 1. NativePRNG脚注4 SUN
2. DRBG SUN
3. SHA1PRNG脚注4 SUN
4. NativePRNGBlocking SUN
5. NativePRNGNonBlocking SUN
macOS 1. NativePRNG脚注4 SUN
2. DRBG SUN
3. SHA1PRNG脚注4 SUN
4. NativePRNGBlocking SUN
5. NativePRNGNonBlocking SUN
Windows 1. DRBG SUN
2. SHA1PRNG SUN
3. Windows-PRNG脚注5 SunMSCAPI

脚注2 SunPKCS11プロバイダはすべてのプラットフォームで利用可能ですが、これがデフォルトで有効になっているのは、ネイティブのPKCS11実装が自動的にインストールおよび構成される唯一のOSであるSolarisのみです。他のプラットフォームでは、アプリケーションまたはデプロイヤが特にネイティブPKCS11ライブラリをインストールして構成し、それを使用できるようにSunPKCS11を構成して有効にする必要があります。

脚注3 SolarisのPKCS11 SecureRandom実装は、小さいサイズの要求のパフォーマンス・オーバーヘッドが原因で、無効になっています(JDK-8098581: SecureRandom.nextBytes() hurts performance with small size requestsを参照)。再度有効にするには、sunpkcs11-solaris.cfgを編集します。

脚注4 Solaris、LinuxおよびOS Xでは、java.securityエントロピー収集デバイスfile:/dev/urandomまたはfile:/dev/randomに設定すると、SHA1PRNGよりNativePRNGが優先されます。それ以外の場合は、SHA1PRNGが優先されます。

脚注5 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脚注6

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

(初期シードは、現在、システム属性とjava.securityエントロピー収集デバイスの組合せによって実行されます。)

NativePRNG

(nextBytes()では/dev/urandomが使用され、generateSeed()では/dev/randomが使用される)

NativePRNGBlocking

(nextBytes()およびgenerateSeed()では/dev/randomが使用される)

NativePRNGNonBlocking

(nextBytes()およびgenerateSeed()では/dev/urandomが使用される)

Signature

NONEwithDSA

SHA1withDSA

SHA224withDSA

SHA256withDSA

NONEwithDSAinP1363Format

SHA1withDSAinP1363Format

SHA224withDSAinP1363Format

SHA256withDSAinP1363Format

ノート:

署名の生成では、ダイジェスト・アルゴリズムのセキュリティ強度が署名に使用されたキーのセキュリティ強度より弱い場合(SHA1withDSA署名による(2048、256)ビットのDSAキーの使用など)は、操作が失敗し、次のエラー・メッセージが表示されます: 「SHA1ダイジェスト・アルゴリズムのセキュリティ強度が、このキー・サイズに対して十分ではありません。」

脚注6 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実装

CertificateFactoryCertPathBuilderCertPathValidatorおよびCertStoreSUNプロバイダ実装の詳細は、「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プロバイダは、以前のリリースとの下位互換性のためにあるため、KeyFactoryには使用しなでください。

KeyManagerFactory

PKIX: X509ExtendedKeyManagerインスタンスのファクトリであり、IETF PKIXワーキング・グループによってRFC 5280で定義された規則に従って、ローカル側の認証に使用するX.509証明書ベースのキー・ペアを管理します。現在、このKeyManagerFactoryは、KeyStoreオブジェクトまたはjavax.net.ssl.KeyStoreBuilderParametersを使用した初期化をサポートしています。

SunX509: X509ExtendedKeyManagerインスタンスのファクトリであり、ローカル側の認証に使用するX.509証明書ベースのキー・ペアを管理しますが、証明書の使用方法/有効性およびチェーン検証のチェックはあまり厳しくありません。このKeyManagerFactoryは、Keystoreオブジェクトを使用した初期化をサポートしますが、現在のところjavax.net.ssl.ManagerFactoryParametersクラスを使用した初期化はサポートしていません。

ノート: SunX509ファクトリは、以前のリリースとの下位互換性のためにあるため、使用しなでください。

KeyPairGenerator

RSA

ノート: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、KeyPairGeneratorには使用しなでください。

KeyStore

PKCS12

ノート: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、KeyStoreには使用しなでください。

Signature

MD2withRSA

MD5withRSA

SHA1withRSA

ノート: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、Signatureには使用しなでください。これらのSignatureアルゴリズムは、将来のリリースでSunJSSEプロバイダから削除される予定です。

SSLContext

SSL

SSLv3

TLS

TLSv1

TLSv1.1

TLSv1.2

TLSv1.3

DTLS

DTLSv1.0

DTLSv1.2

TrustManagerFactory

PKIX: X509ExtendedTrustManagerインスタンスのファクトリであり、IETF PKIXワーキング・グループによってRFC 5280で定義された規則に従って、証明書チェーンを検証します。現在、このTrustManagerFactoryは、KeyStoreオブジェクトまたはjavax.net.ssl.CertPathTrustManagerParametersを使用した初期化をサポートしています。

SunX509: X509ExtendedTrustManagerインスタンスのファクトリであり、証明書チェーンを検証しますが、証明書の使用方法/有効性およびチェーン検証のチェックはあまり厳しくありません。このTrustManagerFactoryは、Keystoreオブジェクトを使用した初期化をサポートしますが、現在のところjavax.net.ssl.ManagerFactoryParametersクラスを使用した初期化はサポートしていません。

ノート: SunX509ファクトリは、以前のリリースとの下位互換性のためにあるため、使用しなでください。

SunJSSEプロバイダのプロトコルのパラメータ

SunJSSEプロバイダは、表4-12に示すprotocolパラメータをサポートしています。

表4-12 SunJSSEプロバイダのプロトコルのパラメータ

プロトコル クライアントではデフォルトで有効 サーバーではデフォルトで有効

SSLv3
いいえ いいえ
TLS はい はい
TLSv1脚注7 いいえ いいえ
TLSv1.1脚注7 いいえ いいえ
TLSv1.2 はい はい
TLSv1.3 はい はい
SSLv2Hello いいえ はい
DTLS はい はい
DTLSv1.0 はい はい
DTLSv1.2 はい はい

脚注7 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セキュリティ・プロパティで無効化されていない、有効かつサポートされている使用可能な暗号化方式群を出力します。引数を指定してこのアプリケーションを実行すると、セキュリティ・プロパティにより無効化制限が削除され、使用可能なすべての暗号化方式群が出力されます。

EncryptedPreMasterSecretバージョン番号チェックの強化

JDK 7リリースより前のSSL/TLS実装では、PreMasterSecret内のバージョン番号がチェックされず、SSL/TLSクライアントからデフォルトで正しいバージョン番号が送信されませんでした。システム・プロパティcom.sun.net.ssl.rsaPreMasterSecretFixtrueに設定されないかぎり、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脚注8、CFB8..CFB128、OFB脚注8、OFB8..OFB128 NoPadding、PKCS5Padding、ISO10126Padding脚注9
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脚注8、CFB8..CFB64、OFB脚注8、OFB8..OFB64 NoPadding、PKCS5Padding、ISO10126Padding
DESedeWrap CBC NoPadding

PBEWithMD5AndDES、PBEWithMD5AndTripleDES脚注10、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

脚注8 値指定なしのCFB/OFBは、デフォルトでアルゴリズムのブロック・サイズになります(たとえば、AESは128で、Blowfish、DES、DESedeおよびRC2は64です。)

脚注9パディング・バイトがランダムであることが標準で規定または要求されているわけではありませんが、Java SE ISO10126Padding実装では、ランダムなバイトで埋められます(最後のバイトまで埋められるため、指定どおりのパディングの長さになります)。

脚注10 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
  • http://www.w3.org/TR/2001/REC-xml-c14n-20010315
    • CanonicalizationMethod.INCLUSIVE
  • http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments
    • CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS
  • http://www.w3.org/2001/10/xml-exc-c14n#
    • CanonicalizationMethod.EXCLUSIVE
  • http://www.w3.org/2001/10/xml-exc-c14n#WithComments
    • CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS
  • http://www.w3.org/2000/09/xmldsig#base64
    • Transform.BASE64
  • http://www.w3.org/2000/09/xmldsig#enveloped-signature
    • Transform.ENVELOPED
  • http://www.w3.org/TR/1999/REC-xpath-19991116
    • Transform.XPATH
  • http://www.w3.org/2002/06/xmldsig-filter2
    • Transform.XPATH2
  • http://www.w3.org/TR/1999/REC-xslt-19991116
    • Transform.XSLT
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: ネイティブMicrosoft Windows MYキーストアを識別するキーストア・タイプ。ユーザーの個人証明書および関連する秘密キーが含まれています。

Windows-ROOT: ネイティブ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脚注11、X25519、X448、XDH
KeyFactory EC、X25519、X448、XDH
KeyPairGenerator EC脚注11、X25519、X448、XDH
Signature

NONEwithECDSA脚注11

SHA1withECDSA脚注11

SHA224withECDSA脚注11

SHA256withECDSA脚注11

SHA384withECDSA脚注11

SHA512withECDSA脚注11

NONEwithECDSAinP1363Format脚注11

SHA1withECDSAinP1363Format脚注11

SHA224withECDSAinP1363Format脚注11

SHA256withECDSAinP1363Format脚注11

SHA384withECDSAinP1363Format脚注11

SHA512withECDSAinP1363Format脚注11

脚注11 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行に表示されている文字列はすべて同じ曲線を表します。たとえば、文字列secp256r11.2.840.10045.3.1.7NIST 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

JdkLDAPプロバイダ

JdkLDAPプロバイダは、SUNプロバイダのLDAP CertStore実装を置き換えます。

アルゴリズム

JdkLDAPプロバイダでは、次のアルゴリズムを使用できます。

表4-30 JdkLDAPプロバイダのエンジン・クラス・アルゴリズム名

エンジン アルゴリズム名
CertStore

LDAP

JdkSASLプロバイダ

アルゴリズム

JdkSASLプロバイダでは、次のアルゴリズムを使用できます。

表4-31 JdkSASLプロバイダのエンジン・クラス・アルゴリズム名

エンジン アルゴリズム名
SaslClient

GSSAPI

SaslServer

GSSAPI