

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.

# Qu'est-ce que c'est AWS Encryption SDK ?
<a name="introduction"></a>

 AWS Encryption SDK Il s'agit d'une bibliothèque de chiffrement côté client conçue pour permettre à chacun de chiffrer et de déchiffrer facilement les données conformément aux normes et aux meilleures pratiques du secteur. Il vous permet de vous concentrer sur les fonctionnalités intrinsèques de votre application, plutôt que sur la meilleure façon de chiffrer et de déchiffrer vos données. AWS Encryption SDK Il est fourni gratuitement sous la licence Apache 2.0.

Les AWS Encryption SDK réponses à des questions telles que les suivantes s'adressent à vous :
+ Quel algorithme de chiffrement dois-je utiliser ?
+ Comment, ou dans lequel mode, devrais-je utiliser cet algorithme ?
+ Comment puis-je générer la clé de chiffrement ?
+ Comment puis-je protéger la clé de chiffrement, et où dois-je la stocker ?
+ Comment puis-je rendre mes données chiffrées portables ?
+ Comment puis-je m'assurer que le destinataire prévu peut lire mes données chiffrées ?
+ Comment puis-je m'assurer que mes données chiffrées ne sont pas modifiées entre leur écriture et leur lecture ?
+ Comment utiliser les clés de données AWS KMS renvoyées ?

