Java ™ 暗号化アーキテクチャー Sun プロバイダのドキュメント

JavaTM Platform Standard Edition 6


はじめに
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 乱数ジェネレータ、KeyPairGeneratorKeyFactory など)。

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

CertificateFactoryCertPathBuilderCertPathValidator、および 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_MD50000
SSL_RSA_WITH_RC4_128_SHA0000
TLS_RSA_WITH_AES_128_CBC_SHA 000
TLS_RSA_WITH_AES_256_CBC_SHA 000
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 000
TLS_DHE_RSA_WITH_AES_256_CBC_SHA 000
TLS_DHE_DSS_WITH_AES_128_CBC_SHA 000
TLS_DHE_DSS_WITH_AES_256_CBC_SHA 000
SSL_RSA_WITH_3DES_EDE_CBC_SHA0000
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 000
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA0000
SSL_RSA_WITH_DES_CBC_SHA0000
SSL_DHE_RSA_WITH_DES_CBC_SHA 000
SSL_DHE_DSS_WITH_DES_CBC_SHA0000
SSL_RSA_EXPORT_WITH_RC4_40_MD50000
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA 000
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA 000
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA0000
SSL_RSA_WITH_NULL_MD50000
SSL_RSA_WITH_NULL_SHA0000
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_MD50000
TLS_DH_anon_WITH_AES_128_CBC_SHA 000
TLS_DH_anon_WITH_AES_256_CBC_SHA 000
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA0000
SSL_DH_anon_WITH_DES_CBC_SHA0000
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_MD50000
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA0000
TLS_ECDH_anon_WITH_NULL_SHA   0
TLS_KRB5_WITH_RC4_128_SHA  00
TLS_KRB5_WITH_RC4_128_MD5  00
TLS_KRB5_WITH_3DES_EDE_CBC_SHA  00
TLS_KRB5_WITH_3DES_EDE_CBC_MD5  00
TLS_KRB5_WITH_DES_CBC_SHA  00
TLS_KRB5_WITH_DES_CBC_MD5  00
TLS_KRB5_EXPORT_WITH_RC4_40_SHA  00
TLS_KRB5_EXPORT_WITH_RC4_40_MD5  00
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA  00
TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5  00

AES_256 を使用する暗号群では、強度が無制限の JCE 管轄ポリシーファイルがインストールされている必要があります。「Java SE ダウンロードページ」を参照してください。

Elliptic Curve Cryptography (ECDSA、ECDH、ECDHE、ECDH_anon) を使用する暗号群では、次のプロパティーを持つ JCE 暗号化プロバイダがインストールされている必要があります。

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
暗号
アルゴリズムの名前 モード パディング
AES ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB128, OFB, OFB8..OFB128 NOPADDING, PKCS5PADDING, ISO10126PADDING
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, PBEWithMD5AndTripleDES1 PBEWithSHA1AndDESede, PBEWithSHA1AndRC2_40 CBC PKCS5Padding
RSA ECB NOPADDING, PKCS1PADDING, OAEPWITHMD5ANDMGF1PADDING, OAEPWITHSHA1ANDMGF1PADDING, OAEPWITHSHA-1ANDMGF1PADDING, OAEPWITHSHA-256ANDMGF1PADDING, OAEPWITHSHA-384ANDMGF1PADDING, OAEPWITHSHA-512ANDMGF1PADDING

脚注 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 暗号化サービスプロバイダによって異なります。