Restringir o uso de determinados algoritmos e protocolos criptográficos em Schannel.dll

Este artigo descreve como restringir o uso de determinados algoritmos e protocolos criptográficos no arquivo Schannel.dll Essas informações também se aplicam a aplicativos ISV (fornecedores independentes de software) que são escritos para a CAPI (API de Criptografia da Microsoft).

Aplica-se a: Windows Server 2003
Número original do KB: 245030

Observação

Este artigo se aplica ao Windows Server 2003 e versões anteriores do Windows. Para chaves do Registro que se aplicam ao Windows Server 2008 e versões posteriores do Windows, consulte Configurações de registro TLS.

Resumo

Os seguintes CSPs (provedores de serviços criptográficos) incluídos no Windows NT 4.0 Service Pack 6 receberam os certificados para validação de criptografia FIPS-140-1.

  • Provedor Criptográfico Base da Microsoft (Rsabase.dll)
  • Provedor Criptográfico avançado da Microsoft (Rsaenh.dll) (versão não exportada)

O Provedor de Segurança TLS/SSL da Microsoft, o arquivo Schannel.dll, usa os CSPs listados aqui para conduzir comunicações seguras por SSL ou TLS em seu suporte para Internet Explorer e ISS (Serviços de Informações da Internet).

Você pode alterar o arquivo Schannel.dll para dar suporte aos Conjuntos de codificação 1 e 2. No entanto, o programa também deve dar suporte aos Conjuntos de codificação 1 e 2. Não há suporte para Conjuntos de codificação 1 e 2 no IIS 4.0 e 5.0.

Este artigo contém as informações necessárias para configurar o Provedor de Segurança TLS/SSL para Windows NT 4.0 Service Pack 6 e versões posteriores. Você pode usar o registro do Windows para controlar o uso de Conjuntos de codificação SSL 3.0 ou TLS 1.0 específicos em relação aos algoritmos criptográficos com suporte pelo Provedor Criptográfico Base ou pelo Provedor Criptográfico Avançado.

Observação

No Windows NT 4.0 Service Pack 6, o arquivo Schannel.dll não usa o Provedor Criptográfico Base da Microsoft DSS (Dssbase.dll) ou o Provedor Criptográfico Avançado da Microsoft DS/Diffie-Hellman (Dssenh.dll).

Conjuntos de codificação

O SSL 3.0 e o TLS 1.0 (RFC2246) com Rascunho da Internet com Conjuntos de codificação de exportação de 56 bits para TLS draft-ietf-tls-56-bit-ciphersuites-00.txt fornecem opções para usar conjuntos de codificação diferentes. Cada pacote de codificação determina a troca de chaves, autenticação, criptografia e algoritmos MAC usados em uma sessão SSL/TLS. Quando você usa RSA como algoritmos de autenticação e troca de chaves, o termo RSA aparece apenas uma vez nas definições do conjunto de codificação correspondentes.

O provedor de segurança TLS/SSL da Microsoft do Windows NT 4.0 Service Pack 6 dá suporte ao seguinte Conjunto de codificação definido pelo SSL 3.0 quando você usa o Provedor Criptográfico Base ou o Provedor Criptográfico Avançado:

SSL 3.0 Conjunto de codificação
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 }

Observação

O SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA e o SSL_RSA_EXPORT1024_WITH_RC4_56_SHA não estão definidos no texto SSL 3.0. No entanto, vários fornecedores do SSL 3.0 dão suporte a eles. Incluindo a Microsoft.

O Provedor de Segurança TLS/SSL da Microsoft do Windows NT 4.0 Service Pack 6 também dá suporte ao Seguinte Conjunto de codificação definido pelo TLS 1.0 quando você usa o Provedor Criptográfico Base ou o Provedor Criptográfico Avançado:

TLS 1.0 Conjunto de codificação
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 }

Observação

Um conjunto de codificação definido usando o primeiro byte 0x00 não é privado e é usado para comunicações interoperáveis abertas. Portanto, o Provedor de Segurança TLS/SSL da Microsoft do Windows NT 4.0 Service Pack 6 segue os procedimentos para usar esses conjuntos de codificação conforme especificado no SSL 3.0 e no TLS 1.0 para garantir a interoperabilidade.

Chaves do Registro específicas do Schannel

Importante

Esta seção, método ou tarefa contém etapas que descrevem como modificar o Registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, siga essas etapas cuidadosamente. Para mais proteção, faça o backup do registro antes de modificá-lo. Em seguida, você poderá restaurar o registro se ocorrer um problema. Para saber mais sobre como fazer o backup e restaurar o registro, consulte Como fazer o backup e restaurar o registro no Windows.

Observação

Todas as alterações no conteúdo da chave CIPHERS ou da chave HASHES entram em vigor imediatamente, sem uma reinicialização do sistema.

Chave SCHANNEL

No Editor do Registro (Regedt32.exe), localize e exclua as seguintes chaves do registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

Subchave SCHANNEL\Protocols

