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.
Porte-clés AES brut
VousAWS Encryption SDK permet d'utiliser une clé symétrique AES que vous fournissez comme clé d'encapsulation qui protège votre clé de données. Vous devez générer, stocker et protéger le matériel clé, de préférence dans un module de sécurité matérielle (HSM) ou un système de gestion des clés. Utilisez un jeu de clés AES brut lorsque vous devez fournir la clé d'encapsulation et crypter les clés de données localement ou hors ligne.
Le jeu de clés AES brut chiffre les données à l'aide de l'algorithme AES-GCM et d'une clé d'encapsulation que vous spécifiez sous la forme d'un tableau d'octets. Vous ne pouvez spécifier qu'une seule clé d'encapsulation dans chaque jeu de clés AES brut, mais vous pouvez inclure plusieurs porte-clés AES bruts, seuls ou avec d'autres porte-clés, dans un jeu multiclé.
Le jeu de clés AES brut est équivalent à la classe du et interagit avec la JceMasterKeyclasse duKit SDK de chiffrement AWS pour Java et la RawMasterKeyclasse duKit SDK de chiffrement AWS pour Python lorsqu'ils sont utilisés avec une clé de chiffrement AES. Vous pouvez chiffrer des données avec une certaine implémentation et déchiffrer les données avec n'importe quelle autre implémentation à l'aide de la même clé d'encapsulage. Pour plus de détails, consultez Compatibilité du porte-clés.
Espaces de noms et noms clés
Pour identifier la clé AES dans un jeu de clés, le jeu de clés AES brut utilise un espace de noms de clé et un nom de clé que vous fournissez. Ces valeurs ne sont pas secrètes. Ils apparaissent en texte brut dans l'en-tête du message crypté renvoyé par l'opération de chiffrement. Nous vous recommandons d'utiliser un espace de noms de clé dans votre HSM ou système de gestion des clés et un nom de clé identifiant la clé AES dans ce système.
L'espace de noms et le nom de clé sont équivalents aux champs Provider ID (ou Provider) et Key ID contenus dans les champsJceMasterKey
etRawMasterKey
.
LesKit SDK de chiffrement AWS pour C etAWS Encryption SDK pour .NET réservent la valeur de l'espace de noms desaws-kms
clés pour les clés KMS. N'utilisez pas cette valeur d'espace de noms dans un jeu de clés Raw AES ou RSA Raw avec ces bibliothèques.
Si vous créez différents porte-clés pour crypter et déchiffrer un message donné, l'espace de noms et les valeurs du nom sont essentiels. Si l'espace de noms et le nom de clé du jeu de clés de déchiffrement ne correspondent pas exactement, en distinguant majuscules et minuscules, à l'espace de noms et au nom de clé du jeu de clés de chiffrement, le jeu de clés de déchiffrement n'est pas utilisé, même si les octets du matériau de la clé sont identiques.
Par exemple, vous pouvez définir un jeu de clés AES brut avec un espace de nomsHSM_01
et un nom de cléAES_256_012
. Ensuite, vous utilisez ce porte-clés pour crypter certaines données. Pour déchiffrer ces données, créez un jeu de clés AES brut avec le même espace de noms de clés, le même nom de clé et le même matériau de clé.
Les exemples suivants montrent comment lire et écrire un porte-clés AES. LaAESWrappingKey
variable représente le matériel clé que vous fournissez.
- C
-
Pour instancier un jeu de clés AES brut dans leKit SDK de chiffrement AWS pour C, utilisezaws_cryptosdk_raw_aes_keyring_new()
. Pour un exemple complet, consultez raw_aes_keyring.c.
struct aws_allocator *alloc = aws_default_allocator();
AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_namespace, "HSM_01");
AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_name, "AES_256_012");
struct aws_cryptosdk_keyring *raw_aes_keyring = aws_cryptosdk_raw_aes_keyring_new(
alloc, wrapping_key_namespace, wrapping_key_name, aes_wrapping_key
, wrapping_key_len);
- C# / .NET
-
Pour créer un jeu de clés AES brut dansAWS Encryption SDK .NET, utilisez lamaterialProviders.CreateRawAesKeyring()
méthode. Pour un exemple complet, voir RAWaesKeyringExample .cs
// Instantiate the AWS Encryption SDK and material providers
var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk();
var materialProviders =
AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders();
var keyNamespace = "HSM_01";
var keyName = "AES_256_012";
// This example uses the key generator in Bouncy Castle to generate the key material.
// In production, use key material from a secure source.
var aesWrappingKey = new MemoryStream(GeneratorUtilities.GetKeyGenerator("AES256").GenerateKey());
// Create the keyring that determines how your data keys are protected.
var createKeyringInput = new CreateRawAesKeyringInput
{
KeyNamespace = keyNamespace,
KeyName = keyName,
WrappingKey = aesWrappingKey
,
WrappingAlg = AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16
};
var keyring = materialProviders.CreateRawAesKeyring(createKeyringInput);
- JavaScript Browser
-
LeKit SDK de chiffrement AWS pour JavaScript dans le navigateur obtient ses primitives cryptographiques à partir de l'WebCryptoAPI. Avant de créer le jeu de clés, vous devez l'utiliserRawAesKeyringWebCrypto.importCryptoKey()
pour importer le matériel clé brut dans le WebCrypto backend. Cela garantit que le jeu de clés est complet même si tous les appels à WebCrypto sont asynchrones.
Ensuite, pour instancier un jeu de clés AES brut, utilisez laRawAesKeyringWebCrypto()
méthode. Vous devez spécifier l'algorithme d'encapsulation AES (« suite d'encapsulation ») en fonction de la longueur de votre matériau clé. Pour un exemple complet, consultez aes_simple.ts (JavaScript Browser).
const keyNamespace = 'HSM_01'
const keyName = 'AES_256_012'
const wrappingSuite =
RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING
/* Import the plaintext AES key into the WebCrypto backend. */
const aesWrappingKey = await RawAesKeyringWebCrypto.importCryptoKey(
rawAesKey,
wrappingSuite
)
const rawAesKeyring = new RawAesKeyringWebCrypto({
keyName,
keyNamespace,
wrappingSuite,
aesWrappingKey
})
- JavaScript Node.js
-
Pour instancier un jeu de clés AES brut dans leKit SDK de chiffrement AWS pour JavaScript for Node.js, créez une instance de la RawAesKeyringNode
classe. Vous devez spécifier l'algorithme d'encapsulation AES (« suite d'encapsulation ») en fonction de la longueur de votre matériau clé. Pour un exemple complet, consultez aes_simple.ts (JavaScript Node.js).
const keyName = 'AES_256_012'
const keyNamespace = 'HSM_01'
const wrappingSuite =
RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING
const rawAesKeyring = new RawAesKeyringNode({
keyName,
keyNamespace,
aesWrappingKey
,
wrappingSuite,
})