Criar e armazenar chaves mestras de coluna para Always Encrypted

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Chaves mestras de coluna são chaves de proteção de chave usadas no Always Encrypted para criptografar chaves de criptografia de coluna. As chaves mestras de coluna devem ser armazenadas em um repositório de chaves confiável e precisam estar acessíveis aos aplicativos que precisam criptografar ou descriptografar dados e às ferramentas para a configuração do Sempre Criptografado e o gerenciamento de chaves Sempre Criptografado.

Este artigo fornece detalhes para selecionar um repositório de chaves e criar chaves mestras de coluna para o Sempre Criptografado. Para obter uma visão detalhada, confira Overview of Key Management for Always Encrypted(Visão geral do gerenciamento de chaves do Sempre Criptografado).

Selecionando um repositório de chaves para sua chave mestra de coluna

O Always Encrypted dá suporte a vários repositórios de chaves para armazenar chaves mestras de coluna do Always Encrypted. Os repositórios de chaves com suporte variam de acordo com o driver e a versão utilizada.

Há duas categorias de alto nível de repositórios de chaves a serem consideradas – Repositórios de Chaves Locaise Repositórios de Chaves Centralizados.

Repositório de Chaves Local ou Centralizado?

  • Repositórios de Chaves Locais – só podem ser usados por aplicativos em computadores que contêm o repositório de chaves local. Em outras palavras, você precisa replicar o repositório de chaves e a chave em cada computador que executa o aplicativo. Um exemplo de um repositório de chaves local é o Repositório de Certificados do Windows. Ao usar um repositório de chaves local, você precisa verificar se o repositório de chaves existe em todos os computadores que hospedam o aplicativo e se o computador contém as chaves mestras de coluna que o aplicativo precisa para acessar os dados protegidos usando o Sempre Criptografado. Quando você provisiona uma chave mestra de coluna pela primeira vez ou quando altera (gira) a chave, é necessário verificar se a chave é implantada em todos os computadores que hospedam o(s) aplicativo(s).

  • Repositórios de Chaves Centralizados – atende a aplicativos em vários computadores. Um exemplo de um repositório de chaves centralizado é o Cofre de Chaves do Azure. Normalmente, um repositório de chaves centralizado facilita o gerenciamento de chaves, pois não é necessário manter várias cópias das chaves mestras de coluna em vários computadores. Verifique se os aplicativos estão configurados para se conectarem ao repositório de chaves centralizado.

Quais repositórios de chaves têm suporte em drivers de cliente habilitados para Sempre Criptografado?

Drivers de cliente habilitados para Sempre Criptografado são drivers de cliente do SQL Server que têm suporte interno para incorporar o Sempre Criptografado nos aplicativos cliente. Os drivers habilitados para Sempre Criptografado incluem alguns provedores internos de repositórios de chaves populares. Alguns drivers também permitem implementar e registrar um provedor personalizado de repositórios de chaves mestras de coluna, para que você possa usar qualquer repositório de chaves, mesmo se não houver nenhum provedor interno para ele. Ao decidir entre um provedor interno e um provedor personalizado, considere que o uso de um provedor interno, normalmente, significa menos alterações em seus aplicativos (em alguns casos, é necessária apenas a alteração de uma cadeia de conexão de banco de dados).

Os provedores internos disponíveis dependem do driver, da versão do driver e do sistema operacional selecionados. Confira a documentação do Always Encrypted de seu driver específico para determinar quais repositórios de chaves têm suporte pronto para uso e se o driver dá suporte a provedores personalizados de repositórios de chaves – Desenvolver aplicativos usando o Always Encrypted.

Quais repositórios de chaves têm suporte nas ferramentas SQL?

O SQL Server Management Studio, Azure Data Studio e o módulo do SqlServer PowerShell dão suporte a chaves mestras de coluna armazenadas em:

  • Cofres de chaves e HSMs gerenciados no Azure Key Vault.

    Observação

    Os HSMs gerenciados exigem o SSMS 18.9 ou posterior e o módulo do PowerShell do SqlServer versão 21.1.18235 ou posterior. O Azure Data Studio atualmente não dá suporte a HSMs gerenciados.

  • Repositório de Certificados do Windows.

  • Repositórios de chaves, como o módulo de segurança de hardware, que fornecem API de CNG (Cryptography Next Generation) ou CAPI (Cryptography API).

