Neste tópico, 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
Neste tópico, mostramos 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 ver quais algoritmos são compatíveis com a finalidade de chaveASYMMETRIC_DECRYPT
, consulte Algoritmos de criptografia assimétrica. Você não pode seguir este procedimento com uma chave com a finalidade deASYMMETRIC_SIGN
.Para usar a linha de comando, instale o OpenSSL, se ainda não o tiver. 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 flags usadas para descriptografar dados neste tópico. Para seguir estas etapas no macOS, instale o OpenSSL a partir do Homebrew.
Controle de acesso à chave
Para um usuário ou serviço que recuperará a chave pública, conceda a permissão
cloudkms.cryptoKeyVersions.viewPublicKey
na chave assimétrica. A chave pública é necessária para criptografar dados.Para um usuário ou serviço que descriptografará dados criptografados com a chave pública, conceda a permissão
cloudkms.cryptoKeyVersions.useToDecrypt
na chave assimétrica.
Saiba mais sobre permissões e papéis no Cloud KMS em 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
Este exemplo requer a instalação do OpenSSL no sistema local.
Fazer o download da chave pública
Faça o download da chave pública:
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file public-key-path
Substitua key-version pela versão da chave que tem a chave pública. Substitua key pelo nome da chave. Substitua key-ring pelo nome do keyring em que a chave está localizada. Substitua location pelo local do Cloud KMS para o keyring. Substitua public-key-path pelo local para salvar a chave pública no sistema local.
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 cleartext-data-input-file \ -encrypt \ -pubin \ -inkey public-key-path \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256 \ > encrypted-data-output-file
Substitua cleartext-data-input-file pelo caminho e o nome do arquivo a ser criptografado.
Substitua public-key-path pelo caminho e nome do arquivo em que você fez o download da chave pública.
Substitua encrypted-data-output-file pelo caminho e o nome do arquivo para 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 instalar o SDK do Cloud KMS para PHP.
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 \ --keyring key-ring \ --location location \ --ciphertext-file file-path-with-encrypted-data \ --plaintext-file file-path-to-store-plaintext
Substitua key-version pela versão da chave ou omita a sinalização --version
para detectar a versão automaticamente. Substitua key pelo nome
da chave a ser usada para descriptografia. Substitua
key-ring pelo nome do keyring em que a chave estará localizada. Substitua location pelo local do Cloud KMS para o
keyring. Substitua file-path-with-encrypted-data e
file-path-to-store-plaintext pelos caminhos de arquivo locais para ler
os dados criptografados e salvar a saída
descriptografada.
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 no seu editor ou terminal. Veja um exemplo que mostra o conteúdo do arquivo usando o comando cat
:
cat ./my-file.txt
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 instalar o SDK do Cloud KMS para PHP.
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 instalado no macOS não é compatível com os sinalizadores usados para descriptografar dados neste tema. Para seguir estas etapas no macOS, instale o OpenSSL a partir 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 a OAEP, padronizados em RFC 2437 (em inglês). Como referência
rápida, os seguintes algoritmos são compatíveis com os seguintes tamanhos máximos de payload (maxMLen
, em bytes):
Algoritmo | Parâmetros | Tamanho máximo da mensagem |
---|---|---|
RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | maxMLen = 190 |
RSA_DECRYPT_OAEP_3072_SHA256 | k = 384; hLen = 32; | maxMLen = 318 |
RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | maxMLen = 446 |
RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | maxMLen = 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.