Neste tópico, descrevemos como criptografar dados localmente e fazer o upload deles no Cloud Storage com o SDK criptográfico de código aberto Tink, do Google Cloud, e o Cloud Key Management Service (KMS).
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 próprias chaves de criptografia e usar suas próprias ferramentas para criptografar dados antes de enviá-los para a nuvem.
Os dados que você criptografa do lado do cliente são enviados para a nuvem em estado criptografado. Para usar a criptografia do lado do cliente, você tem as seguintes opções:
- Usar uma chave de criptografia armazenada no Cloud Key Management Service.
- Usar uma chave de criptografia armazenada localmente no aplicativo.
Neste tópico, você criará uma chave de criptografia no Cloud Key Management Service e implementará a criptografia de envelope usando o Tink, o SDK criptográfico de código aberto do Google.
Antes de começar
- Crie uma chave de criptografia simétrica do Cloud Key Management Service para criptografia. Anote o URI da chave, que será usado posteriormente.
- Instale o Tink para usá-lo com o Cloud Key Management Service.
- Crie um bucket no Cloud Storage para fazer upload dos dados criptografados.
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.
Em vez de implementar as etapas acima para a criptografia de envelope do zero, você usará o Tink.
Para criptografar dados com a criptografia de envelope do Tink, você fornece ao Tink um URI de chave que aponta para a KEK no Cloud KMS, e credenciais que permitem que o Tink use a KEK. O Tink gera a DEK, criptografa os dados, une a DEK e retorna um único texto criptografado com os dados criptografados e a DEK unida.
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 ter 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.
Para fornecer acesso à chave no Cloud KMS, é necessário conceder à
conta de serviço usada pelo aplicativo o
papel cloudkms.cryptoKeyEncrypterDecrypter
. Para mais informações sobre papéis, consulte
Permissão e papéis. Na gcloud, use o seguinte comando:
gcloud kms keys add-iam-policy-binding key \
--keyring key-ring \
--location location \
--member serviceAccount:service-account-name@example.domain.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter
Inicializar o Tink e criptografar dados
O Tink usa primitivos, elementos criptográficos que gerenciam os detalhes dos algoritmos subjacentes, para que os usuários possam realizar tarefas com segurança. Cada primitivo oferece uma API que processa uma tarefa específica. Aqui, usamos o AEAD. Portanto, usaremos o primitivo AEAD Tink.
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.
Consulte Como o Tink funciona para mais informações sobre os primitivos suportados e as interfaces deles.
A seguir
- Saiba mais sobre o Tink.
- Saiba como usar a criptografia do lado do cliente com o Cloud SQL.