Ograniczanie używania niektórych algorytmów kryptograficznych i protokołów w Schannel.dll

W tym artykule opisano sposób ograniczania używania niektórych algorytmów kryptograficznych i protokołów w pliku Schannel.dll. Te informacje dotyczą również aplikacji niezależnego dostawcy oprogramowania (ISV) napisanych dla interfejsu API kryptograficznego firmy Microsoft (CAPI).

Dotyczy: Windows Server 2003
Oryginalny numer KB: 245030

Uwaga

Ten artykuł dotyczy Windows Server 2003 i starszych wersji Windows. W przypadku kluczy rejestru, które mają zastosowanie do Windows Server 2008 i nowszych wersji Windows, zobacz Ustawienia rejestru protokołu TLS.

Podsumowanie

Następujący dostawcy usług kryptograficznych (CSP) dołączonych do systemu Windows NT 4.0 z dodatkiem Service Pack 6 otrzymali certyfikaty do weryfikacji kryptograficznej FIPS-140-1.

  • Microsoft Base Cryptographic Provider (Rsabase.dll)
  • Microsoft Enhanced Cryptographic Provider (Rsaenh.dll) (wersja nieeksportowa)

Dostawca zabezpieczeń protokołu TLS/SSL firmy Microsoft, plik Schannel.dll, używa dostawców CSP wymienionych tutaj do prowadzenia bezpiecznej komunikacji za pośrednictwem protokołu SSL lub TLS w ramach obsługi programu Internet Explorer i Internet Information Services (IIS).

Można zmienić plik Schannel.dll, aby obsługiwał zestaw szyfrowania 1 i 2. Jednak program musi również obsługiwać zestaw szyfrowania 1 i 2. Zestawy szyfrowania 1 i 2 nie są obsługiwane w usługach IIS 4.0 i 5.0.

Ten artykuł zawiera informacje niezbędne do skonfigurowania dostawcy zabezpieczeń protokołu TLS/SSL dla systemu Windows NT 4.0 z dodatkiem Service Pack 6 i nowszych wersji. Za pomocą rejestru Windows można kontrolować użycie określonych zestawów szyfrowania SSL 3.0 lub TLS 1.0 w odniesieniu do algorytmów kryptograficznych obsługiwanych przez podstawowego dostawcę kryptograficznego lub rozszerzonego dostawcę kryptograficznego.

Uwaga

W systemie Windows NT 4.0 z dodatkiem Service Pack 6 plik Schannel.dll nie używa dostawcy kryptograficznego Microsoft Base DSS (Dssbase.dll) ani rozszerzonego dostawcy kryptograficznego Microsoft DS/Diffie-Hellman (Dssenh.dll).

Zestawy szyfrowania

Zarówno protokoły SSL 3.0, jak i TLS 1.0 (RFC2246) z 56-bitowymi zestawami szyfrowania eksportu INTERNET-DRAFT dla protokołu TLS draft-ietf-tls-56-bit-ciphersuites-00.txt udostępniają opcje korzystania z różnych zestawów szyfrowania. Każdy zestaw szyfrowania określa wymiany kluczy, uwierzytelnianie, szyfrowanie i algorytmy MAC używane w sesji protokołu SSL/TLS. W przypadku używania funkcji RSA jako algorytmów wymiany kluczy i uwierzytelniania termin RSA pojawia się tylko raz w odpowiednich definicjach zestawu szyfrowania.

Dostawca zabezpieczeń TLS/SSL systemu Windows NT 4.0 z dodatkiem Service Pack 6 firmy Microsoft obsługuje następujące szyfrowanie zdefiniowane przez protokół SSL 3.0 podczas korzystania z podstawowego dostawcy kryptograficznego lub rozszerzonego dostawcy kryptograficznego:

SSL 3.0 Zestaw szyfrowania
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 }

Uwaga

Ani SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA, ani SSL_RSA_EXPORT1024_WITH_RC4_56_SHA nie są zdefiniowane w tekście SSL 3.0. Obsługuje je jednak kilku dostawców protokołu SSL 3.0. Obejmuje to również firmę Microsoft.