Criando chaves mestras de coluna no Repositório de Certificados do Windows

Uma chave mestra de coluna pode ser um certificado armazenado no Repositório de Certificados do Windows. Um driver habilitado para Always Encrypted não verifica uma data de validade nem uma cadeia de autoridade de certificado. Um certificado é usado apenas como um par de chaves consistindo em uma chave pública e uma chave privada.

Para ser uma chave mestra de coluna válida, um certificado deve:

  • ser um certificado X.509.
  • ser armazenado em uma das duas localizações de repositório de certificados: computador local ou usuário atual. (Para criar um certificado no local repositório de certificados do computador local, é necessário ser um administrador no computador de destino.)
  • conter uma chave privada (o tamanho recomendado das chaves no certificado é de 2.048 bits ou superior).
  • ser criado para a troca de chaves.

Há várias maneiras de criar um certificado que é uma chave mestra de coluna válida, mas a opção mais simples é criar um certificado autoassinado.

Criar um certificado autoassinado usando o PowerShell

Use o cmdlet New-SelfSignedCertificate para criar um certificado autoassinado. O exemplo a seguir mostra como gerar um certificado que pode ser usado como uma chave mestra de coluna para o Sempre Criptografado.

# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 

# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048

Criar um certificado autoassinado usando o SSMS (SQL Server Management Studio)

Para obter detalhes, confira Provisionar chaves Always Encrypted usando o SQL Server Management Studio. Para obter um tutorial passo a passo que usa o SSMS e armazena as chaves do Always Encrypted no Repositório de Certificados do Windows, veja Always Encrypted – Proteger dados confidenciais no Banco de Dados SQL com a criptografia de banco de dados e armazenar as chaves de criptografia no Repositório de Certificados do Windows.

Disponibilizando certificados para aplicativos e usuários

Se a chave mestra de coluna for um certificado armazenado na localização do repositório de certificados do computador local , você precisará exportar o certificado com a chave privada e importá-lo para todos os computadores que hospedam aplicativos que devem criptografar ou descriptografar dados armazenados em colunas criptografadas ou ferramentas para a configuração do Always Encrypted e o gerenciamento das chaves do Always Encrypted. Além disso, cada usuário deve ter uma permissão de leitura para o certificado armazenado na localização do repositório de certificados do computador local para poder usar o certificado como uma chave mestra de coluna.

Se a chave mestra de coluna for um certificado armazenado na localização do repositório de certificados do computador local , você precisará exportar o certificado com a chave privada e importá-lo para a localização do repositório de certificados do usuário atual de todas as contas de usuário que executam aplicativos que devem criptografar ou descriptografar dados armazenados em colunas criptografadas ou ferramentas para a configuração do Always Encrypted e o gerenciamento das chaves do Always Encrypted (em todos os computadores que contém esses aplicativos ou essas ferramentas). Nenhuma configuração de permissão é necessária – depois de fazer logon em um computador, um usuário pode acessar todos os certificados em sua localização do repositório de certificados do usuário atual.

Usando o PowerShell

Use os cmdlets Import-PfxCertificate e Export-PfxCertificate para importar e exportar um certificado.

Usando o Console de Gerenciamento Microsoft

Para conceder a um usuário a permissão Leitura para um certificado armazenado na localização do repositório de certificados do computador local, siga estas etapas:

  1. Abra um prompt de comando e digite mmc.
  2. No console do MMC, no menu Arquivo , clique em Adicionar/Remover Snap-in.
  3. Na caixa de diálogo Adicionar/Remover Snap-in , clique em Adicionar.
  4. Na caixa de diálogo Adicionar Snap-in Autônomo , clique em Certificadose em Adicionar.
  5. Na caixa de diálogo Snap-in de certificados , clique em Conta de computadore em Concluir.
  6. Na caixa de diálogo Adicionar Snap-in Autônomo , clique em Fechar.
  7. Na caixa de diálogo Adicionar/Remover Snap-in , clique em OK.
  8. No snap-in de Certificados, localize o certificado na pasta Certificados > Pessoal, clique com o botão direito do mouse no Certificado, aponte para Todas as Tarefas e clique em Gerenciar Chaves Privadas.
  9. Na caixa de diálogo Segurança , adicione permissões de leitura para uma conta de usuário, se necessário.

