AWS Encryption SDK pour. NETexemples - 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.

AWS Encryption SDK pour. NETexemples

Les exemples suivants montrent les modèles de codage de base que vous utilisez lors de la programmation avec le AWS Encryption SDK for. NET. Plus précisément, vous instanciez la bibliothèque AWS Encryption SDK et les fournisseurs de matériaux. Ensuite, avant d'appeler chaque méthode, vous instanciez un objet qui définit l'entrée de la méthode. Cela ressemble beaucoup au modèle de codage que vous utilisez dans le AWS SDK for .NET.

Pour des exemples montrant comment configurer des options dans le AWS Encryption SDK, telles que la spécification d'une suite d'algorithmes alternative, la limitation des clés de données chiffrées et l'utilisation de clés AWS KMS multirégionales, voirConfiguration du AWS Encryption SDK.

Pour plus d'exemples de programmation avec le AWS Encryption SDK for. NET, consultez les exemples dans le aws-encryption-sdk-net répertoire du aws-encryption-sdk-dafny dépôt sur GitHub.

Chiffrer les données dans le formulaire AWS Encryption SDK . NET

Cet exemple montre le schéma de base pour le chiffrement des données. Il chiffre un petit fichier avec des clés de données protégées par une clé AWS KMS d'encapsulation.

Étape 1 : Instancier la bibliothèque AWS Encryption SDK et la bibliothèque des fournisseurs de matériaux.

Commencez par instancier la bibliothèque AWS Encryption SDK et les fournisseurs de matériaux. Vous allez utiliser les méthodes décrites dans le AWS Encryption SDK pour chiffrer et déchiffrer les données. Vous allez utiliser les méthodes de la bibliothèque des fournisseurs de matériel pour créer les porte-clés qui spécifient les clés qui protègent vos données.

La façon dont vous instanciez la bibliothèque AWS Encryption SDK et la bibliothèque des fournisseurs de matériaux diffère selon les versions 3. x et 4. x du AWS Encryption SDK formulaire. NET. Toutes les étapes suivantes sont identiques pour les deux versions 3. x et 4. x du AWS Encryption SDK formulaire. NET.

Version 3.x
// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders();
Version 4.x
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Étape 2 : Créez un objet de saisie pour le trousseau de clés.

Chaque méthode qui crée un trousseau de clés possède une classe d'objet d'entrée correspondante. Par exemple, pour créer l'objet d'entrée pour la CreateAwsKmsKeyring() méthode, créez une instance de la CreateAwsKmsKeyringInput classe.

Même si l'entrée de ce trousseau de clés ne spécifie pas de clé de générateur, la KMS clé unique spécifiée par le KmsKeyId paramètre est la clé de générateur. Il génère et chiffre la clé de données qui chiffre les données.

Cet objet d'entrée nécessite un AWS KMS client pour Région AWS la KMS clé. Pour créer un AWS KMS client, instanciez la AmazonKeyManagementServiceClient classe dans le. AWS SDK for .NET L'appel du AmazonKeyManagementServiceClient() constructeur sans paramètres crée un client avec les valeurs par défaut.

Dans un AWS KMS trousseau de clés utilisé pour chiffrer avec le AWS Encryption SDK for. NET, vous pouvez identifier les KMS clés à l'aide de leur identifiant, de leur cléARN, de leur nom d'alias ou de leur aliasARN. Dans un AWS KMS trousseau de clés utilisé pour le déchiffrement, vous devez utiliser une clé ARN pour identifier chaque clé. KMS Si vous prévoyez de réutiliser votre jeu de clés de chiffrement pour le déchiffrer, utilisez un ARN identifiant de clé pour toutes les clés. KMS

string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var kmsKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn };
Étape 3 : Créez le porte-clés.

Pour créer le trousseau de clés, appelez la méthode du trousseau avec l'objet de saisie du trousseau de clés. Cet exemple utilise la CreateAwsKmsKeyring() méthode, qui ne nécessite qu'une seule KMS touche.

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Étape 4 : Définition d'un contexte de chiffrement

Un contexte de chiffrement est un élément facultatif, mais fortement recommandé, des opérations cryptographiques dans le AWS Encryption SDK. Vous pouvez définir une ou plusieurs paires clé-valeur non secrètes.

Note

Avec la version 4. x du AWS Encryption SDK formulaire. NET, vous pouvez exiger un contexte de chiffrement dans toutes les demandes de chiffrement avec le contexte CMM de chiffrement requis.

// Define the encryption context var encryptionContext = new Dictionary<string, string>() { {"purpose", "test"} };
Étape 5 : Créez l'objet d'entrée pour le chiffrement.

Avant d'appeler la Encrypt() méthode, créez une instance de la EncryptInput classe.

string plaintext = File.ReadAllText("C:\\Documents\\CryptoTest\\TestFile.txt"); // Define the encrypt input var encryptInput = new EncryptInput { Plaintext = plaintext, Keyring = keyring, EncryptionContext = encryptionContext };
Étape 6 : Chiffrez le texte en clair.

