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 escrita por criptógrafos e engenheiros de segurança do Google.
Visão geral
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 de criptografia e criptografar seus dados antes de enviá-los à nuvem.
Neste tópico, você implementará a criptografia de envelope do lado do cliente com a 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 usá-la com o Cloud KMS.
- Crie um bucket no Cloud Storage para fazer upload dos dados criptografados.
Funções exigidas
Para garantir que sua conta de serviço tenha as permissões
necessárias para usar chaves do Cloud KMS com a Tink,
peça ao administrador para conceder à sua conta de serviço o
papel do IAM de Criptografador/Descriptografador de CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) na sua chave.
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
O administrador também pode conceder à conta de serviço as permissões necessárias por meio de papéis personalizados ou de 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, elas são usadas para criptografar chaves de criptografia de dados (DEK), que, por sua vez, são usadas para criptografar dados reais.
Depois de criar uma KEK no Cloud KMS, para criptografar cada mensagem, você precisa:
- 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.
Você não precisa implementar esse processo de criptografia de envelope do zero ao usar a Tink.
Para usar a Tink com a criptografia de envelope, forneça a ela um URI e credenciais de chave. O URI da chave aponta para a KEK no Cloud KMS, e as credenciais permitem que a Tink use a KEK. O Tink gera a DEK, criptografa os dados, encapsula a DEK 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 a KEK no Cloud KMS, é necessário conseguir o URI da 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
A Tink usa primitivos, elementos básicos criptográficos que gerenciam os detalhes dos algoritmos, 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 Tink AEAD.
Python
Python
Para saber como instalar e usar a biblioteca de cliente do Cloud KMS, consulte Bibliotecas de cliente do Cloud KMS.
Para autenticar no Cloud KMS, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Java
Para saber como instalar e usar a biblioteca de cliente do Cloud KMS, consulte Bibliotecas de cliente do Cloud KMS.
Para autenticar no Cloud KMS, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para mais informações sobre os primitivos e interfaces compatíveis com o Tink, consulte a página Primeiros passos do Tink.
A seguir
- Saiba mais sobre o Tink.
- Saiba como usar a criptografia do lado do cliente com o Cloud SQL.