Oryginalna data publikacji: 21 listopada 2025 r.
Identyfikator BAZY WIEDZY: 5073121
Wprowadzenie
Aktualizacje systemu Windows z 14 października 2025 r. dotyczące cve-2024-30098 ujawniły problemy w aplikacjach, w których kod nie określa poprawnie, który dostawca zarządza kluczem certyfikatów propagowanych z karty inteligentnej do magazynu certyfikatów. Taka błędna identyfikacja może spowodować niepowodzenie operacji kryptograficznych w niektórych scenariuszach. Ten dokument zawiera wskazówki dla deweloperów aplikacji dotyczące wykrywania prawidłowego programu obsługi i rozwiązywania tych problemów.
Podsumowanie
Gdy certyfikaty są propagowane z karty inteligentnej do magazynu certyfikatów systemu Windows, w procesie propagacji może być używany jeden z następujących dostawców:
-
Starszy dostawca usług kryptograficznych (CSP), który korzysta ze starszej wersji kryptograficznego interfejsu programowania aplikacji (CAPI)
-
Dostawca magazynu kluczy (KSP), który korzysta z interfejsu API Cryptography: Next Generation (CNG). To był nowoczesny zamiennik wprowadzony w systemie Windows Vista.
Przed poprawką dla cve-2024-30098 algorytm propagacji używał CSP dla certyfikatów opartych na RSA i KSP dla wszystkich innych. Takie podejście było niepewne, ponieważ CAPI nie obsługuje nowoczesnych algorytmów kryptograficznych, ograniczając możliwości zabezpieczeń.
Aktualizacje zabezpieczeń z 14 października 2025 r. usunęły tę specjalną obsługę i teraz pakiet KSP jest używany dla wszystkich certyfikatów.
Określanie zestawu interfejsu API do użycia
Aplikacje korzystające z kluczy RSA zarządzanych przez program CSP mogą zakończyć się niepowodzeniem, gdy klucz jest zarządzany przez program KSP. Aby rozwiązać ten problem, aplikacje muszą wykryć, który dostawca zarządza kluczem i używać odpowiedniego zestawu interfejsów API (CAPI lub CNG).
Ważne: Nie używaj funkcji CryptAcquireContextW ani CryptAcquireContextA , ponieważ interfejs API jest przestarzały. Zamiast tego użyj funkcji CryptAcquireCertificatePrivateKey .
CryptAcquireCertificatePrivateKey, funkcja
Wywołanie CryptAcquireCertificatePrivateKey zwraca uchwyt (phCryptProvOrNCryptKey) typu HCRYPTPROV_OR_NCRYPT_KEY_HANDLE. Ten uchwyt może być następujący:
-
Uchwyt CSP (HCRYPTPROV): Użyj funkcji CryptoAPI, takich jak CryptSignHash.
-
Uchwyt CNG (NCRYPT_KEY_HANDLE): Użyj funkcji CNG, takich jak NCryptSignHash.
Uwaga: Podczas wywoływania CryptAcquireCertificatePrivateKey pamiętaj o uwzględnieniu CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG w parametrze dwFlags.
Aby określić typ uchwytu, sprawdź wartość pdwKeySpec :
|
wartość pdwKeySpec |
Crypto API to use |
|
AT_KEYEXCHANGE lub AT_SIGNATURE |
CAPI |
|
CERT_NCRYPT_KEY_SPEC |
CNG |
Obejście
Tymczasowe obejście jest dostępne dla klientów, których dotyczy egzekwowanie tej zmiany. Tymczasowy klucz rejestru jest dostępny, aby przełączyć zachowanie z wymuszania na tryb inspekcji .
Ważne: Obsługa tego klucza rejestru zostanie usunięta w aktualizacjach z kwietnia 2026 r.
|
Ścieżka rejestru |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais |
|
Type (Typ) |
REG_DWORD |
|
Nazwa wartości |
DisableCapiOverrideForRSA |
|
Dane wartości |
|
Źródła informacji
Przechowywanie kluczy i pobieranie
Funkcja CryptAcquireCertificatePrivateKey (wincrypt.h)
CVE-2024-30098 | Luka w zabezpieczeniach funkcji obejścia systemu Windows Cryptographic Services
.