次の項目について説明します。
SunPKCS11
プロバイダSUN
プロバイダSunRsaSign
プロバイダSunJSSE
プロバイダSunJCE
プロバイダSunJGSS
プロバイダSunSASL
プロバイダXMLDSig
プロバイダSunPCSC
プロバイダSunMSCAPI
プロバイダSunEC
プロバイダOracleUcrypto
プロバイダApple
プロバイダ注意: 標準名のドキュメントには、このドキュメントで使用されている標準名に関する詳細な情報が含まれています。
Javaプラットフォームでは、暗号化、公開キーインフラストラクチャ、認証、安全な通信、アクセス制御など、主要なセキュリティ分野に渡る一連のAPIが定義されています。これらのAPIによって、開発者はアプリケーション・コードにセキュリティ・メカニズムを簡単に統合できます。Java暗号化アーキテクチャ(JCA)およびそのプロバイダ・アーキテクチャは、Java Development Kit (JDK)のコア概念です。このアーキテクチャについて十分理解していることが前提となります。
このドキュメントでは、OracleのJava環境の一部として提供されているプロバイダの技術的な詳細について説明します。
注: JDKでの暗号化実装は、歴史的な理由および提供するサービスの種類により、さまざまなプロバイダによって配布されています(「Sun」、「SunJSSE」、「SunJCE」、「SunRsaSign」)。汎用アプリケーションは、特定のプロバイダから暗号化サービスを要求しないようにする必要があります。たとえば、次のように指定できます。
getInstance("...", "SunJCE"); // not recommended
と
getInstance("..."); // recommended
後者のようにしないと、アプリケーションは特定のプロバイダに結び付けられることになり、そのプロバイダはほかのJava実装で使用できない可能性があります。特定の要求されたプロバイダよりも優先順位が高い、使用可能な最適化されたプロバイダ(たとえば、PKCS11によるハードウェア・アクセラレータまたはMicrosoftのMSCAPIなどのネイティブOS実装)を利用できない場合もあります。
デフォルトでは、アプリケーションは、どの強度の暗号化アルゴリズムでも使用できます。ただし、一部の場所での輸入規制のため、それらのアルゴリズムの強度を制限する必要がある場合があります。JDKでは、ディレクトリ<java-home>/jre/lib/security/policy
に、暗号化アルゴリズムの強度を決定する2種類の管轄ポリシー・ファイル・セット("limited"および"unlimited")が用意されています。管轄ポリシー・ファイルおよびそのアクティブ化の方法の詳細は、付録C: 暗号強度の構成を参照してください。
自分の場所のための正確な要件を決定する際は、輸出入管理コンサルタントまたは弁護士に相談してください。
制限付きの構成のために、次の表では、制限付きの一連の管轄ポリシー・ファイルで許可されている最大キー・サイズをリストします。
アルゴリズム | 最大キー・サイズ |
---|---|
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
実装のデフォルトの優先順位を示します。
OS | アルゴリズム名 | プロバイダ名 |
---|---|---|
Solaris | 1. PKCS11* | SunPKCS11 |
2. NativePRNG** | Sun | |
3. SHA1PRNG** | Sun | |
4. NativePRNGBlocking | Sun | |
5. NativePRNGNonBlocking | Sun | |
Linux | 1. NativePRNG** | Sun |
2. SHA1PRNG** | Sun | |
3. NativePRNGBlocking | Sun | |
4. NativePRNGNonBlocking | Sun | |
macOS | 1. NativePRNG** | Sun |
2. SHA1PRNG** | Sun | |
3. NativePRNGBlocking | Sun | |
4. NativePRNGNonBlocking | Sun | |
Windows | 1. SHA1PRNG | Sun |
2. Windows-PRNG*** | SunMSCAPI |
* SunPKCS11
プロバイダはすべてのプラットフォームで利用可能ですが、これがデフォルトで有効になっているのは、ネイティブのPKCS11実装が自動的にインストールおよび構成される唯一のOSであるSolarisのみです。他のプラットフォームでは、アプリケーションまたはデプロイヤが特にネイティブPKCS11ライブラリをインストールして構成し、それを使用できるようにSunPKCS11
を構成して有効にする必要があります。
** Solaris、LinuxおよびmacOSでは、java.security
のエントロピー収集デバイスをfile:/dev/urandom
またはfile:/dev/random
に設定すると、SHA1PRNGよりNativePRNGが優先されます。それ以外の場合は、SHA1PRNGが優先されます。
*** Windowsには現在NativePRNGはありません。同等の機能を利用するには、SunMSCAPI
プロバイダを使用します。
JCAフレームワークに登録されたSecureRandom
実装が存在しない場合、java.security.SecureRandom
はハードコードされたSHA1PRNGを使用します。
SunPKCS11
プロバイダ暗号化トークン・インタフェース標準(PKCS#11)は、ハードウェア暗号化アクセラレータやスマート・カードなどの暗号化メカニズムに対するネイティブ・プログラミング・インタフェースを提供しています。SunPKCS11
プロバイダを適切に構成すると、アプリケーションは標準のJCA/JCE APIを使用してネイティブPKCS#11ライブラリにアクセスできるようになります。SunPKCS11
プロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とネイティブPKCS11プロバイダ間のコンジットとして機能します。このプロバイダの詳細は、『Java PKCS#11リファレンス・ガイド』を参照してください。
SUN
プロバイダJDK 1.1では、Provider
アーキテクチャが導入されました。最初のJDKプロバイダにはSUN
という名前が付けられ、2種類の暗号化サービス(MessageDigest
およびSignature
)が含まれていました。後続のリリースでは、ほかのメカニズムも追加されました(SecureRandom
乱数ジェネレータ、KeyPairGenerator
、KeyFactory
など)。
当時有効だった米国の輸出制限事項によって、JDKの内部で使用可能な暗号化機能に重大な制限が課されました。このため、SUN
プロバイダには、データを直接暗号化または復号化しない暗号化エンジンが含まれています。
SUN
プロバイダでは、次のアルゴリズムを使用できます。
エンジン | アルゴリズム名 |
---|---|
AlgorithmParameterGenerator |
DSA |
AlgorithmParameters |
DSA |
CertificateFactory |
X.509 |
CertPathBuilder |
PKIX |
CertPathValidator |
PKIX |
CertStore |
Collection LDAP |
Configuration |
JavaLoginConfig |
KeyFactory |
DSA |
KeyPairGenerator |
DSA |
KeyStore |
JKS DKS |
MessageDigest |
MD2 MD5 SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 |
Policy |
JavaPolicy |
SecureRandom |
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 |
次の表に、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 |
次の表に、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である必要があります。 |
AlgorithmParameterGenerator
アルゴリズム名前 | デフォルト・キーサイズ | 制限/コメント |
---|---|---|
DSA | 1024 | キー・サイズは、512から1024の範囲で64の倍数であるか、または2048である必要があります。 |
CertificateFactory
/CertPathBuilder
/CertPathValidator
/CertStore
実装CertificateFactory
、CertPathBuilder
、CertPathValidator
およびCertStore
に対するSUN
プロバイダ実装の詳細は、『PKIプログラマーズ・ガイド』の「付録B」を参照してください。
SunRsaSign
プロバイダSunRsaSign
プロバイダは、SunJSSE
プロバイダのRSA署名の機能が拡張された代替機能として、JDK 1.3で導入されました。
SunRsaSign
プロバイダでは、次のアルゴリズムを使用できます。
エンジン | アルゴリズム名 |
---|---|
KeyFactory |
RSA |
KeyPairGenerator |
RSA |
Signature |
MD2withRSA MD5withRSA SHA1withRSA SHA224withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
SunRsaSign
プロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
KeyPairGenerator
アルゴリズム名前 | デフォルト・キーサイズ | 制限/コメント |
---|---|---|
RSA | 2048 | キーサイズは、512から16384ビットの範囲内である必要があります。キー・サイズが3072を超えると、公開指数の長さは64ビットを超えることはできません。 |
SunJSSE
プロバイダ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 |
KeyManagerFactory |
SunX509: PKIX: |
KeyPairGenerator |
RSA |
KeyStore |
PKCS12脚注1 |
Signature |
MD2withRSA MD5withRSA SHA1withRSA |
SSLContext |
SSLv3 TLSv1 TLSv1.1 TLSv1.2 |
TrustManagerFactory |
SunX509: PKIX: |
脚注1 -PKCS12 KeyStore
実装はKeyBag
タイプをサポートしていません。
SunJSSE
プロバイダは、次のprotocol
パラメータをサポートしています。
プロトコル | クライアントではデフォルトで有効 | サーバーではデフォルトで有効 |
---|---|---|
SSLv3 | いいえ(利用不可脚注2) | いいえ(利用不可脚注2) |
TLSv1 | はい | はい |
TLSv1.1 | はい | はい |
TLSv1.2 | はい | はい |
SSLv2Hello 脚注1 | いいえ | はい |
脚注1 - SSLv3、TLSv1、TLSv1.1およびTLSv1.2プロトコルを使用すると、SSLv2Hello疑似プロトコルを使用して、SSLv3、TLSv1、TLSv1.1およびTLSv1.2のClientHellosをSSLv2形式のhelloにカプセル化して送信できます。次の表は、SSLv2Hellosの使用時に可能な接続の組合せを示しています。
クライアント | サーバー | 接続 |
---|---|---|
有効 | 有効 | Y |
無効 | 有効 | Y (最も相互運用可能度が高い: SunJSSEデフォルト) |
有効 | 無効 | N |
無効 | 無効 | Y |
JDK 8u31リリース以降、SSLv3プロトコル(Secure Socket Layer)は無効になっており、デフォルトで使用できません。<JRE_HOME>/lib/security/java.security
ファイルのjava.security.Security
プロパティjdk.tls.disabledAlgorithms
を参照してください。
SSLv3が絶対に必要な場合は、java.security
ファイルのjdk.tls.disabledAlgorithms
プロパティから"SSLv3"を削除するか、JSSEが初期化される前にこのセキュリティ・プロパティを動的に設定すれば、プロトコルをJREレベルで再度アクティブにできます。
SSLv3プロトコルをデプロイ・レベルで有効化するには、前述のステップに従った後で、deployment.properties
ファイルを編集して、次を追加します。
deployment.security.SSLv3=true
SunJSSE
は、数多くの暗号化方式群をサポートしています。次の2つの表は、SunJSSEでサポートされている暗号化方式群(優先順)、およびそれらが導入されたリリースを示しています。
1つ目の表には、デフォルトで有効になっている暗号化方式群を示します。2つ目の表には、SunJSSEでサポートされているが、デフォルトでは有効になっていない暗号化方式群を示します。
暗号化方式群 | J2SE v1.4 | J2SE v1.4.1、v1.4.2 | J2SE 5.0 | JDK 6 | JDK 7 | JDK 8 |
---|---|---|---|---|---|---|
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
X脚注1 | X | ||||
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 |
X脚注1 | X | ||||
TLS_RSA_WITH_AES_256_CBC_SHA256 |
X脚注1 | X | ||||
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 |
X脚注1 | X | ||||
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 |
X脚注1 | X | ||||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 |
X脚注1 | X | ||||
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 |
X脚注1 | X | ||||
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_RSA_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 |
X脚注1 | X | ||||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
X脚注1 | X | ||||
TLS_RSA_WITH_AES_128_CBC_SHA256 |
X脚注1 | X | ||||
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 |
X脚注1 | X | ||||
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 |
X脚注1 | X | ||||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 |
X脚注1 | X | ||||
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 |
X脚注1 | X | ||||
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_RSA_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_RC4_128_SHA |
X | X | X | |||
SSL_RSA_WITH_RC4_128_SHA |
X | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_RC4_128_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_RC4_128_SHA |
X | X | X | |||
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
SSL_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | |
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | X |
SSL_RSA_WITH_RC4_128_MD5 |
X | X | X | X | X | X |
TLS_EMPTY_RENEGOTIATION_INFO_SCSV 脚注2 |
1.4.2u28+ | u26+ | u22+ | X | X |
脚注1 SHA384およびSHA256を使用する暗号化方式群は、TLS 1.2以降でのみ使用可能です。
脚注2 TLS_EMPTY_RENEGOTIATION_INFO_SCSV
は、RFC 5746をサポートするための新しい擬似暗号化方式群です。詳細は、『JSEEリファレンス・ガイド』の「Transport Layer Security (TLS)再ネゴシエーションの問題」の項を参照してください。
暗号化方式群 | J2SE v1.4 | J2SE v1.4.1、v1.4.2 | J2SE 5.0 | JDK 6 | JDK 7 | JDK 8 |
---|---|---|---|---|---|---|
TLS_DH_anon_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_DH_anon_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_DH_anon_WITH_AES_256_CBC_SHA256 |
X | X | ||||
TLS_ECDH_anon_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_DH_anon_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_DH_anon_WITH_AES_128_CBC_SHA256 |
X | X | ||||
TLS_ECDH_anon_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_DH_anon_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_ECDH_anon_WITH_RC4_128_SHA |
X | X | X | |||
SSL_DH_anon_WITH_RC4_128_MD5 |
X | X | X | X | X | X |
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | X |
TLS_RSA_WITH_NULL_SHA256 |
X | X | ||||
TLS_ECDHE_ECDSA_WITH_NULL_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_NULL_SHA |
X | X | X | |||
SSL_RSA_WITH_NULL_SHA |
X | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_NULL_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_NULL_SHA |
X | X | X | |||
TLS_ECDH_anon_WITH_NULL_SHA |
X | X | X | |||
SSL_RSA_WITH_NULL_MD5 |
X | X | X | X | X | X |
SSL_RSA_WITH_DES_CBC_SHA |
X | X | X | X | X脚注1 | X |
SSL_DHE_RSA_WITH_DES_CBC_SHA |
X | X | X | X脚注1 | X | |
SSL_DHE_DSS_WITH_DES_CBC_SHA |
X | X | X | X | X脚注1 | X |
SSL_DH_anon_WITH_DES_CBC_SHA |
X | X | X | X | X脚注1 | X |
SSL_RSA_EXPORT_WITH_RC4_40_MD5 |
X | X | X | X | X脚注2 | X |
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 |
X | X | X | X | X脚注2 | X |
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | X脚注2 | X | |
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | X脚注2 | X | |
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | X | X脚注2 | X |
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | X | X脚注2 | X |
TLS_KRB5_WITH_RC4_128_SHA |
X | X | X | X | ||
TLS_KRB5_WITH_RC4_128_MD5 |
X | X | X | X | ||
TLS_KRB5_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | ||
TLS_KRB5_WITH_3DES_EDE_CBC_MD5 |
X | X | X | X | ||
TLS_KRB5_WITH_DES_CBC_SHA |
X | X | X脚注1 | X | ||
TLS_KRB5_WITH_DES_CBC_MD5 |
X | X | X脚注1 | X | ||
TLS_KRB5_EXPORT_WITH_RC4_40_SHA |
X | X | X脚注2 | X | ||
TLS_KRB5_EXPORT_WITH_RC4_40_MD5 |
X | X | X脚注2 | X | ||
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA |
X | X | X脚注2 | X | ||
TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 |
X | X | X脚注2 | X |
脚注1 RFC 5246 TLS 1.2では、これらの群の使用は禁止されています。これらは、SSLv3/TLS1.0/TLS1.1プロトコルでは使用できますが、TLS 1.2以降では使用できません。
脚注2 RFC 4346 TLS 1.1では、これらの群の使用は禁止されています。これらは、SSLv3/TLS1.0プロトコルでは使用できますが、TLS 1.1以降では使用できません。
AES_256を使用する暗号化方式群では、強度が無制限のJCE管轄ポリシー・ファイルがインストールされている必要があります。「暗号化アルゴリズムの輸入制限」を参照してください。
楕円曲線暗号(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暗号化方式群が正しくネゴシエーションされないことがあります。
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
プロバイダ「SUN
プロバイダ」で簡単に説明されているように、当時の米国の輸出制限事項によって、JDK内で使用できる暗号化機能が制限されていました。このため、アプリケーションでデータの暗号化または復号化を可能にするために、個別のAPIおよびリファレンス実装が開発されました。Java暗号化拡張機能(JCE)は、個別の「オプション・パッケージ」(「標準拡張機能」とも呼ばれています)としてリリースされ、JDK 1.2.xおよび1.3.xで使用できました。JDK 1.4の開発時に制限が緩和されたため、JCE (およびSunJSSE)をJDKの一部としてバンドルできるようになりました。
SunJCEプロバイダでは、次のアルゴリズムを使用できます。
エンジン | アルゴリズム名 |
---|---|
AlgorithmParameterGenerator |
DiffieHellman |
AlgorithmParameters |
AES Blowfish DES DESede DiffieHellman 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 |
暗号の表を参照してください。 |
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 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
プロバイダで使用できる暗号アルゴリズムを示します。
アルゴリズム名 | モード | パディング |
---|---|---|
AES | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8..CFB128、OFB、OFB8..OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
AES | GCM | NoPadding |
AESWrap | ECB | NoPadding |
ARCFOUR | ECB | NoPadding |
Blowfish、DES、DESede、RC2 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8..CFB64、OFB、OFB8..OFB64 | NoPadding、PKCS5Padding、ISO10126Padding |
DESedeWrap | CBC | NoPadding |
PBEWithMD5AndDES、 PBEWithMD5AndTripleDES 脚注1、 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、OAEPWithMD5AndMGF1Padding、OAEPWithSHA1AndMGF1Padding、OAEPWithSHA-1AndMGF1Padding、OAEPWithSHA-224AndMGF1Padding、OAEPWithSHA-256AndMGF1Padding、OAEPWithSHA-384AndMGF1Padding、OAEPWithSHA-512AndMGF1Padding |
脚注1 PBEWithMD5AndTripleDESは、標準化されていない独自のアルゴリズムです。
SunJCE
プロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します:
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ビットのキーを生成します。
KeyPairGenerator
アルゴリズム名 | デフォルト・キーサイズ | 制限/コメント |
---|---|---|
Diffie-Hellman (DH) | 1024 | キー・サイズは、512から2048の範囲で、64の倍数である必要があります。 |
AlgorithmParameterGenerator
アルゴリズム名前 | デフォルト・キーサイズ | 制限/コメント |
---|---|---|
Diffie-Hellman (DH) | 1024 | キー・サイズは、512から2048の範囲で、64の倍数である必要があります。 |
SunJGSS
プロバイダSunJGSS
プロバイダでは、次のアルゴリズムを使用できます。
OID | 名前 |
---|---|
1.2.840.113554.1.2.2 |
Kerberos v5 |
1.3.6.1.5.5.2 |
SPNEGO |
SunSASL
プロバイダSunSASL
プロバイダでは、次のアルゴリズムを使用できます。
エンジン | アルゴリズム名 |
---|---|
SaslClient |
CRAM-MD5 DIGEST-MD5 EXTERNAL GSSAPI PLAIN |
SaslServer |
CRAM-MD5 DIGEST-MD5 GSSAPI |
XMLDSig
プロバイダ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スマート・カード・スタックと相互に作用することができます。一部のオペレーティング・システムでは、PC/SCスタックを使用する前にこれを有効にして構成する必要があることがあります。詳細は、オペレーティング・システムのドキュメントを参照してください。
SolarisおよびLinuxプラットフォームでは、SunPCSCはlibpcsclite.so
ライブラリを使用してPC/SCスタックにアクセスします。これは、ディレクトリ/usr/$LIBISA
および/usr/local/$LIBISA
内でこのライブラリを検索します。$LIBISA
は、32ビットのプラットフォームではlib
、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
プロバイダでは、次のアルゴリズムを使用できます。
エンジン | アルゴリズム名 |
---|---|
TerminalFactory |
PC/SC |
SunMSCAPI
プロバイダSunMSCAPI
プロバイダを使用すると、アプリケーションは標準のJCA/JCE APIを使用して、Microsoft Windowsプラットフォームのネイティブ暗号化ライブラリ、証明書ストアおよびキー・コンテナにアクセスできます。SunMSCAPI
プロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とWindowsのネイティブ暗号化サービス間のコンジットとして機能します。
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
アルゴリズム名前 | デフォルト・キーサイズ | 制限/コメント |
---|---|---|
RSA | 1024 | キー・サイズの範囲は512ビットから16,384ビットです。ベースとなるMicrosoft Windows暗号化サービス・プロバイダによって異なります。 |
SunEC
プロバイダSunEC
プロバイダは、楕円曲線暗号(ECC)を実装します。RSAのような従来の暗号システムと比べて、ECCではより小さいキー・サイズで同等のセキュリティが提供されるため、計算の高速化、消費電力の削減、メモリーと帯域幅の節約を実現できます。アプリケーションは、(SunPKCS11を通じて)外部のECCライブラリに依存せずに、標準のJCA/JCE APIを使用してECCの機能にアクセスできます。
SunECプロバイダでは、次のアルゴリズムを使用できます。
エンジン | アルゴリズム名 |
---|---|
AlgorithmParameters |
EC |
KeyAgreement |
ECDH |
KeyFactory |
EC |
KeyPairGenerator |
EC |
Signature |
NONEwithECDSA SHA1withECDSA SHA224withECDSA SHA256withECDSA SHA384withECDSA SHA512withECDSA |
SunEC
プロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します:
KeyPairGenerator
アルゴリズム名前 | デフォルト・キーサイズ | 制限/コメント |
---|---|---|
EC | 256 | キー・サイズは、112から571の範囲内である必要があります。 |
SunEC
プロバイダには、楕円曲線(EC)、楕円曲線Diffie-Hellman (ECDH)および楕円曲線デジタル署名アルゴリズム(ECDSA)の各アルゴリズムで使用する様々な楕円曲線の実装が含まれます。これらの曲線の中には、サイドチャネル攻撃の防止に役立つ最新の式と技術を使用して実装されたものがあります。それ以外には、攻撃に対して脆弱である可能性があるため、使用すべきではないレガシー曲線があります。次の表に、これらの各カテゴリに分類される曲線を示します。
次の表の1列目「曲線名」に、SunECが実装する名前を示します。2列目「オブジェクト識別子」には、EC名のオブジェクト識別子を指定します。3列目「その他の名前/別名」には、その曲線のその他の名前または別名を指定します。1行に表示されている文字列はすべて同じ曲線を表します。たとえば、文字列secp256r1
、1.2.840.10045.3.1.7
、NIST P-256
およびX9.62 prime256v1
は同じ曲線を表します。曲線名を使用して、ECGenParameterSpec
クラスでECパラメータ生成のパラメータ仕様を作成できます。
次の表に、SunEC
プロバイダによって提供され、最新の式と技術を使用して実装される楕円曲線を示します。これらの曲線は推奨されており、「互換性のために保持されるレガシー曲線」に示されている曲線よりも優先する必要があります。
曲線名 | オブジェクトID | その他の名前/別名 |
---|---|---|
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 |
新しい曲線に移行することをお薦めします。
次の表に、SunEC
プロバイダによって提供され、最新の式と技術を使用して実装されていない楕円曲線を示します。これらの曲線は、互換性の理由から引き続き使用でき、レガシー・システムが新しい曲線に移行する時間を確保できます。これらの実装は、JDKの将来のバージョンで削除または置換されます。
曲線名 | オブジェクトID | その他の名前/別名 |
---|---|---|
secp112r1 | 1.3.132.0.6 | N/A |
secp112r2 | 1.3.132.0.7 | N/A |
secp128r1 | 1.3.132.0.28 | N/A |
secp128r2 | 1.3.132.0.29 | N/A |
secp160k1 | 1.3.132.0.9 | N/A |
secp160r1 | 1.3.132.0.8 | N/A |
secp160r2 | 1.3.132.0.30 | N/A |
secp192k1 | 1.3.132.0.31 | N/A |
secp192r1 | 1.2.840.10045.3.1.1 | NIST P-192、X9.62 prime192v1 |
secp224k1 | 1.3.132.0.32 | N/A |
secp224r1 | 1.3.132.0.33 | NIST P-224 |
secp256k1 | 1.3.132.0.10 | N/A |
sect113r1 | 1.3.132.0.4 | N/A |
sect113r2 | 1.3.132.0.5 | N/A |
sect131r1 | 1.3.132.0.22 | N/A |
sect131r2 | 1.3.132.0.23 | N/A |
sect163k1 | 1.3.132.0.1 | NIST K-163 |
sect163r1 | 1.3.132.0.2 | N/A |
sect163r2 | 1.3.132.0.15 | NIST B-163 |
sect193r1 | 1.3.132.0.24 | N/A |
sect193r2 | 1.3.132.0.25 | N/A |
sect233k1 | 1.3.132.0.26 | NIST K-233 |
sect233r1 | 1.3.132.0.27 | NIST B-233 |
sect239k1 | 1.3.132.0.3 | N/A |
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 | N/A |
X9.62 c2tnb191v2 | 1.2.840.10045.3.0.6 | N/A |
X9.62 c2tnb191v3 | 1.2.840.10045.3.0.7 | N/A |
X9.62 c2tnb239v1 | 1.2.840.10045.3.0.11 | N/A |
X9.62 c2tnb239v2 | 1.2.840.10045.3.0.12 | N/A |
X9.62 c2tnb239v3 | 1.2.840.10045.3.0.13 | N/A |
X9.62 c2tnb359v1 | 1.2.840.10045.3.0.18 | N/A |
X9.62 c2tnb431r1 | 1.2.840.10045.3.0.20 | N/A |
X9.62 prime192v2 | 1.2.840.10045.3.1.2 | N/A |
X9.62 prime192v3 | 1.2.840.10045.3.1.3 | N/A |
X9.62 prime239v1 | 1.2.840.10045.3.1.4 | N/A |
X9.62 prime239v2 | 1.2.840.10045.3.1.5 | N/A |
X9.62 prime239v3 | 1.2.840.10045.3.1.6 | N/A |
OracleUcrypto
プロバイダSolaris専用のセキュリティ・プロバイダであるOracleUcrypto
は、Solaris Ucryptoライブラリを利用して、Oracle SPARC T4ベースのオンコア暗号化命令でサポートされる暗号化操作のオフロードと委譲を行います。OracleUcrypto
プロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java環境とSolaris Ucryptoライブラリ間のコンジットとして機能します。
基盤となるSolaris Ucryptoライブラリが特定のアルゴリズムをサポートしない場合は、OracleUcrypto
プロバイダもそれをサポートしません。その結果、実行時にサポートされるアルゴリズムは、Solaris UcryptoライブラリがサポートするアルゴリズムとOracleUcrypto
プロバイダが認識するアルゴリズムの共通部分になります。
OracleUcrypto
プロバイダは、オラクル社のJDKにのみ含まれています。OpenJDKの一部ではありません。
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 RSA/ECB/PKCS1Padding RSA/ECB/NoPadding |
Signature |
MD5withRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
MessageDigest |
MD5 SHA SHA-256 SHA-384 SHA-512 |
OracleUcrypto
プロバイダは、デフォルトのキー・サイズまたはキー・サイズ制限を指定しません。これらは、基盤となるSolaris Ucryptoライブラリで指定されます。
OracleUcrypto
プロバイダの構成ファイルOracleUcrypto
プロバイダには、$JAVA_HOME/lib/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
プロバイダでは、次のアルゴリズムを使用できます。
エンジン | アルゴリズム名 |
---|---|
KeyStore |
KeychainStore |