Dostawca zabezpieczeń TLS/SSL systemu Windows NT 4.0 z dodatkiem Service Pack 6 firmy Microsoft obsługuje również następujące szyfrowanie zdefiniowane przez protokół TLS 1.0 podczas korzystania z podstawowego dostawcy kryptograficznego lub rozszerzonego dostawcy kryptograficznego:

TLS 1.0 Zestaw szyfrowania
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 }

Uwaga

Zestaw szyfrowania, który jest definiowany przy użyciu pierwszego bajtu 0x00, nie jest prywatny i jest używany do otwartej komunikacji współdziałania. W związku z tym dostawca zabezpieczeń TLS/SSL systemu Windows NT 4.0 z dodatkiem Service Pack 6 firmy Microsoft jest zgodny z procedurami używania tych zestawów szyfrowania określonych w protokołach SSL 3.0 i TLS 1.0 w celu zapewnienia współdziałania.

Klucze rejestru specyficzne dla Schannel

Ważna

W tej sekcji, metodzie lub w tym zadaniu podano informacje dotyczące modyfikowania rejestru. Niepoprawne zmodyfikowanie rejestru może jednak być przyczyną poważnych problemów. Dlatego należy uważnie wykonywać podane czynności. Dla większego bezpieczeństwa przed zmodyfikowaniem rejestru należy wykonać jego kopię zapasową. Dzięki temu będzie można przywrócić rejestr w przypadku wystąpienia problemu. Aby uzyskać więcej informacji na temat sposobu tworzenia kopii zapasowych, przywracania i modyfikowania rejestru, zobacz artykuł Tworzenie kopii zapasowych i przywracanie rejestru systemu Microsoft Windows.

Uwaga

Wszelkie zmiany zawartości klucza CIPHERS lub klucza HASHES są natychmiast wprowadzane bez ponownego uruchamiania systemu.

Klucz SCHANNEL

Uruchom Edytor rejestru (Regedt32.exe), a następnie zlokalizuj poniższy klucz rejestru:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

Podklucz SCHANNEL\Protocols

Aby umożliwić systemowi korzystanie z protokołów, które nie będą domyślnie negocjowane (np. TLS 1.1 i TLS 1.2), zmień dane wartości DWORD z wartości DisabledByDefault na 0x0 w następujących kluczach rejestru w kluczu Protocols:

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

Ostrzeżenie

Wartość DisabledByDefault w kluczach rejestru w ramach klucza Protocols nie ma pierwszeństwa przed wartością grbitEnabledProtocols zdefiniowaną w strukturze SCHANNEL_CRED zawierającej dane poświadczenia Schannel.

Podklucz SCHANNEL\Ciphers

Klucz rejestru Ciphers w kluczu SCHANNEL służy do kontrolowania użycia algorytmów symetrycznych, takich jak DES i RC4. Poniżej przedstawiono prawidłowe klucze rejestru w kluczu Ciphers.

Utwórz podklucz szyfrowania SCHANNEL w formacie: SCHANNEL\(VALUE)\(VALUE/VALUE)

RC4 128/128

Podklucz szyfrowania: SCHANNEL\Ciphers\RC4 128/128

Ten podklucz odnosi się do RC4 w wersji 128-bitowej.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. Można też zmienić dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone. Ten klucz rejestru nie ma zastosowania do serwera z możliwością eksportowania, który nie ma certyfikatu SGC.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następujących wartości:

  • SSL_RSA_WITH_RC4_128_MD5
  • SSL_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_RC4_128_MD5
  • TLS_RSA_WITH_RC4_128_SHA

Potrójny algorytm DES 168

Podklucz szyfrowania: SCHANNEL\Ciphers\Triple DES 168

Ten klucz rejestru odnosi się do 168-bitowej wartości potrójnego algorytmu DES zgodnie z opisem w ANSI X9.52 i Draft FIPS 46-3. Ten klucz rejestru nie ma zastosowania do wersji eksportu.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. Można też zmienić dane DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następujących wartości:

  • 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

    Uwaga

    W przypadku wersji Windows wydanych przed Windows Vista kluczem powinien być potrójny algorytm DES 168/168.

RC2 128/128

Podklucz szyfrowania: SCHANNEL\Ciphers\RC2 128/128

Ten klucz rejestru odnosi się do RC2 w wersji 128-bitowej. Nie dotyczy wersji eksportu.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

RC4 64/128

