次の項目について説明します。
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 | 
コレクション LDAP  | 
Configuration | 
JavaLoginConfig | 
KeyFactory | 
DSA | 
KeyPairGenerator | 
DSA | 
KeyStore | 
JKS DKS  | 
MessageDigest | 
MD2 MD5 SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 SHA-512/224 SHA-512/256  | 
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 ノート: シグネチャ生成の場合、ダイジェスト・アルゴリズムのセキュリティ強度が、シグネチャ(たとえば、(2048, 256)-bit DSAキーをSHA1withDSAシグネチャとともに使用)のシグネチャに使用されるキーのセキュリティ強度より弱い場合、操作はエラー・メッセージで失敗: "SHA1ダイジェスト・アルゴリズムのセキュリティ強度がこのキー・サイズに対して十分ではありません。"  | 
次の表に、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 | 
次の表に、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 | 2048 | キー・サイズは、512から1024の範囲で64の倍数であるか、または2048である必要があります。 | 
AlgorithmParameterGenerator
| アルゴリズム 名前 | デフォルト・キーサイズ | 制限/コメント | 
|---|---|---|
| DSA | 2048 | キー・サイズは、512から1024の範囲で64の倍数であるか、または2048である必要があります。 | 
CertificateFactory/CertPathBuilder/CertPathValidator/CertStore実装CertificateFactory、CertPathBuilder、CertPathValidatorおよびCertStoreに対するSUNプロバイダ実装の詳細は、『PKIプログラマーズ・ガイド』の「付録B」を参照してください。 
SunRsaSignプロバイダSunRsaSignプロバイダは、SunJSSEプロバイダのRSA署名の機能が拡張された代替機能として、JDK 1.3で導入されました。
SunRsaSignプロバイダでは、次のアルゴリズムを使用できます。
| エンジン | アルゴリズム名 | 
|---|---|
AlgorithmParameters | 
RSASSA-PSS | 
KeyFactory | 
RSA RSASSA-PSS  | 
KeyPairGenerator | 
RSA RSASSA-PSS  | 
Signature | 
MD2withRSA MD5withRSA RSASSA-PSS SHA1withRSA SHA224withRSA SHA256withRSA SHA384withRSA SHA512withRSA SHA512/224withRSA SHA512/256withRSA  | 
SunRsaSignプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します。
KeyPairGenerator
| アルゴリズム 名前 | デフォルト・キーサイズ | 制限/コメント | 
|---|---|---|
| RSAおよびRSASSA-PSS | 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 | いいえ | いいえ | 
| TLSv1 「脚注1」 | いいえ | いいえ | 
| TLSv1.1 「脚注1」 | いいえ | いいえ | 
| TLSv1.2 | はい | はい | 
| TLSv1.3 | はい | はい | 
| SSLv2Hello 「脚注2」 | いいえ | はい | 
「脚注1 -」 TLS 1.0および1.1はTLSプロトコルのバージョンで、セキュアではなくなり、よりセキュアで最新のバージョンである(TLS 1.2および1.3)に置き換えられています。 これらのバージョンは、デフォルトで無効になっています。 問題が発生した場合は、java.security構成file.のjdk.tls.disabledAlgorithmsセキュリティ・プロパティからTLSv1またはTLSv1.1を削除することで、自己責任でバージョンを再有効化できます 
「脚注2 -」 SSLv3、TLSv1、TLSv1.1およびTLSv1.2プロトコルを使用すると、SSLv2Hello疑似プロトコルを使用して、SSLv2形式のhelloでカプセル化されたSSLv3、TLSv1、TLSv1.1およびTLSv1.2 ClientHellosを送信できます。 次の表は、SSLv2Hellosの使用時に可能な接続の組合せを示しています。
| クライアント | サーバー | 接続 | 
|---|---|---|
| 有効 | 有効 | Y | 
| 無効 | 有効 | Y (最も相互運用可能: SunJSSEデフォルト) | 
| 有効 | 無効 | N | 
| 無効 | 無効 | Y | 
ノート: JDKリリースでデフォルトで使用可能なプロトコルは、新しいプロトコルが開発され、古いプロトコルはこれまで考えられていたよりも効果が低いことがわかりました。 JDKでは、次の2つのメカニズムで、これらのプロトコルを使用するかどうかを制限します:
jdk.tls.disabledAlgorithmsセキュリティ・プロパティ: これにより、プロトコルおよび暗号スイートのカテゴリが無効になります。 たとえば、このセキュリティ・プロパティにSSLv3が含まれる場合、SSLv3プロトコルは無効になります。 このセキュリティ・プロパティの詳細は、「無効化された制限付き暗号化アルゴリズム」を参照してください。 次に、このJDKリリースで現在実装されているSunJSSE暗号化方式群を優先度順に示します。 これらの暗号化方式群の一部はデフォルトで使用可能になっていません。
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 「脚注1」 | 
| 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脚注2、 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 OAEPWithSHA-512/224AndMGF1Padding、 OAEPWithSHA-512/2256ndMGF1Padding  | 
脚注1 Java SE ISO10126パディング実装では、標準ではパディング・バイトがランダムに指定されていないか、必要ではありませんが、ランダム・バイトが(最後のバイトまで、指定されたパディングの長さを提供)のパッドが実装されます。
脚注2 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)アルゴリズムは、様々なアルゴリズムを使用してキー・データを生成し、最終的にはターゲット暗号アルゴリズムに依存します。 たとえば、「PBEWithMD5AndDES」は常に56ビットのキーを生成します。
KeyPairGenerator
| アルゴリズム名 | デフォルト・キーサイズ | 制限/コメント | 
|---|---|---|
| Diffie-Hellman (DH) | 2048 | キー・サイズは、512から2048の範囲で、64の倍数である必要があります。 | 
AlgorithmParameterGenerator
| アルゴリズム 名前 | デフォルト・キーサイズ | 制限/コメント | 
|---|---|---|
| Diffie-Hellman (DH) | 2048 | キー・サイズは、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 外部 GSSAPI NTLM プレーン  | 
SaslServer | 
CRAM-MD5 DIGEST-MD5 GSSAPI NTLM  | 
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 RSASSA-PSS SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA SHA1withECDSA SHA224withECDSA SHA256withECDSA SHA384withECDSA SHA512withECDSA  | 
SunMSCAPIプロバイダでは、次のデフォルト・キーサイズ(ビット単位)を使用し、次の制限を強制します:
KeyGenerator
| アルゴリズム 名前 | デフォルト・キーサイズ | 制限/コメント | 
|---|---|---|
| RSA | 2048 | キー・サイズの範囲は512ビットから16,384ビットです。ベースとなるMicrosoft Windows暗号化サービス・プロバイダによって異なります。 | 
SunECプロバイダSunECプロバイダは、楕円曲線暗号(ECC)を実装します。 RSAのような従来の暗号システムと比べて、ECCではより小さいキー・サイズで同等のセキュリティが提供されるため、計算の高速化、消費電力の削減、メモリーと帯域幅の節約を実現できます。 アプリケーションは、標準のJCA/JCE APIを使用して、外部ECCライブラリ(SunPKCS11から)に依存せずにECC機能にアクセスできます。 
SunECプロバイダでは、次のアルゴリズムを使用できます。
| エンジン | アルゴリズム名 | 
|---|---|
AlgorithmParameters | 
EC | 
KeyAgreement | 
ECDH 「脚注1」 | 
KeyFactory | 
EC | 
KeyPairGenerator | 
EC 「脚注1」 | 
Signature | 
NONEwithECDSA脚注1 SHA1withECDSA脚注1 SHA224withECDSA脚注1 SHA256withECDSA脚注1 SHA384withECDSA脚注1 SHA512withECDSA脚注1  | 
「脚注1」このアルゴリズムは、SunECプロバイダのネイティブ・ライブラリを削除すると、JCA/JCE APIを介してSunECプロバイダから使用できなくなります。 「SunECプロバイダのネイティブ・ライブラリの削除の影響」を参照してください。 
SunECプロバイダは、ネイティブ・ライブラリを使用してECC機能を提供します。 このネイティブ・ライブラリを使用しない場合は、(ご使用のオペレーティング・システムに応じて)次のファイルを削除してください: 
$JAVA_HOME/lib/libsunec.so$JAVA_HOME/lib/libsunec.dylib%JAVA_HOME%\bin\sunec.dllネイティブ・ライブラリを削除すると、前の表の脚注を含むアルゴリズムは、JCA/JCE APIを介してSunECプロバイダから使用できません。
ノート: その他のインストール済プロバイダ(たとえば、SunPCKS11)は、これらのアルゴリズムを引き続き提供する場合があります。
これらのアルゴリズムを使用するライブラリやツール(JSSE、XML Digital Signature、keytoolなど)は、機能が少なくなります。 たとえば、JSSEはECキー・ペアを生成したり、ECベースのピア証明書を使用したり、SSL/TLS接続のECDH/ECDHEキー・アグリーメントを実行できなくなった場合があります。 TLS_*_ECDSAやTLS_ECDHE_*などの暗号化方式群は使用できなくなります。 SSL/TLS接続では、代替アルゴリズムを使用して、RSA-/DSAベースの証明書や、DH/DHE (RFC 2631)またはFFDHE (RFC 7919)に基づくキー・アグリーメントなどの接続をセキュリティ保護できます。
ネイティブ・ライブラリが削除されても、アルゴリズム(脚注のないアルゴリズム)のrestは、ネイティブ・ライブラリ・コードに実装されていないため、SunECプロバイダから引き続き使用できます。
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 |