Compartilhar via


Armazenamento e recuperação de chaves

Arquitetura de armazenamento de chaves

O CNG fornece um modelo para o armazenamento de chaves privadas que permite a adaptação às demandas atuais e futuras de criação de aplicativos que usam recursos de criptografia, como criptografia de chave pública ou privada, bem como as demandas do armazenamento de material de chave. O roteador de armazenamento de chaves é a rotina central nesse modelo e é implementado em Ncrypt.dll. Um aplicativo acessa os KSPs (provedores de armazenamento de chaves) no sistema por meio do roteador de armazenamento de chaves, que oculta detalhes, como isolamento de chave, do aplicativo e do próprio provedor de armazenamento. A ilustração a seguir mostra o design e a função da arquitetura de isolamento de chave CNG.

provedor de armazenamento de chaves cng

Para atender aos requisitos comuns de critérios (CC), as chaves de longa duração devem ser isoladas para que nunca estejam presentes no processo do aplicativo. Atualmente, o CNG dá suporte ao armazenamento de chaves privadas assimétricas usando o KSP de software da Microsoft incluído no Windows Server 2008 e no Windows Vista e instalado por padrão.

O isolamento de chave é habilitado por padrão no Windows Server 2008 e no Windows Vista. O recurso de isolamento de chave não está disponível em plataformas anteriores a elas. Além disso, KSPs de terceiros não são carregados no serviço de isolamento de chave (processo LSA). Somente o KSP da Microsoft é carregado no serviço de isolamento de chave.

O processo LSA é usado como o processo de isolamento de chave para maximizar o desempenho. Todo o acesso às chaves privadas passa pelo roteador de armazenamento de chaves, que expõe um conjunto abrangente de funções para gerenciar e usar chaves privadas.

O CNG armazena a parte pública da chave armazenada separadamente da parte privada. A parte pública de um par de chaves também é mantida no serviço de isolamento de chave e é acessada usando a chamada de procedimento remoto local (LRPC). O roteador de armazenamento de chaves usa LRPC ao chamar o processo de isolamento de chave. Todo o acesso às chaves privadas passa pelo roteador de chave privada e é auditado pelo CNG.

Conforme descrito acima, há suporte para uma ampla variedade de dispositivos de armazenamento de hardware. Em cada caso, a interface para todos esses dispositivos de armazenamento é idêntica. Ele inclui funções para executar várias operações de chave privada, bem como funções que pertencem ao armazenamento e ao gerenciamento de chaves.

O CNG fornece um conjunto de APIs que são usadas para criar, armazenar e recuperar chaves criptográficas. Para obter uma lista dessas APIs, consulte Funções de armazenamento de chaves CNG.

Tipos de Chave

O CNG dá suporte aos seguintes tipos de chave:

  • Diffie-Hellman chaves públicas e privadas.
  • Chaves públicas e privadas do Algoritmo de Assinatura Digital (DSA, FIPS 186-2).
  • Chaves públicas e privadas RSA (PKCS nº 1).
  • Várias chaves públicas e privadas herdadas (CryptoAPI).
  • Chaves públicas e privadas da Criptografia de Curva Elíptica.

Algoritmos com suporte

O CNG dá suporte aos seguintes algoritmos de chave.

Algoritmo Comprimento da chave/hash (bits)
RSA 512 a 16384, em incrementos de 64 bits
DH 512 a 16384, em incrementos de 64 bits
DSA 512 a 1024, em 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

Principais diretórios e arquivos

Os CSPs de CryptoAPI herdados da Microsoft armazenam chaves privadas nos diretórios a seguir.

Tipo de chave Diretórios
Usuário privado %APPDATA%\Microsoft\Crypto\RSA\User SID\
%APPDATA%\Microsoft\Crypto\DSS\User SID\
Sistema local privado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Serviço local privado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Serviço de rede privado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Privado compartilhado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys

O CNG armazena chaves privadas nos diretórios a seguir.

Tipo de chave Diretório
Usuário privado %APPDATA%\Microsoft\Crypto\Keys
Sistema local privado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys
Serviço local privado %WINDIR%\ServiceProfiles\LocalService
Serviço de rede privado %WINDIR%\ServiceProfiles\NetworkService
Privado compartilhado %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

Veja a seguir algumas das diferenças entre os contêineres de chave CryptoAPI e CNG.

  • O CNG usa nomes de arquivo diferentes para arquivos de chave do que arquivos de chave criados pelo Rsaenh.dll e Dssenh.dll CSPs herdados. Os arquivos de chave herdados também têm a extensão .key, mas os arquivos de chave CNG não têm a extensão .key.
  • O CNG dá suporte total a nomes de contêiner de chave Unicode; O CNG usa um hash do nome do contêiner Unicode, enquanto CryptoAPI usa um hash do nome do contêiner ANSI.
  • O CNG é mais flexível em relação aos pares de chaves RSA. Por exemplo, o CNG dá suporte a expoentes públicos com mais de 32 bits de comprimento e dá suporte a chaves nas quais p e q têm comprimentos diferentes.
  • Em CryptoAPI, o arquivo de contêiner de chave é armazenado em um diretório cujo nome é o equivalente textual do SID do usuário. Esse não é mais o caso no CNG, o que remove a dificuldade de mover usuários de um domínio para outro sem perder todas as chaves privadas.
  • Os KSP do CNG e os nomes de chave são limitados a MAX_PATH caracteres Unicode. O CSP de CryptoAPI e os nomes de chave são limitados a MAX_PATH caracteres ANSI.
  • O CNG oferece a capacidade das propriedades de chave definidas pelo usuário. Os usuários podem criar e associar propriedades personalizadas a chaves e armazená-las com chaves persistentes.

Ao persistir uma chave, o CNG pode criar dois arquivos. O primeiro arquivo contém a chave privada no novo formato CNG e é sempre criado. Esse arquivo não é utilizável pelos CSPs de CryptoAPI herdados. O segundo arquivo contém a mesma chave privada no contêiner de chaves CryptoAPI herdado. O segundo arquivo está em conformidade com o formato e o local usados pelo Rsaenh.dll. A criação do segundo arquivo só ocorrerá se o sinalizador NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG for especificado quando a função NCryptFinalizeKey for chamada para finalizar uma chave RSA. Esse recurso não tem suporte para chaves DSA e DH.

Quando um aplicativo tenta abrir uma chave persistente existente, o CNG tenta primeiro abrir o arquivo CNG nativo. Se esse arquivo não existir, o CNG tentará localizar uma chave correspondente no contêiner de chaves CryptoAPI herdado.

Quando você move ou copia chaves cryptoAPI de um computador de origem para um computador de destino com a USMT (Ferramenta de Migração de Estado do Usuário) do Windows, o CNG não acessará as chaves no computador de destino. Para acessar essas chaves migradas, você deve usar a CryptoAPI.