Java暗号化アーキテクチャOracleプロバイダのドキュメント(JDK 8用)

次の項目について説明します。

ノート: このドキュメントで使用される標準名の詳細は、標準名ドキュメントを参照してください。

はじめに

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実装

次の表に、利用可能な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乱数ジェネレータ、KeyPairGeneratorKeyFactoryなど)。

当時有効だった米国の輸出制限事項によって、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
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実装

CertificateFactoryCertPathBuilderCertPathValidatorおよび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: X509ExtendedKeyManagerインスタンスのファクトリであり、IETF PKIXワーキング・グループによってRFC 3280またはその後継で定義された規則に従って、ローカル側の認証に使用するX.509証明書ベースのキー・ペアを管理します。 このKeyManagerFactoryは、Keystoreオブジェクトを使用した初期化をサポートしますが、現在のところjavax.net.ssl.ManagerFactoryParametersクラスを使用した初期化はサポートしていません。

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

KeyPairGenerator RSA
KeyStore PKCS12脚注1
Signature MD2withRSA
MD5withRSA
SHA1withRSA
SSLContext SSLv3
TLSv1
TLSv1.1
TLSv1.2
TrustManagerFactory

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

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

脚注1 -PKCS12 KeyStore実装はKeyBagタイプをサポートしていません。

Protocols

次の表に、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リリースで現在実装されているSunJSSE暗号化方式群を優先度順に示します。 これらの暗号化方式群の一部はデフォルトで使用可能になっていません。

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プロバイダ

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
EXTERNAL
GSSAPI
NTLM
PLAIN
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プラットフォームでは、SunPCSClibpcsclite.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プロバイダのネイティブ・ライブラリを削除することの影響

SunECプロバイダは、ネイティブ・ライブラリを使用してECC機能を提供します。 このネイティブ・ライブラリを使用しない場合は、(ご使用のオペレーティング・システムに応じて)次のファイルを削除してください:

ネイティブ・ライブラリを削除すると、前の表の脚注を含むアルゴリズムは、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行に表示されている文字列はすべて同じ曲線を表します。 たとえば、文字列secp256r11.2.840.10045.3.1.7NIST 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プロバイダ

Appleプロバイダは、macOSキー・チェーンへのアクセスを提供するjava.security.KeyStoreを実装します。

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

エンジン アルゴリズム名
KeyStore KeychainStore

Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.