Criando chaves mestras de coluna no Cofre de Chaves do Azure

O Azure Key Vault ajuda a proteger segredos e chaves de criptografia, é uma opção conveniente para armazenar chaves mestras de coluna do Always Encrypted, especialmente se seus aplicativos estiverem hospedados no Azure. Para criar uma chave no Cofre de Chaves do Azure, é necessário ter uma assinatura do Azure e um Cofre de Chaves do Azure. Uma chave pode ser armazenada em um cofre de chaves ou em um HSM gerenciado. Para ser uma chave mestra de coluna válida, a chave gerenciada no Azure Key Vault deve ser uma chave RSA.

Usando a CLI do Azure, o Portal do Azure ou o Azure PowerShell

Saiba mais sobre como criar uma chave em um cofre de chaves, confira:

Saiba mais sobre como criar uma chave em um HSM gerenciado, confira:

SQL Server Management Studio (SSMS)

Para saber em detalhes como criar uma chave mestra de coluna em um cofre de chaves ou um HSM gerenciado no Azure Key Vault usando o SSMS, confira Provisionar chaves Always Encrypted usando o SQL Server Management Studio. Para ver um tutorial passo a passo que usa o SSMS e armazena as chaves Always Encrypted em um cofre de chaves, veja o Tutorial do Assistente do Always Encrypted (Azure Key Vault).

Disponibilizando as chaves do Cofre de Chaves do Azure para aplicativos e usuários

Para acessar uma coluna criptografada, seu aplicativo precisa acessar o Azure Key Vault e também de permissões específicas da chave mestra de coluna para descriptografar a chave de criptografia de coluna que protege a coluna.

Para gerenciar chaves do Always Encrypted, você precisa de permissões para listar e criar chaves mestras de coluna no Azure Key Vault e executar operações criptográficas usando as chaves.

Cofres de Chaves

Se você armazenar as chaves mestras de coluna em um cofre de chaves e estiver usando permissões de função para autorização:

  • A identidade do aplicativo precisa ser um membro de funções que permitem as seguintes ações do plano de dados no cofre de chaves:

    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/verify/action

    A maneira mais fácil de conceder ao aplicativo a permissão necessária é adicionar a identidade dele à função Usuário de Criptografia do Cofre de Chaves. Você também pode criar uma função personalizada com as permissões necessárias.

  • Um usuário que gerencia chaves do Always Encrypted precisa ser um membro de funções que permitem as seguintes ações do plano de dados no cofre de chaves:

    • Microsoft.KeyVault/vaults/keys/create/action
    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/encrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/sign/action
    • Microsoft.KeyVault/vaults/keys/verify/action

    A maneira mais fácil de conceder ao usuário a permissão necessária é adicionar o usuário à função de Usuário de Criptografia do Cofre de Chaves. Você também pode criar uma função personalizada com as permissões necessárias.

Se você armazenar as chaves mestras de coluna em um cofre de chaves e estiver usando políticas de acesso para autorização:

  • A identidade do aplicativo precisa das seguintes permissões de política de acesso no cofre de chaves: get, unwrapKey e verify.
  • Um usuário que gerencia chaves do Always Encrypted precisa das seguintes permissões de política de acesso no cofre de chaves: create, get, list, sign, unwrapKey, wrapKey, verify.

Para obter informações gerais sobre como configurar a autenticação e a autorização para cofres de chaves, confira Autorizar uma entidade de segurança para acessar o Key Vault.

HSMs gerenciados

A identidade do aplicativo precisa ser um membro de funções que permitem as seguintes ações do plano de dados no HSM gerenciado:

  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

A Microsoft recomenda que você crie uma função personalizada contendo apenas as permissões acima.

Um usuário que gerencia chaves do Always Encrypted precisa ser um membro de funções que permitem as seguintes ações do plano de dados sobre a chave:

  • Microsoft.KeyVault/managedHsm/keys/create/action
  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/encrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read
  • icrosoft.KeyVault/managedHsm/keys/sign/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

A maneira mais fácil de conceder ao usuário as permissões acima é adicionar o usuário à função de Usuário de Criptografia do HSM Gerenciado. Você também pode criar uma função personalizada com as permissões necessárias.

Saiba mais sobre o controle de acesso a HSMs gerenciados, confira:

