Share via


Almacenamiento y recuperación de claves

Arquitectura de almacenamiento de claves

CNG proporciona un modelo para el almacenamiento de claves privadas que permite adaptarse a las demandas actuales y futuras de crear aplicaciones que usan características de criptografía, como el cifrado de claves pública o privada, así como las demandas del almacenamiento de material de clave. El enrutador de almacenamiento de claves es la rutina central de este modelo y se implementa en Ncrypt.dll. Una aplicación accede a los proveedores de almacenamiento de claves (KSP) en el sistema a través del enrutador de almacenamiento de claves, que oculta los detalles, como el aislamiento de claves, tanto de la aplicación como del propio proveedor de almacenamiento. En la ilustración siguiente se muestra el diseño y la función de la arquitectura de aislamiento de claves de CNG.

proveedor de almacenamiento de claves de cng

Para cumplir con los requisitos comunes de criterios (CC), las claves de larga duración deben aislarse para que nunca estén presentes en el proceso de solicitud. CNG admite actualmente el almacenamiento de claves privadas asimétricas mediante el KSP de software de Microsoft que se incluye con Windows Server 2008 y Windows Vista y se instala de forma predeterminada.

El aislamiento de claves está habilitado de forma predeterminada en Windows Server 2008 y Windows Vista. La característica de aislamiento clave no está disponible en las plataformas anteriores a estas. Además, los KSP de terceros no se cargan en el servicio de aislamiento de claves (proceso LSA). Solo microsoft KSP se carga en el servicio de aislamiento de claves.

El proceso LSA se usa como proceso de aislamiento clave para maximizar el rendimiento. Todo el acceso a las claves privadas pasa por el enrutador de almacenamiento de claves, que expone un conjunto completo de funciones para administrar y usar claves privadas.

CNG almacena la parte pública de la clave almacenada por separado de la parte privada. La parte pública de un par de claves también se mantiene en el servicio de aislamiento de claves y se accede mediante la llamada a procedimiento remoto local (LRPC). El enrutador de almacenamiento de claves usa LRPC al llamar al proceso de aislamiento de claves. Todo el acceso a las claves privadas pasa por el enrutador de claves privadas y es auditado por CNG.

Como se ha descrito anteriormente, se puede admitir una amplia gama de dispositivos de almacenamiento de hardware. En cada caso, la interfaz de todos estos dispositivos de almacenamiento es idéntica. Incluye funciones para realizar diversas operaciones de clave privada, así como funciones relacionadas con el almacenamiento y la administración de claves.

CNG proporciona un conjunto de API que se usan para crear, almacenar y recuperar claves criptográficas. Para obtener una lista de estas API, consulte Funciones de almacenamiento de claves de CNG.

Tipos de clave

CNG admite los siguientes tipos de clave:

  • Diffie-Hellman claves públicas y privadas.
  • Algoritmo de firma digital (DSA, FIPS 186-2) claves públicas y privadas.
  • Claves públicas y privadas RSA (PKCS #1).
  • Varias claves públicas y privadas heredadas (CryptoAPI).
  • Claves públicas y privadas de criptografía de curva elíptica.

Algoritmos admitidos

CNG admite los siguientes algoritmos de clave.

Algoritmo Longitud de clave y hash (bits)
RSA De 512 a 16384, en incrementos de 64 bits
DH De 512 a 16384, en incrementos de 64 bits
DSA De 512 a 1024, en incrementos de 64 bits
ECDSA P-256, P-384, P-521 (curvas NIST)
ECDH P-256, P-384, P-521 (curvas NIST)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Directorios y archivos de claves

Los CSP de CryptoAPI heredados de Microsoft almacenan claves privadas en los directorios siguientes.

Tipo de clave Directorios
Usuario privado %APPDATA%\Microsoft\Crypto\RSA\USER SID\
%APPDATA%\Microsoft\Crypto\DSS\USER SID\
Privado del sistema local %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Servicio local privado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Servicio de red privado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Privado compartido %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys

CNG almacena claves privadas en los directorios siguientes.

Tipo de clave Directorio
Usuario privado %APPDATA%\Microsoft\Crypto\Keys
Privado del sistema local %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys
Servicio local privado %WINDIR%\ServiceProfiles\LocalService
Servicio de red privado %WINDIR%\ServiceProfiles\NetworkService
Privado compartido %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

A continuación se muestran algunas de las diferencias entre los contenedores de claves CryptoAPI y CNG.

  • CNG usa nombres de archivo diferentes para archivos de clave que los archivos de clave creados por el Rsaenh.dll y Dssenh.dll CSP heredados. Los archivos de clave heredados también tienen la extensión .key, pero los archivos de clave CNG no tienen la extensión .key.
  • CNG es totalmente compatible con los nombres de contenedor de claves Unicode; CNG usa un hash del nombre del contenedor Unicode, mientras que CryptoAPI usa un hash del nombre del contenedor ANSI.
  • CNG es más flexible con respecto a los pares de claves RSA. Por ejemplo, CNG admite exponentes públicos de más de 32 bits de longitud y admite claves en las que p y q son longitudes diferentes.
  • En CryptoAPI, el archivo de contenedor de claves se almacena en un directorio cuyo nombre es el equivalente textual del SID del usuario. Este ya no es el caso en CNG, lo que elimina la dificultad de mover usuarios de un dominio a otro sin perder todas sus claves privadas.
  • Los nombres de clave y KSP de CNG se limitan a MAX_PATH caracteres Unicode. Los nombres de clave y CSP de CryptoAPI se limitan a MAX_PATH caracteres ANSI.
  • CNG ofrece la funcionalidad de las propiedades clave definidas por el usuario. Los usuarios pueden crear y asociar propiedades personalizadas con claves y almacenarlas con claves persistentes.

Al conservar una clave, CNG puede crear dos archivos. El primer archivo contiene la clave privada en el nuevo formato CNG y siempre se crea. Los CSP de CryptoAPI heredados no pueden usar este archivo. El segundo archivo contiene la misma clave privada en el contenedor de claves CryptoAPI heredado. El segundo archivo se ajusta al formato y la ubicación utilizados por Rsaenh.dll. La creación del segundo archivo solo se produce si se especifica la marca NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG cuando se llama a la función NCryptFinalizeKey para finalizar una clave RSA. Esta característica no es compatible con las claves DSA y DH.

Cuando una aplicación intenta abrir una clave persistente existente, CNG primero intenta abrir el archivo CNG nativo. Si este archivo no existe, CNG intenta buscar una clave coincidente en el contenedor de claves CryptoAPI heredado.

Al mover o copiar claves CryptoAPI desde una máquina de origen a una máquina de destino con la Herramienta de migración de estado de usuario (USMT) de Windows, CNG no podrá acceder a las claves en el equipo de destino. Para acceder a estas claves migradas, debe usar CryptoAPI.