Encriptação simétrica não processada

Este tópico mostra como realizar as seguintes operações de chaves simétricas não processadas:

  • Encriptar conteúdo de texto simples ou binário localmente ou através do Cloud KMS.
  • Desencriptar textos cifrados localmente ou através do Cloud KMS.

Se, em alternativa, quiser fazer uma operação de chave simétrica normal (não processada), consulte o artigo Encriptar e desencriptar dados com uma chave simétrica.

A encriptação simétrica não processada permite-lhe encriptar e desencriptar os seus dados localmente no local ou através do Cloud KMS, e mover dados encriptados entre diferentes bibliotecas e fornecedores de serviços sem ter de os desencriptar primeiro. Esta funcionalidade depende da capacidade de aceder à chave no ponto de funcionamento. Se quiser usar os textos cifrados fora do Google Cloud, tem de usar uma chave importada porque as chaves geradas no Cloud KMS não podem ser exportadas. Estes algoritmos de encriptação geram textos cifrados padrão que podem ser desencriptados por qualquer serviço de desencriptação padrão. Suportamos os seguintes algoritmos de encriptação simétricos brutos:

  • AES-128-GCM
  • AES-256-GCM
  • AES-128-CBC
  • AES-256-CBC
  • AES-128-CTR
  • AES-256-CTR

Tenha em atenção os seguintes pontos acerca destes algoritmos de encriptação não processados:

  • AES-GCM fornece autenticação com base nos dados autenticados adicionais (AAD) e gera uma etiqueta de autenticação. É o algoritmo de encriptação recomendado para utilização. Não é possível desencriptar dados encriptados com algoritmos AES-GCM sem o AAD fornecido.

  • AES-CBC requer que o tamanho do texto não cifrado seja um múltiplo do tamanho do bloco (16 bytes). Se o texto não cifrado não for um múltiplo do tamanho do bloco, preencha o texto não cifrado antes de o encriptar. Caso contrário, a operação falha com um erro que indica o problema.

  • AES-CBC e AES-CTR não são esquemas de encriptação autenticados, o que significa que podem acarretar um maior risco de utilização indevida acidental. São oferecidas para suportar necessidades de interoperabilidade e sistemas antigos, e devem ser usadas com precaução. Para evitar a utilização indevida ocasional, a utilização destes algoritmos de encriptação requer as seguintes autorizações de IAM:

    • cloudkms.cryptoKeyVersions.manageRawAesCbcKeys para AES-CBC.
    • cloudkms.cryptoKeyVersions.manageRawAesCtrKeys para AES-CTR.

Funções necessárias

Para receber as autorizações de que precisa para usar a encriptação não processada, peça ao seu administrador que lhe conceda as seguintes funções de IAM na sua chave:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Funções adicionais para algoritmos de encriptação não processados não autenticados

  • Para usar chaves AES-CBC: Cloud KMS Expert Raw AES-CBC Key Manager (roles/cloudkms.expertRawAesCbc)
  • Para usar chaves AES-CTR: Cloud KMS Expert Raw AES-CTR Key Manager (roles/cloudkms.expertRawAesCtr)

Antes de começar

  • Conceda as autorizações de encriptação simétrica não processada mencionadas aos principais pretendidos.
  • Crie um conjunto de chaves conforme descrito na criação de conjuntos de chaves.
  • Crie e importe uma chave de encriptação simétrica não processada, conforme descrito na secção Criar chaves e Importar chaves.

Encriptar

gcloud

Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.

gcloud kms raw-encrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --plaintext-file INPUT_FILE_PATH \
    --ciphertext-file OUTPUT_FILE_PATH

Substitua o seguinte:

  • LOCATION: a localização do Cloud KMS do conjunto de chaves.

  • KEY_RING: o nome do conjunto de chaves que contém a chave.

  • KEY_NAME: o nome da chave a usar para a encriptação.

  • KEY_VERSION: o ID da versão da chave a usar para encriptação.

  • INPUT_FILE_PATH: o caminho do ficheiro local para ler os dados de texto simples.

  • OUTPUT_FILE_PATH: o caminho do ficheiro local para guardar o resultado encriptado.

Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help.

API

Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.

Quando usa JSON e a API REST, o conteúdo tem de ser codificado em base64 antes de poder ser encriptado pelo Cloud KMS.

Use o método rawEncrypt para encriptar dados de texto simples:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawEncrypt" \
  --request "POST" \
  --header "authorization: Bearer TOKEN" \
  --header "content-type: application/json" \
  --data '{"plaintext": "BASE64_ENCODED_INPUT", "additionalAuthenticatedData": "BASE64_ENCODED_AAD"}'

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto que contém o conjunto de chaves.
  • LOCATION: a localização do Cloud KMS do conjunto de chaves.
  • KEY_RING: o nome do conjunto de chaves que contém a chave.
  • KEY_NAME: o nome da chave a usar para a encriptação.
  • KEY_VERSION: o ID da versão da chave a usar para encriptação.
  • BASE64_ENCODED_INPUT: os dados de texto simples codificados em base64 que quer encriptar.
  • BASE64_ENCODED_AAD: os dados autenticados adicionais codificados em base64 que são usados para fornecer garantias de integridade e autenticidade. Este campo aplica-se apenas aos algoritmos AES-GCM.

O resultado é um objeto JSON que contém o texto encriptado e o vetor de inicialização associado como strings codificadas em Base64.

Desencriptar

gcloud

Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.

gcloud kms raw-decrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --ciphertext-file INPUT_FILE_PATH \
    --plaintext-file OUTPUT_FILE_PATH

Substitua o seguinte:

  • LOCATION: a localização do Cloud KMS do conjunto de chaves.

  • KEY_RING: o nome do conjunto de chaves que contém a chave.

  • KEY_NAME: o nome da chave a usar para a encriptação.

  • KEY_VERSION: o ID da versão da chave a usar para encriptação.

  • INPUT_FILE_PATH: o caminho do ficheiro local para o texto cifrado que quer descifrar.

  • OUTPUT_FILE_PATH: o caminho do ficheiro local onde quer guardar o texto simples descifrado.

Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help.

API

Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.

Quando usa a API REST, o conteúdo tem de ser codificado em base64 antes de poder ser desencriptado pelo Cloud KMS.

Para desencriptar os dados encriptados, use o método rawDecrypt:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawDecrypt" \
  --request "POST" \
  --header "authorization: Bearer TOKEN" \
  --header "content-type: application/json" \
  --data '{"ciphertext": "BASE64_ENCODED_DATA", "additionalAuthenticatedData": "BASE64_ENCODED_AAD", "initializationVector": "BASE64_ENCODED_IV"}'

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto que contém o conjunto de chaves.
  • LOCATION: a localização do Cloud KMS do conjunto de chaves.
  • KEY_RING: o nome do conjunto de chaves que contém a chave.
  • KEY_NAME: o nome da chave a usar para a desencriptação.
  • KEY_VERSION: o ID da versão da chave a usar para a desencriptação.
  • BASE64_ENCODED_DATA: o texto cifrado codificado em base64 que quer descifrar.
  • BASE64_ENCODED_AAD: os dados autenticados adicionais codificados em base64 que foram usados quando os dados foram encriptados. Este campo aplica-se apenas aos algoritmos AES-GCM.
  • BASE64_ENCODED_IV: o vetor de inicialização codificado em base64 que foi usado quando os dados foram encriptados.

O resultado é um objeto JSON que contém o texto simples descifrado como uma string codificada em base64.

O que se segue?