Podklucz szyfrowania: SCHANNEL\Ciphers\RC4 64/128

Ten klucz rejestru odnosi się do RC4 w wersji 64-bitowej. Nie ma zastosowania do wersji eksportu (ale jest używana w usłudze Microsoft Money).

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

RC4 56/128

Podklucz szyfrowania: SCHANNEL\Ciphers\RC4 56/128

Ten klucz rejestru odnosi się do RC4 w wersji 56-bitowej.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następującej wartości:

  • TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

RC2 56/128

Podklucz szyfrowania: SCHANNEL\Ciphers\RC2 56/128

Ten klucz rejestru odnosi się do RC2 w wersji 56-bitowej.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

DES 56

Podklucz szyfrowania: SCHANNEL\Ciphers\DES 56/56

Ten klucz rejestru odwołuje się do algorytmu DES w wersji 56-bitowej, jak określono w FIPS 46-2. Jego implementacja w plikach Rsabase.dll i Rsaenh.dll jest weryfikowana w ramach programu weryfikacji modułu kryptograficznego FIPS 140-1.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następujących wartości:

  • SSL_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_DES_CBC_SHA

RC4 40/128

Podklucz szyfrowania: SCHANNEL\Ciphers\RC4 40/128

Ten klucz rejestru odnosi się do RC4 w wersji 40-bitowej.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następujących wartości:

  • SSL_RSA_EXPORT_WITH_RC4_40_MD5
  • TLS_RSA_EXPORT_WITH_RC4_40_MD5

RC2 40/128

Podklucz szyfrowania: SCHANNEL\Ciphers\RC2 40/128

Ten klucz rejestru odnosi się do RC2 w wersji 40-bitowej.

Aby zezwolić na ten algorytm szyfrowania, zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0. Jeśli nie skonfigurujesz wartości Włączone, ustawienie domyślne zostanie włączone.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następujących wartości:

  • SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5

NULL

Podklucz szyfrowania: SCHANNEL\Ciphers\NULL

Ten klucz rejestru oznacza brak szyfrowania. Opcja ta jest domyślnie wyłączona.

Aby wyłączyć szyfrowanie (nie zezwalaj na wszystkie algorytmy szyfrowania), zmień dane wartości DWORD wartości Włączone na 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0.

Hashes

Podklucz szyfrowania: SCHANNEL/Hashes

Klucz rejestru Hashes w kluczu SCHANNEL służy do kontrolowania użycia algorytmów wyznaczania wartości skrótu, takich jak SHA-1 i MD5. Poniżej przedstawiono prawidłowe klucze rejestru w kluczu Hashes.

MD5

Podklucz szyfrowania: SCHANNEL\Hashes\MD5

Aby zezwolić na ten algorytm wyznaczania wartości skrótu, zmień dane wartości DWORD wartości Włączone na wartość domyślną 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następujących wartości:

  • 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

Podklucz szyfrowania: SCHANNEL\Hashes\SHA

Ten klucz rejestru odwołuje się do algorytmu bezpiecznego skrótu (SHA-1), zgodnie z definicją w FIPS 180-1. Jego implementacja w plikach Rsabase.dll i Rsaenh.dll jest weryfikowana w ramach programu weryfikacji modułu kryptograficznego FIPS 140-1.

Aby zezwolić na ten algorytm wyznaczania wartości skrótu, zmień dane wartości DWORD wartości Włączone na wartość domyślną 0xffffffff. W przeciwnym razie zmień dane wartości DWORD na 0x0.

Wyłączenie tego algorytmu skutecznie uniemożliwia użycie następujących wartości:

  • 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

Podklucz szyfrowania: SCHANNEL/KeyExchangeAlgorithms

Klucz rejestru KeyExchangeAlgorithms w ramach klucza SCHANNEL służy do kontrolowania użycia algorytmów wymiany kluczy, takich jak RSA. Poniżej przedstawiono prawidłowe klucze rejestru w ramach klucza KeyExchangeAlgorithms.

PKCS

Podklucz szyfrowania: SCHANNEL\KeyExchangeAlgorithms\PKCS

Ten klucz rejestru określa RSA jako algorytmy wymiany kluczy i uwierzytelniania.

Aby zezwolić na RSA, zmień dane wartości DWORD wartości Włączone na wartość domyślną 0xffffffff. W przeciwnym razie zmień dane DWORD na 0x0.

