CSP y el proceso de criptografía
Las funciones CryptoAPI usan proveedores de servicios criptográficos (CSP) para realizar el cifrado y el descifrado, y para proporcionar seguridad y almacenamiento de claves. Estos CSP son módulos independientes. Idealmente, los CSP se escriben para ser independientes de una aplicación determinada, de modo que cualquier aplicación se ejecute con una variedad de CSP. Sin embargo, en realidad, algunas aplicaciones tienen requisitos específicos que requieren un CSP personalizado. Esto se compara con el modelo GDI de Windows. Los CSP son análogos a los controladores de dispositivos gráficos.
La calidad de la protección de las claves dentro del sistema es un parámetro de diseño del CSP y no del sistema en su conjunto. Esto permite que una aplicación se ejecute en diversos contextos de seguridad sin modificaciones.
Las aplicaciones de acceso tienen que restringir cuidadosamente los elementos internos criptográficos. Esto facilita el desarrollo seguro y portátil de aplicaciones.
Se aplican las tres reglas de diseño siguientes:
- Las aplicaciones no pueden acceder directamente al material de creación de claves. Dado que todo el material de creación de claves se genera dentro del CSP y lo usa la aplicación a través de identificadores opacos, no existe ningún riesgo de que una aplicación o sus DLL asociadas divulguen material de clave o elijan material de clave de orígenes aleatorios deficientes.
- Las aplicaciones no pueden especificar los detalles de las operaciones criptográficas. La interfaz de CSP permite a una aplicación elegir un algoritmo de cifrado o firma, pero el CSP realiza la implementación de cada operación criptográfica.
- Las aplicaciones no controlan las credenciales de usuario ni otros datos de autenticación de usuario. El CSP realiza la autenticación de usuario; por lo tanto, los CSP futuros con funcionalidades de autenticación avanzadas, como las entradas biométricas, funcionarán sin necesidad de cambiar el modelo de autenticación de aplicaciones.
Como mínimo, un CSP consta de una biblioteca de vínculos dinámicos (DLL) y un archivo de firma. El archivo de firma es necesario para asegurarse de que CryptoAPI reconoce el CSP. CryptoAPI valida esta firma periódicamente para asegurarse de que se detecta cualquier alteración con el CSP.
Algunos CSP pueden implementar una fracción de su funcionalidad en un servicio separado por direcciones llamado a través de RPC local o en hardware llamado a través de un controlador de dispositivo del sistema. Aislar el estado de clave global y las operaciones criptográficas centrales en un servicio separado por direcciones o en el hardware mantiene las claves y las operaciones seguras frente a alteraciones dentro de un espacio de datos de la aplicación.
No es necesario que las aplicaciones aprovechen los atributos específicos de un CSP específico. Por ejemplo, el proveedor criptográfico base de Microsoft (proporcionado con CryptoAPI) admite claves de sesión de 40 bits y claves públicas de 512 bits. Las aplicaciones que manipulan estas claves deben evitar suposiciones sobre la cantidad de memoria necesaria para almacenar estas claves, ya que es probable que se produzca un error en la aplicación si se usa otro CSP. Las aplicaciones bien escritas deben funcionar con una variedad de CSP.
Para más información sobre los tipos de proveedor criptográfico y los CSP predefinidos que se pueden usar con CryptoAPI, consulte Tipos de proveedor criptográfico y proveedores de servicios criptográficos de Microsoft.