このドキュメントには、JDKに含まれるプロバイダの技術的詳細が含まれています。読者がJava暗号化アーキテクチャとプロバイダ・アーキテクチャを詳しく理解していることが前提となります。
注意:
Javaセキュリティ標準アルゴリズム名仕様には、このドキュメントで使用されている標準名に関する詳細な情報が含まれています。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は、単一のデータ・ブロックに対しては正常に機能し、パラレル化可能ですが、複数のデータ・ブロックには絶対に使用しないでください。次の表に、利用可能な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. DRGB | SUN | |
| 3. SHA1PRNG脚注4 | SUN | |
| 4. NativePRNGBlocking | SUN | |
| 5. NativePRNGNonBlocking | SUN | |
| macOS | 1. NativePRNG脚注4 | SUN |
| 2. DRGB | SUN | |
| 3. SHA1PRNG脚注4 | SUN | |
| 4. NativePRNGBlocking | SUN | |
| 5. NativePRNGNonBlocking | SUN | |
| Windows | 1. DRGB | 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プロバイダを使用します。
暗号化トークン・インタフェース標準(PKCS#11)は、ハードウェア暗号化アクセラレータやスマート・カードなどの暗号化メカニズムに対するネイティブ・プログラミング・インタフェースを提供しています。SunPKCS11プロバイダを適切に構成すると、アプリケーションは標準のJCA/JCE APIを使用してネイティブPKCS#11ライブラリにアクセスできるようになります。SunPKCS11プロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とネイティブPKCS11プロバイダ間のコンジットとして機能します。このプロバイダの詳細は、『Java PKCS#11リファレンス・ガイド』を参照してください。
JDK 1.1では、Providerアーキテクチャが導入されました。最初のJDKプロバイダにはSUNという名前が付けられ、2種類の暗号化サービス(MessageDigestおよびSignature)が含まれていました。以降のリリースでは、他のメカニズムが追加されました(SecureRandom、KeyPairGenerator、KeyFactoryなど)。
当時有効だった米国の輸出制限事項によって、JDKの内部で使用可能な暗号化機能に重大な制限が課されました。このため、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 (初期シードは、現在、システム属性と NativePRNG ( NativePRNGBlocking ( NativePRNGNonBlocking ( |
Signature |
NONEwithDSA SHA1withDSA SHA224withDSA SHA256withDSA NONEwithDSAinP1363Format SHA1withDSAinP1363Format SHA224withDSAinP1363Format SHA256withDSAinP1363Format |
脚注6 PKCS12 KeyStore実装は、KeyBagタイプをサポートしていません。
次の表に、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プロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
KeyPairGenerator
| アルゴリズム名前 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| DSA | 1024 | 鍵サイズは、512から1024の範囲で64の倍数であるか、2048および3072である必要があります。 |
AlgorithmParameterGenerator
| アルゴリズム名前 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| DSA | 1024 | 鍵サイズは、512から1024の範囲で64の倍数であるか、2048および3072である必要があります。 |
CertificateFactory/CertPathBuilder/CertPathValidator/CertStore実装
CertificateFactory、CertPathBuilder、CertPathValidatorおよびCertStoreのSUNプロバイダ実装の詳細は、PKIプログラマーズ・ガイドの付録B: SUNプロバイダでのCertPath実装を参照してください。
SunRsaSignプロバイダは、SunJSSEプロバイダのRSA署名の機能が拡張された代替機能として、JDK 1.3で導入されました。
SunRsaSignプロバイダでは、次のアルゴリズムを使用できます。
表4-7 SunRsaSignプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 |
|---|---|
KeyFactory |
RSA |
KeyPairGenerator |
RSA |
Signature |
MD2withRSA MD5withRSA SHA1withRSA SHA224withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
鍵サイズの制限
SunRsaSignプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
KeyPairGenerator
表4-8 SunRsaSignプロバイダの鍵サイズの制限
| アルゴリズム名前 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| RSA | 2048 | 鍵サイズは、512から16384ビットの範囲内である必要があります。鍵のサイズが3072を超えると、公開指数の長さは64ビットを超えることはできません。 |
アルゴリズム
Java Secure Socket Extension (JSSE)は、個別のオプション・パッケージ(標準拡張機能とも呼ばれる)としてリリースされ、JDK 1.2.nおよび1.3.nで使用できました。SunJSSEプロバイダはこのリリースの一部として導入されました。
以前のJDKリリースでは、JDKでRSA署名プロバイダは使用できませんでした。このため、SunJSSEでは、共通で使用できるRSAベースの証明書を使用するために独自のRSA実装を提供する必要がありました。JDK 5では、SunRsaSignプロバイダが導入されました。このプロバイダは、SunJSSEプロバイダのすべての機能(およびそれ以上の機能)を提供します。JDK 5.0以降をターゲットにしているアプリケーションは、かわりにSunRsaSignプロバイダのインスタンスを要求する必要があります。RSAアルゴリズムは、下位互換性のためにこのプロバイダでも使用可能ですが、実際にはSunRsaSignプロバイダに実装されています。
SunJSSEプロバイダでは、次のアルゴリズムを使用できます。
| エンジン | アルゴリズム名 |
|---|---|
KeyFactory |
RSA 注意: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 |
KeyManagerFactory |
PKIX: SunX509: 注意: SunX509ファクトリは、以前のリリースとの下位互換性のためにあるため、使用しなでください。 |
KeyPairGenerator |
RSA 注意: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 |
KeyStore |
PKCS12 注意: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 |
Signature |
MD2withRSA MD5withRSA SHA1withRSA 注意: SunJSSEプロバイダは、以前のリリースとの下位互換性のためにあるため、 |
SSLContext |
SSLv3 TLSv1 TLSv1.1 TLSv1.2 DTLSv1.0 DTLSv1.2 |
TrustManagerFactory |
PKIX: SunX509: 注意: SunX509ファクトリは、以前のリリースとの下位互換性のためにあるため、使用しなでください。 |
SunJSSEプロバイダのプロトコルのパラメータ
SunJSSEプロバイダは、次のprotocolパラメータをサポートしています。
表4-9 SunJSSEプロバイダのプロトコルのパラメータ
| プロトコル | クライアントではデフォルトで有効 | サーバーではデフォルトで有効 |
|---|---|---|
| SSLv3 | いいえ(使用不可脚注7) | いいえ(使用不可脚注7) |
| TLSv1 | はい | はい |
| TLSv1.1 | はい | はい |
| TLSv1.2 | はい | はい |
| SSLv2Hello脚注8 | いいえ | はい |
| DTLSv1.0 | はい | はい |
| DTLSv1.2脚注9 | はい | はい |
脚注7 SSLv3を使用可能です。
JDK 8u31リリース以降、SSLv3プロトコル(Secure Socket Layer)は無効になっており、デフォルトで使用できません。<java_home>/conf/security/java.securityファイルのjava.security.Securityプロパティjdk.tls.disabledAlgorithmsを参照してください。
SSLv3が絶対に必要な場合は、java.securityファイルのjdk.tls.disabledAlgorithmsプロパティからSSLv3を削除するか、JSSEが初期化される前にこのセキュリティ・プロパティを動的に設定すれば、プロトコルを再度アクティブにできます。
SSLv3プロトコルをデプロイ・レベルで有効化するには、前述のステップに従った後で、deployment.propertiesファイルを編集してdeployment.security.SSLv3=trueを追加します
脚注8 SSLv3、TLSv1、TLSv1.1およびTLSv1.2プロトコルを使用すると、SSLv2Hello擬似プロトコルを使用して、SSLv3、TLSv1、TLSv1.1およびTLSv1.2のClientHellosをSSLv2形式のhelloにカプセル化して送信できます。
脚注9 DTLSv1.0とDTLSv1.2の両方を使用可能です。
次の表は、SSLv2Hellosの使用時に可能な接続の組合せを示しています。
表4-10 SSLv2Hellosを使用して利用可能な接続
| クライアント | サーバー | 接続を使用できるかどうか |
|---|---|---|
| 使用可能 | 使用可能 | はい |
| 使用不可 | 使用可能 | はい(最も相互運用可能度が高い: SunJSSEデフォルト) |
| 使用可能 | 使用不可 | いいえ |
| 使用不可 | 使用不可 | はい |
暗号化方式群
SunJSSEは、数多くの暗号化方式群をサポートしています。表4-11は、SunJSSEによってサポートされている暗号化方式群、それらがデフォルトで有効になるか無効になるか、およびそれらが導入されたリリースを示しています。「なし」という値は、暗号化方式群がそのリリースでは実装されていないことを意味します。
注意:
DTLSバージョン1.0とDTLSバージョン1.2によると、RC4暗号化方式群はDTLS接続とは使用できません。
楕円曲線暗号(ECDSA、ECDH、ECDHE、ECDH_anon)を使用する暗号化方式群では、次の要件を満たすJCE暗号化プロバイダが必要です。
プロバイダは、パッケージjava.security.specおよびjava.security.interfaces内のクラスとインタフェースで定義されているようにECCを実装する必要があります。Elliptic Curve鍵オブジェクトのgetAlgorithm()メソッドは、文字列「EC」を返す必要があります。
プロバイダは、SignatureアルゴリズムのSHA1withECDSAとNONEwithECDSA、KeyAgreementアルゴリズムのECDH、およびアルゴリズムECのKeyPairGeneratorとKeyFactoryをサポートする必要があります。これらのアルゴリズムのいずれかが欠落している場合、SunJSSEではEC暗号化方式群の使用が許可されません。
プロバイダは、RFC 4492仕様のセクション5.1.1 (付録A「同等の曲線(情報)」も参照)で説明されているすべてのSECG曲線をサポートする必要があります。証明書では、圧縮されていない形式を使用してポイントをエンコードし、namedCurve選択を使用して(つまりオブジェクト識別子を使用して)曲線をエンコードします。
これらの要件が満たされていない場合、EC暗号化方式群が正しくネゴシエーションされないことがあります。
表4-11 SunJSSEでサポートされる暗号化方式群
| 暗号化方式群 | JDK 6 | JDK 7 | JDK 8 | JDK 9 |
|---|---|---|---|---|
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
SSL_DH_anon_WITH_DES_CBC_SHA |
使用不可 |
使用不可脚注11 |
使用不可 |
使用不可 |
SSL_DH_anon_WITH_RC4_128_MD5 |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
SSL_DHE_DSS_WITH_DES_CBC_SHA |
使用不可 |
使用不可脚注11 |
使用不可 |
使用不可 |
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
SSL_DHE_RSA_WITH_DES_CBC_SHA |
使用不可 |
使用不可脚注11 |
使用不可 |
使用不可 |
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
SSL_RSA_EXPORT_WITH_RC4_40_MD5 |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
SSL_RSA_WITH_3DES_EDE_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
SSL_RSA_WITH_DES_CBC_SHA |
使用不可 |
使用不可脚注11 |
使用不可 |
使用不可 |
SSL_RSA_WITH_NULL_MD5 |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
SSL_RSA_WITH_NULL_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
SSL_RSA_WITH_RC4_128_MD5 |
使用可能 |
使用可能 |
使用可能 |
使用不可 |
SSL_RSA_WITH_RC4_128_SHA |
使用可能 |
使用可能 |
使用可能 |
なし |
TLS_DH_anon_WITH_AES_128_CBC_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_DH_anon_WITH_AES_128_CBC_SHA256 |
なし |
使用不可 |
使用不可 |
使用不可 |
TLS_DH_anon_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用不可 |
使用不可 |
TLS_DH_anon_WITH_AES_256_CBC_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_DH_anon_WITH_AES_256_CBC_SHA256 |
なし |
使用不可 |
使用不可 |
使用不可 |
TLS_DH_anon_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用不可 |
使用不可 |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用可能 |
使用可能 |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 |
なし |
なし |
なし |
使用可能 |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 |
なし |
なし |
なし |
使用可能 |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 |
なし |
なし |
なし |
使用可能 |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 |
なし |
なし |
なし |
使用可能 |
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用可能 |
使用可能 |
TLS_DHE_RSA_WITH_AES_128_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用可能 |
使用可能 |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDH_anon_WITH_AES_128_CBC_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDH_anon_WITH_AES_256_CBC_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDH_anon_WITH_NULL_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDH_anon_WITH_RC4_128_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDH_ECDSA_WITH_NULL_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDH_ECDSA_WITH_RC4_128_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDH_RSA_WITH_NULL_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDH_RSA_WITH_RC4_128_SHA |
使用可能 |
使用可能 |
使用可能 |
|
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
なし |
なし |
なし |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
なし |
なし |
なし |
使用可能 |
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDHE_ECDSA_WITH_NULL_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA |
使用可能 |
使用可能 |
使用可能 |
使用不可 |
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用可能 |
使用可能 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用可能 |
なし |
TLS_ECDHE_RSA_WITH_NULL_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_ECDHE_RSA_WITH_RC4_128_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_ECDHE_RSA_WITH_RC4_128_SHA |
なし |
なし |
なし |
使用不可 |
TLS_EMPTY_RENEGOTIATION_INFO_SCSV脚注13 |
u22+ |
使用可能 |
使用可能 |
なし |
TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
TLS_KRB5_EXPORT_WITH_RC4_40_MD5 |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
TLS_KRB5_EXPORT_WITH_RC4_40_SHA |
使用不可 |
使用不可脚注10 |
使用不可 |
使用不可 |
TLS_KRB5_WITH_3DES_EDE_CBC_MD5 |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_KRB5_WITH_3DES_EDE_CBC_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_KRB5_WITH_DES_CBC_MD5 |
使用不可 |
使用不可脚注11 |
使用不可 |
使用不可 |
TLS_KRB5_WITH_DES_CBC_SHA |
使用不可 |
使用不可脚注11 |
使用不可 |
使用不可 |
TLS_KRB5_WITH_RC4_128_MD5 |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_KRB5_WITH_RC4_128_SHA |
使用不可 |
使用不可 |
使用不可 |
使用不可 |
TLS_RSA_WITH_AES_128_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_RSA_WITH_AES_128_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_RSA_WITH_AES_128_GCM_SHA256 |
なし |
なし |
使用可能 |
使用可能 |
TLS_RSA_WITH_AES_256_CBC_SHA |
使用可能 |
使用可能 |
使用可能 |
使用可能 |
TLS_RSA_WITH_AES_256_CBC_SHA256 |
なし |
使用可能脚注12 |
使用可能 |
使用可能 |
TLS_RSA_WITH_AES_256_GCM_SHA384 |
なし |
なし |
使用可能 |
使用可能 |
TLS_RSA_WITH_NULL_SHA256 |
なし |
使用不可 |
使用不可 |
使用不可 |
脚注10 RFC 4346 TLS 1.1では、これらの群の使用は禁止されています。これらは、SSLv3/TLS1.0プロトコルでは使用できますが、TLS 1.1以降では使用できません。
脚注11 RFC 5246 TLS 1.2では、これらの群の使用は禁止されています。これらは、SSLv3/TLS1.0/TLS1.1プロトコルでは使用できますが、TLS 1.2以降では使用できません。
脚注12 SHA384およびSHA256を使用する暗号化方式群は、TLS 1.2以降でのみ使用可能です。
脚注13 TLS_EMPTY_RENEGOTIATION_INFO_SCSVは、RFC 5746をサポートする擬似暗号化方式群です。Java Secure Socket Extension (JSSE)リファレンス・ガイドのTransport Layer Security (TLS)再ネゴシエーションの問題を参照してください。
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は使用されません。
「SUNプロバイダ」で簡単に説明されているように、当時の米国の輸出制限事項によって、JDK内で使用できる暗号化機能が制限されていました。このため、アプリケーションでデータの暗号化または復号化を可能にするために、個別のAPIおよびリファレンス実装が開発されました。Java Cryptographic Extension (JCE)は、別個のオプション・パッケージとしてリリースされ(簡潔に標準拡張機能とも呼ばれる)、JDK 1.2xおよび1.3xで利用可能でした。JDK 1.4の開発中に、規制は、JCE (およびSunJSSE)をJDKの一部としてバンドルできるくらいには緩和されました。
SunJCEプロバイダでは、次のアルゴリズムを使用できます。
表4-12 SunJCEプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 |
|---|---|
AlgorithmParameterGenerator |
DiffieHellman |
AlgorithmParameters |
AESBlowfish 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 PBEWithSHA1AndPC4_128 RC2 |
Cipher |
表4-13を参照してください |
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 HmacSHA384 HmacSHA512 HmacSHA256 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-13 SunJCEプロバイダの暗号変換
| アルゴリズム名 | モード | パディング |
|---|---|---|
| AES | ECB、CBC、PCBC、CTR、CTS、CFB脚注14、CFB8、CFB128、OFB脚注14、OFB8、OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
| AES | 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脚注14、CFB8、CFB64、OFB脚注14、OFB8、OFB64 | NoPadding、PKCS5Padding、ISO10126Padding |
| DESedeWrap | CBC | NoPadding |
PBEWithMD5AndDES、PBEWithMD5AndTripleDES脚注15、BEWithSHA1AndDESede、BEWithSHA1AndRC2_40、BEWithSHA1AndRC2_128、BEWithSHA1AndRC4_40、BEWithSHA1AndRC4_128、BEWithHmacSHA1AndAES_128、BEWithHmacSHA224AndAES_128、BEWithHmacSHA256AndAES_128、BEWithHmacSHA384AndAES_128、BEWithHmacSHA512AndAES_128、BEWithHmacSHA1AndAES_256、BEWithHmacSHA224AndAES_256、BEWithHmacSHA256AndAES_256、BEWithHmacSHA384AndAES_256、BEWithHmacSHA512AndAES_256 |
CBC | PKCS5Padding |
| RSA | ECB | NoPadding、PKCS1Padding、AEPPadding、AEPWithMD5AndMGF1Padding、AEPWithSHA1AndMGF1Padding、AEPWithSHA-1AndMGF1Padding、AEPWithSHA-224AndMGF1Padding、AEPWithSHA-256AndMGF1Padding、AEPWithSHA-384AndMGF1Padding、AEPWithSHA-512AndMGF1Padding |
脚注14 値指定なしのCFB/OFBは、デフォルトでアルゴリズムのブロック・サイズになります(つまり、AESは128で、Blowfish、DES、DESedeおよびRC2は64です。)
脚注15 PBEWithMD5AndTripleDESは、標準化されていない独自のアルゴリズムです。
鍵サイズの制限
SunJCEプロバイダでは、次のデフォルト鍵サイズ(ビット単位)が使用され、次の制限が強制されます。
KeyGenerator
表4-14 SunJCEプロバイダの鍵サイズの制限
| アルゴリズム名 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| 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-15 KeyPairGenerator
| アルゴリズム名 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| Diffie-Hellman (DH) | 2048 | 鍵サイズは、512から1024の範囲で64の倍数であるか、1536、2048、3072、4096、6144、8192である必要があります。 |
表4-16 AlgorithmParameterGenerator
| アルゴリズム名 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| Diffie-Hellman (DH) | 2048 | 鍵サイズは、512から1024の範囲で64の倍数であるか、2048および3072である必要があります。 |
SunJGSSプロバイダでは、次のアルゴリズムを使用できます。
表4-17 SunJGSSプロバイダ
| OID | 名前 |
|---|---|
1.2.840.113554.1.2.2 |
Kerberos v5 |
1.3.6.1.5.5.2 |
SPNEGO |
SunSASLプロバイダでは、次のアルゴリズムを使用できます。
表4-18 SunSASLプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 |
|---|---|
SaslClient |
CRAM-MD5 DIGEST-MD5 EXTERNAL NTLM PLAIN |
SaslServer |
CRAM-MD5 DIGEST-MD5 NTLM |
XMLDSigプロバイダでは、次のアルゴリズムを使用できます。
表4-19 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プロバイダを使用すると、アプリケーションは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()は端末をサポートしないJRE組込み実装を返します。
SunPCSCプロバイダでは、次のアルゴリズムを使用できます。
表4-20 SunPCSCプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 |
|---|---|
TerminalFactory |
PC/SC |
SunMSCAPIプロバイダを使用すると、アプリケーションは標準のJCA/JCE APIを使用して、Microsoft Windowsプラットフォームのネイティブ暗号化ライブラリ、証明書ストアおよび鍵コンテナにアクセスできます。SunMSCAPIプロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とWindowsのネイティブ暗号化サービス間のコンジットとして機能します。
SunMSCAPIプロバイダでは、次のアルゴリズムを使用できます。
表4-21 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 |
鍵サイズの制限
SunMSCAPIプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
KeyGenerator
表4-22 SunMSCAPIプロバイダの鍵サイズの制限
| アルゴリズム名前 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| RSA | 2048 | キー・サイズの範囲は512ビットから16,384ビットです。ベースとなるMicrosoft Windows暗号化サービス・プロバイダによって異なります。 |
SunECプロバイダは、楕円曲線暗号(ECC)を実装します。RSAのような従来の暗号システムと比べて、ECCではより小さい鍵サイズで同等のセキュリティが提供されるため、計算の高速化、消費電力の削減、メモリーと帯域幅の節約を実現できます。
アプリケーションは、JDK 6リリースのように(SunPKCS11を介して)外部のECCライブラリに依存せずに、標準のJCA/JCE APIを使用してECCの機能にアクセスできるようになりました。
SunECプロバイダでは、次のアルゴリズムを使用できます。
表4-23 エンジン・クラスのSunECプロバイダ名
| エンジン | アルゴリズム名 |
|---|---|
AlgorithmParameters |
EC |
KeyAgreement |
ECDH |
KeyFactory |
EC |
KeyPairGenerator |
EC |
Signature |
NONEwithECDSA SHA1withECDSA SHA224withECDSA SHA256withECDSA SHA384withECDSA SHA512withECDSA NONEwithECDSAinP1363Format SHA1withECDSAinP1363Format SHA224withECDSAinP1363Format SHA256withECDSAinP1363Format SHA384withECDSAinP1363Format SHA512withECDSAinP1363Format |
鍵サイズの制限
SunECプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
KeyPairGenerator
表4-24 SunECプロバイダの鍵サイズの制限
| アルゴリズム名前 | デフォルトの鍵サイズ | 制限/コメント |
|---|---|---|
| EC | 256 | キー・サイズは、112から571の範囲内である必要があります。 |
Solaris専用のセキュリティ・プロバイダであるOracleUcryptoは、Solaris Ucryptoライブラリを利用して、Oracle SPARC T4ベースのオンコア暗号化命令でサポートされる暗号化操作のオフロードと委譲を行います。OracleUcryptoプロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とSolaris Ucryptoライブラリ間のコンジットとして機能します。
基盤となるSolaris Ucryptoライブラリが特定のアルゴリズムをサポートしない場合は、OracleUcryptoプロバイダもそれをサポートしません。その結果、実行時にサポートされるアルゴリズムは、Solaris UcryptoライブラリがサポートするアルゴリズムとOracleUcryptoプロバイダが認識するアルゴリズムの共通部分になります。
OracleUcryptoプロバイダでは、次のアルゴリズムを使用できます。
表4-25 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プロバイダは、macOSキー・チェーンへのアクセスを提供するjava.security.KeyStoreを実装します。
Appleプロバイダでは、次のアルゴリズムを使用できます。
表4-26 Appleプロバイダのエンジン・クラス・アルゴリズム名
| エンジン | アルゴリズム名 |
|---|---|
KeyStore |
KeychainStore |