Neste tópico, descrevemos como criptografar dados localmente e fazer upload deles para o Cloud Storage com o Tink e o Cloud Key Management Service (Cloud KMS). A Tink é uma biblioteca de criptografia de código aberto criada por criptografistas e engenheiros de segurança do Google.
Informações gerais
A criptografia no lado do cliente é qualquer criptografia realizada antes do envio dos dados para a nuvem. Ao usar a criptografia do lado do cliente, você é responsável por criar e gerenciar suas chaves e criptografar seus dados antes de enviá-los para a nuvem.
Neste tópico, você vai implementar a criptografia de envelope do lado do cliente com o Tink usando uma chave de criptografia no Cloud KMS.
Antes de começar
- Crie uma chave de criptografia simétrica do Cloud KMS para criptografia. Anote o URI da chave. Você precisará disso mais tarde.
- Instale o Tink para usar com o Cloud KMS.
- Crie um bucket no Cloud Storage para fazer upload dos dados criptografados.
Papéis obrigatórios
Para garantir que sua conta de serviço tenha as permissões
necessárias para usar as chaves do Cloud KMS com o Tink,
peça ao administrador para conceder à sua conta de serviço o papel de
criptografador/descriptografador de CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) na chave.
Para obter mais informações sobre como conceder papéis, consulte
Gerenciar o acesso.
Também é possível que o administrador conceda à sua conta de serviço as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.
Criptografia de envelope com o Tink
Na criptografia de envelope, a chave do Cloud KMS atua como uma chave de criptografia de chaves (KEK, na sigla em inglês). Ou seja, ela é usada para criptografar chaves de criptografia de dados (DEK, na sigla em inglês) que, por sua vez, são usadas para criptografar dados reais.
Depois de criar uma KEK no Cloud KMS, faça o seguinte para criptografar cada mensagem:
- Gere uma chave de criptografia de dados (DEK, na sigla em inglês) localmente.
- Use essa DEK localmente para criptografar a mensagem.
- Use o Cloud KMS para criptografar (unir) a DEK com a KEK.
- Armazene os dados criptografados e a DEK unida.
Não é preciso implementar esse processo de criptografia de envelope do zero quando usa o Tink.
Para usar a Tink na criptografia do envelope, forneça a ela um URI e credenciais importantes. O URI da chave aponta para a KEK no Cloud KMS, e as credenciais permitem que a Tink use a KEK. A Tink gera a DEK, criptografa os dados, os une e retorna um único texto criptografado com os dados criptografados e a DEK encapsulada.
O Tink suporta criptografia de envelope em Python, Java, C ++ e Go usando a criptografia autenticada com dados associados (AEAD, na sigla em inglês).
Conectar o Tink e o Cloud KMS
Para criptografar as DEKs geradas pelo Tink com sua KEK no Cloud KMS, você precisa conseguir o URI da sua KEK. No Cloud KMS, o URI da KEK tem o formato:
gcp-kms://projects/<PROJECT>/locations/<LOCATION>/keyRings/
<KEY RING>/cryptoKeys/<KEY NAME>/cryptoKeyVersions/<VERSION>
Consulte Como conseguir um ID de recurso do Cloud KMS para ver detalhes sobre como acessar o caminho para a chave.
Inicializar o Tink e criptografar dados
O Tink usa primitivos (elementos básicos de criptografia que gerenciam os detalhes dos algoritmos subjacentes) para que você possa executar tarefas com segurança. Cada primário oferece uma API que processa uma tarefa específica. Aqui estamos usando AEAD, então usamos o primitivo TAD AEAD.
Python
Python
Para saber como instalar e usar a biblioteca de cliente do Cloud KMS, consulte Bibliotecas de cliente do Cloud KMS.
Java
Java
Para saber como instalar e usar a biblioteca de cliente do Cloud KMS, consulte Bibliotecas de cliente do Cloud KMS.
Para mais informações sobre as interfaces e as primitivas compatíveis com a Tink, consulte a página Primeiros passos da Tink.
A seguir
- Saiba mais sobre o Tink.
- Saiba como usar a criptografia do lado do cliente com o Cloud SQL.