Partilhar via


Criar e armazenar chaves mestras de coluna para Always Encrypted

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Chaves Mestras de Coluna são chaves que protegem chaves usadas no Always Encrypted para criptografar chaves de criptografia de coluna. As chaves mestras de coluna devem ser armazenadas num armazenamento de chaves de confiança, e as chaves precisam estar acessíveis a aplicações que necessitam criptografar ou descriptografar dados, bem como a ferramentas para configurar o Always Encrypted e gerir chaves Always Encrypted.

Este artigo fornece detalhes para selecionar um armazenamento de chaves e criar chaves mestras de coluna para Always Encrypted. Para uma visão geral detalhada, consulte Visão geral do gerenciamento de chaves para Always Encrypted.

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

O Always Encrypted suporta múltiplos repositórios de chaves para o armazenamento de chaves-mestras de coluna Always Encrypted. Os armazenamentos de chaves suportados variam dependendo do driver e da versão que você está usando.

Há duas categorias de alto nível de lojas-chave a serem consideradas - Armazenamentos Chave Locaise Armazenamentos de Chaves Centralizados.

Armazenamento de chaves local ou centralizado?

  • Armazenamentos de Chaves Locais - só pode ser usado por aplicativos em computadores que contenham o armazenamento de chaves local. Em outras palavras, você precisa replicar o armazenamento de chaves e a chave para cada computador que executa seu aplicativo. Um exemplo de armazenamento de chaves local é o Windows Certificate Store. Ao usar um armazenamento de chaves local, você precisa certificar-se de que o armazenamento de chaves existe em cada máquina que hospeda seu aplicativo e que o computador contém as chaves mestras de coluna de que seu aplicativo precisa para acessar dados protegidos usando Always Encrypted. Ao provisionar uma chave mestra de coluna pela primeira vez ou ao alterar (girar) a chave, você precisa garantir que a chave seja implantada em todas as máquinas que hospedam seu(s) aplicativo(s).

  • Armazenamento Centralizado de Chaves - serve aplicações em vários computadores. Um exemplo de armazenamento centralizado de chaves é Azure Key Vault. Um armazenamento centralizado de chaves geralmente facilita o gerenciamento de chaves porque você não precisa manter várias cópias das chaves mestras de coluna em várias máquinas. Certifique-se de que seus aplicativos estejam configurados para se conectar ao armazenamento centralizado de chaves.

Quais armazenamentos de chaves são suportados em drivers de cliente habilitados para criptografia sempre?

