SunPKCS11 プロバイダSUN プロバイダSunRsaSign プロバイダSunJSSE プロバイダSunJCE プロバイダSunJGSS プロバイダSunSASL プロバイダXMLDSig プロバイダSunPCSC プロバイダSunMSCAPI プロバイダ注: 標準名のドキュメントには、このドキュメントで使用されている標準名に関する詳細な情報が含まれています。
Java プラットフォームでは、暗号化、公開鍵インフラストラクチャー、認証、安全な通信、アクセス制御など、主要なセキュリティー分野に渡る一連の API が定義されています。これらの API によって、開発者はアプリケーションコードにセキュリティー機構を簡単に統合できます。Java 暗号化アーキテクチャー (JCA) およびそのプロバイダアーキテクチャーは、Java Development Kit (JDK) のコア概念です。このアーキテクチャーについて十分理解していることが前提となります。
このドキュメントでは、Sun の Java 環境の一部として同梱されているプロバイダの技術的な詳細について説明します。
注: Sun JDK での暗号化実装は、歴史的な理由および提供するサービスの種類により、さまざまなプロバイダによって配布されています (「Sun」、「SunJSSE」、「SunJCE」、「SunRsaSign」)。汎用アプリケーションは、特定のプロバイダから暗号化サービスを要求しないようにする必要があります。たとえば、次のように指定できます。
getInstance("...", "SunJCE"); // not recommended vs. getInstance("..."); // recommended後者のようにしないと、アプリケーションは特定のプロバイダに結び付けられることになり、そのプロバイダはほかの Java 実装で使用できない可能性があります。特定の要求されたプロバイダよりも優先順位が高い、使用可能な最適化されたプロバイダ (たとえば、PKCS11 によるハードウェアアクセラレータまたは Microsoft の MSCAPI などのネイティブ OS 実装) を利用できない場合もあります。
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 |
構成
|
JavaLoginConfig |
KeyFactory
|
DSA |
KeyPairGenerator
|
DSA |
KeyStore
|
JKS |
MessageDigest
|
MD2 MD5 SHA-1 SHA-256 SHA-384 SHA-512 |
Policy
|
JavaPolicy |
SecureRandom
|
SHA1PRNG |
署名
|
NONEwithDSA SHA1withDSA |
SUN プロバイダでは、次のデフォルトキーサイズ (ビット単位) を使用し、次の制限を強制します。
KeyPairGenerator
アルゴリズムの名前 デフォルトキーサイズ 制限/コメント DSA 1024 キーサイズは、512 から 1024 の範囲で、64 の倍数である必要があります。 AlgorithmParameterGenerator
アルゴリズムの名前 デフォルトキーサイズ 制限/コメント DSA 1024 キーサイズは、512 から 1024 の範囲で、64 の倍数である必要があります。
CertificateFactory/CertPathBuilder/ CertPathValidator/CertStore 実装
CertificateFactory、CertPathBuilder、CertPathValidator、および CertStore に対する SUN プロバイダ実装の詳細は、「PKI プログラマーズガイド」の「付録 B」 を参照してください。
SunRsaSign プロバイダ
SunRsaSign プロバイダは、SunJSSE プロバイダの RSA 署名の機能が拡張された代替機能として JDK 1.3 で導入されました。
SunRsaSign プロバイダでは、次のアルゴリズムを使用できます。
| エンジン | アルゴリズム名 |
|---|---|
KeyFactory
|
RSA |
KeyPairGenerator
|
RSA |
署名
|
MD2withRSA MD5withRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
SunRsaSign プロバイダでは、次のデフォルトキーサイズ (ビット単位) を使用し、次の制限を強制します。
KeyPairGenerator
アルゴリズムの名前 デフォルトキーサイズ 制限/コメント RSA 1024 キーサイズの範囲は、512 から 65536 ビットの間である必要があります。前者の値は不必要に大きくなっています。
SunJSSE プロバイダ
Java Secure Socket Extension (JSSE) は、個別の「オプションパッケージ」(「標準拡張機能」とも呼ばれています) としてリリースされ、JDK 1.2.x および 1.3.x で使用できました。SunJSSE プロバイダはこのリリースの一部として導入されました。
以前の JDK リリースでは、JDK で RSA 署名プロバイダは使用できませんでした。このため、SunJSSE では、共通で使用可能な RSA ベースの証明書を使用するために独自の RSA 実装を提供する必要がありました。JDK 5 では SunRsaSign プロバイダが導入されました。このプロバイダは、SunJSSE プロバイダのすべての機能 (およびそれ以上の機能) を提供します。JDK 5.0 以降をターゲットにしているアプリケーションは、代わりに SunRsaSign プロバイダのインスタンスを要求する必要があります。下位互換性のために、このプロバイダで RSA アルゴリズムをまだ使用できますが、このアルゴリズムは実際には SunRsaSign プロバイダに実装されています。
SunJSSE プロバイダでは、次のアルゴリズムを使用できます。
| エンジン | アルゴリズム名 |
|---|---|
KeyFactory
|
RSA |
KeyManagerFactory
|
SunX509 |
KeyPairGenerator
|
RSA |
KeyStore
|
PKCS12 |
署名
|
MD2withRSA MD5withRSA SHA1withRSA |
SSLContext
|
SSLv3 TLSv1 |
TrustManagerFactory
|
PKIX |
SunJSSE は、次の protocol パラメータもサポートしています。
| プロトコル |
|---|
| SSLv3 |
| TLSv1 |
| SSLv2Hello |
SunJSSE は、数多くの暗号群をサポートしています。次の表は、SunJSSE でサポートされている暗号群 (デフォルトの優先順位) およびその暗号群が導入されたリリースを示しています。
暗号群 サポートしているリリース <1.4.2 1.4.2 J2SE 5 Java SE 6 SSL_RSA_WITH_RC4_128_MD50 0 0 0 SSL_RSA_WITH_RC4_128_SHA0 0 0 0 TLS_RSA_WITH_AES_128_CBC_SHA0 0 0 TLS_RSA_WITH_AES_256_CBC_SHA0 0 0 TLS_ECDH_ECDSA_WITH_RC4_128_SHA0 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA0 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA0 TLS_ECDH_RSA_WITH_RC4_128_SHA0 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA0 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA0 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA0 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA0 TLS_ECDHE_RSA_WITH_RC4_128_SHA0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA0 TLS_DHE_RSA_WITH_AES_128_CBC_SHA0 0 0 TLS_DHE_RSA_WITH_AES_256_CBC_SHA0 0 0 TLS_DHE_DSS_WITH_AES_128_CBC_SHA0 0 0 TLS_DHE_DSS_WITH_AES_256_CBC_SHA0 0 0 SSL_RSA_WITH_3DES_EDE_CBC_SHA0 0 0 0 TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA0 TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA0 TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA0 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA0 SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA0 0 0 SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA0 0 0 0 SSL_RSA_WITH_DES_CBC_SHA0 0 0 0 SSL_DHE_RSA_WITH_DES_CBC_SHA0 0 0 SSL_DHE_DSS_WITH_DES_CBC_SHA0 0 0 0 SSL_RSA_EXPORT_WITH_RC4_40_MD50 0 0 0 SSL_RSA_EXPORT_WITH_DES40_CBC_SHA0 0 0 SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA0 0 0 SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA0 0 0 0 SSL_RSA_WITH_NULL_MD50 0 0 0 SSL_RSA_WITH_NULL_SHA0 0 0 0 TLS_ECDH_ECDSA_WITH_NULL_SHA0 TLS_ECDH_RSA_WITH_NULL_SHA0 TLS_ECDHE_ECDSA_WITH_NULL_SHA0 TLS_ECDHE_RSA_WITH_NULL_SHA0 SSL_DH_anon_WITH_RC4_128_MD50 0 0 0 TLS_DH_anon_WITH_AES_128_CBC_SHA0 0 0 TLS_DH_anon_WITH_AES_256_CBC_SHA0 0 0 SSL_DH_anon_WITH_3DES_EDE_CBC_SHA0 0 0 0 SSL_DH_anon_WITH_DES_CBC_SHA0 0 0 0 TLS_ECDH_anon_WITH_RC4_128_SHA0 TLS_ECDH_anon_WITH_AES_128_CBC_SHA0 TLS_ECDH_anon_WITH_AES_256_CBC_SHA0 TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA0 SSL_DH_anon_EXPORT_WITH_RC4_40_MD50 0 0 0 SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA0 0 0 0 TLS_ECDH_anon_WITH_NULL_SHA0 TLS_KRB5_WITH_RC4_128_SHA0 0 TLS_KRB5_WITH_RC4_128_MD50 0 TLS_KRB5_WITH_3DES_EDE_CBC_SHA0 0 TLS_KRB5_WITH_3DES_EDE_CBC_MD50 0 TLS_KRB5_WITH_DES_CBC_SHA0 0 TLS_KRB5_WITH_DES_CBC_MD50 0 TLS_KRB5_EXPORT_WITH_RC4_40_SHA0 0 TLS_KRB5_EXPORT_WITH_RC4_40_MD50 0 TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA0 0 TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD50 0 AES_256 を使用する暗号群では、強度が無制限の JCE 管轄ポリシーファイルがインストールされている必要があります。「Java SE ダウンロードページ」を参照してください。
Elliptic Curve Cryptography (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 暗号群が正しくネゴシエーションされないことがあります。
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 PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 RC2 |
||||||||||||||||||||||||
暗号
|
脚注 1: PBEWithMD5AndTripleDES は、標準化されていない独自のアルゴリズムです。 |
||||||||||||||||||||||||
KeyAgreement
|
DiffieHellman | ||||||||||||||||||||||||
KeyFactory
|
DiffieHellman |
||||||||||||||||||||||||
KeyGenerator
|
AES ARCFOUR Blowfish DES DESede HmacMD5 HmacSHA1 HmacSHA256 HmacSHA384 HmacSHA512 RC2 |
||||||||||||||||||||||||
KeyPairGenerator
|
DiffieHellman |
||||||||||||||||||||||||
KeyStore
|
JCEKS |
||||||||||||||||||||||||
Mac
|
HmacMD5 HmacSHA1 HmacSHA256 HmacSHA384 HmacSHA512 |
||||||||||||||||||||||||
SecretKeyFactory
|
DES DESede PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBKDF2WithHmacSHA1 |
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 キーサイズの制限はありません。 HmacSHA256 256 キーサイズの制限はありません。 HmacSHA384 384 キーサイズの制限はありません。 HmacSHA512 512 キーサイズの制限はありません。 RC2 128 キーサイズは、40 から 1024 の範囲内である必要があります。 注: さまざまなパスワードベース暗号化 (PBE) アルゴリズムは、多くのアルゴリズムを使用して鍵データを生成し、最終的にターゲットの Cipher アルゴリズムに依存します。たとえば、「PBEWithMD5AndDES」は常に 56 ビットの鍵を生成します。
KeyPairGenerator
アルゴリズムの名前 デフォルトキーサイズ 制限/コメント Diffie-Hellman (DH) 1024 キーサイズは、512 から 1024 の範囲で、64 の倍数である必要があります。 AlgorithmParameterGenerator
アルゴリズムの名前 デフォルトキーサイズ 制限/コメント Diffie-Hellman (DH) 1024 キーサイズは、512 から 1024 の範囲で、64 の倍数である必要があります。 DSA 1024 キーサイズは、512 から 1024 の範囲で、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 スタックにアクセスします。SunPCSC は、ディレクトリ /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 が使用可能でないか、または正しく構成されていない場合は、NoSuchAlgorithmException とともに getInstance() 呼び出しが失敗して、getDefault() は端末をサポートしない JRE 組み込み実装を返します。
SunPCSC プロバイダでは、次のアルゴリズムを使用できます。
| エンジン | アルゴリズム名 |
|---|---|
TerminalFactory
|
PC/SC |
SunMSCAPI プロバイダSunMSCAPI プロバイダを使用すると、アプリケーションは標準の JCA/JCE API を使用して、Microsoft Windows プラットフォームのネイティブ暗号化ライブラリ、証明書ストア、および鍵コンテナにアクセスできます。SunMSCAPI プロバイダ自体には暗号化機能は含まれていません。このプロバイダは、Java 環境と Windows のネイティブ暗号化サービス間のコンジットとして機能します。
SunMSCAPI プロバイダでは、次のアルゴリズムを使用できます。
| エンジン | アルゴリズム名 |
|---|---|
暗号
|
RSA RSA/ECB/PKCS1Padding のみ |
KeyPairGenerator
|
RSA |
KeyStore
|
Windows-MY ネイティブ Microsoft Windows MY キーストアを識別するキーストアのタイプ。ユーザーの個人証明書および関連する非公開鍵が含まれています。 Windows-ROOTネイティブ Microsoft Windows ROOT キーストアを識別するキーストアのタイプ。ルート認証局の証明書およびほかの信頼できる自己署名証明書が含まれています。 |
SecureRandom
|
Windows-PRNG
ネイティブ擬似乱数生成 (PRNG) アルゴリズムの名前。 |
署名
|
MD2withRSA MD5withRSA SHA1withRSA |
SunMSCAPI プロバイダでは、次のデフォルトキーサイズ (ビット単位) を使用し、次の制限を強制します。
KeyGenerator
アルゴリズムの名前 デフォルトキーサイズ 制限/コメント RSA 1024 キーサイズの範囲は 384 ビットから 16,384 ビットです。基礎となる Microsoft Windows 暗号化サービスプロバイダによって異なります。