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 exemplesaws-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.
- É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 laCreateAwsKmsKeyringInput
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 duAmazonKeyManagementServiceClient()
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 laEncryptInput
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 leCiphertext
membre de l'EncryptOutput
instance.Le
Ciphertext
membre de l'EncryptOutput
objet 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 à laDecrypt()
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 laCreateAwsKmsKeyringInput
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 laDecryptInput
classe.Le
Ciphertext
paramètre duDecryptInput()
constructeur prend leCiphertext
membre de l'EncryptOutput
objet renvoyé par laEncrypt()
méthode. LaCiphertext
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 laDecrypt()
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 laCreateAwsKmsDiscoveryKeyringInput
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 laDecryptInput
classe. La valeur duCiphertext
paramètre est leCiphertext
membre de l'EncryptOutput
objet renvoyé par laEncrypt()
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 laDecrypt()
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"); }