Os drivers de cliente habilitados para Always Encrypted são drivers de cliente do SQL Server que têm suporte interno para incorporar Always Encrypted em seus aplicativos cliente. Os drivers habilitados para Always Encrypted incluem alguns provedores integrados para armazenamentos de chaves populares. Alguns drivers também permitem implementar e registrar um provedor de armazenamento de chaves mestras de coluna personalizada, para que você possa usar qualquer armazenamento de chaves, mesmo que não haja um provedor interno para ele. Ao decidir entre um provedor interno e um provedor personalizado, considere que usar um provedor interno normalmente significa menos alterações em seus aplicativos (em alguns casos, apenas é necessário alterar 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 operativo selecionado. Consulte a documentação do Always Encrypted para o seu driver específico para determinar quais armazenamentos de chaves são suportados nativamente e se o seu driver suporta provedores de armazenamento de chaves personalizados - Desenvolver aplicativos usando Always Encrypted.

Quais armazenamentos de chaves são suportados nas Ferramentas SQL?

O SQL Server Management Studio, o Azure Data Studio e o módulo SqlServer PowerShell suportam chaves mestras de coluna armazenadas em:

  • Cofres de chaves e HSMs gerenciados no Cofre de Chaves do Azure.

    Observação

    Os HSMs gerenciados exigem o SSMS 18.9 ou posterior e o módulo SqlServer PowerShell versão 21.1.18235 ou posterior. Atualmente, o Azure Data Studio não oferece suporte a HSMs gerenciados.

  • Loja de Certificados do Windows.

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

Criando chaves mestras de colunas no Armazém 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 expiração ou uma cadeia de autoridade de certificação. Um certificado é simplesmente usado como um par de chaves que consiste em uma chave pública e privada.

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

  • ser um certificado X.509.
  • ser armazenado em um dos dois locais de armazenamento de certificados: máquina local ou usuário atual. (Para criar um certificado no local de armazenamento de certificados da máquina local, você deve ser um administrador na máquina de destino.)
  • contêm uma chave privada (o comprimento recomendado das chaves no certificado é de 2048 bits ou superior).
  • ser criado para troca de chaves.

Existem várias maneiras de criar um certificado que seja 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 Always Encrypted.

# 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 SQL Server Management Studio (SSMS)

Para obter detalhes, consulte provisionar chaves do Always Encrypted usando o SQL Server Management Studio. Para um tutorial passo a passo que utiliza o SSMS e armazena chaves Always Encrypted na Windows Certificate Store, consulte o tutorial do Assistente Always Encrypted (Windows Certificate Store).

Disponibilizando certificados para aplicativos e usuários

Se a sua chave mestra de coluna for um certificado armazenado no local de armazenamento de certificados máquina local , você precisará exportar o certificado com a chave privada e importá-lo para todas as máquinas que hospedam aplicativos que devem criptografar ou descriptografar dados armazenados em colunas criptografadas, ou ferramentas para configurar o Always Encrypted e para gerenciar as chaves Always Encrypted. Além disso, cada usuário deve receber uma permissão de leitura para o certificado armazenado no local de armazenamento de certificados da máquina local para poder usar o certificado como uma chave mestra de coluna.

Se a chave mestra da coluna for um certificado armazenado no local de armazenamento de certificados do usuário atual, você precisará exportar o certificado com a chave privada e importá-lo para o local de armazenamento de certificados do usuário atual de todas as contas de utilizador que executam aplicativos necessários para criptografar ou descriptografar dados armazenados em colunas criptografadas, ou para ferramentas de configuração do Always Encrypted e gestão de chaves Always Encrypted (em todas as máquinas que contêm estes aplicativos/ferramentas). Nenhuma configuração de permissão é necessária - depois de fazer logon em uma máquina, um usuário pode acessar todos os certificados em seu local atual de armazenamento de certificados de usuário.

Usando o PowerShell

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

Usando o Console de Gerenciamento Microsoft

Para conceder a um usuário a permissão de leitura para um certificado armazenado no local de armazenamento de certificados da máquina 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 Certificados, clique em Adicionar.
  5. Na caixa de diálogo de snap-in Certificados, clique em Conta de Computadore, em seguida, clique 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 Certificados de , localize o certificado na pasta Certificados Pessoal, clique com o botão direito do mouse no Certificado, aponte para Todas as Tarefase clique em Gerenciar Chaves Privadas.
  9. Na caixa de diálogo de segurança, adicione permissão 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 chaves criptográficas e segredos, e é uma opção conveniente para armazenar chaves mestras de coluna para Always Encrypted, especialmente se seus aplicativos estiverem hospedados no Azure. Para criar uma chave no Azure Key Vault, é necessário ter uma subscrição do Azure e um Azure Key Vault. Uma chave pode ser armazenada num cofre de chaves ou num HSM gerido . Para ser uma chave mestra de coluna válida, a chave gerenciada no Cofre de Chaves do Azure deve ser uma chave RSA.

Usando a CLI do Azure, Portal ou PowerShell

Para obter informações sobre como criar uma chave em um cofre de chaves, consulte:

Para obter informações sobre como criar uma chave em um HSM gerenciado, consulte:

SQL Server Management Studio (SSMS)

Para obter detalhes sobre como criar uma chave mestra de coluna em um cofre de chaves ou um HSM gerenciado no Cofre de Chaves do Azure usando o SSMS, consulte Provisionar chaves sempre criptografadas usando o SQL Server Management Studio. Para obter um tutorial passo a passo que usa SSMS e armazena chaves Always Encrypted em um Key Vault, consulte tutorial do Always Encrypted Wizard (Azure Key Vault).

Disponibilizando chaves do Azure Key Vault para aplicativos e usuários

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

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

Cofres das chaves

Se armazenar as suas chaves mestras de coluna num cofre de chaves e estiver a usar permissões de função para autorização:

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

    • Microsoft.KeyVault/vaults/keys/decrypt/action (ação de desencriptação)
    • Microsoft.KeyVault/vaults/chaves/leitura
    • Microsoft.KeyVault/vaults/keys/verify/action

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

  • Um usuário gerenciando chaves para Always Encrypted precisa ser um membro ou funções que permitam 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/criptografar/ação
    • Microsoft.KeyVault/vaults/chaves/leitura
    • Microsoft.KeyVault/vaults/chaves/sign/action
    • Microsoft.KeyVault/vaults/keys/verify/action

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

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

  • A identidade da sua aplicação precisa das seguintes permissões de política de acesso no cofre de chaves: obter, unwrapKeye verificar.
  • Um utilizador gerenciando chaves para Always Encrypted precisa das seguintes permissões de política de acesso no cofre de chaves: criar, get, listar, assinar, unwrapKey, wrapKey, verificar.

Para obter informações gerais sobre como configurar a autenticação e a autorização para cofres de chaves, consulte Autorizar uma entidade de segurança a acessar o Cofre da Chave.

HSMs gerenciados

A identidade da sua aplicação necessita ser membro de perfis que permitam as seguintes ações na camada de dados do seu HSM gerido:

  • 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 utilizador que gere chaves para Always Encrypted precisa ser membro de funções que permitam as seguintes ações do plano de dados na chave:

  • Microsoft.KeyVault/managedHsm/keys/create/action (ação de criação de chaves)
  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/encrypt/action
  • Microsoft.KeyVault/managedHsm/chaves/leitura
  • Microsoft.KeyVault/managedHsm/keys/assinar/ação
  • Microsoft.KeyVault/managedHsm/keys/verify/action

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

Para obter mais informações sobre controle de acesso para HSMs gerenciados, consulte:

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

Uma chave mestra de coluna para Always Encrypted pode ser armazenada em um armazenamento de chaves que implementa a API CNG (Cryptography Next Generation). Normalmente, esse tipo de armazenamento é um módulo de segurança de hardware (HSM). Um HSM é um dispositivo físico que protege e gerencia chaves digitais e fornece processamento de criptografia. Os HSMs tradicionalmente vêm na forma de uma placa plug-in ou um dispositivo externo que se conecta diretamente a um computador (HSMs locais) ou a um servidor de rede.

Para disponibilizar um HSM para aplicativos em uma determinada máquina, um KSP (Key Storage Provider), que implementa o CNG, deve ser instalado e configurado na máquina. Um driver de cliente Always Encrypted, que inclui um provedor de armazenamento de chave mestra de coluna, utiliza o KSP para criptografar e descriptografar chaves de criptografia de coluna. Estas chaves são protegidas com uma chave mestra de coluna que é armazenada no provedor de armazenamento de chaves.

O Windows inclui o Microsoft Software Key Storage Provider - um KSP baseado em software, que pode ser usado para fins de teste. Consulte Fornecedores de Armazenamento de Chaves CNG.

Criar chaves mestras de coluna num armazenamento de chaves usando CNG/KSP

Uma chave mestra de coluna deve ser uma chave assimétrica (um par de chaves pública/privada), usando o algoritmo RSA. O comprimento de chave recomendado é 2048 ou superior.

Usando ferramentas específicas do HSM

Consulte a documentação do seu HSM.

Usando o PowerShell

Você pode usar APIs do .NET para criar uma chave em um armazenamento de chaves usando 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)

