Criptografia de envelope

Introdução

Armazenar e criptografar dados na escala do Google requer o uso de um serviço central de gerenciamento de chaves criptográficas com diversas camadas de chaves para os dados criptografados. A criptografia de envelope é um exemplo de processo com várias camadas de chaves. Ela criptografa uma chave com outra chave.

Os dados são criptografados na camada do aplicativo, onde eles são exibidos para os usuários, e na camada de armazenamento, onde eles são armazenados fisicamente.

Por padrão, na camada de armazenamento, o Google Cloud Platform (GCP) criptografa o conteúdo do cliente armazenado em repouso usando criptografia de envelope, com o serviço de gerenciamento de chaves interno do Google como o keystore central. Quando estiver armazenando e criptografando os dados, use o Cloud KMS como o keystore central na camada do aplicativo, que é o foco desse tópico.

O Cloud KMS armazena as chaves em uma hierarquia projetada para facilitar o uso, com acesso aos recursos na hierarquia de chaves regidos pelo Cloud IAM. Veja a seguir os principais níveis de uma hierarquia de chaves do Cloud KMS:

Recursos

Saiba mais sobre a hierarquia das chaves na hierarquia de objetos.

Chaves de criptografia de dados

A chave usada para criptografar os próprios dados é chamada de chave de criptografia de dados (DEK, na sigla em inglês).

Veja a seguir as práticas recomendadas para o gerenciamento das DEKs:

  • Gere as DEKs localmente.
  • Quando armazenadas, as DEKs sempre precisam ser criptografadas em repouso.
  • Para facilitar o acesso, armazene a DEK perto dos dados criptografados por ela.
  • Gere uma nova DEK cada vez que você gravar os dados. Isso significa que você não precisa fazer rotação das DEKs.
  • Não use a mesma DEK para criptografar dados de dois usuários diferentes.
  • Use um algoritmo forte, como o Padrão de criptografia avançada (AES, na sigla em inglês) de 256 bits no Modo de contador Galois (GCM, na sigla em inglês).

Chaves de criptografia de chaves

A DEK é criptografada (ou seja, unida) por uma chave de criptografia de chaves (KEK, na sigla em inglês). O processo de criptografia de uma chave com outra chave é conhecido como criptografia de envelope.

Veja a seguir as práticas recomendadas para o gerenciamento das KEKs:

  • Armazene as KEKs de modo centralizado.

  • Configure a granularidade das DEKs criptografadas pelas KEKs com base nos casos de uso. Por exemplo, pense em uma carga de trabalho que requeira diversas DEKs para criptografar os blocos de dados da carga de trabalho. Use uma única KEK para unir todas as DEKs envolvidas na criptografia dessa carga de trabalho.

  • Faça rotações regulares das chaves e também após um incidente suspeito. Para saber mais, consulte rotação de chaves.

Como balancear DEKs e KEKs

Um número menor de KEKs do que DEKs e a utilização de um serviço central de gerenciamento de chaves tornam gerenciáveis o armazenamento e a criptografia de dados em grande escala. Um serviço central de chaves também é um ponto único para auditar e restringir o acesso a dados com mais facilidade.

Dependendo da situação e do volume de dados criptografados, convém usar um modelo semelhante. É possível usar uma única KEK para proteger muitas DEKs. Com esse modelo, cada objeto de dados individual tem a própria DEK, sem aumentar muito o volume de chaves armazenadas em um serviço central de gerenciamento de chaves.

O Cloud Key Management Service foi projetado para gerenciar KEKs e, portanto, o tamanho máximo de entrada de dados para as funções Encrypt e Decrypt é de 64 KiB. No entanto, no caso de dados que não se aproximarão desse limite, use o Cloud KMS para criptografar e descriptografar os dados diretamente.

Como criptografar dados usando a criptografia de envelope

O processo de criptografia de dados consiste em gerar uma DEK localmente, criptografar dados com ela, usar uma KEK para unir essa DEK e, depois, armazenar os dados criptografados e a DEK unida.

Fluxo de criptografia

Para criptografar dados usando criptografia de envelope:

  1. Gere uma DEK localmente. Faça isso com uma biblioteca de código aberto, como o OpenSSL, especificando um tipo de cifra e uma senha para gerar a chave. Especifique também um sal e um resumo para serem usados, se quiser.

  2. Use essa DEK localmente para criptografar seus dados.

    Como exemplo, use o OpenSSL conforme mostrado no exemplo em Como criptografar a mensagem. Uma prática recomendada é usar a cifra do Padrão de criptografia avançada de 256 bits (AES-256, na sigla em inglês) no modo de contador Galois (GCM, na sigla em inglês).

  3. Gere uma nova chave no Cloud KMS ou use uma existente, que atuará como KEK. Utilize essa chave para criptografar (unir) a DEK.

  4. Armazene os dados criptografados e a DEK unida.

Como descriptografar dados usando a criptografia de envelope

O processo da descriptografia de dados consiste em recuperar os dados criptografados e a DEK unida, recuperar a KEK que uniu essa DEK, usar a KEK para desunir a DEK a fim de usá-la na descriptografia dos dados.

Fluxo de descriptografia

Para descriptografar dados usando a criptografia de envelope:

  1. armazene os dados criptografados e a DEK vinculada;

  2. use a chave armazenada no Cloud KMS para desvincular a DEK criptografada;

  3. use a DEK de texto simples para descriptografar os dados. Se estiver usando o OpenSSL como anteriormente, consulte o exemplo em como descriptografar a mensagem.

Integração com os serviços do Google Cloud

Vários produtos do GCP são integrados ao Cloud KMS para oferecer suporte à funcionalidade chave de criptografia gerenciada pelo cliente (CMEK, na sigla em inglês). A CMEK com o Cloud KMS adiciona uma camada extra de proteção aos dados, fornece a você o controle das chaves de criptografia e aproveita os principais benefícios de gerenciamento do Cloud KMS.

Os produtos do GCP a seguir fornecem recursos da CMEK usando o Cloud KMS.

Produto Tópico do CMEK
BigQuery Como proteger dados com chaves do Cloud KMS
Cloud Build Como usar recursos criptografados
Cloud Dataproc Chaves de criptografia gerenciadas pelo cliente
Cloud Storage Como usar chaves de criptografia gerenciadas pelo cliente
Compute Engine Como proteger recursos com chaves do Cloud KMS

Outras opções para serviços do Google Cloud

Para dados armazenados em produtos do GCP que não oferecem suporte a CMEK, você pode implementar sua própria criptografia da camada de aplicativo. Isso requer a implementação da sua própria criptografia de envelope, conforme descrito acima, para que os dados criptografados localmente sejam armazenados no GCP. Você pode usar o Cloud KMS da mesma maneira para criptografar os dados armazenados em outros provedores de serviços em nuvem ou locais.

Além de oferecer suporte à funcionalidade CMEK, os produtos a seguir também são compatíveis com essa funcionalidade.

Produto Tópico da CSEK
Cloud Storage Chaves de criptografia fornecidas pelo cliente
Compute Engine Criptografar discos com chaves de criptografia fornecidas pelo cliente

Com a CSEK, você fornece uma chave AES-256 que substitui a KEK usada para proteger as DEKs que criptografam os dados no modelo de criptografia de envelope descrito acima. Como as chaves atualmente não podem ser importadas ou exportadas do Cloud KMS, você não usará uma chave dele como uma de criptografia fornecida pelo cliente. Proteja essa chave com mais uma camada, ou seja, com uma do Cloud KMS. Como descrito acima, é possível gerar uma DEK local para uso na CSEK e unir a DEK com uma KEK do Cloud KMS.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud KMS