Wyłączenie usługi RSA skutecznie uniemożliwia dostęp do wszystkich zestawów szyfrowania SSL i TLS opartych na protokole RSA obsługiwanych przez dostawcę zabezpieczeń Windows NT4 SP6 Microsoft TLS/SSL.

Zestawy szyfrowania FIPS 140-1

Można użyć tylko tych zestawów szyfrowania SSL 3.0 lub TLS 1.0, które odpowiadają algorytmom FIPS 46-3 lub FIPS 46-2 i FIPS 180-1 dostarczonym przez podstawowego lub rozszerzonego dostawcę kryptograficznego firmy Microsoft.

W tym artykule nazywamy je zestawami szyfrowania FIPS 140-1. Są one następujące:

  • 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

Aby używać tylko zestawów szyfrowania FIPS 140-1 zdefiniowanych tutaj i obsługiwanych przez dostawcę zabezpieczeń TLS/SSL systemu Windows NT 4.0 z dodatkiem Service Pack 6 firmy Microsoft z podstawowym dostawcą kryptograficznym lub rozszerzonym dostawcą kryptografii, skonfiguruj dane wartości DWORD wartości Włączone w następujących kluczach rejestru do 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

Skonfiguruj dane wartości DWORD wartości Włączone w następujących kluczach rejestru na 0xffffffff:

  • SCHANNEL\Ciphers\DES 56/56
  • SCHANNEL\Ciphers\Triple DES 168/168 (nie dotyczy wersji eksportu)
  • SCHANNEL\Hashes\SHA
  • SCHANNEL\KeyExchangeAlgorithms\PKCS

Główne obliczenia wpisów tajnych przy użyciu zestawów szyfrowania FIPS 140-1

Procedury korzystania z zestawów szyfrowania FIPS 140-1 w protokole SSL 3.0 różnią się od procedur korzystania z zestawów szyfrowania FIPS 140-1 w protokole TLS 1.0.

W przypadku protokołu SSL 3.0 definicja obliczeniowa master_secret jest następująca:

W przypadku protokołu TLS 1.0 definicja obliczeniowa master_secret jest następująca:

gdzie:

Wybranie opcji używania tylko zestawów szyfrowania FIPS 140-1 w protokole TLS 1.0:

Z powodu tej różnicy klienci mogą chcieć zakazać używania protokołu SSL 3.0, mimo że dozwolony zestaw szyfrowania jest ograniczony tylko do podzestawu szyfrowania FIPS 140-1. W takim przypadku zmień dane wartości DWORD wartości Włączone na 0x0 w następujących kluczach rejestru w kluczu Protocols:

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

Ostrzeżenie

Dane wartości Włączone w tych kluczach rejestru w kluczu Protocols mają pierwszeństwo przed wartością grbitEnabledProtocols zdefiniowaną w strukturze SCHANNEL_CRED zawierającej dane poświadczenia Schannel. Domyślne włączone dane wartości to 0xffffffff.

Przykłady plików rejestru

W tej sekcji artykułu przedstawiono dwa przykłady zawartości pliku rejestru na potrzeby konfiguracji. Są to pliki Export.reg i Non-export.reg.

Na komputerze z systemem Windows NT 4.0 z dodatkiem Service Pack 6 z eksportowanymi plikami Rasbase.dll i Schannel.dll uruchom plik Export.reg, aby upewnić się, że komputer używa tylko zestawów szyfrowania FIPS protokołu TLS 1.0.

Na komputerze z systemem Windows NT 4.0 z dodatkiem Service Pack 6, który zawiera nieeksportowalne pliki Rasenh.dll i Schannel.dll, uruchom plik Non-export.reg, aby upewnić się, że komputer używa tylko zestawów szyfrowania FIPS protokołu TLS 1.0.

Aby plik Schannel.dll rozpoznawał wszelkie zmiany w kluczu rejestru SCHANNEL należy ponownie uruchomić komputer.

Aby przywrócić domyślne ustawienia rejestru, usuń klucz rejestru SCHANNEL i wszystkie jego elementy. Jeśli te klucze rejestru nie są obecne, Schannel.dll ponownie kompiluje klucze po ponownym uruchomieniu komputera.