Este tópico fornece informações sobre a criação e a utilização de uma chave para encriptação assimétrica através de uma chave RSA. Se quiser usar chaves assimétricas para criar e validar assinaturas, consulte o artigo Criar e validar assinaturas digitais. Se quiser usar chaves simétricas para encriptação e desencriptação, consulte o artigo Encriptar e desencriptar dados.
A encriptação assimétrica usa a parte da chave pública da chave assimétrica e a desencriptação usa a parte da chave privada da chave. O Cloud Key Management Service oferece funcionalidade para obter a chave pública e funcionalidade para desencriptar texto cifrado que foi encriptado com a chave pública. O Cloud KMS não permite o acesso direto à chave privada.
Antes de começar
Este tópico fornece exemplos que são executados na linha de comandos. Para simplificar a utilização dos exemplos, use a Cloud Shell. O exemplo de encriptação usa o OpenSSL, que está pré-instalado no Cloud Shell.
Crie uma chave assimétrica com o objetivo da chave de
ASYMMETRIC_DECRYPT
. Para ver que algoritmos são suportados para o objetivo da chaveASYMMETRIC_DECRYPT
, consulte o artigo Algoritmos de encriptação assimétricos. Não pode seguir este procedimento com uma chave com o objetivo deASYMMETRIC_SIGN
.Se for usar a linha de comandos, instale o OpenSSL se ainda não o tiver. Se usar o Cloud Shell, o OpenSSL já está instalado.
- Utilizadores do macOS: a versão do OpenSSL instalada no macOS não suporta as flags usadas para desencriptar dados neste tópico. Para seguir estes passos no macOS, instale o OpenSSL a partir do Homebrew.
Controlo de acesso à chave
Para um utilizador ou um serviço que vai obter a chave pública, conceda a autorização
cloudkms.cryptoKeyVersions.viewPublicKey
na chave assimétrica. A chave pública é necessária para encriptar dados.Para um utilizador ou um serviço que desencripta dados que foram encriptados com a chave pública, conceda a autorização
cloudkms.cryptoKeyVersions.useToDecrypt
na chave assimétrica.
Saiba mais acerca das autorizações e funções no Cloud KMS em Autorizações e funções.
Encripte dados
Para encriptar dados com uma chave de encriptação assimétrica, obtenha a chave pública e use-a para encriptar os dados.
gcloud
Este exemplo requer que o OpenSSL esteja instalado no seu sistema local.
Transfira a chave pública
Transfira a 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 conjunto de chaves onde a chave está localizada. Substitua location pela localização do Cloud KMS do conjunto de chaves. Substitua public-key-path pela localização onde guardar a chave pública no sistema local.
Encripte dados
Encriptar dados através da chave pública que acabou de transferir e guardar o resultado num ficheiro:
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 nome do ficheiro a encriptar.
Substitua public-key-path pelo caminho e nome do ficheiro onde transferiu a chave pública.
Substitua encrypted-data-output-file pelo caminho e nome do ficheiro para guardar os dados encriptados.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Trusted Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
Desencriptar dados
Use o Cloud KMS para realizar a desencriptação.
gcloud
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
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 principal ou omita a flag --version
para detetar a versão automaticamente. Substitua key pelo nome
da chave a usar para a desencriptação. Substitua key-ring pelo nome do conjunto de chaves onde a chave vai estar localizada. Substitua location pela localização do Cloud KMS para o conjunto de chaves. Substitua file-path-with-encrypted-data e file-path-to-store-plaintext pelos caminhos dos ficheiros locais para ler os dados encriptados e guardar o resultado desencriptado.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help
.
Para apresentar o conteúdo do ficheiro desencriptado, abra-o no editor ou no terminal. Segue-se um exemplo que mostra o conteúdo do ficheiro através do comando cat
:
cat ./my-file.txt
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Trusted Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
API
Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.
Use o método
CryptoKeyVersions.asymmetricDecrypt
.
Resolução de problemas
incorrect key purpose: ASYMMETRIC_SIGN
Só pode desencriptar dados com uma chave com finalidade da chave ASYMMETRIC_DECRYPT
.
invalid parameter
ao desencriptar no macOS
A versão do OpenSSL instalada no macOS não suporta as flags usadas para desencriptar dados neste tópico. Para seguir estes passos no macOS, instale o OpenSSL a partir do Homebrew.
data too large for key size
O tamanho máximo da carga útil para a desencriptação RSA depende do tamanho da chave e do algoritmo de preenchimento. Todos os formatos de encriptação RSA usados pelo Cloud KMS usam OAEP, padronizado na RFC 2437. Para
referência rápida, os seguintes algoritmos suportam os seguintes tamanhos máximos de carga útil (maxMLen
, em bytes):
Algoritmo | Parâmetros | Comprimento 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 encriptação assimétrica não é recomendada para mensagens de comprimentos variáveis que podem ser superiores a estes limites. Em alternativa, considere usar a encriptação híbrida. O Tink é uma biblioteca criptográfica que usa esta abordagem.