Usando o SQL Server Management Studio

Consulte Provisionar chaves sempre criptografadas usando o SQL Server Management Studio.

Disponibilizando chaves CNG para aplicativos e usuários

Consulte a documentação do HSM e do KSP para saber como configurar o KSP em uma máquina e como conceder aos aplicativos e usuários acesso ao HSM.

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

Uma chave mestra de coluna para Always Encrypted pode ser armazenada em um armazenamento de chaves que implementa a API de criptografia (CAPI). Normalmente, essa loja é um módulo de segurança de hardware (HSM) - um dispositivo físico que protege e gerencia chaves digitais e fornece processamento de criptografia. Os HSMs tradicionalmente vêm na forma de uma placa plug-in ou um dispositivo externo que se conecta diretamente a um computador (HSMs locais) ou a um servidor de rede.

Para disponibilizar um HSM para aplicativos em uma determinada máquina, um CSP (Cryptography Service Provider), que implementa o CAPI, deve ser instalado e configurado na máquina. Um driver de cliente *Always Encrypted* (um provedor de armazenamento de chave mestra de coluna dentro do driver), usa o CSP para criptografar e descriptografar chaves de criptografia de coluna, protegidas com a chave mestra de coluna armazenada no armazenamento de chaves.

Observação

CAPI é uma API legada, obsoleta. Se um KSP estiver disponível para o seu HSM, você deve usá-lo, em vez de um CSP/CAPI.

Um CSP deve suportar o algoritmo RSA a ser usado com Always Encrypted.

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

Criando chaves mestras de coluna num armazenamento de chaves usando CAPI/CSP

Uma chave mestra de coluna deve ser uma chave assimétrica (um par de chaves pública/privada), usando o algoritmo RSA. O comprimento de chave recomendado é 2048 ou superior.

Usando ferramentas específicas do HSM

Consulte a documentação do seu HSM.

Usando o SQL Server Management Studio (SSMS)

Consulte Provisionar chaves sempre criptografadas usando o SQL Server Management Studio.

Disponibilizando chaves CNG para aplicativos e usuários

Consulte a documentação do seu HSM e CSP para saber como configurar o CSP em uma máquina e como conceder aos aplicativos e usuários acesso ao HSM.

Próximos passos

Ver também