Criptografia simétrica bruta

Neste tópico, você verá como realizar as seguintes operações de chave simétrica bruta:

  • Criptografar conteúdo de texto simples ou binário localmente ou usando o Cloud KMS.
  • Descriptografar textos cifrados localmente ou usando o Cloud KMS.

Se você quiser fazer uma operação de chave simétrica normal (não bruta), consulte Como criptografar e descriptografar dados com uma chave simétrica.

A criptografia simétrica bruta permite criptografar e descriptografar dados localmente no local ou usando o Cloud KMS, além de mover dados criptografados entre diferentes bibliotecas e provedores de serviços sem precisar descriptografá-los primeiro. Essa funcionalidade depende da capacidade de acessar a chave no ponto de operação. Se você quiser usar os textos cifrados fora do Google Cloud, você deve usar uma chave importada, porque as chaves geradas no Cloud KMS não podem ser exportadas. Esses algoritmos de criptografia geram textos cifrados padrão que podem ser descriptografados por qualquer serviço de descriptografia padrão. Oferecemos suporte aos seguintes algoritmos de criptografia simétrica bruta:

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

Observe os seguintes pontos sobre esses algoritmos de criptografia bruta:

  • AES-GCM fornece autenticação com base nos dados autenticados adicionais (AAD) e gera uma tag de autenticação. Esse é o algoritmo de criptografia recomendado para uso. Os dados criptografados usando algoritmos AES-GCM não podem ser descriptografados sem o AAD fornecido.

  • AES-CBC exige que o tamanho do texto simples seja um múltiplo do tamanho do bloco (16 bytes). Se o texto simples não for um múltiplo do tamanho do bloco, preencha-o antes de criptografar. Caso contrário, a operação vai falhar com um erro indicando o problema.

  • AES-CBC e AES-CTR não são esquemas de criptografia autenticados, o que significa que eles podem apresentar maior risco de uso indevido acidental. Eles são oferecidos para oferecer suporte a necessidades legadas e de interoperabilidade e devem ser usados com cautela. Para evitar o uso indevido casual, o uso desses algoritmos de criptografia exige as seguintes permissões do IAM:

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

Funções exigidas

Para receber as permissões necessárias para usar a criptografia bruta, peça ao administrador para conceder as seguintes funções do IAM na sua chave:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.

Funções adicionais para algoritmos de criptografia bruta não autenticados

  • Para usar chaves AES-CBC: gerenciador de chaves AES-CBC brutas do Cloud KMS Expert (roles/cloudkms.expertRawAesCbc)
  • Para usar chaves AES-CTR: gerenciador de chaves AES-CTR brutas do Cloud KMS Expert (roles/cloudkms.expertRawAesCtr)

Antes de começar

  • Conceda as permissões de criptografia simétrica bruta mencionadas aos principais pretendidos.
  • Crie um keyring conforme descrito em Como criar keyrings.
  • Crie e importe uma chave de criptografia simétrica bruta conforme descrito em Como criar chaves e Como importar chaves.

Criptografar

gcloud

Para usar o Cloud KMS na linha de comando, primeiro instale ou faça upgrade para a versão mais recente da Google Cloud CLI.

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:

  • LOCATION: o local do Cloud KMS do keyring.

  • KEY_RING: o nome do keyring que contém a chave.

  • KEY_NAME: o nome da chave a ser usada para criptografia.

  • KEY_VERSION: o ID da versão da chave a ser usada para criptografia.

  • INPUT_FILE_PATH: o caminho do arquivo local para leitura dos dados de texto simples.

  • OUTPUT_FILE_PATH: o caminho do arquivo local para salvar a saída criptografada.

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

API

Estes exemplos usam curl como um cliente HTTP para demonstrar o uso da API. Para mais informações sobre controle de acesso, consulte Como acessar a API Cloud KMS.

Ao usar o JSON e a API REST, o conteúdo precisa ser codificado em Base64 antes de ser criptografado pelo Cloud KMS.

Use o método rawEncrypt para criptografar um dado 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:

  • PROJECT_ID: o ID do projeto que contém o keyring.
  • LOCATION: o local do Cloud KMS do keyring.
  • KEY_RING: o nome do keyring que contém a chave.
  • KEY_NAME: o nome da chave a ser usada para criptografia.
  • KEY_VERSION: o ID da versão da chave a ser usada para criptografia.
  • BASE64_ENCODED_INPUT: os dados de texto simples codificados em Base64 que você quer criptografar.
  • BASE64_ENCODED_AAD: os dados autenticados adicionais codificados em Base64 usados para fornecer garantias de integridade e autenticidade. Esse campo só se aplica aos algoritmos AES-GCM.

A saída é um objeto JSON que contém o texto cifrado criptografado e o vetor de inicialização associado como strings codificadas em Base64.

Decrypt

gcloud

Para usar o Cloud KMS na linha de comando, primeiro instale ou faça upgrade para a versão mais recente da Google Cloud CLI.

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:

  • LOCATION: o local do Cloud KMS do keyring.

  • KEY_RING: o nome do keyring que contém a chave.

  • KEY_NAME: o nome da chave a ser usada para criptografia.

  • KEY_VERSION: o ID da versão da chave a ser usada para criptografia.

  • INPUT_FILE_PATH: o caminho do arquivo local para o texto cifrado que você quer descriptografar.

  • OUTPUT_FILE_PATH: o caminho do arquivo local em que você quer salvar o texto simples descriptografado.

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

API

Estes exemplos usam curl como um cliente HTTP para demonstrar o uso da API. Para mais informações sobre controle de acesso, consulte Como acessar a API Cloud KMS.

Ao usar a API REST, o conteúdo precisa ser codificado em Base64 antes de ser descriptografado pelo Cloud KMS.

Para descriptografar os dados criptografados, 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:

  • PROJECT_ID: o ID do projeto que contém o keyring.
  • LOCATION: o local do Cloud KMS do keyring.
  • KEY_RING: o nome do keyring que contém a chave.
  • KEY_NAME: o nome da chave a ser usada para descriptografia.
  • KEY_VERSION: o ID da versão da chave a ser usada para descriptografia.
  • BASE64_ENCODED_DATA: o texto cifrado codificado em Base64 que você quer descriptografar.
  • BASE64_ENCODED_AAD: os dados autenticados adicionais codificados em Base64 usados quando os dados foram criptografados. Esse campo só se aplica aos algoritmos AES-GCM.
  • BASE64_ENCODED_IV: o vetor de inicialização codificado em Base64 usado quando os dados foram criptografados.

A saída é um objeto JSON que contém o texto simples descriptografado como uma string codificada em Base64.

A seguir