Mi cliente me pide que use las bibliotecas criptográficas validadas FIPS 140-2. Actualmente tengo el cifrado AES 256 utilizando Microsoft CryptoAPI en mi aplicación. Primero obtengo el proveedor (HCRYPTPROV) utilizando CryptAcquireContext con MS_ENH_RSA_AES_PROV y PROV_RSA_AES. Luego creo una clave a través de CryptDeriveKey, etc.
Encontré esta instrucción enlace que informa sobre la validación FIPS 140-2.
Dice que
En lugar de validar componentes y productos individuales, Microsoft elige validar solo los módulos criptográficos subyacentes. Posteriormente, muchos componentes de Windows y productos de Microsoft se basan en la API criptográfica: módulos criptográficos validados FIPS 140 de próxima generación (CNG) y API criptográfica heredada (CAPI). Los componentes de Windows y los productos de Microsoft utilizan las interfaces de programación de aplicaciones (API) documentadas para cada uno de los módulos para acceder a varios servicios criptográficos.
Entonces dice
La lista de binarios CNG validados se identifica en la sección Módulos criptográficos validados de CNG.
y
Al desarrollar el uso de CNG directamente, es responsabilidad del desarrollador seguir las reglas de seguridad descritas en la Política de seguridad FIPS 140 para cada módulo. La política de seguridad para cada módulo se proporciona en el sitio web de CMVP. Los enlaces a cada uno de los documentos de la Política de Seguridad se proporcionan en las tablas a continuación.
Usando la información en las tablas, parece que AES 256 tiene FIPS permitido. Entonces puedo ver las siguientes bibliotecas dinámicas.
bcryptprimitives.dll y ncryptsslp.dll
He comprobado la versión de la biblioteca (10.0.14393) y tengo la versión correcta en mi computadora. Miré a través de Process Hacker y veo que la aplicación usa las bibliotecas. Pero al mismo tiempo tengo muchas bibliotecas adicionales como crypt32.dll, cryptsp.dll, advapi32.dll, bcrypt.dll, bcryptprimitives.dll o ncrypt.dll. No puedo comprobar si se usan como envoltorios o si tienen algunas funciones criptográficas subyacentes.
En enlace que está vinculado a bcryptprimitives.dll y ncryptsslp.dll, puedo ver un conjunto de funciones primitivas de CNG que los llamadores pueden usar para acceder a los servicios criptográficos. Al mismo tiempo, parece que CAPI (CryptoAPI?) También está permitido.
¿Entonces tengo que pasar de CryptoAPI a la lista de funciones de CNG para usar las bibliotecas criptográficas validadas FIPS 140-2 o está permitido a las funciones que uso actualmente? Pero entonces, ¿cómo verificar si solo uso las bibliotecas validadas FIPS 140-2?