Utilisez la Encrypt() méthode du AWS Encryption SDK pour chiffrer le texte en clair à l'aide du trousseau de clés que vous avez défini.

La EncryptOutput Encrypt() méthode renvoie des méthodes pour obtenir le message crypté (Ciphertext), le contexte de chiffrement et la suite d'algorithmes.

var encryptOutput = encryptionSdk.Encrypt(encryptInput);
Étape 7 : Obtenez le message crypté.

La Decrypt() méthode indiquée dans le AWS Encryption SDK formulaire. NETprend le Ciphertext membre de l'EncryptOutputinstance.

Le Ciphertext membre de l'EncryptOutputobjet est le message chiffré, un objet portable qui inclut les données chiffrées, les clés de données chiffrées et les métadonnées, y compris le contexte de chiffrement. Vous pouvez stocker le message crypté en toute sécurité pendant une période prolongée ou le soumettre à la Decrypt() méthode pour récupérer le texte en clair.

var encryptedMessage = encryptOutput.Ciphertext;

Déchiffrement en mode strict dans le formulaire. AWS Encryption SDK NET

Les meilleures pratiques recommandent de spécifier les clés que vous utilisez pour déchiffrer les données, une option connue sous le nom de mode strict. AWS Encryption SDK Utilise uniquement les KMS clés que vous spécifiez dans votre trousseau de clés pour déchiffrer le texte chiffré. Les clés de votre jeu de clés de déchiffrement doivent inclure au moins l'une des clés qui ont chiffré les données.

Cet exemple montre le schéma de base du déchiffrement en mode strict avec le for. AWS Encryption SDK NET.

Étape 1 : Instancier la bibliothèque AWS Encryption SDK et les fournisseurs de matériaux.
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Étape 2 : Créez l'objet de saisie pour votre trousseau de clés.

Pour définir les paramètres de la méthode keyring, créez un objet d'entrée. Chaque méthode de porte-clés dans le formulaire AWS Encryption SDK . NETpossède un objet d'entrée correspondant. Comme cet exemple utilise la CreateAwsKmsKeyring() méthode pour créer le trousseau de clés, il instancie la CreateAwsKmsKeyringInput classe pour l'entrée.

Dans un trousseau de clés de déchiffrement, vous devez utiliser une clé ARN pour identifier les KMS clés.

string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var kmsKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn };
Étape 3 : Créez le porte-clés.

Pour créer le trousseau de clés de déchiffrement, cet exemple utilise la CreateAwsKmsKeyring() méthode et l'objet d'entrée du trousseau de clés.

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Étape 4 : Créez l'objet d'entrée à déchiffrer.

Pour créer l'objet d'entrée pour la Decrypt() méthode, instanciez la DecryptInput classe.

Le Ciphertext paramètre du DecryptInput() constructeur prend le Ciphertext membre de l'EncryptOutputobjet renvoyé par la Encrypt() méthode. La Ciphertext propriété représente le message chiffré, qui inclut les données chiffrées, les clés de données chiffrées et les métadonnées AWS Encryption SDK nécessaires pour déchiffrer le message.

Avec la version 4. x du AWS Encryption SDK formulaire. NET, vous pouvez utiliser le EncryptionContext paramètre facultatif pour spécifier votre contexte de chiffrement dans la Decrypt() méthode.

Utilisez le EncryptionContext paramètre pour vérifier que le contexte de chiffrement utilisé lors du chiffrement est inclus dans le contexte de chiffrement utilisé pour déchiffrer le texte chiffré. AWS Encryption SDK ajoute des paires au contexte de chiffrement, y compris la signature numérique si vous utilisez une suite d'algorithmes avec signature, telle que la suite d'algorithmes par défaut.

