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_MD5
0 0 0 0 SSL_RSA_WITH_RC4_128_SHA
0 0 0 0 TLS_RSA_WITH_AES_128_CBC_SHA
0 0 0 TLS_RSA_WITH_AES_256_CBC_SHA
0 0 0 TLS_ECDH_ECDSA_WITH_RC4_128_SHA
0 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
0 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
0 TLS_ECDH_RSA_WITH_RC4_128_SHA
0 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
0 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
0 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
0 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
0 TLS_ECDHE_RSA_WITH_RC4_128_SHA
0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
0 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
0 0 0 TLS_DHE_RSA_WITH_AES_256_CBC_SHA
0 0 0 TLS_DHE_DSS_WITH_AES_128_CBC_SHA
0 0 0 TLS_DHE_DSS_WITH_AES_256_CBC_SHA
0 0 0 SSL_RSA_WITH_3DES_EDE_CBC_SHA
0 0 0 0 TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
0 TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
0 TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
0 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
0 SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
0 0 0 SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
0 0 0 0 SSL_RSA_WITH_DES_CBC_SHA
0 0 0 0 SSL_DHE_RSA_WITH_DES_CBC_SHA
0 0 0 SSL_DHE_DSS_WITH_DES_CBC_SHA
0 0 0 0 SSL_RSA_EXPORT_WITH_RC4_40_MD5
0 0 0 0 SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
0 0 0 SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
0 0 0 SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
0 0 0 0 SSL_RSA_WITH_NULL_MD5
0 0 0 0 SSL_RSA_WITH_NULL_SHA
0 0 0 0 TLS_ECDH_ECDSA_WITH_NULL_SHA
0 TLS_ECDH_RSA_WITH_NULL_SHA
0 TLS_ECDHE_ECDSA_WITH_NULL_SHA
0 TLS_ECDHE_RSA_WITH_NULL_SHA
0 SSL_DH_anon_WITH_RC4_128_MD5
0 0 0 0 TLS_DH_anon_WITH_AES_128_CBC_SHA
0 0 0 TLS_DH_anon_WITH_AES_256_CBC_SHA
0 0 0 SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
0 0 0 0 SSL_DH_anon_WITH_DES_CBC_SHA
0 0 0 0 TLS_ECDH_anon_WITH_RC4_128_SHA
0 TLS_ECDH_anon_WITH_AES_128_CBC_SHA
0 TLS_ECDH_anon_WITH_AES_256_CBC_SHA
0 TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
0 SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
0 0 0 0 SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
0 0 0 0 TLS_ECDH_anon_WITH_NULL_SHA
0 TLS_KRB5_WITH_RC4_128_SHA
0 0 TLS_KRB5_WITH_RC4_128_MD5
0 0 TLS_KRB5_WITH_3DES_EDE_CBC_SHA
0 0 TLS_KRB5_WITH_3DES_EDE_CBC_MD5
0 0 TLS_KRB5_WITH_DES_CBC_SHA
0 0 TLS_KRB5_WITH_DES_CBC_MD5
0 0 TLS_KRB5_EXPORT_WITH_RC4_40_SHA
0 0 TLS_KRB5_EXPORT_WITH_RC4_40_MD5
0 0 TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
0 0 TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
0 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 暗号化サービスプロバイダによって異なります。