Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Chiffrement et déchiffrement des clés de données
Les exemples présentés dans cette rubrique utilisent le chiffrement, le déchiffrement et les ReEncryptopérations de l'AWS KMSAPI.
Ces opérations sont conçues pour chiffrer et déchiffrer des clés de données. Elles utilisent une AWS KMS keys dans les opérations de chiffrement et ne peuvent pas accepter plus de 4 Ko (4 096 octets) de données. Même si vous pouvez les utiliser pour chiffrer des petits volumes de données, comme un mot de passe ou une clé RSA, ces opérations ne sont pas conçues pour chiffrer des données d'application.
Pour chiffrer des données d'application, utilisez les fonctions de chiffrement côté serveur d'un service AWS, une bibliothèque de chiffrement côté client comme AWS Encryption SDK ou le client de chiffrement Amazon S3.
Chiffrement d'une clé de données
L'opération Encrypt est conçue pour chiffrer des clés de données, mais elle n'est pas fréquemment utilisée. Les GenerateDataKeyWithoutPlaintextopérations GenerateDataKeyet renvoient des clés de données chiffrées. Vous pouvez utiliser cette méthode lorsque vous déplacez des données chiffrées vers une région différente et que vous souhaitez chiffrer leur clé de données à l'aide d'une clé KMS dans la nouvelle région.
Dans les langues qui nécessitent un objet client, ces exemples utilisent l'objet client AWS KMS que vous avez créé dans Création d'un client.
- Java
-
Pour obtenir des détails, veuillez consulter la méthode encrypt dans la Référence d'API 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#
-
Pour obtenir des détails, consultez la méthode Encrypt dans le kit 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
-
Pour obtenir des détails, consultez la méthode encrypt dans la 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
-
Pour obtenir des détails, consultez la méthode d'instance encrypt dans le kit 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
-
Pour obtenir des détails, consultez la méthode Encrypt dans le kit 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
Pour plus de détails, consultez la propriété encrypt dans le AWS SDK pour Node.js JavaScript .
// 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
Pour chiffrer une clé de données sous une clé KMS, utilisez l'applet de commande Invoke-KMSEncrypt. Il renvoie le texte chiffré sous la forme d'un MemoryStream
(System.IO). MemoryStream) objet. Vous pouvez utiliser l'objet MemoryStream
comme entrée de l'applet de commande Invoke-KMSDecrypt.
AWS KMS renvoie également des clés de données en tant qu'objets MemoryStream
. Dans cet exemple, pour simuler une clé de données en texte brut, nous créons un tableau d'octets et l'écrivons dans un objet MemoryStream
.
Notez que le paramètre Plaintext
de Invoke-KMSEncrypt
prend un tableau d'octets (byte[]
) ; il ne nécessite pas d'objet MemoryStream
. À partir de AWSPowerShell la version 4.0, les paramètres de tous les AWSPowerShell modules qui acceptent des tableaux d'octets et MemoryStream
des objets acceptent les tableaux d'octets, les MemoryStream
objets, les chaînes, les tableaux de chaînes et FileInfo
(System.IO). FileInfo) objets. Vous pouvez passer n'importe lequel de ces types à 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
Pour utiliser les AWS KMS PowerShell applets de commande, installez le fichier AWS.tools. KeyManagementServicemodule. Pour plus d’informations, consultez le Guide de l’utilisateur AWS Tools for Windows PowerShell.
Déchiffrement d'une clé de données
Pour déchiffrer une clé de données, utilisez l'opération Decrypt.
La valeur ciphertextBlob
que vous spécifiez doit être la valeur du CiphertextBlob
champ provenant d'une réponse GenerateDataKeyGenerateDataKeyWithoutPlaintext, ou Chiffrer, ou le PrivateKeyCiphertextBlob
champ d'une GenerateDataKeyPairWithoutPlaintextréponse GenerateDataKeyPairou. Vous pouvez également utiliser l'opération Decrypt
pour déchiffrer des données chiffrées en dehors de AWS KMS par la clé publique dans une clé KMS asymétrique.
Le paramètre KeyId
n'est pas requis lors du déchiffrement avec des clés KMS de chiffrement symétriques. AWS KMS peut obtenir la clé KMS utilisée pour chiffrer les données à partir des métadonnées dans le blob de texte chiffré. Toutefois, la spécification de la clé KMS que vous utilisez est une bonne pratique. Cette pratique garantit que vous utilisez la clé KMS prévue et vous empêche de déchiffrer par inadvertance un texte chiffré à l'aide d'une clé KMS non fiable.
Dans les langues qui nécessitent un objet client, ces exemples utilisent l'objet client AWS KMS que vous avez créé dans Création d'un client.
- Java
-
Pour obtenir des détails, veuillez consulter la méthode decrypt dans la Référence d'API 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#
-
Pour obtenir des détails, consultez la méthode Decrypt dans le kit 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
-
Pour obtenir des détails, consultez la méthode decrypt dans la 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
-
Pour obtenir des détails, consultez la méthode d'instance decrypt dans le kit 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
-
Pour obtenir des détails, consultez la méthode Decrypt dans le kit 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
Pour plus de détails, consultez la propriété de déchiffrement dans le AWSSDK pour JavaScript dans Node.js.
// 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
Pour déchiffrer une clé de données, utilisez l'applet de commande Invoke-KMSEncrypt.
Cette applet de commande renvoie le texte en clair sous la forme d'un MemoryStream
fichier (System.IO). MemoryStream) objet. Pour le convertir en tableau d'octets, utilisez des applets de commande ou des fonctions qui convertissent des objets MemoryStream
en tableaux d'octets, telles que les fonctions du module Convert.
Étant donné que cet exemple utilise le texte chiffré renvoyé par une applet de commande de chiffrement AWS KMS, il utilise un objet MemoryStream
pour la valeur du paramètre CiphertextBlob
. Cependant, le paramètre CiphertextBlob
de Invoke-KMSDecrypt
prend un tableau d'octets (byte[]
) ; il ne nécessite pas d'objet MemoryStream
. À partir de AWSPowerShell la version 4.0, les paramètres de tous les AWSPowerShell modules qui acceptent des tableaux d'octets et MemoryStream
des objets acceptent les tableaux d'octets, les MemoryStream
objets, les chaînes, les tableaux de chaînes et FileInfo
(System.IO). FileInfo) objets. Vous pouvez passer n'importe lequel de ces types à 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
Pour utiliser les AWS KMS PowerShell applets de commande, installez le fichier AWS.tools. KeyManagementServicemodule. Pour plus d’informations, consultez le Guide de l’utilisateur AWS Tools for Windows PowerShell.
Rechiffrement d'une clé de données sous une autre AWS KMS key
Pour déchiffrer une clé de données chiffrée, puis la rechiffrer immédiatement sous une autre cléAWS KMS key, utilisez l'opération. ReEncrypt Les opérations sont effectuées entièrement côté serveur dans AWS KMS, pour que votre texte brut ne soit jamais exposé en dehors d'AWS KMS.
La valeur ciphertextBlob
que vous spécifiez doit être la valeur du CiphertextBlob
champ provenant d'une réponse GenerateDataKeyGenerateDataKeyWithoutPlaintext, ou Chiffrer, ou le PrivateKeyCiphertextBlob
champ d'une GenerateDataKeyPairWithoutPlaintextréponse GenerateDataKeyPairou. Vous pouvez également utiliser l'opération ReEncrypt
pour rechiffrer les données chiffrées en dehors de AWS KMS par la clé publique dans une clé KMS asymétrique.
Le paramètre SourceKeyId
n'est pas requis lors du rechiffrement avec des clés KMS de chiffrement symétriques. AWS KMS peut obtenir la clé KMS utilisée pour chiffrer les données à partir des métadonnées dans le blob de texte chiffré. Toutefois, la spécification de la clé KMS que vous utilisez est une bonne pratique. Cette pratique garantit que vous utilisez la clé KMS prévue et vous empêche de déchiffrer par inadvertance un texte chiffré à l'aide d'une clé KMS non fiable.
Dans les langues qui nécessitent un objet client, ces exemples utilisent l'objet client AWS KMS que vous avez créé dans Création d'un client.
- Java
-
Pour obtenir des détails, veuillez consulter la méthode reEncrypt dans la Référence d'API 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#
-
Pour obtenir des détails, consultez la méthode ReEncrypt dans 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
-
Pour obtenir des détails, consultez la méthode re_encrypt
dans 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
-
Pour obtenir des détails, consultez la méthode d'instance re_encrypt
dans le kit 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
-
Pour obtenir des détails, consultez la méthode ReEncrypt dans 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
Pour plus de détails, consultez la propriété ReEncrypt dans AWSle SDK JavaScript pour 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
Pour rechiffrer un texte chiffré sous la même clé KMS ou une clé différente, utilisez l'applet de commande Invoke-KMS. ReEncrypt
Étant donné que cet exemple utilise le texte chiffré renvoyé par une applet de commande de chiffrement AWS KMS, il utilise un objet MemoryStream
pour la valeur du paramètre CiphertextBlob
. Cependant, le paramètre CiphertextBlob
de Invoke-KMSReEncrypt
prend un tableau d'octets (byte[]
) ; il ne nécessite pas d'objet MemoryStream
. À partir de AWSPowerShell la version 4.0, les paramètres de tous les AWSPowerShell modules qui acceptent des tableaux d'octets et MemoryStream
des objets acceptent les tableaux d'octets, les MemoryStream
objets, les chaînes, les tableaux de chaînes et FileInfo
(System.IO). FileInfo) objets. Vous pouvez passer n'importe lequel de ces types à 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
Pour utiliser les AWS KMS PowerShell applets de commande, installez le fichier AWS.tools. KeyManagementServicemodule. Pour de plus amples informations, veuillez consulter le Guide de l'utilisateur AWS Tools for Windows PowerShell.