var encryptedMessage = encryptOutput.Ciphertext; var decryptInput = new DecryptInput { Ciphertext = encryptedMessage, Keyring = keyring, EncryptionContext = encryptionContext // OPTIONAL };
Étape 5 : Décrypter le texte chiffré
var decryptOutput = encryptionSdk.Decrypt(decryptInput);
Étape 6 : Vérifiez le contexte de chiffrement — Version 3. x

La Decrypt() méthode de la version 3. x du AWS Encryption SDK formulaire. NETne prend pas de contexte de chiffrement. Il obtient les valeurs du contexte de chiffrement à partir des métadonnées du message chiffré. Toutefois, avant de renvoyer ou d'utiliser le texte en clair, il est recommandé de vérifier que le contexte de chiffrement utilisé pour déchiffrer le texte chiffré inclut le contexte de chiffrement que vous avez fourni lors du chiffrement.

Vérifiez que le contexte de chiffrement utilisé pour chiffrer est inclus dans le contexte de chiffrement utilisé pour déchiffrer le texte chiffré. AWS Encryption SDK ajoute des paires au contexte de chiffrement, y compris la signature numérique si vous utilisez une suite d'algorithmes avec signature, telle que la suite d'algorithmes par défaut.

// Verify the encryption context string contextKey = "purpose"; string contextValue = "test"; if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue) || !decryptContextValue.Equals(contextValue)) { throw new Exception("Encryption context does not match expected values"); }

Décryptage à l'aide d'un trousseau de découverte dans le formulaire. AWS Encryption SDK NET

Plutôt que de spécifier les KMS clés à déchiffrer, vous pouvez fournir un trousseau de AWS KMS découverte, c'est-à-dire un trousseau de clés ne spécifiant aucune clé. KMS Un trousseau de découverte permet de AWS Encryption SDK déchiffrer les données en utilisant la KMS clé qui les a chiffrées, à condition que l'appelant ait l'autorisation de déchiffrer la clé. Pour les meilleures pratiques, ajoutez un filtre de découverte qui limite les KMS clés pouvant être utilisées à celles Comptes AWS d'une partition spécifique.

Le AWS Encryption SDK pour. NETfournit un jeu de clés de découverte de base qui nécessite un AWS KMS client et un jeu de clés de découverte multiple qui nécessite que vous en spécifiiez un ou plusieurs. Régions AWS Le client et les régions limitent tous deux les KMS clés qui peuvent être utilisées pour déchiffrer le message chiffré. Les objets d'entrée pour les deux trousses de clés utilisent le filtre de découverte recommandé.

L'exemple suivant montre le modèle de déchiffrement des données à l'aide d'un trousseau de découverte et d'un AWS KMS filtre de découverte.

Étape 1 : Instancier la bibliothèque AWS Encryption SDK et la bibliothèque des fournisseurs de matériaux.
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Étape 2 : Créez l'objet de saisie pour le trousseau de clés.

Pour définir les paramètres de la méthode keyring, créez un objet d'entrée. Chaque méthode de porte-clés dans le formulaire AWS Encryption SDK . NETpossède un objet d'entrée correspondant. Comme cet exemple utilise la CreateAwsKmsDiscoveryKeyring() méthode pour créer le trousseau de clés, il instancie la CreateAwsKmsDiscoveryKeyringInput classe pour l'entrée.

List<string> accounts = new List<string> { "111122223333" }; var discoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), DiscoveryFilter = new DiscoveryFilter() { AccountIds = accounts, Partition = "aws" } };
Étape 3 : Créez le porte-clés.

Pour créer le trousseau de clés de déchiffrement, cet exemple utilise la CreateAwsKmsDiscoveryKeyring() méthode et l'objet d'entrée du trousseau de clés.

var discoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(discoveryKeyringInput);
Étape 4 : Créez l'objet d'entrée à déchiffrer.

Pour créer l'objet d'entrée pour la Decrypt() méthode, instanciez la DecryptInput classe. La valeur du Ciphertext paramètre est le Ciphertext membre de l'EncryptOutputobjet renvoyé par la Encrypt() méthode.

Avec la version 4. x du AWS Encryption SDK formulaire. NET, vous pouvez utiliser le EncryptionContext paramètre facultatif pour spécifier votre contexte de chiffrement dans la Decrypt() méthode.

Utilisez le EncryptionContext paramètre pour vérifier que le contexte de chiffrement utilisé lors du chiffrement est inclus dans le contexte de chiffrement utilisé pour déchiffrer le texte chiffré. AWS Encryption SDK ajoute des paires au contexte de chiffrement, y compris la signature numérique si vous utilisez une suite d'algorithmes avec signature, telle que la suite d'algorithmes par défaut.

var ciphertext = encryptOutput.Ciphertext; var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = discoveryKeyring, EncryptionContext = encryptionContext // OPTIONAL }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
Étape 5 : Vérifiez le contexte de chiffrement — Version 3. x

La Decrypt() méthode de la version 3. x du AWS Encryption SDK formulaire. NETn'accepte aucun contexte de chiffrement activéDecrypt(). Il obtient les valeurs du contexte de chiffrement à partir des métadonnées du message chiffré. Toutefois, avant de renvoyer ou d'utiliser le texte en clair, il est recommandé de vérifier que le contexte de chiffrement utilisé pour déchiffrer le texte chiffré inclut le contexte de chiffrement que vous avez fourni lors du chiffrement.

Vérifiez que le contexte de chiffrement utilisé lors du chiffrement est inclus dans le contexte de chiffrement utilisé pour déchiffrer le texte chiffré. AWS Encryption SDK ajoute des paires au contexte de chiffrement, y compris la signature numérique si vous utilisez une suite d'algorithmes avec signature, telle que la suite d'algorithmes par défaut.

// Verify the encryption context string contextKey = "purpose"; string contextValue = "test"; if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue) || !decryptContextValue.Equals(contextValue)) { throw new Exception("Encryption context does not match expected values"); }