Schannel.dll で特定の暗号アルゴリズムおよびプロトコルの使用を制限する
この記事では、Schannel.dll ファイルで特定の暗号アルゴリズムおよびプロトコルの使用を制限する方法について説明します。 この情報は、Microsoft Cryptographic API (CAPI) に記載されている独立系ソフトウェア ベンダー (ISV) アプリケーションにも適用されます。
適用対象: Windows Server 2003
元の KB 番号: 245030
注:
この記事は、Windows Server 2003 以前のバージョンの Windows に適用されます。 Windows Server 2008 以降のバージョンの Windows に適用されるレジストリ キーについては、「TLS レジストリの設定」を参照してください。
概要
Windows NT 4.0 Service Pack 6 に含まれる次の暗号化サービス プロバイダー (CSP) については、 FIPS-140-1 暗号認証の証明書が交付されています。
- Microsoft Base 暗号化プロバイダー (Rsabase.dll)
- Microsoft Enhanced Cryptographic Provider (Rsaenh.dll) (non-export バージョン)
Microsoft TLS/SSL Security Provider の Schannel.dll ファイルでは、ここに記載されている CSP を使用し、Internet Explorer および Internet Information Services (IIS) のサポートで、SSL または TLS 接続による安全な通信を行います。
Schannel.dll ファイルを変更して、Cipher Suite 1 と 2 をサポートできます。 ただし、プログラムも Cipher Suite 1 および 2 をサポートしている必要があります。 Cipher Suite 1 と 2 は、IIS 4.0 と 5.0 ではサポートされていません。
この記事では、 Windows NT 4.0 Service Pack 6 以降のバージョンの TLS/SSL Security Provider を設定するために必要な情報を説明します。 Windows レジストリを使用すると、Base Cryptographic Provider または Enhanced Cryptographic Provider がサポートする暗号アルゴリズムに関し、特定の SSL 3.0 または TLS 1.0 暗号スイートの使用を制御できます。
注:
Windows NT 4.0 Service Pack 6 では、Schannel.dll ファイルは Microsoft Base DSS 暗号化プロバイダー (Dssbase.dll) または Microsoft DS/Diffie-Hellman Enhanced Cryptographic Provider (Dssenh.dll) を使用しません。
暗号スイート
SSL 3.0 および TLS 1.0 (RFC2246) と INTERNET-DRAFT 56 ビット エクスポート暗号スイート (TLS draft-ietf-tls-56-bit-ciphersuites-00.txt用) では、各種暗号スイートを使用できるオプションが提供されています。 各暗号スイートは、SSL/TLS セッションで使われるキー交換、認証、暗号、MAC、アルゴリズムを決定します。 RSA をキー交換および認証アルゴリズムの両方に使用する場合、RSA という用語は、対応する暗号スイートの定義内で 1 回のみ表示されます。
基本暗号化プロバイダーまたは Enhanced Cryptographic Provide を使用する場合、Windows NT 4.0 Service Pack 6 Microsoft TLS/SSL セキュリティ プロバイダーは、次の SSL 3.0 定義の CipherSuite をサポートします。
SSL 3.0 | 暗号スイート |
---|---|
SSL_RSA_EXPORT_WITH_RC4_40_MD5 | { 0x00,0x03 } |
SSL_RSA_WITH_RC4_128_MD5 | { 0x00,0x04 } |
SSL_RSA_WITH_RC4_128_SHA | { 0x00,0x05 } |
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 | { 0x00,0x06 } |
SSL_RSA_WITH_DES_CBC_SHA | { 0x00,0x09 } |
SSL_RSA_WITH_3DES_EDE_CBC_SHA | { 0x00,0x0A } |
SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA | { 0x00,0x62 } |
SSL_RSA_EXPORT1024_WITH_RC4_56_SHA | { 0x00,0x64 } |
注:
SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA または SSL_RSA_EXPORT1024_WITH_RC4_56_SHA は、SSL 3.0 テキストで定義されていません。 ただし、一部の SSL 3.0 ベンダーではサポートされます。 これにはマイクロソフトも含まれます。
基本暗号化プロバイダーまたは Enhanced Cryptographic Provider を使用する場合、Windows NT 4.0 Service Pack 6 Microsoft TLS/SSL セキュリティ プロバイダーは、次の TLS 1.0 定義の CipherSuite もサポートします。
TLS 1.0 | 暗号スイート |
---|---|
TLS_RSA_EXPORT_WITH_RC4_40_MD5 | { 0x00,0x03 } |
TLS_RSA_WITH_RC4_128_MD5 | { 0x00,0x04 } |
TLS_RSA_WITH_RC4_128_SHA | { 0x00,0x05 } |
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 | { 0x00,0x06 } |
TLS_RSA_WITH_DES_CBC_SHA | { 0x00,0x09 } |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | { 0x00,0x0A } |
TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA | { 0x00,0x62 } |
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA | { 0x00,0x64 } |
注:
最初のバイト「0x00」を使用して定義される暗号スイートは公開型で、オープンな互換性のある通信に使用されます。 このため、Windows NT 4.0 Service Pack 6 Microsoft TLS/SSL Security Provider は、SSL 3.0 と TLS 1.0 で指定されるこれらの暗号スイートを使用するための手順に従って、互換性のあることを確認します。
Schannel 用のレジストリ キー
重要
このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 保護を強化するため、レジストリを変更する前にレジストリをバックアップします。 こうしておけば、問題が発生した場合にレジストリを復元できます。 レジストリをバックアップおよび復元する方法の詳細については、「Windows でレジストリをバックアップおよび復元する方法」を参照してください。
注:
CIPHERS キーまたは HASHES キーのコンテンツを変更すると、システムを再起動しなくても、変更した内容はすぐに反映されます。
SCHANNEL キー
レジストリ エディター (Regedt32.exe) を起動し、次のレジストリ キーを探します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
SCHANNEL\Protocols subkey
システムを有効にして、既定でネゴシエートされないプロトコル (TLS 1.1 や TLS 1.2 など) を使用するには、以下のプロトコル キーにあるレジストリ キーで、DWARD 値データを DisabledByDefault 値から 0x0 に変更します。
SCHANNEL\Protocols\TLS 1.1\Client
SCHANNEL\Protocols\TLS 1.1\Server
SCHANNEL\Protocols\TLS 1.2\Client
SCHANNEL\Protocols\TLS 1.2\Server
警告
プロトコル キーにあるレジストリ キー内の DisabledByDefault 値は、Schannel 資格情報データを含む SCHANNEL_CRED
構造内で定義された grbitEnabledProtocols 値を優先することはありません。
SCHANNEL\Ciphers サブキー
SCHANNEL キーの暗号レジストリ キーは、DES や RC4 などの対称アルゴリズムの使用を制御するのに使われます。 暗号キーの有効なレジストリ キーは次のとおりです。
SCHANNEL 暗号サブキーを次の形式で作成します。SCHANNEL\(VALUE)\(VALUE/VALUE)
RC4 128/128
暗号化サブキー: SCHANNEL\Ciphers\RC4 128/128
このサブキーは、128 ビット RC4 を参照します。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 または、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。 このレジストリ キーは、SGC 証明書を持たないエクスポートが可能なサーバーに適用されません。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
- SSL_RSA_WITH_RC4_128_MD5
- SSL_RSA_WITH_RC4_128_SHA
- TLS_RSA_WITH_RC4_128_MD5
- TLS_RSA_WITH_RC4_128_SHA
Triple DES 168
暗号化サブキー: SCHANNEL\Ciphers\Triple DES 168
このレジストリ キーは、 ANSI X9.52 と Draft FIPS 46-3 に指定されているとおり、168 ビット Triple DES を参照します。 このレジストリ キーは、export バージョンには適用されません。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 または、DWORD データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
注:
Windows Vista よりも前にリリースされたバージョンの Windows では、このキーは Triple DES 168/168 になります。
RC2 128/128
暗号化サブキー: SCHANNEL\Ciphers\RC2 128/128
このレジストリ キーは、128 ビット RC2 を参照します。 これは、export バージョンには適用されません。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
RC4 64/128
暗号化サブキー: SCHANNEL\Ciphers\RC4 64/128
このレジストリ キーは、64 ビット RC4 を参照します。 これは、export バージョンには適用されません (ただし、Microsoft Money では使用されます)。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
RC4 56/128
暗号化サブキー: SCHANNEL\Ciphers\RC4 56/128
このレジストリ キーは、56 ビット RC4 を参照します。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
- TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
RC2 56/128
暗号化サブキー: SCHANNEL\Ciphers\RC2 56/128
このレジストリ キーは、56 ビット RC2 を参照します。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
DES 56
暗号化サブキー: SCHANNEL\Ciphers\DES 56/56
このレジストリ キーは、 FIPS 46-2 に指定されているとおり、56 ビット DES を参照します。 Rsabase.dll と Rsaenh.dll ファイル内での実装については、FIPS 140-1 Cryptographic Module Validation Program で検証されます。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
- SSL_RSA_WITH_DES_CBC_SHA
- TLS_RSA_WITH_DES_CBC_SHA
RC4 40/128
暗号化サブキー: SCHANNEL\Ciphers\RC4 40/128
このレジストリ キーは、40 ビット RC4 を参照します。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
- SSL_RSA_EXPORT_WITH_RC4_40_MD5
- TLS_RSA_EXPORT_WITH_RC4_40_MD5
RC2 40/128
暗号化サブキー: SCHANNEL\Ciphers\RC2 40/128
このレジストリ キーは、40 ビット RC2 を参照します。
この暗号アルゴリズムを許可するには、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。 Enabled 値を設定しない場合、既定は「有効」となります。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
- SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
- TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
NULL
暗号化サブキー: SCHANNEL\Ciphers\NULL
このレジストリ キーは、暗号化が無効であることを意味します。 既定ではオフになっています。
暗号化をオフにするには (すべての暗号アルゴリズムの許可を無効にするには)、DWORD 値データの Enabled 値を 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。
Hashes
暗号化サブキー: SCHANNEL/Hashes
SCHANNEL キーにあるハッシュ レジストリ キーは、SHA-1 および MD5 などのハッシュ アルゴリズムの使用制御に使われます。 ハッシュ キーの有効なレジストリ キーは次のとおりです。
MD5
暗号化サブキー: SCHANNEL\Hashes\MD5
このハッシュ アルゴリズムを許可するには、DWORD 値データの Enabled 値をデフォルト値 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
- SSL_RSA_EXPORT_WITH_RC4_40_MD5
- SSL_RSA_WITH_RC4_128_MD5
- SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
- TLS_RSA_EXPORT_WITH_RC4_40_MD5
- TLS_RSA_WITH_RC4_128_MD5
- TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
SHA
暗号化サブキー: SCHANNEL\Hashes\SHA
このレジストリ キーは、 FIPS 180-1 に指定されているとおり、Secure Hash Algorithm (SHA-1) を参照します。 Rsabase.dll と Rsaenh.dll ファイル内での実装については、FIPS 140-1 Cryptographic Module Validation Program で検証されます。
このハッシュ アルゴリズムを許可するには、DWORD 値データの Enabled 値をデフォルト値 0xffffffff に変更します。 それ以外の場合は、DWORD 値データを 0x0 に変更します。
このアルゴリズムを無効にすると、結果として次の値の許可が無効になります。
- SSL_RSA_WITH_RC4_128_SHA
- SSL_RSA_WITH_DES_CBC_SHA
- SSL_RSA_WITH_3DES_EDE_CBC_SHA
- SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA
- SSL_RSA_EXPORT1024_WITH_RC4_56_SHA
- TLS_RSA_WITH_RC4_128_SHA
- TLS_RSA_WITH_DES_CBC_SHA
- TLS_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
- TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
KeyExchangeAlgorithms
暗号化サブキー: SCHANNEL/KeyExchangeAlgorithms
SCHANNEL キーにある KeyExchangeAlgorithms レジストリ キーは、RSA などのキー交換アルゴリズムの使用制御に使われます。 KeyExchangeAlgorithms キーにある有効なレジストリ キーは次のとおりです。
PKCS
暗号化サブキー: SCHANNEL\KeyExchangeAlgorithms\PKCS
このレジストリ キーは、キー交換および認証アルゴリズムとして RSA を参照します。
RSA を許可するには、DWORD 値データの Enabled 値をデフォルト値 0xffffffff に変更します。 それ以外の場合は、DWORD データを 0x0 に変更します。
RSA を無効にすると結果的に、Windows NT4 SP6 Microsoft TLS/SSL Security Provider がサポートするすべての RSA ベースの SSL および TLS 暗号スイートの許可が無効になります。
FIPS 140-1 暗号スイート
Microsoft Base または Enhanced Cryptographic Provider によってサポートされる、FIPS 46-3 または FIPS 46-2、および FIPS 180-1 アルゴリズムに対応する SSL 3.0 または TLS 1.0 暗号スイートのみを使用することをお勧めします。
この資料では、FIPS 140-1 暗号スイートとして参照します。 具体的には、次のようになります。
- SSL_RSA_WITH_DES_CBC_SHA
- SSL_RSA_WITH_3DES_EDE_CBC_SHA
- SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA
- TLS_RSA_WITH_DES_CBC_SHA
- TLS_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
ここで定義した、Base Cryptographic Provider または Enhanced Cryptographic Provider で、Windows NT 4.0 Service Pack 6 Microsoft TLS/SSL Security Provider によってサポートされる FIPS 140-1 暗号スイートのみを使用するには、次のレジストリ キーにある DWORD 値データの Enabled 値を 0x0 に設定します。
SCHANNEL\Ciphers\RC4 128/128
SCHANNEL\Ciphers\RC2 128/128
SCHANNEL\Ciphers\RC4 64/128
SCHANNEL\Ciphers\RC4 56/128
SCHANNEL\Ciphers\RC2 56/128
SCHANNEL\Ciphers\RC4 40/128
SCHANNEL\Ciphers\RC2 40/128
SCHANNEL\Ciphers\NULL
SCHANNEL\Hashes\MD5
次のレジストリ キーにある DWORD 値データの Enabled 値を 0xffffffff に変更します。
SCHANNEL\Ciphers\DES 56/56
-
SCHANNEL\Ciphers\Triple DES 168/168
(エクスポート バージョンでは適用されません) SCHANNEL\Hashes\SHA
SCHANNEL\KeyExchangeAlgorithms\PKCS
FIPS 140-1 暗号スイートを使用して、データを秘匿した計算を行う
SSL 3.0 の FIPS 140-1 暗号スイートを使用した手順は、 TLS 1.0 の FIPS 140-1 暗号スイートとは異なります。
SSL 3.0 での master_secret computation の定義は次のとおりです。
SSL 1.0 での master_secret computation の定義は次のとおりです。
各部分の意味は次のとおりです。
TLS 1.0 で FIPS 140-1 暗号スイートのみを使用するためのオプションを選択する
設定可能な暗号スイートは、FIPS 140-1 暗号スイートのサブセットのみに限定されていますが、このような違いがあるため、お客様には SSL 3.0 を使用できないように設定することを勧めします。 この場合、プロトコル キーにある次のレジストリキー内の Enabled 値の DWORD 値データを 0x0 に変更します。
SCHANNEL\Protocols\SSL 3.0\Client
SCHANNEL\Protocols\SSL 3.0\Server
警告
プロトコル キーにある、このようなレジストリ キー内の Enabled 値のデータは、Schannel 視覚情報のデータを含む SCHANNEL_CRED
構造内で定義された grbitEnabledProtocols 値よりも優先されます。 既定の Enabled 値データは 0xffffffff です。
レジストリ ファイルの例
本記事のこのセクションでは、設定に含まれるレジストリ ファイルの 2 つの例、 Export.reg と Non-export.reg について説明します。
エクスポート可能な Rasbase.dll および Schannel.dll ファイルが含まれる Windows NT 4.0 Service Pack 6 を実行するコンピューターでは、Export.reg を実行して TLS 1.0 FIPS 暗号スイートのみが、コンピューターで使用されていることを確認します。
エクスポートできない Rasenh.dll および Schannel.dll ファイルが含まれる Windows NT 4.0 Service Pack 6 で実行するコンピューターでは、Export.reg を実行して TLS 1.0 FIPS 暗号スイートのみが、コンピューターで使用されていることを確認します。
Schannel.dll ファイルで SCHANNEL レジストリ キーでの変更が認識されるようにするには、コンピューターを再起動する必要があります。
レジストリ設定をデフォルトに戻すには、SCHANNEL レジストリ キーとその下にあるすべて削除します。 レジストリ キーが表示されない場合、コンピューターを再起動すると Schannel.dll でキーが再構築されます。