Criptografia simétrica bruta

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

  • Criptografe texto ou conteúdo 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 e mover dados criptografados entre diferentes bibliotecas e provedores de serviços sem precisar descriptografar primeiro. Essa funcionalidade depende da capacidade de acessar a chave no ponto de operação. Se você quiser usar os textos criptografados fora do Google Cloud, use uma chave importada, porque as chaves geradas no Cloud KMS não podem ser exportadas. Esses algoritmos de criptografia geram textos criptografados 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:

  • O AES-GCM fornece autenticação com base nos dados autenticados adicionais (AAD) e gera uma tag de autenticação. Ele é o algoritmo de criptografia recomendado para uso. Os dados criptografados com 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 texto simples antes de criptografá-lo. 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 um risco maior de uso indevido acidental. Eles são oferecidos para atender às necessidades legados e de interoperabilidade e devem ser usados com cautela. Para evitar o uso indevido, 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 a você os seguintes papéis do IAM na 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 por meio de papéis personalizados ou de outros papéis predefinidos.

Papéis adicionais para algoritmos de criptografia bruta não autenticada

  • 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 importar chaves.

Encrypt

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 ler os 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 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:

  • 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. Este campo só se aplica aos algoritmos AES-GCM.

A saída é um objeto JSON contendo o texto 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 criptografado 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 criptografado codificado em base64 que você quer descriptografar.
  • BASE64_ENCODED_AAD: os dados autenticados adicionais codificados em base64 que foram usados quando os dados foram criptografados. Esse campo se aplica apenas 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 contendo o texto simples descriptografado como uma string codificada em base64.

A seguir