Исходная дата публикации: 21 ноября 2025 г.
Идентификатор базы знаний: 5073121
Введение
Обновления Windows от 14 октября 2025 г., касающиеся CVE-2024-30098, выявили проблемы в приложениях, из-за которых код неправильно определяет, какой поставщик управляет ключом для сертификатов, распространяемых из смарт-карта в хранилище сертификатов. Это может привести к сбою криптографических операций в определенных сценариях. В этом документе содержатся рекомендации для разработчиков приложений по обнаружению правильного обработчика и устранению этих проблем.
Краткое содержание
При распространении сертификатов из смарт-карта в хранилище сертификатов Windows процесс распространения может использовать один из следующих поставщиков:
-
Устаревший поставщик служб шифрования (CSP), который использует устаревший программный интерфейс приложений Cryptographic (CAPI)
-
Поставщик хранилища ключей (KSP), который использует API шифрования: следующее поколение (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
Вызов CryptAcquireCertificatePrivateKey возвращает дескриптор (phCryptProvOrNCryptKey) типа HCRYPTPROV_OR_NCRYPT_KEY_HANDLE. Этот дескриптор может быть следующим:
-
Дескриптор CSP (HCRYPTPROV): используйте функции CryptoAPI, такие как CryptSignHash.
-
Дескриптор CNG (NCRYPT_KEY_HANDLE):используйте функции CNG, такие как NCryptSignHash.
Примечание: При вызове CryptAcquireCertificatePrivateKey обязательно включите CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG в параметр dwFlags.
Чтобы определить тип дескриптора, проверка значение pdwKeySpec:
|
Значение pdwKeySpec |
Использование 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
.