Encriptação de envelope

Introdução

O armazenamento e a encriptação de dados à escala da Google requerem a utilização de um serviço de gestão de chaves criptográficas central com várias camadas de chaves para os dados encriptados. Um exemplo de várias camadas de chaves é a encriptação de envelope, que é o processo de encriptação de uma chave com outra chave.

Pode encriptar dados na camada de aplicação, que é responsável por apresentar dados aos utilizadores, e na camada de armazenamento, que fornece o armazenamento físico de dados.

Por predefinição, na camada de armazenamento,o Google Cloud Google Cloud encripta o conteúdo do cliente armazenado em repouso através da encriptação em envelope, com o serviço de gestão de chaves interno da Google como o arquivo de chaves central. Se estiver a armazenar e encriptar dados por si, pode usar o Cloud Key Management Service como o seu repositório de chaves central na camada de aplicação, que é o foco deste tópico.

O Cloud KMS armazena chaves numa hierarquia de chaves concebida para facilitar o acesso aos recursos na hierarquia de chaves regidos pela gestão de identidade e de acesso. A imagem seguinte mostra os principais níveis de uma hierarquia de chaves do Cloud KMS:

Recursos

Saiba mais acerca da hierarquia principal em hierarquia de objetos.

Chaves de encriptação de dados

A chave usada para encriptar os dados propriamente dita chama-se chave de encriptação de dados (DEK).

Seguem-se as práticas recomendadas para gerir DEKs:

  • Gere DEKs localmente.
  • Quando armazenadas, certifique-se sempre de que as DEKs estão encriptadas em repouso.
  • Para facilitar o acesso, armazene a DEK perto dos dados que encripta.
  • Gerar uma nova DEK sempre que escreve os dados. Isto significa que não tem de rodar as DEKs.
  • Não use a mesma DEK para encriptar dados de dois utilizadores diferentes.
  • Use um algoritmo forte, como o Advanced Encryption Standard (AES) de 256 bits no modo de contador de Galois (GCM).

Chaves de encriptação de chaves

A DEK é encriptada (também conhecida como envolvida) por uma chave de encriptação de chaves (KEK). O processo de encriptação de uma chave com outra chave é conhecido como encriptação de envelope.

Seguem-se as práticas recomendadas para gerir KEKs:

  • Armazene KEKs de forma centralizada.

  • Definir a granularidade das DEKs que encriptam com base no respetivo exemplo de utilização. Por exemplo, considere uma carga de trabalho que requer várias DEKs para encriptar os blocos de dados da carga de trabalho. Pode usar uma única KEK para encapsular todas as DEKs responsáveis pela encriptação dessa carga de trabalho.

  • Alterne as chaves regularmente e também após um incidente suspeito. Para saber mais, consulte o artigo sobre a rotação de chaves.

Equilibrar DEKs e KEKs

Ter um número inferior de KEKs do que DEKs e usar um serviço de gestão de chaves centralizado torna o armazenamento e a encriptação de dados em grande escala mais geríveis. Um serviço de chaves central também é um ponto único para auditar e restringir mais facilmente o acesso aos dados.

Consoante a sua situação e o volume de dados que está a encriptar, pode optar por usar um modelo semelhante. Pode usar uma única KEK para proteger muitas DEKs; este modelo permite que os objetos de dados individuais tenham a sua própria DEK sem aumentar significativamente o volume de chaves armazenadas num serviço de gestão de chaves central.

O Cloud Key Management Service foi concebido para gerir KEKs e, por isso, o tamanho máximo de entrada de dados para as funções Encrypt e Decrypt é de 64 KiB. No entanto, para dados que sabe que não se aproximam desse limite, pode usar o Cloud KMS para encriptar e desencriptar dados diretamente.

Como encriptar dados através da encriptação de envelope

O processo de encriptação de dados consiste em gerar uma DEK localmente, encriptar dados com a DEK, usar uma KEK para encapsular a DEK e, em seguida, armazenar os dados encriptados e a DEK encapsulada. A KEK nunca sai do Cloud KMS.

Fluxo de encriptação

Para encriptar dados através da encriptação de envelope:

  1. Gere uma DEK localmente. Pode fazê-lo com uma biblioteca de código aberto, como o OpenSSL, especificando um tipo de cifra e uma palavra-passe a partir da qual gerar a chave. Se quiser, também pode especificar um valor de salt e um resumo a usar.

  2. Use esta DEK localmente para encriptar os seus dados.

    Por exemplo, pode usar o OpenSSL, como mostrado no exemplo de encriptação da mensagem. Para uma prática recomendada, use a cifra do padrão de encriptação avançada (AES-256) de 256 bits no modo de contador de Galois (GCM).

  3. Gere uma nova chave no Cloud KMS ou use uma chave existente, que vai funcionar como a KEK. Use esta chave para encriptar (envolver) a DEK.

  4. Armazenar os dados encriptados e a DEK envolvida.

Como desencriptar dados através da encriptação de envelope

O processo de desencriptação de dados consiste em obter os dados encriptados e a DEK envolvida, identificar a KEK que envolveu a DEK, usar a KEK para desencapsular a DEK e, em seguida, usar a DEK desencapsulada para desencriptar os dados. A KEK nunca sai do Cloud KMS.

Fluxo de desencriptação

Para desencriptar dados através da encriptação de envelope:

  1. Recupere os dados encriptados e a DEK envolvida.

  2. Use a chave armazenada no Cloud KMS para abrir a DEK encriptada.

  3. Use a DEK de texto simples para desencriptar os dados encriptados. Se usar o OpenSSL como anteriormente, consulte o exemplo de desencriptação da mensagem.

Para ver um exemplo de código que mostra como encriptar e desencriptar com a encriptação de envelope, consulte o artigo Encriptação do lado do cliente com o Tink e o Cloud KMS.

Integração com Google Cloud serviços

Vários Google Cloud produtos estão integrados com o Cloud KMS para suportar a funcionalidade de chave de encriptação gerida pelo cliente (CMEK). As CMEK com o Cloud KMS adicionam uma camada adicional de proteção aos seus dados, oferecem-lhe o controlo das suas chaves de encriptação e tiram partido das vantagens da gestão de chaves do Cloud KMS. Consulte o artigo Usar o Cloud KMS com outros serviços para ver uma lista completa dos produtos que suportam a CMEK.

Outras opções para Google Cloud serviços

Para dados armazenados em Google Cloud produtos que não suportam CMEK, pode implementar a sua própria encriptação na camada de aplicação. Isto requer a implementação da sua própria encriptação de envelope, conforme descrito acima, para que armazene dados encriptados localmente no Google Cloud. É também desta forma que pode usar o Cloud KMS para encriptar dados que armazena noutros fornecedores de serviços na nuvem ou nas instalações.

Além de suportarem CMEK, os seguintes produtos suportam a funcionalidade de chave de encriptação fornecida pelo cliente (CSEK).

Produto Tópico CSEK
Cloud Storage Chaves de encriptação fornecidas pelos clientes
Compute Engine Encriptar discos com chaves de encriptação fornecidas pelos clientes

Com as CSEK, fornece a sua própria chave AES-256 para servir como KEK, e a sua chave protege as DEKs que protegem os seus dados. A sua chave CSEK está protegida por uma camada de proteção adicional, através de uma chave do Cloud KMS.

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