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, que exibe os dados para os usuários, e na camada de armazenamento, que armazena fisicamente os dados.

Por padrão, na camada de armazenamento, o Google Cloud 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. Se você mesmo estiver armazenando e criptografando dados, poderá usar o Cloud Key Management Service como seu keystore central na camada de aplicativos, que é o foco deste tema.

O Cloud KMS armazena chaves em uma hierarquia de chaves projetada para facilitar o acesso a recursos na hierarquia de chaves regidos pelo gerenciamento de identidade e acesso. 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. Uma única KEK é usada para proteger muitas DEKs. Com este modelo, objetos de dados individuais têm cada um 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. Portanto, o tamanho máximo de entrada de dados para as funções Encrypt e Decrypt é de 64 KiB. No entanto, para dados que você sabe que não se aproximam desse limite, use o Cloud KMS para criptografar e descriptografar 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. A KEK nunca sai do Cloud KMS.

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. Para as práticas recomendadas, use a cifra do Padrão de criptografia avançada de 256 bits (AES-256) no modo de contador Galois (GCM).

  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 encapsulada, identificar a KEK que uniu essa DEK, usar a KEK para desunir a DEK e, em seguida, usar a DEK desencapsulada para descriptografar os dados. A KEK nunca sai do Cloud KMS.

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.

Para conferir um exemplo de código que mostra como criptografar e descriptografar com a criptografia de envelope, consulte Criptografia do lado do cliente com Tink e Cloud KMS.

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

Vários produtos do Google Cloud são integrados ao Cloud KMS para oferecer suporte à funcionalidade de 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. Consulte Como usar o Cloud KMS com outros serviços para ver uma lista completa de produtos compatíveis com a CMEK.

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

Para dados armazenados em produtos do Google Cloud que não são compatíveis com CMEK, você pode implementar sua própria criptografia de camada de aplicativo. Isso requer a implementação da sua própria criptografia de envelope, conforme descrito acima, para que você armazene dados criptografados localmente no Google Cloud. Da mesma maneira, use o Cloud KMS 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 fornecidas pelo cliente

Com o CSEK, você fornece sua própria chave AES-256 para servir como KEK, e sua chave protege as DEKs que protegem seus dados. Sua chave CSEK é protegida por uma camada adicional, usando uma chave do Cloud KMS.

Agora que você pode importar chaves para o Cloud KMS, pode importá-las e usá-las com serviços ativados para CMEK em vez de depender da CSEK.