Criando chaves mestras de coluna em módulos de segurança de hardware usando o CNG

Uma chave mestra de coluna do Sempre Criptografado pode ser armazenada em um repositório de chaves que implementa a API do CNG (Cryptography Next Generation). Normalmente, esse tipo de repositório é um HSM (módulo de segurança de hardware). Um HSM é um dispositivo físico que protege e gerencia chaves digitais e fornece processamento de criptografia. Tradicionalmente, os HSMs são fornecidos na forma de um cartão plug-in ou um dispositivo externo que é anexado diretamente a um computador (HSMs locais) ou a um servidor de rede.

Para disponibilizar um HSM para aplicativos em determinado computador, um KSP (Provedor de Armazenamento de Chaves), que implementa o CNG, deve ser instalado e configurado no computador. Um driver de cliente do Sempre Criptografado (um provedor de repositórios de chaves mestras de coluna no driver), usa o KSP para criptografar e descriptografar as chaves de criptografia de coluna, protegidas com a chave mestra de coluna armazenada no repositório de chaves.

O Windows inclui o Provedor de Armazenamento de Chaves do Software Microsoft – um KSP baseado em software, que pode ser usado para fins de teste. Veja CNG Key Storage Providers(Provedores de Armazenamento de Chaves do CNG).

Criando chaves mestras de coluna em um repositório de chaves usando o CNG/KSP

Uma chave mestra de coluna deve ser uma chave assimétrica (um par de chaves pública/privada), que usa o algoritmo RSA. O tamanho de chave recomendado é de 2.048 ou maior.

Usando ferramentas específicas do HSM

Confira a documentação do HSM.

Usando o PowerShell

Você pode usar as APIs do .NET para criar uma chave em um repositório de chaves usando o CNG no PowerShell.

$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

Como usar o SQL Server Management Studio.

Confira Provisionar chaves Always Encrypted usando o SQL Server Management Studio.

Disponibilizando chaves do CNG para aplicativos e usuários

Confira a documentação do HSM e do KSP para saber como configurar o KSP em um computador e conceder acesso ao HSM a aplicativos e usuários.

Criando chaves mestras de coluna em módulos de segurança de hardware usando a CAPI

Uma chave mestra de coluna do Sempre Criptografado pode ser armazenada em um repositório de chaves que implementa a CAPI (Cryptography API). Normalmente, um repositório desse tipo é um HSM (módulo de segurança de hardware) – um dispositivo físico que protege e gerencia chaves digitais e fornece processamento de criptografia. Tradicionalmente, os HSMs são fornecidos na forma de um cartão plug-in ou um dispositivo externo que é anexado diretamente a um computador (HSMs locais) ou a um servidor de rede.

Para disponibilizar um HSM para aplicativos em determinado computador, um CSP (Provedor de Serviços de Criptografia), que implementa a CAPI, deve ser instalado e configurado no computador. Um driver de cliente do Sempre Criptografado (um provedor de repositórios de chaves mestras de coluna no driver), usa o CSP para criptografar e descriptografar as chaves de criptografia de coluna, protegidas com a chave mestra de coluna armazenada no repositório de chaves.

Observação

A CAPI é uma API herdada e preterida. Se um KSP estiver disponível para o HSM, será recomendável usá-lo, em vez de um CSP ou uma CAPI.

Um CSP deve dar suporte ao algoritmo RSA para ser usado com o Sempre Criptografado.

O Windows inclui os seguintes CSPs baseados em software (não apoiados por um HSM) que dão suporte ao RSA e que podem ser usados para fins de teste: Microsoft Enhanced RSA e AES Cryptographic Provider.

Criando chaves mestras de coluna em um repositório de chaves usando a CAPI ou o CSP

Uma chave mestra de coluna deve ser uma chave assimétrica (um par de chaves pública/privada), que usa o algoritmo RSA. O tamanho de chave recomendado é de 2.048 ou maior.

Usando ferramentas específicas do HSM

Confira a documentação do HSM.

Usando o SSMS (SQL Server Management Studio)

Confira Provisionar chaves Always Encrypted usando o SQL Server Management Studio.

Disponibilizando chaves do CNG para aplicativos e usuários

Confira a documentação do HSM e do CSP para saber como configurar o CSP em um computador e conceder acesso ao HSM a aplicativos e usuários.

Próximas etapas

Confira também