Porte-clés AES brut - AWS Encryption SDK

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

Vous AWS 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ériel (HSM) ou un système de gestion des clés. Utilisez un trousseau de clés AES brut lorsque vous devez fournir la clé d'encapsulation et chiffrer 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 forme de tableau d'octets. Vous ne pouvez spécifier qu'une seule clé d'encapsulation par jeu de clés AES brut, mais vous pouvez inclure plusieurs porte-clés AES bruts, seuls ou avec d'autres trousseaux de clés, dans un jeu de clés multiple.

Le trousseau de clés AES brut est équivalent et interagit avec la JceMasterKeyclasse du Kit SDK de chiffrement AWS pour Java et la RawMasterKeyclasse du Kit 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 trousseau de clés, le trousseau 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 chiffré renvoyé par l'opération de chiffrement. Nous vous recommandons d'utiliser un espace de noms de clé dans votre HSM ou votre système de gestion de clés et un nom de clé identifiant la clé AES dans ce système.

Note

L'espace de noms de clé et le nom de clé sont équivalents aux champs ID du fournisseur (ou fournisseur) et ID de clé dans le JceMasterKey etRawMasterKey.

Les Kit SDK de chiffrement AWS pour C et AWS Encryption SDK pour .NET réservent la valeur de l'espace de noms des aws-kms clés pour les clés KMS. N'utilisez pas cette valeur d'espace de noms dans un jeu de clés AES brut ou un jeu de clés RSA brut avec ces bibliothèques.

Si vous créez différents trousseaux de clés pour chiffrer et déchiffrer un message donné, l'espace de noms et les valeurs des noms sont essentiels. Si l'espace de noms de clé 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 de clé 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 essentiels sont identiques.

Par exemple, vous pouvez définir un trousseau de clés AES brut avec un espace de noms de clé HSM_01 et un nom de clé. AES_256_012 Ensuite, vous utilisez ce trousseau de clés pour chiffrer 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é, le même nom de clé et le même matériau clé.

Les exemples suivants montrent comment créer un trousseau de clés AES brut. La AESWrappingKey variable représente le matériel clé que vous fournissez.

C

Pour instancier un trousseau de clés AES brut dans le Kit SDK de chiffrement AWS pour C, utilisez. aws_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 trousseau de clés AES brut dans AWS Encryption SDK .NET, utilisez la materialProviders.CreateRawAesKeyring() méthode. Pour un exemple complet, consultez RawAes .cs. KeyringExample

L'exemple suivant utilise la version 4. x du AWS Encryption SDK pour .NET.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); 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

Le Kit SDK de chiffrement AWS pour JavaScript navigateur obtient ses primitives cryptographiques de l'WebCryptoAPI. Avant de construire le porte-clés, vous devez l'utiliser RawAesKeyringWebCrypto.importCryptoKey() pour importer le matériau clé brut dans le WebCrypto backend. Cela garantit que le trousseau de clés est complet même si tous les appels WebCrypto sont asynchrones.

Ensuite, pour instancier un trousseau de clés AES brut, utilisez la méthode. RawAesKeyringWebCrypto() Vous devez spécifier l'algorithme d'emballage AES (« suite d'emballage ») en fonction de la longueur de votre matériau clé. Pour un exemple complet, consultez aes_simple.ts (Browser). JavaScript

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 le fichier Kit SDK de chiffrement AWS pour JavaScript for Node.js, créez une instance de la classe. RawAesKeyringNode Vous devez spécifier l'algorithme d'emballage AES (« suite d'emballage ») en fonction de la longueur de votre matériau clé. Pour un exemple complet, consultez aes_simple.ts (Node.js). JavaScript

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, })
Java

Pour instancier un trousseau de clés AES brut dans le Kit SDK de chiffrement AWS pour Java, utilisez. matProv.CreateRawAesKeyring()

final CreateRawAesKeyringInput keyringInput = CreateRawAesKeyringInput.builder() .keyName("AES_256_012") .keyNamespace("HSM_01") .wrappingKey(AESWrappingKey) .wrappingAlg(AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(keyringInput);