Avec le AWS Encryption SDK, vous définissez un [fournisseur de clés principales](concepts.md#master-key-provider) ou un [trousseau de clés](concepts.md#keyring) qui détermine les clés d'encapsulage que vous utilisez pour protéger vos données. Ensuite, vous cryptez et déchiffrez vos données à l'aide de méthodes simples fournies par le. AWS Encryption SDK Il AWS Encryption SDK fait le reste.

Sans cela AWS Encryption SDK, vous pourriez consacrer plus d'efforts à la création d'une solution de chiffrement qu'aux fonctionnalités de base de votre application. Les AWS Encryption SDK réponses à ces questions en fournissant les éléments suivants.

**Une implémentation par défaut qui respecte les bonnes pratiques de chiffrement**  
Par défaut, le AWS Encryption SDK génère une clé de données unique pour chaque objet de données qu'il chiffre. Cette opération respecte la bonne pratique de chiffrement qui consiste à utiliser des clés de données uniques pour chaque opération de chiffrement.  
Il AWS Encryption SDK chiffre vos données à l'aide d'un algorithme de clé symétrique sécurisé et authentifié. Pour de plus amples informations, veuillez consulter [Suites d'algorithmes prises en charge dans le AWS Encryption SDK](supported-algorithms.md).

**Un cadre pour protéger les clés de données à l'aide de clés d'encapsulation**  
 AWS Encryption SDK protège les clés de données qui chiffrent vos données en les chiffrant sous une ou plusieurs clés d'encapsulation. En fournissant un cadre permettant de chiffrer les clés de données à l'aide de plusieurs clés d'encapsulation, AWS Encryption SDK cela contribue à rendre vos données chiffrées portables.   
Par exemple, chiffrez les données sous une AWS KMS key clé d'entrée AWS KMS et une clé à partir de votre HSM local. Vous pouvez utiliser l'une ou l'autre des clés d'encapsulation pour déchiffrer les données, au cas où l'une d'entre elles ne serait pas disponible ou si l'appelant n'est pas autorisé à utiliser les deux clés.

**Un message formaté qui stocke les clés de données chiffrées avec les données chiffrées**  
Les AWS Encryption SDK données cryptées et la clé de données cryptées sont stockées ensemble dans un [message crypté](concepts.md#message) utilisant un format de données défini. Cela signifie que vous n'avez pas besoin de suivre ou de protéger les clés de données qui chiffrent vos données, car elles le AWS Encryption SDK font pour vous.

Certaines implémentations linguistiques du AWS Encryption SDK nécessitent un AWS SDK, mais AWS Encryption SDK cela n'en nécessite pas Compte AWS et cela ne dépend d'aucun AWS service. Vous Compte AWS n'en avez besoin que si vous choisissez de l'utiliser [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys)pour protéger vos données.

## Développé dans des référentiels open source
<a name="esdk-repos"></a>

 AWS Encryption SDK Il est développé dans des référentiels open source sur. GitHub Vous pouvez utiliser ces référentiels pour consulter le code, lire et signaler les problèmes, et trouver des informations spécifiques à l'implémentation de votre langage.
+ Kit SDK de chiffrement AWS pour C — [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)
+ AWS Encryption SDK pour .NET : répertoire [.NET](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/) du `aws-encryption-sdk` référentiel.
+ AWS CLI de chiffrement — [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)
+ Kit SDK de chiffrement AWS pour Java — [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)
+ Kit SDK de chiffrement AWS pour JavaScript — [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)
+ Kit SDK de chiffrement AWS pour Python — [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)
+ AWS Encryption SDK pour [Rust — répertoire Rust](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/) du `aws-encryption-sdk` dépôt.
+ AWS Encryption SDK pour le répertoire [Go — Go](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/) du `aws-encryption-sdk` référentiel

## Compatibilité avec les bibliothèques et services de chiffrement
<a name="intro-compatibility"></a>

 AWS Encryption SDK Il est pris en charge dans plusieurs [langages de programmation](programming-languages.md). Toutes les implémentations de langage sont interopérables. Vous pouvez chiffrer avec une implémentation de langage et déchiffrer avec une autre. L'interopérabilité peut être soumise à des contraintes de langage. Si c'est le cas, ces contraintes sont décrites dans la rubrique relative à l'implémentation du langage. En outre, lors du chiffrement et du déchiffrement, vous devez utiliser des porte-clés compatibles, ou des clés principales et des fournisseurs de clés principales. Pour en savoir plus, consultez [Compatibilité du porte-clés](choose-keyring.md#keyring-compatibility).

Cependant, ils AWS Encryption SDK ne peuvent pas interagir avec d'autres bibliothèques. Comme chaque bibliothèque renvoie des données chiffrées dans un format différent, vous ne pouvez pas chiffrer avec une bibliothèque et déchiffrer avec une autre.

**Client de chiffrement DynamoDB et chiffrement côté client Amazon S3**  <a name="ESDK-DDBEC"></a>
 AWS Encryption SDK Impossible de déchiffrer les données chiffrées par le client de chiffrement [DynamoDB ou le chiffrement côté client](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/) Amazon [S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html). Ces bibliothèques ne peuvent pas déchiffrer le [message crypté](concepts.md#message) qu'elles AWS Encryption SDK renvoient. 

**AWS Key Management Service (AWS KMS)**  <a name="ESDK-KMS"></a>
Les [clés de données AWS Encryption SDK](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) peuvent être utilisées [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)pour protéger vos données, y compris les clés KMS multirégionales. Par exemple, vous pouvez configurer le AWS Encryption SDK pour crypter vos données sous un ou plusieurs AWS KMS keys de vos Compte AWS. Cependant, vous devez utiliser le AWS Encryption SDK pour déchiffrer ces données.   
 AWS Encryption SDK Impossible de déchiffrer le texte chiffré renvoyé par les opérations de AWS KMS [chiffrement ou de chiffrement](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html). [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) De même, l'opération de AWS KMS [déchiffrement](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) ne peut pas déchiffrer le [message chiffré renvoyé](concepts.md#message). AWS Encryption SDK   
Ne AWS Encryption SDK prend en charge que les [clés KMS de chiffrement symétriques](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#symmetric-cmks). Vous ne pouvez pas utiliser de [clé KMS asymétrique](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#asymmetric-cmks) pour le chiffrement ou la connexion au AWS Encryption SDK. Le AWS Encryption SDK génère ses propres clés de signature ECDSA pour les [suites d'algorithmes](supported-algorithms.md) qui signent des messages.

## Support et maintenance
<a name="support"></a>

Il AWS Encryption SDK utilise la même [politique de maintenance](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) que le AWS SDK et les outils, y compris ses phases de version et de cycle de vie. La [meilleure pratique consiste](best-practices.md) à utiliser la dernière version disponible du AWS Encryption SDK pour votre langage de programmation et à effectuer une mise à niveau au fur et à mesure que de nouvelles versions sont publiées. Lorsqu'une version nécessite des modifications importantes, telles que la mise à niveau depuis des AWS Encryption SDK versions antérieures à 1.7. *x* vers les versions 2.0. *x* et versions ultérieures, nous fournissons [des instructions détaillées](migration.md) pour vous aider.

Chaque implémentation du langage de programmation AWS Encryption SDK est développée dans un GitHub référentiel open source distinct. Le cycle de vie et la phase de support de chaque version sont susceptibles de varier selon les référentiels. Par exemple, une version donnée de AWS Encryption SDK peut être en phase de disponibilité générale (support complet) dans un langage de programmation, mais en end-of-support phase dans un autre langage de programmation. Nous vous recommandons d'utiliser une version entièrement prise en charge dans la mesure du possible et d'éviter les versions qui ne sont plus prises en charge.

Pour connaître la phase du cycle de vie des AWS Encryption SDK versions de votre langage de programmation, consultez le `SUPPORT_POLICY.rst` fichier de chaque AWS Encryption SDK référentiel.
+ Kit SDK de chiffrement AWS pour C — [Support\$1Policy.rst](https://github.com/aws/aws-encryption-sdk-c/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK pour .NET — [Support\$1Policy.rst](https://github.com/aws/aws-encryption-sdk-dafny/blob/mainline/SUPPORT_POLICY.rst)
+ AWS CLI de chiffrement — [Support\$1Policy.rst](https://github.com/aws/aws-encryption-sdk-cli/blob/master/SUPPORT_POLICY.rst)
+ Kit SDK de chiffrement AWS pour Java — [Support\$1Policy.rst](https://github.com/aws/aws-encryption-sdk-java/blob/master/SUPPORT_POLICY.rst)
+ Kit SDK de chiffrement AWS pour JavaScript — [Support\$1Policy.rst](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/SUPPORT_POLICY.rst)
+ Kit SDK de chiffrement AWS pour Python — [Support\$1Policy.rst](https://github.com/aws/aws-encryption-sdk-python/blob/master/SUPPORT_POLICY.rst)

Pour plus d'informations, consultez les sections [Versions du AWS Encryption SDK](about-versions.md) et [AWS SDKs et Politique de maintenance des outils](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) dans le Guide de référence des outils AWS SDKs et outils.

## En savoir plus
<a name="intro-see-also"></a>

Pour plus d'informations sur le chiffrement côté client AWS Encryption SDK et côté client, essayez ces sources.
+ Pour obtenir de l'aide concernant les termes et les concepts utilisés dans ce kit SDK, consultez [Concepts contenus dans le AWS Encryption SDK](concepts.md).
+ Pour les directives relatives aux meilleures pratiques, voir[Les meilleures pratiques pour AWS Encryption SDK](best-practices.md).
+ Pour plus d'informations sur le fonctionnement de ce kit SDK, consultez [Fonctionnement du kit SDK](how-it-works.md).
+ Pour des exemples illustrant comment configurer les options dans le AWS Encryption SDK, voir[Configuration du AWS Encryption SDK](configure.md).
+ Pour obtenir des informations techniques détaillées, consultez le document [AWS Encryption SDK référence](reference.md).
+ Pour les spécifications techniques du AWS Encryption SDK, voir les [AWS Encryption SDK spécifications](https://github.com/awslabs/aws-encryption-sdk-specification/) dans GitHub.
+ Pour obtenir des réponses à vos questions sur l'utilisation du AWS Encryption SDK, lisez et publiez sur le [forum de discussion AWS Crypto Tools](https://forums.aws.amazon.com/forum.jspa?forumID=302).

Pour plus d'informations sur les implémentations du AWS Encryption SDK dans différents langages de programmation.
+ **C** : Voir [Kit SDK de chiffrement AWS pour C](c-language.md) la [documentation AWS Encryption SDK C](https://aws.github.io/aws-encryption-sdk-c/html/) et le [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)dépôt sur GitHub.
+ **C\$1/.NET** : Voir [AWS Encryption SDK pour .NET](dot-net.md) et le [aws-encryption-sdk-net](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/)répertoire du `aws-encryption-sdk` dépôt sur. GitHub
+ **Interface de ligne de commande** : [consultez [AWS Encryption SDK interface de ligne de commande](crypto-cli.md) la documentation relative](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/) à la CLI de AWS chiffrement et au [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)référentiel sur GitHub.
+ **Java** : voir[Kit SDK de chiffrement AWS pour Java](java.md), le AWS Encryption SDK [Javadoc](https://aws.github.io/aws-encryption-sdk-java/) et le [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)dépôt activés. GitHub

  **JavaScript**: Voir [Kit SDK de chiffrement AWS pour JavaScript](javascript.md) et le [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)référentiel activé GitHub. 
+ **Python** : voir [Kit SDK de chiffrement AWS pour Python](python.md) la [documentation AWS Encryption SDK Python](https://aws-encryption-sdk-python.readthedocs.io/en/latest/) et le [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)dépôt sur GitHub.

## Envoyer un commentaire
<a name="report-issues"></a>

Nous apprécions vos commentaires. Si vous avez une question ou un commentaire, ou un problème à signaler, veuillez utiliser les ressources suivantes.
+ Si vous découvrez une faille de sécurité potentielle dans le AWS Encryption SDK, veuillez en [informer le service AWS de sécurité](https://aws.amazon.com/security/vulnerability-reporting/). Ne créez pas de GitHub problème public.
+ Pour fournir des commentaires sur le AWS Encryption SDK, signalez un problème dans le GitHub référentiel du langage de programmation que vous utilisez. 
+ Pour nous faire part de vos commentaires sur cette documentation, utilisez les liens de **commentaires** sur cette page. Vous pouvez également déposer un problème ou contribuer au [aws-encryption-sdk-docs](https://github.com/awsdocs/aws-encryption-sdk-docs)référentiel open source pour cette documentation sur GitHub.

# Concepts contenus dans le AWS Encryption SDK
<a name="concepts"></a>

Cette section présente les concepts utilisés dans le AWS Encryption SDK et fournit un glossaire et une référence. Il est conçu pour vous aider à comprendre son AWS Encryption SDK fonctionnement et les termes que nous utilisons pour le décrire.

Vous avez besoin d'aide ? 
+ Découvrez comment le [chiffrement AWS Encryption SDK des enveloppes](#envelope-encryption) est utilisé pour protéger vos données.
+ Découvrez les éléments du chiffrement des enveloppes : les [clés de données](#DEK) qui protègent vos données et les [clés d'encapsulation](#master-key) qui protègent vos clés de données. 
+ Découvrez les [porte-clés](#keyring) et les [fournisseurs de clés principales](#master-key-provider) qui déterminent les clés d'encapsulage que vous utilisez.
+ Découvrez le [contexte de chiffrement](#encryption-context) qui renforce l'intégrité de votre processus de chiffrement. C'est facultatif, mais c'est une bonne pratique que nous recommandons.
+ Découvrez le [message chiffré](#message) renvoyé par les méthodes de chiffrement. 
+ Vous êtes alors prêt à utiliser le AWS Encryption SDK dans votre [langage de programmation](programming-languages.md) préféré.

**Topics**
+ [Chiffrement d’enveloppe](#envelope-encryption)
+ [Clé de données](#DEK)
+ [Clé d'emballage](#master-key)
+ [Fournisseurs de porte-clés et de clés principales](#keyring)
+ [Contexte de chiffrement](#encryption-context)
+ [Message chiffré](#message)
+ [Suite d'algorithmes](#crypto-algorithm)
+ [Gestionnaire de matériaux de chiffrement](#crypt-materials-manager)
+ [Chiffrement symétrique et asymétrique](#symmetric-key-encryption)
+ [Engagement clé](#key-commitment)
+ [Politique d'engagement](#commitment-policy)
+ [Signatures numériques](#digital-sigs)

## Chiffrement d’enveloppe
<a name="envelope-encryption"></a>

La sécurité de vos données chiffrées dépend partiellement de la protection de la clé de données capable de les déchiffrer. Le chiffrement de la clés de données en vue de sa protection est un bonne pratique reconnue. Pour ce faire, vous avez besoin d'une autre clé de chiffrement, connue sous le nom de *clé de chiffrement ou clé* [d'encapsulation](#master-key). La pratique consistant à utiliser une clé d'encapsulation pour chiffrer des clés de données est connue sous le nom de *chiffrement d'enveloppe*.

**Protection des clés de données**  
 AWS Encryption SDK Chiffre chaque message avec une clé de données unique. Il chiffre ensuite la clé de données sous la clé d'encapsulation que vous spécifiez. Il stocke la clé de données cryptée avec les données cryptées dans le message crypté qu'il renvoie.  
Pour spécifier votre clé d'encapsulation, vous utilisez un [porte-clés](#keyring) ou un [fournisseur de clés principales](#master-key-provider).  

![\[Chiffrement des enveloppes avec AWS Encryption SDK\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/envelope-encryption-70.png)


**Chiffrer les mêmes données sous plusieurs clés d'encapsulation**  
Vous pouvez chiffrer la clé de données sous plusieurs clés d'encapsulation. Vous souhaiterez peut-être fournir des clés d'encapsulation différentes pour différents utilisateurs, ou des clés d'encapsulation de différents types ou à différents emplacements. Chacune des clés d'encapsulation chiffre la même clé de données. Il AWS Encryption SDK stocke toutes les clés de données cryptées avec les données cryptées dans le message crypté.   
Pour déchiffrer les données, vous devez fournir une clé d'encapsulation capable de déchiffrer l'une des clés de données chiffrées.  

![\[Chaque clé d'encapsulation chiffre la même clé de données, ce qui donne une clé de données chiffrée pour chaque clé d'encapsulation\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/multiple-wrapping-keys-70.png)


**Combinaison des points forts de plusieurs algorithmes**  
Pour chiffrer vos données, il AWS Encryption SDK utilise par défaut une [suite d'algorithmes](supported-algorithms.md) sophistiquée avec chiffrement symétrique AES-GCM, fonction de dérivation de clés (HKDF) et signature. Pour chiffrer la clé de données, vous pouvez spécifier un [algorithme de chiffrement symétrique ou asymétrique](#symmetric-key-encryption) adapté à votre clé d'encapsulation.   
En règle générale, les algorithmes de chiffrement à clé symétrique sont plus rapides et produisent des textes chiffrés plus petits que le chiffrement asymétrique et le *chiffrement de clé publique*. Cependant, les algorithmes de clé publique fournissent une séparation inhérente des rôles et facilitent la gestion des clés. Pour combiner les points forts de chacun, vous pouvez chiffrer vos données à l'aide d'un chiffrement par clé symétrique, puis chiffrer la clé de données à l'aide d'un chiffrement par clé publique.

## Clé de données
<a name="DEK"></a>

Une *clé de donnée* est une clé de chiffrement utilisée par le kit AWS Encryption SDK pour chiffrer vos données. Chaque clé de données est un tableau d'octets qui respecte les exigences concernant les clés cryptographiques. À moins que vous n'utilisiez la [mise en cache des clés de données](data-key-caching.md), une clé de données unique est AWS Encryption SDK utilisée pour chiffrer chaque message.

Vous n'avez pas besoin de spécifier, de générer, d'implémenter, d'étendre, de protéger ou d'utiliser des clés de données. Le kit AWS Encryption SDK se charge de ces tâches à votre place lorsque vous appelez les opérations de chiffrement et de déchiffrement. 

Pour protéger vos clés de données, elles sont AWS Encryption SDK chiffrées à l'aide d'une ou de plusieurs *clés de chiffrement appelées clés* [d'encapsulation ou clés principales](#master-key). Après avoir AWS Encryption SDK utilisé vos clés de données en texte brut pour chiffrer vos données, il les supprime de la mémoire dès que possible. Ensuite, il stocke les clés de données chiffrées ainsi que les données chiffrées dans le [message chiffré](#message) renvoyé par les opérations de chiffrement. Pour en savoir plus, consultez [Comment AWS Encryption SDK ça marche](how-it-works.md).

**Astuce**  
Dans le AWS Encryption SDK, nous distinguons les *clés de données des clés* *de chiffrement des données*. Plusieurs des [suites d'algorithmes](#crypto-algorithm) prises en charge, y compris la suite par défaut, utilisent une [fonction de dérivation de clés](https://en.wikipedia.org/wiki/Key_derivation_function) qui empêche que la clé de données atteigne ses limites de chiffrement. La fonction de dérivation de clés utilise la clé de données en tant qu'entrée et renvoie une clé de chiffrement des données, qui est utilisée pour chiffrer les données. C'est pour cette raison que nous indiquons souvent que les données sont chiffrées « sous » une clé de données plutôt que « par » la clé de données.

Chaque clé de données chiffrée inclut des métadonnées, notamment l'identifiant de la clé d'encapsulation qui l'a chiffrée. Ces métadonnées permettent d'identifier plus facilement les clés AWS Encryption SDK d'encapsulation valides lors du déchiffrement.

## Clé d'emballage
<a name="master-key"></a>

Une *clé d'encapsulation* est une clé de chiffrement AWS Encryption SDK utilisée pour chiffrer la [clé de données](#DEK) qui chiffre vos données. Chaque clé de données en texte brut peut être chiffrée sous une ou plusieurs clés d'encapsulation. Vous déterminez quelles clés d'encapsulation sont utilisées pour protéger vos données lorsque vous configurez un [trousseau de clés](#keyring) ou un [fournisseur de clés principales](#master-key-provider).

**Note**  
La *clé encapsulée* fait référence aux clés d'un trousseau de clés ou d'un fournisseur de clés principales. La *clé principale* est généralement associée à la `MasterKey` classe que vous instanciez lorsque vous utilisez un fournisseur de clé principale.

Il AWS Encryption SDK prend en charge plusieurs clés d'encapsulation couramment utilisées, telles que AWS Key Management Service (AWS KMS) symétriques [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)(y compris les [clés KMS multirégionales), les clés](configure.md#config-mrks) brutes AES-GCM (Advanced Encryption Standard/Galois Counter Mode) et les clés RSA brutes. Vous pouvez également étendre ou implémenter vos propres clés d'encapsulation. 

Lorsque vous utilisez le chiffrement des enveloppes, vous devez protéger vos clés d'emballage contre tout accès non autorisé. Pour ce faire, vous pouvez utiliser l'une des méthodes suivantes :
+ Utilisez un service web conçu à cet effet, comme [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/).
+ Utilisez un [module de sécurité matériel (HSM)](https://en.wikipedia.org/wiki/Hardware_security_module) tel que celui proposé par [AWS CloudHSM](https://aws.amazon.com/cloudhsm/).
+ Utilisez d'autres outils et services de gestion clés.

Si vous n'avez pas de système de gestion des clés, nous vous le recommandons AWS KMS. Il s' AWS Encryption SDK intègre AWS KMS pour vous aider à protéger et à utiliser vos clés d'emballage. Cependant, AWS Encryption SDK il ne nécessite AWS aucun AWS service.

## Fournisseurs de porte-clés et de clés principales
<a name="keyring"></a>

Pour spécifier les clés d'encapsulation que vous utilisez pour le chiffrement et le déchiffrement, vous utilisez un trousseau de clés ou un fournisseur de clés principales. Vous pouvez utiliser les trousseaux de clés et les fournisseurs de clés principales AWS Encryption SDK fournis ou concevoir vos propres implémentations. AWS Encryption SDK Il fournit des porte-clés et des fournisseurs de clés principales compatibles entre eux sous réserve de contraintes linguistiques. Pour en savoir plus, consultez [Compatibilité du porte-clés](choose-keyring.md#keyring-compatibility). 

Un *porte-clés* génère, chiffre et déchiffre des clés de données. Lorsque vous définissez un trousseau de clés, vous pouvez spécifier les [clés d'encapsulation](#master-key) qui chiffrent vos clés de données. La plupart des porte-clés contiennent au moins une clé d'emballage ou un service fournissant et protégeant les clés d'emballage. Vous pouvez également définir un porte-clés sans clés enveloppantes ou un porte-clés plus complexe avec des options de configuration supplémentaires. Pour obtenir de l'aide sur le choix et l'utilisation des trousseaux de clés AWS Encryption SDK définis, reportez-vous [Porte-clés](choose-keyring.md) à la section. 

Les porte-clés sont pris en charge dans les langages de programmation suivants :
+ Kit SDK de chiffrement AWS pour C
+ Kit SDK de chiffrement AWS pour JavaScript
+ AWS Encryption SDK pour .NET
+ Version 3. *x* du Kit SDK de chiffrement AWS pour Java
+ La version 4. *x* du Kit SDK de chiffrement AWS pour Python, lorsqu'il est utilisé avec la dépendance optionnelle MPL ([Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library)).
+ Version 1. *x* du AWS Encryption SDK pour Rust
+ La version 0.1. *x* ou version ultérieure du AWS Encryption SDK for Go

Un *fournisseur de clés principales* est une alternative au trousseau de clés. Le fournisseur de clés principales renvoie les clés d'encapsulage (ou clés principales) que vous spécifiez. Chaque clé principale est associée à un fournisseur de clés principales, mais un fournisseur de clés principales fournit généralement plusieurs clés principales. Les fournisseurs de clés principales sont pris en charge en Java, Python et dans la CLI de AWS chiffrement. 

Vous devez spécifier un trousseau de clés (ou un fournisseur de clés principales) pour le chiffrement. Vous pouvez spécifier le même trousseau de clés (ou fournisseur de clés principales), ou un autre, pour le déchiffrement. Lors du chiffrement, il AWS Encryption SDK utilise toutes les clés d'encapsulation que vous spécifiez pour chiffrer la clé de données. Lors du déchiffrement, il AWS Encryption SDK utilise uniquement les clés d'encapsulation que vous spécifiez pour déchiffrer une clé de données cryptée. La spécification des clés d'encapsulage pour le déchiffrement est facultative, mais c'est une AWS Encryption SDK [bonne pratique](best-practices.md). 

Pour plus de détails sur la spécification des clés d'encapsulage, consultez[Sélection des clés d'emballage](configure.md#config-keys). 

## Contexte de chiffrement
<a name="encryption-context"></a>

Pour améliorer la sécurité de vos opérations de chiffrement, incluez un contexte de chiffrement dans toutes les demandes de chiffrement de données. L'utilisation d'un contexte de chiffrement est facultative, mais nous vous recommandons un contexte cryptographique dans le cadre des bonnes pratiques.

Un *contexte de chiffrement* est un ensemble de paires nom-valeur qui contient des données non secrètes arbitraires authentifiées supplémentaires. Le contexte de chiffrement peut contenir toutes les données que vous choisissez, mais il comprend généralement les données qui sont utiles pour la journalisation et le suivi, telles que les données relatives au type de fichier, à l'objectif ou à la propriété. Lorsque vous chiffrez des données, le contexte de chiffrement est lié de façon chiffrée aux données chiffrées. Le même contexte de chiffrement est donc requis pour déchiffrer les données. Le kit AWS Encryption SDK comprend le contexte de chiffrement en texte brut dans l'en-tête du [message chiffré](#message) qu'il renvoie.

Le contexte de chiffrement AWS Encryption SDK utilisé comprend le contexte de chiffrement que vous spécifiez et une paire de clés publiques ajoutée par le [gestionnaire de matériel cryptographique](#crypt-materials-manager) (CMM). Plus précisément, chaque fois que vous utilisez un [algorithme de chiffrement avec signature](algorithms-reference.md), le CMM ajoute une paire nom-valeur au contexte de chiffrement et qui se compose d'un nom réservé, `aws-crypto-public-key`, et d'une valeur qui représente la clé de vérification publique. Le `aws-crypto-public-key` nom dans le contexte de chiffrement est réservé par le AWS Encryption SDK et ne peut être utilisé comme nom dans aucune autre paire dans le contexte de chiffrement. Pour plus d'informations, consultez [AAD](message-format.md#header-aad) dans la *Référence de format de message*.

L'exemple de contexte de chiffrement suivant se compose de deux paires de contexte de chiffrement spécifiées dans la requête et de la paire de clés publique que le CMM ajoute.

```
"Purpose"="Test", "Department"="IT", aws-crypto-public-key=<public key>
```

Pour déchiffrer les données, vous transmettez le message chiffré. Comme il est AWS Encryption SDK possible d'extraire le contexte de chiffrement de l'en-tête du message chiffré, il n'est pas nécessaire de fournir le contexte de chiffrement séparément. Cependant, le contexte de chiffrement peut vous aider à confirmer que vous déchiffrez le bon message chiffré. 
+ Dans l'[interface de ligne de commande du kit AWS Encryption SDK](crypto-cli.md), si vous fournissez un contexte de chiffrement dans une commande de déchiffrement, le CLI vérifie que les valeurs sont présentes dans le contexte de chiffrement du message chiffrer avant de renvoyer les données en texte brut. 
+ Dans d'autres implémentations de langage de programmation, la réponse de déchiffrement inclut le contexte de chiffrement et les données en texte clair. La fonction de déchiffrement de votre application doit toujours vérifier que le contexte de chiffrement de la réponse de déchiffrement comprend le contexte de chiffrement dans la requête de chiffrement (ou un sous-ensemble) avant de renvoyer les données en texte brut.

**Note**  
Les versions suivantes prennent en charge le [contexte de chiffrement requis CMM](configure.md#config-required-encryption-context-cmm), que vous pouvez utiliser pour exiger un contexte de chiffrement dans toutes les demandes de chiffrement.  
Version 3. *x* du Kit SDK de chiffrement AWS pour Java
La version 4. *x* et versions ultérieures du AWS Encryption SDK pour .NET
La version 4. *x* du Kit SDK de chiffrement AWS pour Python, lorsqu'il est utilisé avec la dépendance optionnelle MPL ([Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library)).
Version 1. *x* du AWS Encryption SDK pour Rust
La version 0.1. *x* ou version ultérieure du AWS Encryption SDK for Go

Lorsque vous choisissez un contexte de chiffrement, n'oubliez pas qu'il ne s'agit pas d'un secret. Le contexte de chiffrement est affiché en texte clair dans l'en-tête du [message chiffré](#message) renvoyé AWS Encryption SDK . Si vous utilisez AWS Key Management Service, le contexte de chiffrement peut également apparaître en texte clair dans les enregistrements et journaux d'audit, tels que AWS CloudTrail.

Pour des exemples de soumission et de vérification d'un contexte de chiffrement dans votre code, consultez les exemples de votre [langage de programmation](programming-languages.md) préféré.

## Message chiffré
<a name="message"></a>

Lorsque vous chiffrez des données avec le AWS Encryption SDK, un message crypté est renvoyé.

Un *message chiffré* est une [structure de données formatée](message-format.md) portable qui inclut les données chiffrées ainsi que des copies chiffrées des clés de données, l'identifiant de l'algorithme et, éventuellement, un [contexte de chiffrement](#encryption-context) et une [signature numérique](#digital-sigs). Les opérations de chiffrement du kit AWS Encryption SDK renvoient un message chiffré et les opérations de déchiffrement utilisent un message chiffré en tant qu'entrée. 

Le fait d'associer les données chiffrées et leurs clés de données chiffrées simplifie l'opération de déchiffrement et vous évite de devoir stocker et gérer des clés de données chiffrées indépendamment des données qui sont chiffrées.

Pour obtenir des informations techniques sur les messages chiffrés, consultez [Format de message chiffré](message-format.md).

## Suite d'algorithmes
<a name="crypto-algorithm"></a>

Il AWS Encryption SDK utilise une suite d'algorithmes pour chiffrer et signer les données contenues dans le [message crypté renvoyé](#message) par les opérations de chiffrement et de déchiffrement. Le kit AWS Encryption SDK prend en charge plusieurs [suites d'algorithmes](supported-algorithms.md). Toutes les suites prises en charge utilisent l'algorithme AES (Advanced Encryption Standard) en tant qu'algorithme principal et l'associent à d'autres algorithmes et valeurs. 

 AWS Encryption SDK Établit une suite d'algorithmes recommandée par défaut pour toutes les opérations de chiffrement. La valeur par défaut peut évoluer à mesure que les normes et les bonnes pratiques s'améliorent. Vous pouvez spécifier une suite d'algorithmes alternative dans les demandes de chiffrement de données ou lors de la création d'un [gestionnaire de matériel cryptographique (CMM)](#crypt-materials-manager), mais à moins qu'une alternative ne soit requise dans votre situation, il est préférable d'utiliser la suite par défaut. La valeur par défaut actuelle est AES-GCM avec une [fonction de dérivation de extract-and-expand clé](https://en.wikipedia.org/wiki/HKDF) basée sur HMAC ([HKDF](https://en.wikipedia.org/wiki/HKDF)), un [engagement de clé](#key-commitment), une signature [ECDSA (Elliptic Curve Digital Signature Algorithm) et une clé de chiffrement](#digital-sigs) 256 bits. 

Si votre application nécessite des performances élevées et que les utilisateurs qui chiffrent les données et ceux qui les déchiffrent jouissent de la même confiance, vous pouvez envisager de spécifier une suite d'algorithmes sans signature numérique. Cependant, nous recommandons vivement une suite d'algorithmes qui inclut un engagement clé et une fonction de dérivation clé. Les suites d'algorithmes dépourvues de ces fonctionnalités ne sont prises en charge que pour des raisons de rétrocompatibilité.

## Gestionnaire de matériaux de chiffrement
<a name="crypt-materials-manager"></a>

Le gestionnaire de matériel cryptographique (CMM) assemble le matériel cryptographique utilisé pour chiffrer et déchiffrer les données. Les *matériaux de chiffrement* incluent des clés de données en texte brut et chiffrées, ainsi que, éventuellement, une clé de signature de message. Vous n'interagissez jamais directement avec le CMM. Les méthodes de chiffrement et de déchiffrement s'en occupent pour vous.

Vous pouvez utiliser le CMM par défaut ou le CMM de [mise en cache qu'il AWS Encryption SDK fournit, ou écrire un CMM](data-key-caching.md) personnalisé. Et vous pouvez spécifier un CMM, mais ce n'est pas obligatoire. Lorsque vous spécifiez un trousseau de clés ou un fournisseur de clés principales, un CMM par défaut est AWS Encryption SDK créé pour vous. Le CMM par défaut obtient le matériel de chiffrement ou de déchiffrement auprès du trousseau de clés ou du fournisseur de clés principales que vous spécifiez. Pour cela, il peut être nécessaire d'appeler un service de chiffrement, comme [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

Dans la mesure où le CMM fait office de liaison entre le AWS Encryption SDK et un trousseau de clés (ou fournisseur de clés principales), il constitue un point idéal pour la personnalisation et l'extension, notamment pour le soutien à l'application des politiques et à la mise en cache. AWS Encryption SDK fournit un CMM de mise en cache pour prendre en charge la mise en cache [des clés de données](data-key-caching.md). 

## Chiffrement symétrique et asymétrique
<a name="symmetric-key-encryption"></a>

Le *chiffrement symétrique* utilise la même clé pour chiffrer et déchiffrer les données. 

*Le chiffrement asymétrique* utilise une paire de clés de données liées mathématiquement. L'une des clés de la paire chiffre les données ; seule l'autre clé de la paire peut les déchiffrer.

 AWS Encryption SDK Utilise le [cryptage des enveloppes](#envelope-encryption). Il chiffre vos données à l'aide d'une clé de données symétrique. Il chiffre la clé de données symétrique avec une ou plusieurs clés d'encapsulation symétriques ou asymétriques. Il renvoie un [message crypté](#message) qui inclut les données cryptées et au moins une copie cryptée de la clé de données. 

**Chiffrement de vos données (chiffrement symétrique)**  
Pour chiffrer vos données, il AWS Encryption SDK utilise une [clé de données](#DEK) symétrique et une [suite d'algorithmes qui inclut un algorithme](#crypto-algorithm) de chiffrement symétrique. Pour déchiffrer les données, il AWS Encryption SDK utilise la même clé de données et la même suite d'algorithmes.

**Chiffrement de votre clé de données (chiffrement symétrique ou asymétrique)**  
Le [trousseau de clés](#keyring) ou le [fournisseur de clé principale](#master-key-provider) que vous fournissez pour une opération de chiffrement et de déchiffrement détermine la manière dont la clé de données symétrique est cryptée et déchiffrée. Vous pouvez choisir un fournisseur de trousseau ou de clé principale qui utilise un chiffrement symétrique, tel qu'un trousseau de AWS KMS clés, ou un fournisseur qui utilise un chiffrement asymétrique, tel qu'un trousseau de clés RSA brut ou. `JceMasterKey`

## Engagement clé
<a name="key-commitment"></a>

Le AWS Encryption SDK support *key commitment* (parfois appelé *robustesse*), une propriété de sécurité qui garantit que chaque texte chiffré ne peut être déchiffré qu'en un seul texte clair. Pour ce faire, l'engagement des clés garantit que seule la clé de données qui a chiffré votre message sera utilisée pour le déchiffrer. [Le chiffrement et le déchiffrement avec un engagement clé constituent une bonne pratique.AWS Encryption SDK](best-practices.md)

La plupart des chiffrements symétriques modernes (y compris AES) chiffrent un texte en clair avec une clé secrète unique, telle que la clé de [données unique AWS Encryption SDK utilisée pour chiffrer chaque](#DEK) message en texte clair. Le déchiffrement de ces données avec la même clé de données renvoie un texte en clair identique à l'original. Le déchiffrement avec une autre clé échouera généralement. Cependant, il est possible de déchiffrer un texte chiffré sous deux clés différentes. Dans de rares cas, il est possible de trouver une clé capable de déchiffrer quelques octets de texte chiffré en un texte clair différent, mais toujours intelligible. 

Il chiffre AWS Encryption SDK toujours chaque message en texte brut sous une clé de données unique. Il peut chiffrer cette clé de données sous plusieurs clés d'encapsulation (ou clés principales), mais les clés d'encapsulation chiffrent toujours la même clé de données. Néanmoins, un [message chiffré](#message) sophistiqué conçu manuellement peut en fait contenir différentes clés de données, chacune chiffrée par une clé d'encapsulation différente. Par exemple, si un utilisateur déchiffre le message chiffré, il renvoie 0x0 (faux) tandis qu'un autre utilisateur qui déchiffre le même message crypté obtient 0x1 (vrai).

Pour éviter ce scénario, le AWS Encryption SDK support prend en charge l'engagement clé lors du chiffrement et du déchiffrement. Lorsque le AWS Encryption SDK chiffre un message avec engagement de clé, il lie cryptographiquement la clé de données unique qui a produit le texte chiffré à la *chaîne d'engagement de clé, un identifiant de clé* de données non secret. Ensuite, il stocke la chaîne d'engagement clé dans les métadonnées du message crypté. Lorsqu'il déchiffre un message avec une clé d'engagement, il AWS Encryption SDK vérifie que la clé de données est la seule et unique clé pour ce message crypté. Si la vérification de la clé de données échoue, l'opération de déchiffrement échoue. 

Support pour les engagements clés est introduit dans la version 1.7. *x*, qui peut déchiffrer les messages avec un engagement clé, mais ne le chiffrera pas avec un engagement clé. Vous pouvez utiliser cette version pour déployer pleinement la capacité de déchiffrer le texte chiffré avec un engagement clé. La version 2.0. *x* inclut une prise en charge complète des principaux engagements. Par défaut, il chiffre et déchiffre uniquement avec un engagement clé. Il s'agit d'une configuration idéale pour les applications qui n'ont pas besoin de déchiffrer le texte chiffré par les versions antérieures du. AWS Encryption SDK

Bien que le chiffrement et le déchiffrement avec engagement clé soient une bonne pratique, nous vous laissons décider du moment de leur utilisation et du rythme auquel vous les adoptez. À partir de la version 1.7. *x*, AWS Encryption SDK prend en charge une [politique d'engagement](#commitment-policy) qui définit la [suite d'algorithmes par défaut](supported-algorithms.md) et limite les suites d'algorithmes pouvant être utilisées. Cette politique détermine si vos données sont cryptées et déchiffrées avec un engagement clé. 

L'engagement clé se traduit par un [message crypté légèrement plus volumineux (\$1 30 octets)](message-format.md) et son traitement prend plus de temps. Si votre application est très sensible à la taille ou aux performances, vous pouvez choisir de ne pas participer à l'engagement clé. Mais ne le faites que si vous le devez. 

Pour plus d'informations sur la migration vers les versions 1.7. *x* et 2.0. *x*, y compris leurs principales caractéristiques d'engagement, voir[Migration de votre AWS Encryption SDK](migration.md). Pour obtenir des informations techniques sur les principaux engagements, voir [AWS Encryption SDK référence aux algorithmes](algorithms-reference.md) et[AWS Encryption SDK référence de format de message](message-format.md).

## Politique d'engagement
<a name="commitment-policy"></a>

[Une *politique d'engagement* est un paramètre de configuration qui détermine si votre application chiffre et déchiffre avec un engagement clé.](#key-commitment) [Le chiffrement et le déchiffrement avec un engagement clé constituent une bonne pratique.AWS Encryption SDK](best-practices.md) 

La politique d'engagement repose sur trois valeurs.

**Note**  
Il se peut que vous deviez faire défiler le tableau horizontalement ou verticalement pour voir le tableau dans son intégralité.


**Valeurs de la politique d'engagement**  

| Value | Chiffre avec un engagement clé | Chiffre sans engagement de clé | Déchiffre avec un engagement clé | Déchiffre sans engagement clé | 
| --- | --- | --- | --- | --- | 
| ForbidEncryptAllowDecrypt | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-no.png)  | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png)  | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png) | 
| RequireEncryptAllowDecrypt | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-no.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png) | 
| RequireEncryptRequireDecrypt | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-no.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/fr_fr/encryption-sdk/latest/developer-guide/images/icon-no.png) | 

Le paramétrage de la politique d'engagement est introduit dans AWS Encryption SDK la version 1.7. *x.* Il est valide dans tous les [langages de programmation](programming-languages.md) pris en charge.
+ `ForbidEncryptAllowDecrypt`déchiffre avec ou sans engagement clé, mais il ne chiffrera pas avec engagement clé. Cette valeur, introduite dans la version 1.7. *x*, est conçu pour préparer tous les hôtes exécutant votre application à déchiffrer avec clé d'engagement avant qu'ils ne rencontrent un texte chiffré avec clé d'engagement. 
+ `RequireEncryptAllowDecrypt`chiffre toujours avec clé d'engagement. Il peut être déchiffré avec ou sans engagement clé. Cette valeur, introduite dans la version 2.0. *x*, vous permet de commencer à chiffrer avec un engagement clé, tout en déchiffrant les anciens textes chiffrés sans engagement clé.
+ `RequireEncryptRequireDecrypt`chiffre et déchiffre uniquement avec un engagement clé. Cette valeur est la valeur par défaut pour la version 2.0. *x.* Utilisez cette valeur lorsque vous êtes certain que tous vos textes chiffrés sont chiffrés avec une clé d'engagement.

Le paramètre de politique d'engagement détermine les suites d'algorithmes que vous pouvez utiliser. À partir de la version 1.7. *x*, AWS Encryption SDK prend en charge les [suites d'algorithmes](supported-algorithms.md) pour l'engagement des clés, avec ou sans signature. Si vous spécifiez une suite d'algorithmes qui entre en conflit avec votre politique d'engagement, une erreur est AWS Encryption SDK renvoyée. 

Pour obtenir de l'aide sur la définition de votre politique d'engagement, consultez[Définition de votre politique d'engagement](migrate-commitment-policy.md).

## Signatures numériques
<a name="digital-sigs"></a>

 AWS Encryption SDK Chiffre vos données à l'aide d'un algorithme de cryptage authentifié, AES-GCM, et le processus de déchiffrement vérifie l'intégrité et l'authenticité d'un message crypté sans utiliser de signature numérique. Mais comme AES-GCM utilise des clés symétriques, toute personne capable de déchiffrer la clé de données utilisée pour déchiffrer le texte chiffré pourrait également créer manuellement un nouveau texte chiffré, ce qui pourrait poser un problème de sécurité. Par exemple, si vous utilisez un AWS KMS key comme clé d'encapsulation, un utilisateur `kms:Decrypt` autorisé peut créer des textes chiffrés chiffrés sans appeler. `kms:Encrypt`

Pour éviter ce problème, il AWS Encryption SDK prend en charge l'ajout d'une signature ECDSA (Elliptic Curve Digital Signature Algorithm) à la fin des messages chiffrés. Lorsqu'une suite d'algorithmes de signature est utilisée, une clé privée temporaire et une paire de clés publiques sont générées pour chaque message chiffré. AWS Encryption SDK AWS Encryption SDK Stocke la clé publique dans le contexte de chiffrement de la clé de données et supprime la clé privée. Cela garantit que personne ne peut créer une autre signature vérifiant avec la clé publique. L'algorithme lie la clé publique à la clé de données chiffrée sous forme de données authentifiées supplémentaires dans l'en-tête du message, empêchant ainsi les utilisateurs qui ne peuvent que déchiffrer des messages de modifier la clé publique ou d'affecter la vérification de signature.

La vérification des signatures entraîne un coût de performance significatif lors du déchiffrement. Si les utilisateurs qui chiffrent les données et ceux qui les déchiffrent jouissent de la même confiance, envisagez d'utiliser une suite d'algorithmes qui n'inclut pas la signature.

**Note**  
Si le trousseau de clés ou l'accès au matériel cryptographique encapsulé ne fait pas de distinction entre les crypteurs et les déchiffreurs, les signatures numériques ne fournissent aucune valeur cryptographique.

AWS KMS les [trousseaux de clés](use-kms-keyring.md), y compris le AWS KMS porte-clés RSA asymétrique, peuvent faire la distinction entre les chiffreurs et les déchiffreurs en fonction des politiques clés et des politiques IAM. AWS KMS 

En raison de leur nature cryptographique, les trousseaux de clés suivants ne peuvent pas faire la distinction entre les crypteurs et les déchiffreurs :
+ AWS KMS Porte-clés hiérarchique
+ AWS KMS Porte-clés ECDH
+ Porte-clés AES brut
+ Porte-clés RSA brut
+ Porte-clés ECDH brut

# Comment AWS Encryption SDK ça marche
<a name="how-it-works"></a>

[Les flux de travail présentés dans cette section expliquent comment AWS Encryption SDK crypte les données et déchiffre les messages chiffrés.](concepts.md#message) Ces flux de travail décrivent le processus de base utilisant les fonctionnalités par défaut. Pour plus de détails sur la définition et l'utilisation de composants personnalisés, consultez le GitHub référentiel de chaque [implémentation de langage](programming-languages.md) prise en charge.

Il AWS Encryption SDK utilise le cryptage des enveloppes pour protéger vos données. Chaque message est crypté sous une clé de données unique. La clé de données est ensuite chiffrée par les clés d'encapsulation que vous spécifiez. Pour déchiffrer le message chiffré, il AWS Encryption SDK utilise les clés d'encapsulation que vous spécifiez pour déchiffrer au moins une clé de données cryptée. Il peut ensuite déchiffrer le texte chiffré et renvoyer un message en texte clair.

Vous avez besoin d'aide avec la terminologie que nous utilisons dans le AWS Encryption SDK ? Consultez [Concepts contenus dans le AWS Encryption SDK](concepts.md).

## Comment AWS Encryption SDK crypte les données
<a name="encrypt-workflow"></a>

 AWS Encryption SDK Fournit des méthodes qui chiffrent les chaînes, les tableaux d'octets et les flux d'octets. Pour des exemples de code, consultez la rubrique Exemples de chaque [Langages de programmation](programming-languages.md) section.

1. Créez un [trousseau de clés](choose-keyring.md) (ou un [fournisseur de clés principales](concepts.md#master-key-provider)) qui spécifie les clés d'encapsulation qui protègent vos données.

1. Transmettez le trousseau de clés et les données en texte brut à une méthode de cryptage. Nous vous recommandons de transmettre un [contexte de chiffrement](concepts.md#encryption-context) facultatif et non secret.

1. La méthode de cryptage demande au trousseau de clés le matériel de cryptage. Le trousseau de clés renvoie des clés de chiffrement de données uniques pour le message : une clé de données en texte brut et une copie de cette clé de données chiffrée par chacune des clés d'encapsulation spécifiées.

1. La méthode de chiffrement utilise la clé de données en texte brut pour chiffrer les données, puis la supprime. Si vous fournissez un contexte de chiffrement (une AWS Encryption SDK [bonne pratique](best-practices.md)), la méthode de chiffrement lie cryptographiquement le contexte de chiffrement aux données chiffrées.

1. La méthode de chiffrement renvoie un [message chiffré](concepts.md#message) contenant les données chiffrées, les clés de données chiffrées et d'autres métadonnées, y compris le contexte de chiffrement, si vous en avez utilisé un.

## Comment AWS Encryption SDK décrypte un message crypté
<a name="decrypt-workflow"></a>

 AWS Encryption SDK fournit des méthodes qui déchiffrent le [message chiffré](concepts.md#message) et renvoient du texte en clair. Pour des exemples de code, consultez la rubrique Exemples de chaque [Langages de programmation](programming-languages.md) section.

Le [trousseau de clés](choose-keyring.md) (ou [fournisseur de clé principale](concepts.md#master-key-provider)) qui déchiffre le message chiffré doit être compatible avec celui utilisé pour chiffrer le message. L'une de ses clés d'encapsulation doit être capable de déchiffrer une clé de données cryptée dans le message crypté. Pour plus d'informations sur la compatibilité avec les trousseaux de clés et les fournisseurs de clés principales, consultez[Compatibilité du porte-clés](choose-keyring.md#keyring-compatibility).

1. Créez un trousseau de clés ou un fournisseur de clés principales avec des clés d'encapsulation capables de déchiffrer vos données. Vous pouvez utiliser le même trousseau de clés que celui que vous avez fourni pour la méthode de chiffrement ou un autre.

1. Passez le [message crypté](concepts.md#message) et le trousseau de clés à une méthode de déchiffrement.

1. La méthode de déchiffrement demande au trousseau de clés ou au fournisseur de clés principales de déchiffrer l'une des clés de données chiffrées du message chiffré. Il transmet des informations à partir du message chiffré, y compris les clés de données chiffrées.

1. Le porte-clés utilise ses clés d'encapsulage pour déchiffrer l'une des clés de données chiffrées. En cas de succès, la réponse inclut la clé de données en texte brut. Si aucune des clés d'encapsulation spécifiées par le trousseau de clés ou le fournisseur de clés principales ne peut déchiffrer une clé de données chiffrée, l'appel de déchiffrement échoue.

1. La méthode de déchiffrement utilise la clé de données en texte brut pour déchiffrer les données, supprime la clé de données en texte clair et renvoie les données en texte clair.

# Suites d'algorithmes prises en charge dans le AWS Encryption SDK
<a name="supported-algorithms"></a>

Une *suite d'algorithmes* est un ensemble d'algorithmes de chiffrement et de valeurs connexes. Les systèmes de chiffrement utilisent l'implémentation de l'algorithme pour générer le message du texte chiffré.

La suite d'algorithmes utilise l' AWS Encryption SDK algorithme Advanced Encryption Standard (AES) en Galois/Counter mode (GCM), connu sous le nom d'AES-GCM, pour chiffrer les données brutes. Il AWS Encryption SDK prend en charge les clés de chiffrement 256 bits, 192 bits et 128 bits. La longueur du vecteur d'initialisation (IV) est toujours de 12 octets. La longueur de la balise d'authentification est toujours de 16 octets.

Par défaut, il AWS Encryption SDK utilise une suite d'algorithmes avec AES-GCM avec une fonction de dérivation de extract-and-expand clé basée sur HMAC ([HKDF](https://en.wikipedia.org/wiki/HKDF)), une signature et une clé de chiffrement 256 bits. Si la [politique d'engagement](concepts.md#commitment-policy) exige un [engagement clé](concepts.md#key-commitment), elle AWS Encryption SDK sélectionne une suite d'algorithmes qui prend également en charge l'engagement clé ; sinon, elle sélectionne une suite d'algorithmes avec dérivation et signature de clés, mais pas d'engagement clé.

## Recommandé : AES-GCM avec dérivation des clés, signature et engagement clé
<a name="recommended-algorithms"></a>

 AWS Encryption SDK Il recommande une suite d'algorithmes qui déduit une clé de chiffrement AES-GCM en fournissant une clé de chiffrement de données de 256 bits à la fonction de dérivation de clés basée sur le HMAC extract-and-expand (HKDF). AWS Encryption SDK Ajoute une signature ECDSA (Elliptic Curve Digital Signature Algorithm). Pour soutenir [l'engagement des clés](concepts.md#key-commitment), cette suite d'algorithmes déduit également une *chaîne d'engagement clé* (un identifiant de clé de données non secret) qui est stockée dans les métadonnées du message crypté. Cette chaîne d'engagement de clé est également dérivée via HKDF en utilisant une procédure similaire à la dérivation de la clé de chiffrement des données.


**AWS Encryption SDK Suite d'algorithmes**  

| Algorithme de chiffrement | Longueur de la clé de chiffrement des données (en bits) | Algorithme de dérivation de clé | Algorithme de signature | Engagement clé | 
| --- | --- | --- | --- | --- | 
| AES-GCM | 256 | HKDF avec SHA-384 | ECDSA avec P-384 et SHA-384 | HKDF avec SHA-512 | 

Le HKDF vous aide à éviter la réutilisation accidentelle d'une clé de chiffrement de données et réduit le risque d'utilisation abusive d'une clé de données. 

Pour la signature, cette suite d'algorithmes utilise l'ECDSA avec un algorithme de fonction de hachage cryptographique (SHA-384). ECDSA est utilisé par défaut, même lorsqu'il n'est pas spécifié par la stratégie pour la clé principale sous-jacente. La [signature des messages](concepts.md#digital-sigs) permet de vérifier que l'expéditeur du message était autorisé à chiffrer les messages et garantit la non-répudiation. Cela s'avère particulièrement utile lorsque la stratégie d'autorisation pour une clé principale autorise un ensemble d'utilisateurs à chiffrer des données et un autre ensemble d'utilisateurs à déchiffrer des données. 

Des suites d'algorithmes dotées d'un engagement clé garantissent que chaque texte chiffré est déchiffré en un seul texte clair. Pour ce faire, ils valident l'identité de la clé de données utilisée comme entrée dans l'algorithme de chiffrement. Lors du chiffrement, ces suites d'algorithmes dérivent une chaîne d'engagement clé. Avant le déchiffrement, ils vérifient que la clé de données correspond à la chaîne d'engagement de la clé. Si ce n'est pas le cas, l'appel de déchiffrement échoue.

## Autres suites d'algorithmes prises en charge
<a name="other-algorithms"></a>

Il AWS Encryption SDK prend en charge les suites d'algorithmes alternatives suivantes pour une compatibilité descendante. En général, nous vous déconseillons ces suites d'algorithme. Cependant, nous sommes conscients que la signature peut nuire considérablement aux performances. C'est pourquoi nous proposons une suite de validation clé avec dérivation de clés pour ces cas. Pour les applications qui doivent faire des compromis de performance plus importants, nous continuons à proposer des suites dépourvues de signature, d'engagement clé et de dérivation des clés.

**AES-GCM sans engagement clé**  
Les suites d'algorithmes sans engagement de clé ne valident pas la clé de données avant le déchiffrement. Par conséquent, ces suites d'algorithmes peuvent déchiffrer un seul texte chiffré en différents messages en texte brut. Cependant, étant donné que les suites d'algorithmes avec engagement par clé produisent un [message chiffré légèrement plus volumineux (\$130 octets)](message-format.md) et prennent plus de temps à traiter, elles ne constituent peut-être pas le meilleur choix pour toutes les applications.   
Il AWS Encryption SDK prend en charge une suite d'algorithmes avec dérivation clé, engagement clé, signature, et une autre avec dérivation clé et engagement clé, mais pas de signature. Nous vous déconseillons d'utiliser une suite d'algorithmes sans engagement clé. S'il le faut, nous recommandons une suite d'algorithmes avec dérivation des clés et engagement des clés, mais pas de signature. Toutefois, si le profil de performance de votre application prend en charge l'utilisation d'une suite d'algorithmes, il est recommandé d'utiliser une suite d'algorithmes avec engagement clé, dérivation de clés et signature.

**AES-GCM sans signature**  
Les suites d'algorithmes sans signature ne possèdent pas la signature ECDSA qui garantit l'authenticité et la non-répudiation. N'utilisez ces suites que lorsque les utilisateurs qui chiffrent les données et ceux qui les déchiffrent jouissent de la même confiance.   
Lorsque vous utilisez une suite d'algorithmes sans signature, nous vous recommandons d'en choisir une avec une dérivation et un engagement clés. 

**AES-GCM sans dérivation de clé**  
Les suites d'algorithmes sans dérivation de clé utilisent la clé de chiffrement des données comme clé de chiffrement AES-GCM, au lieu d'utiliser une fonction de dérivation de clé pour dériver une clé unique. Nous vous déconseillons d'utiliser cette suite pour générer du texte chiffré, mais elle la AWS Encryption SDK prend en charge pour des raisons de compatibilité.

Pour plus d'informations sur la façon dont ces suites sont représentées et utilisées dans la bibliothèque, consultez [AWS Encryption SDK référence aux algorithmes](algorithms-reference.md).