As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criptografar e descriptografar chaves de dados
Os exemplos neste tópico usam as ReEncryptoperações Encrypt, Decrypt e na API. AWS KMS
Essas operações são projetadas para criptografar e descriptografar chaves de dados. Elas usam uma AWS KMS keys nas operações de criptografia e não podem aceitar mais de 4 KB (4.096 bytes) de dados. Embora você possa usá-las para criptografar pequenas quantidades de dados, como uma senha ou chave RSA, elas não serão projetadas para criptografar dados de aplicações.
Para criptografar dados de aplicações, use os recursos de criptografia no lado do servidor de um serviço da AWS ou uma biblioteca de criptografia de cliente, como a AWS Encryption SDK ou o Cliente de criptografia do Amazon S3.
Criptografar uma chave de dados
A operação Encrypt é projetada para criptografar chaves de dados, mas não é frequentemente usada. As GenerateDataKeyWithoutPlaintextoperações GenerateDataKeye retornam chaves de dados criptografadas. Você pode usar essa método quando está movendo dados criptografados para uma região diferente e deseja criptografar sua chave de dados com uma chave KMS na nova região.
Em linguagens que exigem um objeto cliente, esses exemplos usam o objeto cliente do AWS KMS criado em Criar um cliente.
- Java
-
Para detalhes, consulte o Método encrypt, na Referência de APIs do AWS SDK for Java.
// Encrypt a data key
//
// Replace the following example key ARN with any valid key identfier
String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";
ByteBuffer plaintext = ByteBuffer.wrap(new byte[]{1,2,3,4,5,6,7,8,9,0});
EncryptRequest req = new EncryptRequest().withKeyId(keyId).withPlaintext(plaintext);
ByteBuffer ciphertext = kmsClient.encrypt(req).getCiphertextBlob();
- C#
-
Para obter detalhes, consulte o Método Encrypt no AWS SDK for .NET.
// Encrypt a data key
//
// Replace the following example key ARN with any valid key identfier
String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";
MemoryStream plaintext = new MemoryStream();
plaintext.Write(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }, 0, 10);
EncryptRequest encryptRequest = new EncryptRequest()
{
KeyId = keyId,
Plaintext = plaintext
};
MemoryStream ciphertext = kmsClient.Encrypt(encryptRequest).CiphertextBlob;
- Python
-
Para obter detalhes, consulte o Método encrypt no AWS SDK for Python (Boto3).
# Encrypt a data key
# Replace the following example key ARN with any valid key identfier
key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
plaintext = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x00'
response = kms_client.encrypt(
KeyId=key_id,
Plaintext=plaintext
)
ciphertext = response['CiphertextBlob']
- Ruby
-
Para obter detalhes, consulte o método de instância encrypt no AWS SDK for Ruby.
# Encrypt a data key
# Replace the following example key ARN with any valid key identfier
key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x00"
response = kmsClient.encrypt({
key_id: key_id,
plaintext: plaintext
})
ciphertext = response.ciphertext_blob
- PHP
-
Para obter detalhes, consulte o Método Encrypt no AWS SDK for PHP.
// Encrypt a data key
//
// Replace the following example key ARN with any valid key identfier
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$message = pack('c*',1,2,3,4,5,6,7,8,9,0);
$result = $KmsClient->encrypt([
'KeyId' => $keyId,
'Plaintext' => $message,
]);
$ciphertext = $result['CiphertextBlob'];
- Node.js
Para obter detalhes, consulte a propriedade encrypt no AWS SDK JavaScript em Node.js.
// Encrypt a data key
//
// Replace the following example key ARN with any valid key identfier
const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
const Plaintext = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]);
kmsClient.encrypt({ KeyId, Plaintext }, (err, data) => {
if (err) console.log(err, err.stack); // an error occurred
else {
const { CiphertextBlob } = data;
...
}
});
- PowerShell
Para criptografar uma chave de dados em uma chave do KMS, use o cmdlet Invoke-KMSEncrypt. Ele retorna o texto cifrado como um MemoryStream
(System.io). MemoryStream) objeto. É possível usar o objeto MemoryStream
como entrada para o cmdlet Invoke-KMSDecrypt.
O AWS KMS também retorna chaves de dados como objetos MemoryStream
. Neste exemplo, para simular uma chave de dados de texto simples, criamos uma matriz de bytes e a gravamos em um objeto MemoryStream
.
Observe que o parâmetro Plaintext
de Invoke-KMSEncrypt
utiliza uma matriz de bytes (byte[]
). Ele não requer um objeto MemoryStream
. A partir da AWSPowerShell versão 4.0, os parâmetros em todos os AWSPowerShell módulos que usam matrizes de bytes e MemoryStream
objetos aceitam matrizes de bytes, objetos, strings, MemoryStream
matrizes de strings e (System.io). FileInfo
FileInfo) objetos. É possível passar qualquer um desses tipos para Invoke-KMSEncrypt
.
# Encrypt a data key
# Replace the following example key ARN with any valid key identfier
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
# Simulate a data key
# Create a byte array
[byte[]] $bytes = 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
# Create a MemoryStream
$plaintext = [System.IO.MemoryStream]::new()
# Add the byte array to the MemoryStream
$plaintext.Write($bytes, 0, $bytes.length)
# Encrypt the simulated data key
$response = Invoke-KMSEncrypt -KeyId $keyId -Plaintext $plaintext
# Get the ciphertext from the response
$ciphertext = $response.CiphertextBlob
Para usar os AWS KMS PowerShell cmdlets, instale o AWS.Tools. KeyManagementServicemódulo. Para obter mais informações, consulte o Manual do usuário do AWS Tools for Windows PowerShell.
Descriptografia de uma chave de dados
Para descriptografar uma chave de dados, use a operação Decrypt.
O ciphertextBlob
que você especificar deve ser o valor do CiphertextBlob
campo de uma resposta GenerateDataKey, GenerateDataKeyWithoutPlaintext, ou Criptografar, ou o PrivateKeyCiphertextBlob
campo de uma GenerateDataKeyPairWithoutPlaintextresposta GenerateDataKeyPairou. Também é possível usar a operação Decrypt
para descriptografar dados criptografados fora do AWS KMS pela chave pública em uma chave do KMS assimétrica.
O parâmetro KeyId
não é necessário ao descriptografar com chaves do KMS de criptografia simétrica. O AWS KMS pode obter a chave do KMS que foi usada para criptografar os dados diretamente dos metadados no blob de texto cifrado. Porém, sempre é uma prática recomendada especificar a chave do KMS que você está usando. Essa prática garante que você use a chave do KMS desejada e impede que você descriptografe um texto cifrado acidentalmente usando uma chave do KMS em que você não confia.
Em linguagens que exigem um objeto cliente, esses exemplos usam o objeto cliente do AWS KMS criado em Criar um cliente.
- Java
-
Para obter detalhes, consulte o Método decrypt, na Referência de APIs do AWS SDK for Java.
// Decrypt a data key
//
// Replace the following example key ARN with any valid key identfier
String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";
ByteBuffer ciphertextBlob = Place your ciphertext here
;
DecryptRequest req = new DecryptRequest().withCiphertextBlob(ciphertextBlob).withKeyId(keyId);
ByteBuffer plainText = kmsClient.decrypt(req).getPlaintext();
- C#
-
Para obter detalhes, consulte o Método Decrypt no AWS SDK for .NET.
// Decrypt a data key
//
// Replace the following example key ARN with any valid key identfier
String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";
MemoryStream ciphertextBlob = new MemoryStream();
// Write ciphertext to memory stream
DecryptRequest decryptRequest = new DecryptRequest()
{
CiphertextBlob = ciphertextBlob,
KeyId = keyId
};
MemoryStream plainText = kmsClient.Decrypt(decryptRequest).Plaintext;
- Python
-
Para obter detalhes, consulte o Método decrypt no AWS SDK for Python (Boto3).
# Decrypt a data key
# Replace the following example key ARN with any valid key identfier
key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
ciphertext = 'Place your ciphertext here
'
response = kms_client.decrypt(
CiphertextBlob=ciphertext,
KeyId=key_id
)
plaintext = response['Plaintext']
- Ruby
-
Para obter detalhes, consulte o método de instância decrypt no AWS SDK for Ruby.
# Decrypt a data key
# Replace the following example key ARN with any valid key identfier
key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
ciphertext = 'Place your ciphertext here
'
ciphertext_packed = [ciphertext].pack("H*")
response = kmsClient.decrypt({
ciphertext_blob: ciphertext_packed,
key_id: key_id
})
plaintext = response.plaintext
- PHP
-
Para obter detalhes, consulte o Método Decrypt no AWS SDK for PHP.
// Decrypt a data key
//
// Replace the following example key ARN with any valid key identfier
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$ciphertext = 'Place your cipher text blob here
';
$result = $KmsClient->decrypt([
'CiphertextBlob' => $ciphertext,
'KeyId' => $keyId,
]);
$plaintext = $result['Plaintext'];
- Node.js
Para obter detalhes, consulte a propriedade decrypt no AWSSDK em Node.js. JavaScript
// Decrypt a data key
//
// Replace the following example key ARN with any valid key identfier
const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
const CiphertextBlob = 'Place your cipher text blob here';
kmsClient.decrypt({ CiphertextBlob, KeyId }, (err, data) => {
if (err) console.log(err, err.stack); // an error occurred
else {
const { Plaintext } = data;
...
}
});
- PowerShell
Para descriptografar uma chave de dados, use o cmdlet Invoke-KMSEncrypt.
Esse cmdlet retorna o texto simples como um (System.IO). MemoryStream
MemoryStream) objeto. Para convertê-lo em uma matriz de bytes, use cmdlets ou funções que convertem objetos MemoryStream
em matrizes de bytes, como as funções no módulo Converter.
Como esse exemplo usa o texto cifrado por um cmdlet de criptografia do AWS KMS retornado, ele usa um objeto MemoryStream
para o valor do parâmetro CiphertextBlob
. No entanto, o parâmetro CiphertextBlob
de Invoke-KMSDecrypt
utiliza uma matriz de bytes (byte[]
). Ele não requer um objeto MemoryStream
. A partir da AWSPowerShell versão 4.0, os parâmetros em todos os AWSPowerShell módulos que usam matrizes de bytes e MemoryStream
objetos aceitam matrizes de bytes, objetos, strings, MemoryStream
matrizes de strings e (System.io). FileInfo
FileInfo) objetos. É possível passar qualquer um desses tipos para Invoke-KMSDecrypt
.
# Decrypt a data key
# Replace the following example key ARN with any valid key identfier
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
[System.IO.MemoryStream]$ciphertext = Read-Host 'Place your cipher text blob here'
$response = Invoke-KMSDecrypt -CiphertextBlob $ciphertext -KeyId $keyId
$plaintext = $response.Plaintext
Para usar os AWS KMS PowerShell cmdlets, instale o AWS.Tools. KeyManagementServicemódulo. Para obter mais informações, consulte o AWS Tools for Windows PowerShellGuia do Usuário.
Criptografar novamente uma chave de dados em uma AWS KMS key
Para descriptografar uma chave de dados criptografada e, em seguida, recriptografar imediatamente a chave de dados em outraAWS KMS key, use a operação. ReEncrypt As operações são realizadas inteiramente no lado servidor dentro do AWS KMS, para nunca exporem o texto não criptografado fora do AWS KMS.
O ciphertextBlob
que você especificar deve ser o valor do CiphertextBlob
campo de uma resposta GenerateDataKey, GenerateDataKeyWithoutPlaintext, ou Criptografar, ou o PrivateKeyCiphertextBlob
campo de uma GenerateDataKeyPairWithoutPlaintextresposta GenerateDataKeyPairou. Também é possível usar a operação ReEncrypt
para recriptografar dados criptografados fora do AWS KMS pela chave pública em uma chave do KMS assimétrica.
O parâmetro SourceKeyId
não é necessário ao recriptografar com chaves do KMS de criptografia simétrica. O AWS KMS pode obter a chave do KMS que foi usada para criptografar os dados diretamente dos metadados no blob de texto cifrado. Porém, sempre é uma prática recomendada especificar a chave do KMS que você está usando. Essa prática garante que você use a chave do KMS desejada e impede que você descriptografe um texto cifrado acidentalmente usando uma chave do KMS em que você não confia.
Em linguagens que exigem um objeto cliente, esses exemplos usam o objeto cliente do AWS KMS criado em Criar um cliente.
- Java
-
Para detalhes, consulte o Método reEncrypt, na Referência de APIs do AWS SDK for Java.
// Re-encrypt a data key
ByteBuffer sourceCiphertextBlob = Place your ciphertext here
;
// Replace the following example key ARNs with valid key identfiers
String sourceKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";
String destinationKeyId = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321";
ReEncryptRequest req = new ReEncryptRequest();
req.setCiphertextBlob(sourceCiphertextBlob);
req.setSourceKeyId(sourceKeyId);
req.setDestinationKeyId(destinationKeyId);
ByteBuffer destinationCipherTextBlob = kmsClient.reEncrypt(req).getCiphertextBlob();
- C#
-
Para obter detalhes, consulte o Método ReEncrypt no AWS SDK for .NET.
// Re-encrypt a data key
MemoryStream sourceCiphertextBlob = new MemoryStream();
// Write ciphertext to memory stream
// Replace the following example key ARNs with valid key identfiers
String sourceKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";
String destinationKeyId = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321";
ReEncryptRequest reEncryptRequest = new ReEncryptRequest()
{
CiphertextBlob = sourceCiphertextBlob,
SourceKeyId = sourceKeyId,
DestinationKeyId = destinationKeyId
};
MemoryStream destinationCipherTextBlob = kmsClient.ReEncrypt(reEncryptRequest).CiphertextBlob;
- Python
-
Para obter detalhes, consulte o Método re_encrypt
no AWS SDK for Python (Boto3).
# Re-encrypt a data key
ciphertext = 'Place your ciphertext here
'
# Replace the following example key ARNs with valid key identfiers
source_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
destination_key_id = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'
response = kms_client.re_encrypt(
CiphertextBlob=ciphertext,
SourceKeyId=source_key_id,
DestinationKeyId=destination_key_id
)
destination_ciphertext_blob = response['CiphertextBlob']
- Ruby
-
Para obter detalhes, consulte o método de instância re_encrypt
no AWS SDK for Ruby.
# Re-encrypt a data key
ciphertext = 'Place your ciphertext here
'
ciphertext_packed = [ciphertext].pack("H*")
# Replace the following example key ARNs with valid key identfiers
source_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
destination_key_id = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'
response = kmsClient.re_encrypt({
ciphertext_blob: ciphertext_packed,
source_key_id: source_key_id,
destination_key_id: destination_key_id
})
destination_ciphertext_blob = response.ciphertext_blob.unpack('H*')
- PHP
-
Para obter detalhes, consulte o Método ReEncrypt no AWS SDK for PHP.
// Re-encrypt a data key
$ciphertextBlob = 'Place your ciphertext here
';
// Replace the following example key ARNs with valid key identfiers
$sourceKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$destinationKeyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321';
$result = $KmsClient->reEncrypt([
'CiphertextBlob' => $ciphertextBlob,
'SourceKeyId' => $sourceKeyId,
'DestinationKeyId' => $destinationKeyId,
]);
- Node.js
Para obter detalhes, consulte a propriedade reEncrypt no SDK JavaScript em AWS Node.js.
// Re-encrypt a data key
const CiphertextBlob = 'Place your cipher text blob here';
// Replace the following example key ARNs with valid key identfiers
const SourceKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
const DestinationKeyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321';
kmsClient.reEncrypt({ CiphertextBlob, SourceKeyId, DestinationKeyId }, (err, data) => {
...
});
- PowerShell
Para recriptografar um texto cifrado com a mesma chave KMS ou com uma chave KMS diferente, use o cmdlet Invoke-KMS. ReEncrypt
Como esse exemplo usa o texto cifrado por um cmdlet de criptografia do AWS KMS retornado, ele usa um objeto MemoryStream
para o valor do parâmetro CiphertextBlob
. No entanto, o parâmetro CiphertextBlob
de Invoke-KMSReEncrypt
utiliza uma matriz de bytes (byte[]
). Ele não requer um objeto MemoryStream
. A partir da AWSPowerShell versão 4.0, os parâmetros em todos os AWSPowerShell módulos que usam matrizes de bytes e MemoryStream
objetos aceitam matrizes de bytes, objetos, strings, MemoryStream
matrizes de strings e (System.io). FileInfo
FileInfo) objetos. É possível passar qualquer um desses tipos para Invoke-KMSReEncrypt
.
# Re-encrypt a data key
[System.IO.MemoryStream]$ciphertextBlob = Read-Host 'Place your cipher text blob here'
# Replace the following example key ARNs with valid key identfiers
$sourceKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
$destinationKeyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'
$response = Invoke-KMSReEncrypt -Ciphertext $ciphertextBlob -SourceKeyId $sourceKeyId -DestinationKeyId $destinationKeyId
$reEncryptedCiphertext = $response.CiphertextBlob
Para usar os AWS KMS PowerShell cmdlets, instale o AWS.Tools. KeyManagementServicemódulo. Para obter mais informações, consulte o Guia do usuário da AWS Tools for Windows PowerShell.