Neste documento, fornecemos informações sobre como criar e usar uma chave para criptografia assimétrica usando uma chave RSA. Para usar chaves assimétricas a fim de criar e validar assinaturas, consulte Como criar e validar assinaturas digitais. Para usar chaves simétricas na criptografia e descriptografia, consulte Como criptografar e descriptografar dados.
A criptografia assimétrica usa a parte da chave pública da chave assimétrica, e a descriptografia usa a parte da chave privada. O Cloud Key Management Service oferece funcionalidade para recuperar a chave pública e a funcionalidade para descriptografar o texto criptografado com a chave pública. O Cloud KMS não permite acesso direto à chave privada.
Antes de começar
Este documento fornece exemplos que são executados na linha de comando. Para simplificar o uso dos exemplos, use o Cloud Shell. No exemplo de criptografia, usamos o OpenSSL, que é pré-instalado no Cloud Shell.
Criar uma chave assimétrica com a finalidade de chave de
ASYMMETRIC_DECRYPT. Para saber quais algoritmos são compatíveis com a finalidade de chaveASYMMETRIC_DECRYPT, consulte Algoritmos de criptografia assimétrica. Não é possível seguir este procedimento com uma chave com a finalidade deASYMMETRIC_SIGN.Se você for usar a linha de comando, instale o OpenSSL, caso ainda não o tenha. Se você usa o Cloud Shell, o OpenSSL já está instalado.
- Usuários do macOS: a versão do OpenSSL instalada no macOS não é compatível com as sinalizações usadas para descriptografar dados neste tópico. Para seguir estas etapas no macOS, instale o OpenSSL do Homebrew.
Controlar o acesso à chave
Para um usuário ou serviço que recuperará a chave pública, conceda a permissão
cloudkms.cryptoKeyVersions.viewPublicKeyna chave assimétrica. A chave pública é necessária para criptografar dados.Para um usuário ou serviço que vai descriptografar dados criptografados com a chave pública, conceda a permissão
cloudkms.cryptoKeyVersions.useToDecryptna chave assimétrica.
Para mais informações sobre permissões e papéis no Cloud KMS, consulte Permissões e papéis.
Criptografar dados
Para criptografar dados usando uma chave de criptografia assimétrica, recupere e use a chave pública.
gcloud
Para este exemplo, é preciso que o OpenSSL esteja instalado no sistema local.
Baixar chave pública
Faça o download da chave pública:
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--output-file PUBLIC_KEY_PATH
Substitua:
KEY_VERSION: a versão da chave do par de chaves assimétricas para o qual você quer fazer o download da chave pública.KEY_NAME: o nome da chave;KEY_RING: o keyring que contém a chave.LOCATION: o local do keyring.PUBLIC_KEY_PATH: o caminho em que você quer salvar a chave pública.
Criptografar dados
Criptografe os dados usando a chave pública que você acabou de fazer o download e salve a saída em um arquivo:
openssl pkeyutl -in INPUT_PATH \
-encrypt \
-pubin \
-inkey PUBLIC_KEY_PATH \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:HASH_SIZE \
-pkeyopt rsa_mgf1_md:HASH_SIZE \
> OUTPUT_PATH
Substitua:
INPUT_PATH: o caminho para os dados em texto simples que você quer criptografar.PUBLIC_KEY_PATH: o caminho para a chave pública.HASH_SIZE: o tamanho do hash, por exemplo,256para SHA256.OUTPUT_PATH: o caminho em que você quer salvar os dados criptografados.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
Go
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.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Cloud KMS para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instale o SDK do PHP do Cloud KMS.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
Descriptografar dados
Use o Cloud KMS para executar a descriptografia.
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 asymmetric-decrypt \
--version KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file INPUT_PATH \
--plaintext-file OUTPUT_PATH
Substitua:
KEY_VERSION: a versão da chave do par de chaves assimétricas que foi usada para criptografar os dados. É possível omitir a flag--versionpara detectar a versão automaticamente.KEY_NAME: o nome da chave usada para criptografar os dados.KEY_RING: o nome do keyring que contém a chave.LOCATION: o local do keyring.INPUT_PATH: o caminho para o arquivo que contém o texto criptografado.OUTPUT_PATH: o caminho para o arquivo que vai conter o texto simples.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com a sinalização --help.
Para exibir o conteúdo do arquivo descriptografado, abra-o em um editor de texto ou use
o comando cat para visualizá-lo em um terminal.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK do Cloud KMS para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Cloud KMS para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instale o SDK do PHP do Cloud KMS.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
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.
Solução de problemas
incorrect key purpose: ASYMMETRIC_SIGN
Só é possível descriptografar dados com uma chave com finalidade de chave ASYMMETRIC_DECRYPT.
invalid parameter ao descriptografar no macOS
A versão do OpenSSL instalada no macOS não é compatível com as flags usadas para descriptografar dados neste tópico. Para seguir estas etapas no macOS, instale o OpenSSL do Homebrew.
data too large for key size
O tamanho máximo do payload para a descriptografia RSA depende do tamanho da chave e do algoritmo de preenchimento. Todos os formatos de criptografia RSA usados pelo Cloud KMS usam OAEP, padronizado na RFC 2437. Como referência rápida, os algoritmos a seguir são compatíveis com os seguintes tamanhos máximos de payload.
| Algoritmo | Parâmetros | Tamanho máximo da mensagem (bytes) |
|---|---|---|
| RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | 190 |
| RSA_DECRYPT_OAEP_3072_SHA256 | k = 384; hLen = 32; | 318 |
| RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | 446 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | 382 |
A criptografia assimétrica não é recomendada para mensagens de diferentes tamanhos que podem ser maiores do que esses limites. Considere usar a criptografia híbrida. A Tink (em inglês) é uma biblioteca criptográfica que usa essa abordagem.