Para permitir que o sistema use os protocolos que não serão negociados por padrão (como TLS 1.1 e TLS 1.2), altere os dados de valor DWORD do valor DisabledByDefault para 0x0 nas seguintes chaves do Registro sob a chave Protocolos:

  • SCHANNEL\Protocols\TLS 1.1\Client
  • SCHANNEL\Protocols\TLS 1.1\Server
  • SCHANNEL\Protocols\TLS 1.2\Client
  • SCHANNEL\Protocols\TLS 1.2\Server

Aviso

O valor DisabledByDefault nas chaves do Registro sob a chave Protocolos não tem precedência sobre o valor grbitEnabledProtocols definido na estrutura SCHANNEL_CRED que contém os dados de uma credencial Schannel.

Subchave SCHANNEL\Ciphers

A chave do Registro Ciphers sob a chave SCHANNEL é usada para controlar o uso de algoritmos simétricos, como DES e RC4. A seguir estão as chaves válidas do Registro sob a chave Ciphers.

Crie a subchave SCHANNEL Ciphers no formato: SCHANNEL\(VALUE)\(VALUE/VALUE)

RC4 128/128

Subchave Ciphers: SCHANNEL\Ciphers\RC4 128/128

Essa subchave refere-se ao RC4 de 128 bits.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Ou altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado. Essa chave do Registro não se aplica a um servidor exportável que não tenha um certificado SGC.

Desabilitar esse algoritmo efetivamente rejeita os seguintes valores:

  • 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

Subchave Ciphers: SCHANNEL\Ciphers\Triple DES 168

Essa chave do Registro refere-se ao DES Triplo de 168 bits, conforme especificado em ANSI X9.52 e Draft FIPS 46-3. Essa chave do Registro não se aplica à versão de exportação.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Ou altere os dados DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

Desabilitar esse algoritmo efetivamente rejeita os seguintes valores:

  • 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

    Observação

    Para as versões do Windows lançadas antes do Windows Vista, a chave deve ser Triple DES 168/168.

RC2 128/128

Subchave Ciphers: SCHANNEL\Ciphers\RC2 128/128

Essa chave do Registro refere-se ao RC2 de 128 bits. Ela não se aplica à versão de exportação.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

RC4 64/128

Subchave Ciphers: SCHANNEL\Ciphers\RC4 64/128

Essa chave do Registro refere-se ao RC4 de 64 bits. Ela não se aplica à versão de exportação (mas é usado no Microsoft Money).

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

RC4 56/128

Subchave Ciphers: SCHANNEL\Ciphers\RC4 56/128

Essa chave do Registro refere-se ao RC4 de 56 bits.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

Desabilitar esse algoritmo efetivamente rejeita o seguinte valor:

  • TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

RC2 56/128

Subchave Ciphers: SCHANNEL\Ciphers\RC2 56/128

Essa chave do Registro refere-se ao RC2 de 56 bits.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

DES 56

Subchave Ciphers: SCHANNEL\Ciphers\DES 56/56

Essa chave do Registro refere-se ao DES de 56 bits, conforme especificado no FIPS 46-2. Sua implementação nos arquivos Rsabase.dll e Rsaenh.dll é validada no Programa de Validação de Módulo Criptográfico FIPS 140-1.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

Desabilitar esse algoritmo efetivamente rejeita os seguintes valores:

  • SSL_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_DES_CBC_SHA

RC4 40/128

Subchave Ciphers: SCHANNEL\Ciphers\RC4 40/128

Essa chave do Registro refere-se ao RC4 de 40 bits.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

Desabilitar esse algoritmo efetivamente rejeita os seguintes valores:

  • SSL_RSA_EXPORT_WITH_RC4_40_MD5
  • TLS_RSA_EXPORT_WITH_RC4_40_MD5

RC2 40/128

Subchave Ciphers: SCHANNEL\Ciphers\RC2 40/128

Essa chave do Registro refere-se ao RC2 de 40 bits.

Para permitir esse algoritmo de codificação, altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0. Se você não configurar o valor Enabled, o padrão será habilitado.

Desabilitar esse algoritmo efetivamente rejeita os seguintes valores:

  • SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5

NULL

Subchave Ciphers: SCHANNEL\Ciphers\NULL

Essa chave do Registro significa sem criptografia. Por padrão, ela está desativada.

Para desativar a criptografia (não permitir todos os algoritmos de criptografia), altere os dados de valor DWORD do valor Enabled para 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0.

Hashes

Subchave Ciphers: SCHANNEL/Hashes

A chave do Registro Hashes na chave SCHANNEL é usada para controlar o uso de algoritmos de hash, como SHA-1 e MD5. A seguir estão as chaves válidas do Registro na chave Hashes.

MD5

Subchave Ciphers: SCHANNEL\Hashes\MD5

Para permitir esse algoritmo de hash, altere os dados de valor DWORD do valor Enabled para o valor padrão 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0.

Desabilitar esse algoritmo efetivamente rejeita os seguintes valores:

  • 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

Subchave Ciphers: SCHANNEL\Hashes\SHA

