Criptografia simétrica bruta

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

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

Se, em vez disso, você quiser realizar uma operação de chave simétrica regular (não bruta), consulte Como criptografar e descriptografar dados com uma chave simétrica.

A criptografia simétrica bruta permite que você criptografe e descriptografe seus 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 criptografados fora do Google Cloud, use uma chave importada, porque as chaves geradas no Cloud KMS não podem ser exportadas. Esses algoritmos geram textos criptografados padrão que podem ser descriptografados por qualquer serviço de descriptografia padrão. Oferecemos suporte aos seguintes algoritmos brutos de criptografia simétrica:

  • 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 brutos de criptografia:

  • AES-GCM fornece autenticação com base nos outros dados autenticados (AAD, na sigla em inglês) e gera uma tag de autenticação, sendo o algoritmo de criptografia recomendado para uso. Os dados criptografados usando algoritmos AES-GCM não podem ser descriptografados sem os AAD fornecidos.

  • AES-CBC requer que o tamanho do texto simples seja um múltiplo do tamanho do bloco (16 bytes). Se o texto simples não for múltiplo do tamanho do bloco, preencha o texto simples antes de criptografá-lo. Caso contrário, a operação 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 ter maior risco de uso indevido acidental. Eles são oferecidos para atender às necessidades de legado e interoperabilidade e precisam ser usados com cautela. Para evitar uso indevido casual, o uso desses algoritmos de criptografia requer as seguintes permissões do IAM:

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

Funções exigidas

Para ter 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 sua chave:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Talvez você também consiga receber as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.

Papéis 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 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 keyring no Cloud KMS.

  • 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 em 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 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 keyring no Cloud KMS.
  • 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 extras codificados em base64 que são 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 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 keyring no Cloud KMS.

  • 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, 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 keyring no Cloud KMS.
  • 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 extras codificados em base64 que foram 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 que foi 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