Criptografar grandes volumes de dados diretamente pelo KMS aumenta a latência de rede e envia informações sensíveis para fora da sua máquina. A criptografia de envelope resolve esse problema ao manter a criptografia dos dados localmente: o KMS gera e protege uma chave de dados, e sua aplicação usa essa chave para criptografar os dados na própria máquina, sem enviá-los ao KMS.
Este tópico aborda a criptografia de envelope em suas próprias aplicações. Para criptografia no lado do servidor em serviços da Alibaba Cloud, consulte Integração com o KMS .
Tipos de chave aplicáveis
Use chaves protegidas por software e chaves protegidas por hardware para criptografia de envelope nas suas aplicações.
Chaves de serviço e chaves mestras de cliente (CMKs) usadas como chaves padrão também são compatíveis com criptografia de envelope, mas restringem-se à criptografia no lado do servidor em serviços da Alibaba Cloud — não as utilize para criptografia em suas próprias aplicações. As chaves protegidas por software e as protegidas por hardware funcionam tanto para criptografia no lado do servidor nos serviços da Alibaba Cloud quanto para criptografia em suas aplicações.
Como funciona
A segurança dos dados criptografados depende da proteção da chave de dados capaz de descriptografá-los. Criptografar essa chave com uma chave separada do KMS e armazenar a versão criptografada junto aos dados é a melhor prática implementada pela criptografia de envelope.
Fluxo de criptografia

-
Chame GenerateDataKey para gerar uma chave de dados. Passe os seguintes parâmetros:
Parâmetro
Descrição
KeyIdID ou alias da chave do KMS a ser usada
NumberOfBytesTamanho da chave de dados em bytes. Defina como pelo menos 24 bytes. Para AES (Advanced Encryption Standard), use 16, 24 ou 32 bytes. Para 3DES (Triple Data Encryption Standard), use 16 ou 24 bytes.
-
Receba a chave de dados do KMS. A resposta contém três campos:
AvisoMantenha o texto cifrado da chave de dados seguro. Se você perdê-lo, a descriptografia será impossível e seus dados não poderão ser recuperados.
Campo
Descrição
Texto simples da chave de dados
Usado para criptografar dados localmente
Texto cifrado da chave de dados
O texto simples criptografado com sua chave do KMS no modo GCM (Galois/Counter Mode). Armazene-o junto ao texto cifrado dos dados.
Parâmetros de criptografia
O algoritmo de criptografia e o vetor de inicialização (IV) usados para gerar o texto cifrado da chave de dados
Use o texto simples da chave de dados para criptografar os dados localmente com uma biblioteca ou módulo criptográfico que atenda aos requisitos de linguagem e conformidade. Destrua o texto simples da chave de dados assim que possível após a conclusão da criptografia.
Armazene o texto cifrado dos dados juntamente com o texto cifrado da chave de dados, o identificador da chave do KMS e os parâmetros de criptografia.
Fluxo de descriptografia

Leia o texto cifrado dos dados armazenado, o texto cifrado da chave de dados, o identificador da chave do KMS e os parâmetros de criptografia.
Chame Decrypt com o texto cifrado da chave de dados e os parâmetros de criptografia para obter o texto simples da chave de dados do KMS.
Use o texto simples da chave de dados para descriptografar o texto cifrado dos dados localmente.
Casos de uso
Criptografia de vários arquivos com chaves independentes
O uso de uma única chave para um grande número de arquivos aumenta o risco de comprometimento dessa chave. Com a criptografia de envelope, cada arquivo recebe uma chave de dados exclusiva protegida por uma única chave do KMS, isolando a exposição individualmente.
Criptografia de grandes volumes de dados
Enviar grandes quantidades de dados ao KMS para criptografia pela rede adiciona latência e custo. A criptografia de envelope mantém o processo local — apenas a pequena chave de dados é trocada com o KMS — tornando viável criptografar conjuntos massivos, como dados completos de disco.
Limitações
A criptografia de envelope exige uma chave simétrica do KMS proveniente de uma instância de gerenciamento de chaves via software ou hardware. Especificações de chave compatíveis:
|
Tipo de instância |
Especificações compatíveis |
|
Gerenciamento de chaves por software |
Aliyun_AES_256 |
|
Gerenciamento de chaves por hardware |
Aliyun_AES_256, Aliyun_AES_192, Aliyun_AES_128, Aliyun_DES3_192 |
Pré-requisitos
Antes de começar, certifique-se de ter:
Uma chave simétrica do KMS. Consulte Chaves protegidas por software e Chaves protegidas por hardware
Um ponto de acesso à aplicação (AAP). Consulte Acessar uma instância do KMS usando um AAP
O SDK da Instância do KMS instalado para sua linguagem: Java, PHP, Go ou Python
Exemplos de código
Os exemplos abaixo usam uma chave de dados AES de 32 bytes criptografada no modo GCM.
Java
Usa a biblioteca criptográfica SunJCE Provider.
Python
Usa a biblioteca criptográfica cryptography.hazmat.
Go
Usa a biblioteca criptográfica golang/crypto.
PHP
Usa a biblioteca criptográfica OpenSSL.