Compartilhar via


Armazenamento e recuperação de chaves

Arquitetura de armazenamento de chaves

O CNG fornece um modelo de 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, tanto do aplicativo quanto do próprio provedor de armazenamento. A ilustração a seguir mostra o projeto e a funcionalidade da arquitetura de isolamento de chave do CNG.

provedor de armazenamento de chaves cng

Para atender aos requisitos dos Critérios Comuns (CC), as chaves de longa duração devem ser isoladas para que nunca estejam presentes no processo da aplicação. 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 Microsoft KSP é carregado no serviço de isolamento de chaves.

O processo LSA é utilizado como o principal processo de isolamento para maximizar o desempenho. Todo o acesso a 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 LRPC (chamada de procedimento remoto local). O roteador de armazenamento de chaves usa LRPC ao chamar o processo de isolamento de chave. Todo o acesso a chaves privadas passa pelo roteador de chave privada e é auditado pelo CNG.

Conforme descrito acima, uma ampla gama de dispositivos de armazenamento de hardware pode ter suporte. 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:

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

Algoritmos com suporte

O CNG dá suporte aos algoritmos de chave a seguir.

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, com intervalos 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\sid do usuário\
%APPDATA%\Microsoft\Crypto\DSS\sid do usuário\
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 em comparação com aqueles criados pelos CSPs legados Rsaenh.dll e Dssenh.dll. 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 aos nomes de contêiner de chaves 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.
  • No 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 em CNG, o que remove a dificuldade de mover usuários de um domínio para outro sem perder todas as chaves privadas.
  • O CNG KSP 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 funcionalidade de propriedades de chave definidas pelo usuário. Os usuários podem criar e associar propriedades personalizadas a chaves e armazená-las com chaves persistentes.

O CNG pode criar dois arquivos ao persistir uma chave. O primeiro arquivo contém a chave privada no novo formato CNG e sempre é criado. Este arquivo não pode ser usado pelos provedores de serviços de criptografia (CSPs) legados do CryptoAPI. 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 ocorrerá somente se o sinalizador de 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 primeiro tenta 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.

Funções de armazenamento de chaves CNG

Identificadores de Propriedade de Armazenamento de Chaves

NCryptFinalizeKey