Essa chave do Registro refere-se ao SHA-1 (Algoritmo de Hash Seguro), conforme especificado no FIPS 180-1. Sua implementação nos arquivos Rsabase.dll e Rsaenh.dll é validada no Programa de Validação de Módulo Criptográfico FIPS 140-1.

Para permitir esse algoritmo de hash, altere os dados de valor DWORD do valor Enabled para o valor padrão 0xffffffff. Caso contrário, altere os dados de valor DWORD para 0x0.

Desabilitar esse algoritmo efetivamente rejeita os seguintes valores:

  • 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

Subchave Ciphers: SCHANNEL/KeyExchangeAlgorithms

A chave do Registro KeyExchangeAlgorithms na chave SCHANNEL é usada para controlar o uso de algoritmos de troca de chaves, como RSA. A seguir estão as chaves válidas do Registro na chave KeyExchangeAlgorithms.

PKCS

Subchave Ciphers: SCHANNEL\KeyExchangeAlgorithms\PKCS

Essa chave do Registro refere-se ao RSA como os algoritmos de autenticação e troca de chaves.

Para permitir RSA, altere os dados de valor DWORD do valor Enabled para o valor padrão 0xffffffff. Caso contrário, altere os dados DWORD para 0x0.

Desabilitar o RSA efetivamente rejeita todos os conjuntos de codificação SSL e TLS baseados em RSA com suporte do provedor de segurança TLS/SSL da Microsoft do Windows NT4 SP6.

Conjuntos de codificação FIPS 140-1

Talvez você queira usar apenas os conjuntos de codificação SSL 3.0 ou TLS 1.0 que correspondem aos algoritmos FIPS 46-3 ou FIPS 46-2 e FIPS 180-1 fornecidos pelo Provedor Criptográfico Avançado ou Base da Microsoft.

Neste artigo, nos referimos a eles como conjuntos de codificação FIPS 140-1. Especificamente, eles são os seguintes:

  • 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

Para usar apenas conjuntos de condificação FIPS 140-1, conforme definido aqui e com suporte no provedor de segurança TLS/SSL da Microsoft do Windows NT 4.0 Service Pack 6 com o Provedor Criptográfico Base ou o Provedor Criptográfico Avançado, configure os dados de valor DWORD do valor Enabled nas seguintes chaves do Registro para 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

E configure os dados de valor DWORD do valor Enabled nas seguintes chaves do Registro para 0xffffffff:

  • SCHANNEL\Ciphers\DES 56/56
  • SCHANNEL\Ciphers\Triple DES 168/168 (não aplicável na versão de exportação)
  • SCHANNEL\Hashes\SHA
  • SCHANNEL\KeyExchangeAlgorithms\PKCS

Computação master secret usando conjuntos de codificação FIPS 140-1

Os procedimentos para usar os conjuntos de codificação FIPS 140-1 no SSL 3.0 diferem dos procedimentos para usar os conjuntos de criptografia FIPS 140-1 no TLS 1.0.

No SSL 3.0, a seguinte é a definição de computação master_secret:

No TLS 1.0, a seguinte é a definição de computação master_secret:

em que:

Ao selecionar a opção para usar apenas conjuntos de codificação FIPS 140-1 no TLS 1.0:

Devido a essa diferença, os clientes talvez devam proibir o uso do SSL 3.0, embora o conjunto permitido de conjuntos de codificação esteja limitado apenas ao subconjunto de conjuntos de codificação FIPS 140-1. Nesse caso, altere os dados de valor DWORD do valor Enabled para 0x0 nas seguintes chaves do Registro na chave Protocolos :

  • SCHANNEL\Protocols\SSL 3.0\Client
  • SCHANNEL\Protocols\SSL 3.0\Server

Aviso

O dado de valor Enabled nessas chaves do Registro sob a chave Protocolos têm precedência sobre o valor grbitEnabledProtocols definido na estrutura SCHANNEL_CRED que contém os dados de uma credencial Schannel. O dado de valor Enabled padrão é 0xffffffff.

Exemplos de arquivos do Registro

Dois exemplos de conteúdo de arquivo do Registro para configuração são fornecidos nesta seção do artigo. Eles são Export.reg e Non-export.reg.

Em um computador que esteja executando o Windows NT 4.0 Service Pack 6 com os arquivos Rasbase.dll e Schannel.dll exportáveis, execute Export.reg para garantir que apenas os conjuntos de codificação FIPS TLS 1.0 sejam usados pelo computador.

Em um computador que esteja executando o Windows NT 4.0 Service Pack 6 que inclui os arquivos Rasenh.dll e Schannel.dll não exportáveis, execute Non-export.reg para garantir que apenas os conjuntos de codificação FIPS TLS 1.0 sejam usados pelo computador.

Para o Schannel.dll reconhecer as alterações na chave do Registro SCHANNEL, você deve reiniciar o computador.

Para retornar as configurações do Registro para o padrão, exclua a chave do Registro SCHANNEL e tudo sob ela. Se essas chaves do Registro não estiverem presentes, o Schannel.dll recriará as chaves quando você reiniciar o computador.