Criptografia simétrica bruta

Neste tópico, mostramos como realizar 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 fazer 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 criptografar e descriptografar seus dados localmente no local ou usando o Cloud KMS e mover dados criptografados entre bibliotecas e provedores de serviços diferentes sem precisar descriptografá-los primeiro. Essa funcionalidade depende da capacidade de acessar a chave no ponto 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 às seguintes informações algoritmos de criptografia:

  • 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:

  • 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. Dados criptografados com algoritmos do AES-GCM não podem ser descriptografados sem os AAD fornecidos.

  • AES-CBC exige que o tamanho do texto simples seja um múltiplo 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 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. São para dar suporte às necessidades legadas e de interoperabilidade e deve ser usada com cuidado. Para evitar uso indevido casual, usar estes algoritmos de criptografia. requer as seguintes permissões do IAM:

    • cloudkms.cryptoKeyVersions.manageRawAesCbcKeys para AES-CBC.
    • cloudkms.cryptoKeyVersions.manageRawAesCtrKeys para 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 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 brutos 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 na criação de keyrings.
  • Crie e importe uma chave de criptografia simétrica bruta, conforme descrito em Como criar de chaves e de importação.

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 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 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 JSON e a API REST, o conteúdo precisa ser codificado em base64 antes de poder criptografados 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 chaveiro.
  • 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: o texto simples codificado em base64 os dados que você quer criptografar.
  • BASE64_ENCODED_AAD: o elemento adicional codificado em base64 dados autenticados que são usados para fornecer integridade e autenticidade de segurança. Esse campo só se aplica aos algoritmos do 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 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 chaveiro.
  • 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: o elemento adicional codificado em base64 dados autenticados que foram usados quando os dados foram criptografados. Este campo só se aplica aos algoritmos AES-GCM.
  • BASE64_ENCODED_IV: a inicialização codificada em base64 vetor que foi usado quando os dados foram criptografados.

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

A seguir