Fecha de publicación original: 21 de noviembre de 2025
KB ID: 5073121
Introducción
El 14 de octubre de 2025, las actualizaciones de Windows que abordaban CVE-2024-30098 revelaron problemas en las aplicaciones en las que el código no identifica correctamente qué proveedor administra la clave de certificados propagados desde una tarjeta inteligente al almacén de certificados. Esta identificación incorrecta puede provocar errores en las operaciones criptográficas en determinados escenarios. Este documento proporciona instrucciones para los desarrolladores de aplicaciones sobre cómo detectar el controlador correcto y resolver estos problemas.
Resumen
Cuando los certificados se propagan desde una tarjeta inteligente al almacén de certificados de Windows, el proceso de propagación puede usar cualquiera de los siguientes proveedores:
-
Proveedor de servicios criptográficos heredado (CSP), que se basa en la interfaz de programación de aplicaciones criptográficas (CAPI) heredada
-
Proveedor de almacenamiento de claves (KSP), que se basa en api de criptografía: nueva generación (CNG). Este era el reemplazo moderno introducido en Windows Vista.
Antes de la corrección para CVE-2024-30098, el algoritmo de propagación usó CSP para los certificados basados en RSA y KSP para todos los demás. Este enfoque era inseguro porque CAPI no admite algoritmos criptográficos modernos, lo que limita las capacidades de seguridad.
El 14 de octubre de 2025, las actualizaciones de seguridad eliminaron este tratamiento especial y ahora KSP se usa para todos los certificados.
Determinar el conjunto de API que se usará
Las aplicaciones que se basan en claves RSA administradas por CSP pueden sufrir errores cuando KSP administra la clave. Para resolver esto, las aplicaciones deben detectar qué proveedor administra la clave y usar el conjunto de API correspondiente (CAPI o CNG).
Importante: No use las funciones CryptAcquireContextW o CryptAcquireContextA , ya que la API está en desuso. En su lugar, use la función CryptAcquireCertificatePrivateKey .
Función CryptAcquireCertificatePrivateKey
Al llamar a CryptAcquireCertificatePrivateKey , se devuelve un identificador (phCryptProvOrNCryptKey) de tipo HCRYPTPROV_OR_NCRYPT_KEY_HANDLE. Este controlador puede ser:
-
Controlador CSP (HCRYPTPROV): usa funciones CryptoAPI como CryptSignHash.
-
Controlador de CNG (NCRYPT_KEY_HANDLE):Use funciones CNG como NCryptSignHash.
Nota: Al llamar a CryptAcquireCertificatePrivateKey, asegúrese de incluir el CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG en el parámetro dwFlags.
Para determinar el tipo de controlador, compruebe el valor de pdwKeySpec :
|
valor pdwKeySpec |
API de criptografía a usar |
|
AT_KEYEXCHANGE o AT_SIGNATURE |
CAPI |
|
CERT_NCRYPT_KEY_SPEC |
CNG |
Solución alternativa
Hay disponible una solución temporal para los clientes que se ven afectados por la aplicación de este cambio. Una clave temporal del Registro está disponible para cambiar el comportamiento de Obligatoriedad al modo Auditoría .
Importante: La compatibilidad con esta clave del Registro se quitará en las actualizaciones de abril de 2026.
|
Ruta de acceso del Registro |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais |
|
Tipo |
REG_DWORD |
|
Nombre de valor |
DisableCapiOverrideForRSA |
|
Datos del valor |
|
Referencias
Almacenamiento y recuperación de claves
Función CryptAcquireCertificatePrivateKey (wincrypt.h)
.