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 でキーが再構築されます。