Първоначална дата на публикуване: 21 ноември 2025 г.
ИД на КБ: 5073121
Въведение
Актуализациите на Windows от 14 октомври 2025 г., адресиращи CVE-2024-30098, показаха проблеми в приложения, в които кодът не идентифицира правилно кой доставчик управлява ключа за сертификати, разпространени от смарт карта в хранилището за сертификати. Това неправилно определяне на самоличността може да доведе до неуспешни криптографски операции при определени сценарии. Този документ предоставя указания за разработчиците на приложения как да открият правилния манипулатор и да отстранят тези проблеми.
Резюме
Когато сертификатите се разпространяват от смарт карта в хранилището за сертификати на Windows, процесът на разпространение може да използва един от следните доставчици:
-
Наследен доставчик на криптографски услуги (CSP), който разчита на наследения Cryptographic Application Programming Interface (CAPI)
-
Доставчик на място за съхранение на ключове (KSP), който разчита на Cryptography API: Next Generation (CNG). Това беше модерният заместител, въведен в Windows Vista.
Преди корекцията за CVE-2024-30098 алгоритъмът за разпространение е използвал CSP за базирани на RSA сертификати и KSP за всички други. Този подход е незащитен, защото CAPI не поддържа съвременни криптографски алгоритми, ограничавайки възможностите за защита.
14 октомври 2025 г. актуализациите на защитата премахнаха тази специална обработка и сега KSP се използва за всички сертификати.
Определете api набора, който да се използва
Приложения, които разчитат на RSA ключове, управлявани от CSP, може да са неуспешни, когато ключът се управлява от KSP. За да се справите с това, приложенията трябва да открият кой доставчик управлява ключа и да използват съответния набор API (CAPI или CNG).
Важно: Не използвайте функциите CryptAcquireContextW или CryptAcquireContextA , тъй като API е отхвърлен. Вместо това използвайте функцията CryptAcquireCertificatePrivateKey .
CryptAcquireCertificatePrivateKey функция
Calling CryptAcquireCertificatePrivateKey връща манипулатор (phCryptProvOrNCryptKey) от тип HCRYPTPROV_OR_NCRYPT_KEY_HANDLE. Този манипулатор може да бъде:
-
CSP handle (HCRYPTPROV): Use CryptoAPI functions like CryptSignHash.
-
CNG манипулатор (NCRYPT_KEY_HANDLE): Използване на CNG функции като NCryptSignHash.
Забележка: Когато извиквате CryptAcquireCertificatePrivateKey, не забравяйте да включите CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG в параметъра dwFlags.
За да определите типа на манипулатора, проверете стойността pdwKeySpec :
|
pdwKeySpec стойност |
Crypto API за използване |
|
AT_KEYEXCHANGE или AT_SIGNATURE |
CAPI |
|
CERT_NCRYPT_KEY_SPEC |
CNG (предишен) |
Заобиколно решение
Временна заобикаляне е налична за клиенти, които са засегнати от прилагането на тази промяна. Наличен е временен ключ от системния регистър за превключване на поведението от режим на изпълнение в режим на проверка .
Важно: Поддръжката за този ключ от системния регистър ще бъде премахната в актуализациите от април 2026 г.
|
Път до системния регистър |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais |
|
Type |
REG_DWORD |
|
Име на стойност |
DisableCapiOverrideForRSA |
|
Данни на стойност |
|
Справки
Място за съхранение и извличане на ключове
CryptAcquireCertificatePrivateKey функция (wincrypt.h)
CVE-2024-30098 | Уязвимост на функцията за защита на Windows Cryptographic Services
.