

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.

# Fournisseur de matériel cryptographique
<a name="crypto-materials-providers"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). La rubrique suivante fournit des informations sur les versions 1. *x* —2. *x* du client de chiffrement DynamoDB pour Java et versions 1. *x* —3. *x* du client de chiffrement DynamoDB pour Python. Pour plus d'informations, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

L'une des décisions les plus importantes que vous prenez lorsque vous utilisez le client de chiffrement DynamoDB est de sélectionner [un fournisseur de matériel cryptographique](DDBEC-legacy-concepts.md#concept-material-provider) (CMP). Le fournisseur CMP assemble et retourne les matériaux de déchiffrement au chiffreur d'élément. Il détermine aussi la façon dont les clés de chiffrement et les clés de signature sont générées, que les nouveaux matériaux de clés soient générés pour chaque élément ou soient réutilisés, et les algorithmes de chiffrement et de signature qui sont utilisés. 

Vous pouvez choisir un CMP parmi les implémentations fournies dans les bibliothèques du client de chiffrement DynamoDB ou créer un CMP personnalisé compatible. Le choix du fournisseur CMP peut aussi dépendre du [langage de programmation](programming-languages.md) que vous utilisez.

Cette rubrique décrit les plus courantes CMPs et propose quelques conseils pour vous aider à choisir celle qui convient le mieux à votre application.

**Fournisseur de matériaux KMS direct**  
Le fournisseur de matériel KMS direct protège les articles de votre table sous un format [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)qui ne laisse jamais [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) non chiffré. Votre application n'a pas à générer ou gérer des matériaux de chiffrement. Comme il utilise le AWS KMS key pour générer des clés de chiffrement et de signature uniques pour chaque élément, ce fournisseur appelle AWS KMS chaque fois qu'il chiffre ou déchiffre un élément.   
Si vous utilisez AWS KMS et qu'un AWS KMS appel par transaction est pratique pour votre application, ce fournisseur est un bon choix.  
Pour en savoir plus, consultez [Fournisseur de matériaux KMS direct](direct-kms-provider.md).

**Fournisseur CMP encapsulé**  
Le Wrapped Materials Provider (Wrapped CMP) vous permet de générer et de gérer vos clés d'encapsulation et de signature en dehors du client de chiffrement DynamoDB.   
Le fournisseur CMP encapsulé génère une clé de chiffrement unique pour chaque élément. Puis, il utilise les clés d'encapsulation (ou de désencapsulation) et de signature que vous fournissez. En tant que tel, vous déterminez de quelle façon les clés d'encapsulation et de signature sont générées, et si elles sont propres à chaque élément ou sont réutilisées. Le Wrapped CMP est une alternative sécurisée au [fournisseur Direct KMS](direct-kms-provider.md) pour les applications qui n'utilisent pas de matériel cryptographique AWS KMS et qui peuvent le gérer en toute sécurité.  
Pour en savoir plus, consultez [Fournisseur de matériaux encapsulé](wrapped-provider.md).

**À propos du fournisseur le plus récent**  
Le *fournisseur le plus récent* est un [fournisseur CMP](DDBEC-legacy-concepts.md#concept-material-provider) conçu pour travailler avec un [magasin de fournisseur](DDBEC-legacy-concepts.md#provider-store). Il CMPs provient du magasin du fournisseur et obtient le matériel cryptographique qu'il renvoie depuis le CMPs. Le fournisseur le plus récent utilise généralement chaque fournisseur CMP pour satisfaire plusieurs demandes de matériaux de chiffrement, mais vous pouvez utiliser les fonctions du magasin de fournisseur pour contrôler l'étendue à laquelle les matériaux sont réutilisés, déterminer à quelle fréquence a lieu la rotation des fournisseurs CMP et, même, modifier le type de fournisseur CMP utilisé sans modifier le fournisseur le plus récent.  
Vous pouvez utiliser le fournisseur le plus récent avec n'importe quel magasin de fournisseur compatible. Le client de chiffrement DynamoDB inclut MetaStore un, qui est un magasin fournisseur qui renvoie Wrapped. CMPs  
Le fournisseur le plus récent constitue un bon choix pour les applications qui doivent minimiser les appels à leur source de chiffrement, et pour les applications qui peuvent réutiliser certains matériaux de chiffrement sans enfreindre leurs exigences de sécurité. Par exemple, il vous permet de protéger votre matériel cryptographique avec un [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)in [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) sans avoir à appeler AWS KMS chaque fois que vous chiffrez ou déchiffrez un élément.  
Pour en savoir plus, consultez [À propos du fournisseur le plus récent](most-recent-provider.md).

**Fournisseur de matériaux statique**  
Le fournisseur de matériaux statiques est conçu pour les tests, les proof-of-concept démonstrations et la compatibilité existante. Il ne génère pas de matériaux de chiffrement uniques pour chaque élément. Il retourne les mêmes clés de chiffrement et de signature que vous fournissez, et ces clés sont utilisées directement pour chiffrer, déchiffrer et signer vos éléments de table.   
Le [fournisseur statique asymétrique](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) de la bibliothèque Java n'est pas un fournisseur statique. Il fournit juste d'autres constructeurs au [fournisseur CMP encapsulé](wrapped-provider.md). Il est sûr pour une utilisation en production, mais vous devez utiliser directement le CMP encapsulé chaque fois que possible.

**Topics**
+ [Fournisseur de matériaux KMS direct](direct-kms-provider.md)
+ [Fournisseur de matériaux encapsulé](wrapped-provider.md)
+ [À propos du fournisseur le plus récent](most-recent-provider.md)
+ [Fournisseur de matériaux statique](static-provider.md)

# Fournisseur de matériaux KMS direct
<a name="direct-kms-provider"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). La rubrique suivante fournit des informations sur les versions 1. *x* —2. *x* du client de chiffrement DynamoDB pour Java et versions 1. *x* —3. *x* du client de chiffrement DynamoDB pour Python. Pour plus d'informations, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Le fournisseur de *matériel Direct KMS (fournisseur* direct KMS) protège les éléments de votre table sous un format [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)qui ne laisse jamais [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) non chiffré. Le [fournisseur CMP](DDBEC-legacy-concepts.md#concept-material-provider) retourne une clé de chiffrement et une clé de signature uniques pour chaque élément de table. Pour ce faire, il appelle AWS KMS chaque fois que vous chiffrez ou déchiffrez un élément.

Si vous traitez des éléments DynamoDB à une fréquence élevée et à grande échelle, vous risquez de dépasser les limites, ce qui entraîne des AWS KMS [requests-per-secondretards](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second) de traitement. Si vous devez dépasser une limite, créez un dossier dans le [AWS Support Centre](https://console.aws.amazon.com/support/home). Vous pouvez également envisager de faire appel à un fournisseur de matériel cryptographique avec une réutilisation limitée des clés, tel que le [fournisseur le plus récent](most-recent-provider.md).

Pour utiliser le fournisseur Direct KMS, l'appelant doit avoir, au moins [un Compte AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) AWS KMS key, et l'autorisation d'appeler les opérations [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)et de [déchiffrer](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) sur le. AWS KMS key AWS KMS key Il doit s'agir d'une clé de chiffrement symétrique ; le client de chiffrement DynamoDB ne prend pas en charge le chiffrement asymétrique. [Si vous utilisez une table [globale DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), vous souhaiterez peut-être spécifier AWS KMS une clé multirégionale.](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) Pour en savoir plus, consultez [Comment l'utiliser](#provider-kms-how-to-use).

**Note**  
Lorsque vous utilisez le fournisseur Direct KMS, les noms et les valeurs de vos attributs de clé primaire apparaissent en texte clair dans le [contexte de AWS KMS chiffrement](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) et dans AWS CloudTrail les journaux des AWS KMS opérations associées. Toutefois, le client de chiffrement DynamoDB n'expose jamais le texte en clair des valeurs d'attributs chiffrées.

Le fournisseur Direct KMS est l'un des nombreux [fournisseurs de matériel cryptographique](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) pris en charge par le client de chiffrement DynamoDB. Pour plus d'informations sur l'autre CMPs, voir[Fournisseur de matériel cryptographique](crypto-materials-providers.md).

**Pour obtenir un exemple de code, consultez :**
+ Java: [AwsKmsEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/AwsKmsEncryptedItem.java)
+ Python : [aws-kms-encrypted-table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_table.py), [aws-kms-encrypted-item](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_item.py)

**Topics**
+ [Comment l'utiliser](#provider-kms-how-to-use)
+ [Comment ça marche](#provider-kms-how-it-works)

## Comment l'utiliser
<a name="provider-kms-how-to-use"></a>

Pour créer un fournisseur KMS direct, utilisez le paramètre Key ID pour spécifier une [clé KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) de chiffrement symétrique dans votre compte. La valeur du paramètre Key ID peut être l'ID de clé, l'ARN de clé, le nom d'alias ou l'ARN d'alias du AWS KMS key. Pour plus de détails sur les identificateurs de clé, consultez la section [Identifiants de clé](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) dans le guide du *AWS Key Management Service développeur*.

Le fournisseur Direct KMS nécessite une clé KMS de chiffrement symétrique. Vous ne pouvez pas utiliser de clé KMS asymétrique. Toutefois, vous pouvez utiliser une clé KMS multirégionale, une clé KMS contenant des éléments clés importés ou une clé KMS dans un magasin de clés personnalisé. Vous devez disposer des autorisations [kms : GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) et [KMS:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) sur la clé KMS. Vous devez donc utiliser une clé gérée par le client, et non une clé KMS AWS gérée ou AWS détenue.

Le client de chiffrement DynamoDB pour Python détermine la région à AWS KMS appeler depuis la région dans la valeur du paramètre ID clé, s'il en inclut une. Sinon, il utilise la région du AWS KMS client, si vous en spécifiez une, ou la région que vous configurez dans le AWS SDK pour Python (Boto3). Pour plus d'informations sur la sélection de régions en Python, consultez [Configuration](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html) dans le manuel de AWS référence de l'API SDK for Python (Boto3).

Le client de chiffrement DynamoDB pour Java détermine la région à AWS KMS appeler depuis la région du client, si AWS KMS le client que vous spécifiez inclut une région. Dans le cas contraire, il utilise la région que vous configurez dans le AWS SDK pour Java. Pour plus d'informations sur la sélection des régions dans le AWS SDK pour Java, voir [Région AWS sélection](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-region-selection.html) dans le guide du AWS SDK pour Java développeur.

------
#### [ Java ]

```
// Replace the example key ARN and Region with valid values for your application
final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
final String region = 'us-west-2'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
```

------
#### [ Python ]

L'exemple suivant utilise la clé ARN pour spécifier le AWS KMS key. Si votre identifiant de clé n'inclut pas de Région AWS, le client de chiffrement DynamoDB obtient la région à partir de la session Botocore configurée, s'il en existe une, ou à partir des paramètres par défaut de Boto.

```
# Replace the example key ID with a valid value
kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)
```

------

Si vous utilisez des tables [globales Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), nous vous recommandons de chiffrer vos données sous une clé multirégionale. AWS KMS Les clés multirégionales sont AWS KMS keys différentes Régions AWS et peuvent être utilisées de manière interchangeable car elles ont le même identifiant de clé et le même matériau de clé. Pour plus de détails, consultez la section [Utilisation de clés multirégionales](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) dans le *Guide du AWS Key Management Service développeur*.

**Note**  
Si vous utilisez la [version 2017.11.29](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html) des tables globales, vous devez définir des actions attributaires afin que les champs de réplication réservés ne soient ni chiffrés ni signés. Pour en savoir plus, consultez [Problèmes liés aux anciennes versions des tables globales](troubleshooting.md#fix-global-tables).

Pour utiliser une clé multirégionale avec le client de chiffrement DynamoDB, créez une clé multirégionale et répliquez-la dans les régions dans lesquelles votre application s'exécute. Configurez ensuite le fournisseur Direct KMS pour utiliser la clé multirégionale dans la région dans laquelle le client de chiffrement DynamoDB appelle. AWS KMS

L'exemple suivant configure le client de chiffrement DynamoDB pour chiffrer les données dans la région USA Est (Virginie du Nord) (us-east-1) et les déchiffrer dans la région USA Ouest (Oregon) (us-west-2) à l'aide d'une clé multirégionale.

------
#### [ Java ]

Dans cet exemple, le client de chiffrement DynamoDB obtient la région à AWS KMS appeler depuis la région du client. AWS KMS La `keyArn` valeur identifie une clé multirégionale dans la même région.

```
// Encrypt in us-east-1

// Replace the example key ARN and Region with valid values for your application
final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
final String region = 'us-east-1'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
```

```
// Decrypt in us-west-2

// Replace the example key ARN and Region with valid values for your application
final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
final String region = 'us-west-2'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
```

------
#### [ Python ]

Dans cet exemple, le client de chiffrement DynamoDB obtient la région à AWS KMS appeler depuis la région dans l'ARN de la clé.

```
# Encrypt in us-east-1

# Replace the example key ID with a valid value
us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
```

```
# Decrypt in us-west-2

# Replace the example key ID with a valid value
us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)
```

------

## Comment ça marche
<a name="provider-kms-how-it-works"></a>

Le fournisseur Direct KMS renvoie des clés de chiffrement et de signature protégées par un AWS KMS key code que vous spécifiez, comme indiqué dans le schéma suivant.

![\[Entrée, traitement et sortie du fournisseur KMS direct dans le client de chiffrement DynamoDB\]](http://docs.aws.amazon.com/fr_fr/database-encryption-sdk/latest/devguide/images/directKMS.png)

+ Pour générer du matériel de chiffrement, le fournisseur Direct KMS demande de AWS KMS [générer une clé de données unique](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) pour chaque élément à l'aide d'une clé AWS KMS key que vous spécifiez. Il dérive les clés de chiffrement et de signature de l'élément depuis la copie en texte brut de la [clé de données](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys), puis retourne les clés de chiffrement et de signature, ainsi que la clé des données chiffrées, qui est stockée dans l'[attribut de description de matériau](DDBEC-legacy-concepts.md#legacy-material-description) de l'élément. 

  Le chiffreur d'élément utilise les clés de chiffrement et de signature, et les supprime de la mémoire dès que possible. Seule la copie chiffrée de la clé de données à partir de laquelle elles ont été dérivées est enregistrée dans l'élément chiffré.
+ Pour générer du matériel de déchiffrement, le fournisseur KMS direct demande de AWS KMS déchiffrer la clé de données chiffrée. Puis, il dérive les clés de vérification et de signature de la clé de données en texte brut, et les retourne au chiffreur d'élément.

  Le chiffreur d'élément vérifie l'élément et, si la vérification aboutit, déchiffre les valeurs chiffrées. Puis, il supprime les clés de la mémoire dès que possible.

### Obtention des matériaux de chiffrement
<a name="direct-kms-get-encryption-materials"></a>

Cette section décrit en détail les entrées, les sorties et le traitement du fournisseur KMS direct quand il reçoit une demande de matériaux de chiffrement de la part du [chiffreur d'élément](DDBEC-legacy-concepts.md#item-encryptor).

**Entrée ** (depuis l'application)
+ L'identifiant clé d'un AWS KMS key. 

**Entrée** (depuis le chiffreur d'élément)
+ [Contexte de chiffrement DynamoDB](concepts.md#encryption-context)

**Sortie** (vers le chiffreur d'élément)
+ Clé de chiffrement (texte brut)
+ Clé de signature
+ Dans [Description du matériau réel](DDBEC-legacy-concepts.md#legacy-material-description) : ces valeurs sont enregistrées dans l'attribut de description du matériau que le client ajoute à l'élément.
  + amzn-ddb-env-key: clé de données codée en Base64 cryptée par le AWS KMS key
  + amzn-ddb-env-alg: algorithme de chiffrement, par défaut [AES/256](https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/archived-crypto-projects/aes-development)
  + amzn-ddb-sig-alg: algorithme de signature, par défaut, [Hmac /256 SHA256](https://en.wikipedia.org/wiki/HMAC)
  + amzn-ddb-wrap-alg: km

**Traitement**

1. Le fournisseur Direct KMS envoie AWS KMS une demande d'utilisation de la clé spécifiée AWS KMS key pour [générer une clé de données unique](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) pour l'article. L'opération retourne une clé en texte brut et une copie chiffrée sous la AWS KMS key. Ce matériau est appelé *matériau de clé initial*.

   La demande inclut les valeurs suivantes en texte brut dans le [contexte de chiffrement AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context). Ces valeurs non secrètes sont liées en termes de chiffrement à l'objet chiffré, si bien que le même contexte de chiffrement est requis au déchiffrement. Vous pouvez utiliser ces valeurs pour identifier l'appel AWS KMS dans les [AWS CloudTrail journaux](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html).
   + amzn-ddb-env-alg — Algorithme de chiffrement, par défaut AES/256
   + amzn-ddb-sig-alg — Algorithme de signature, par défaut Hmac /256 SHA256
   + (Facultatif) aws-kms-table — *table name*
   + (Facultatif) *partition key name* — *partition key value* (les valeurs binaires sont codées en Base64)
   + (Facultatif) *sort key name* — *sort key value* (les valeurs binaires sont codées en Base64)

   Le fournisseur Direct KMS obtient les valeurs du contexte de AWS KMS chiffrement à partir du contexte de chiffrement [DynamoDB de l'élément](concepts.md#encryption-context). Si le contexte de chiffrement DynamoDB n'inclut aucune valeur, telle que le nom de la table, cette paire nom-valeur est omise du contexte de chiffrement. AWS KMS 

1. Le fournisseur KMS direct dérive une clé de chiffrement symétrique et une clé de signature à partir de la clé de données. Par défaut, il utilise l'[algorithme de hachage sécurisé (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) et la [fonction de dérivation de clé RFC5869 basée sur HMAC pour dériver une clé](https://tools.ietf.org/html/rfc5869) de chiffrement symétrique AES 256 bits et une clé de signature HMAC-SHA-256 bits. 

1. Le fournisseur KMS direct retourne la sortie du chiffreur d'élément.

1. Le chiffreur d'élément utilise la clé de chiffrement pour chiffrer les attributs spécifiés et la clé de signature pour les signer, à l'aide des algorithmes spécifiés dans la description du matériau réel. Il supprime les clés en texte brut de la mémoire dès que possible.

### Obtention des matériaux de déchiffrement
<a name="direct-kms-get-decryption-materials"></a>

Cette section décrit en détail les entrées, les sorties et le traitement du fournisseur KMS direct quand il reçoit une demande de déchiffrement de matériaux de la part du [chiffreur d'élément](DDBEC-legacy-concepts.md#item-encryptor).

**Entrée ** (depuis l'application)
+ L'identifiant clé d'un AWS KMS key. 

  La valeur de l'ID de clé peut être l'ID de clé, l'ARN de clé, le nom d'alias ou l'ARN d'alias du AWS KMS key. Toutes les valeurs qui ne sont pas incluses dans l'ID de clé, telles que la région, doivent être disponibles dans le [profil AWS nommé](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles). La clé ARN fournit toutes les valeurs AWS KMS nécessaires.

**Entrée** (depuis le chiffreur d'élément)
+ Copie du contexte de [chiffrement DynamoDB](concepts.md#encryption-context) qui contient le contenu de l'attribut de description du matériau.

**Sortie** (vers le chiffreur d'élément)
+ Clé de chiffrement (texte brut)
+ Clé de signature

**Traitement**

1. Le fournisseur Direct KMS obtient la clé de données chiffrée à partir de l'attribut de description du matériau contenu dans l'élément chiffré. 

1. Il demande AWS KMS d'utiliser le paramètre spécifié AWS KMS key pour [déchiffrer](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) la clé de données cryptée. L'opération retourne une clé en texte brut.

   Cette demande doit utiliser le même [contexte de chiffrement AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) que celui utilisé pour générer et chiffrer la clé de données.
   + aws-kms-table – *table name*
   + *partition key name*— *partition key value* (les valeurs binaires sont codées en Base64)
   + (Facultatif) *sort key name* — *sort key value* (les valeurs binaires sont codées en Base64)
   + amzn-ddb-env-alg — Algorithme de chiffrement, par défaut AES/256
   + amzn-ddb-sig-alg — Algorithme de signature, par défaut Hmac /256 SHA256

1. Le fournisseur Direct KMS utilise l'[algorithme de hachage sécurisé (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) et une [fonction de dérivation de clé RFC5869 basée sur HMAC pour dériver une clé](https://tools.ietf.org/html/rfc5869) de chiffrement symétrique AES 256 bits et une clé de signature HMAC-SHA-256 bits à partir de la clé de données. 

1. Le fournisseur KMS direct retourne la sortie du chiffreur d'élément.

1. Le chiffreur d'élément utilise la clé de signature pour vérifier l'élément. S'il réussit, il utilise la clé de chiffrement symétrique pour déchiffrer les valeurs d'attribut chiffrées. Ces opérations utilisent les algorithmes de chiffrement et de signature spécifiés dans la description du matériau réel. Le chiffreur d'élément supprime les clés en texte brut de la mémoire dès que possible.

# Fournisseur de matériaux encapsulé
<a name="wrapped-provider"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). La rubrique suivante fournit des informations sur les versions 1. *x* —2. *x* du client de chiffrement DynamoDB pour Java et versions 1. *x* —3. *x* du client de chiffrement DynamoDB pour Python. Pour plus d'informations, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Le *Wrapped Materials Provider* (Wrapped CMP) vous permet d'utiliser des clés d'encapsulation et de signature provenant de n'importe quelle source avec le client de chiffrement DynamoDB. Le CMP Wrapped ne dépend d'aucun AWS service. Cependant, vous devez générer et gérer vos clés d'encapsulation et de signature en dehors du client, y compris la fourniture des clés appropriées pour vérifier et déchiffrer l'élément. 

Le fournisseur CMP encapsulé génère une clé de chiffrement d'élément unique pour chaque élément. Il encapsule la clé de chiffrement d'élément avec la clé d'encapsulation que vous fournissez et enregistre la clé de chiffrement d'élément encapsulée dans l'[attribut de description de matériau](DDBEC-legacy-concepts.md#legacy-material-description) de l'élément. Comme vous fournissez les clés d'encapsulation et de signature, vous déterminez de quelle façon les clés d'encapsulation et de signature sont générées, et si elles sont propres à chaque élément ou sont réutilisées. 

Le fournisseur CMP encapsulé constitue une implémentation sécurisée et un bon choix pour les applications qui peuvent gérer les matériaux de chiffrement.

Le Wrapped CMP est l'un des nombreux [fournisseurs de matériel cryptographique](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) pris en charge par le client de chiffrement DynamoDB. Pour plus d'informations sur l'autre CMPs, voir[Fournisseur de matériel cryptographique](crypto-materials-providers.md).

**Pour obtenir un exemple de code, consultez :**
+ Java: [AsymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/AsymmetricEncryptedItem.java)
+ Python : [wrapped-rsa-encrypted-table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_rsa_encrypted_table.py), [wrapped-symmetric-encrypted-table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_symmetric_encrypted_table.py)

**Topics**
+ [Comment l'utiliser](#wrapped-cmp-how-to-use)
+ [Comment ça marche](#wrapped-cmp-how-it-works)

## Comment l'utiliser
<a name="wrapped-cmp-how-to-use"></a>

Pour créer un fournisseur CMP encapsulé, spécifiez une clé d'encapsulation (requise au chiffrement), une clé de désencapsulation (requise au déchiffrement) et une clé de signature. Vous devez fournir les clés lorsque vous chiffrez et déchiffrez les éléments.

Les clés d'encapsulation, de désencapsulation et de signature peuvent être des clés symétriques ou des paires de clés asymétriques. 

------
#### [ Java ]

```
// This example uses asymmetric wrapping and signing key pairs
final KeyPair wrappingKeys = ...
final KeyPair signingKeys = ...

final WrappedMaterialsProvider cmp = 
    new WrappedMaterialsProvider(wrappingKeys.getPublic(),
                                 wrappingKeys.getPrivate(),
                                 signingKeys);
```

------
#### [ Python ]

```
# This example uses symmetric wrapping and signing keys
wrapping_key = ...
signing_key  = ...

wrapped_cmp = WrappedCryptographicMaterialsProvider(
    wrapping_key=wrapping_key,
    unwrapping_key=wrapping_key,
    signing_key=signing_key
)
```

------

## Comment ça marche
<a name="wrapped-cmp-how-it-works"></a>

Le fournisseur CMP encapsulé génère une nouvelle clé de chiffrement d'élément pour chaque élément. Il utilise les clés d'encapsulation, de désencapsulation et de signature que vous fournissez, comme illustré dans le schéma suivant.

![\[Entrée, traitement et sortie du fournisseur de matériaux encapsulés dans le client de chiffrement DynamoDB\]](http://docs.aws.amazon.com/fr_fr/database-encryption-sdk/latest/devguide/images/wrappedCMP.png)


### Obtention des matériaux de chiffrement
<a name="wrapped-cmp-get-encryption-materials"></a>

Cette section décrit en détail les entrées, les sorties et le traitement du fournisseur CMP encapsulé quand il reçoit une demande de matériaux de chiffrement. 

**Entrée** (depuis l'application)
+ Clé d'encapsulation : clé symétrique [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) ou clé publique [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)). Obligatoire si les valeurs d'attribut sont chiffrées. Sinon, elle est facultative et ignorée.
+ Clé de désencapsulation : facultative et ignorée. 
+ Clé de signature

**Entrée** (depuis le chiffreur d'élément)
+ [Contexte de chiffrement DynamoDB](concepts.md#encryption-context)

**Sortie** (vers le chiffreur d'élément) :
+ Clé de chiffrement d'élément en texte brut
+ Clé de signature (inchangée)
+ [Description du matériau réel](DDBEC-legacy-concepts.md#legacy-material-description) : ces valeurs sont enregistrées dans l'[attribut de description du matériau](DDBEC-legacy-concepts.md#legacy-material-description) que le client ajoute à l'élément. 
  + `amzn-ddb-env-key` : clé de chiffrement d'élément codée en base64
  + `amzn-ddb-env-alg` : algorithme de chiffrement utilisé pour chiffrer l'élément. La valeur par défaut est AES-256-CBC.
  + `amzn-ddb-wrap-alg` : algorithme d'encapsulation utilisé par le fournisseur CMP encapsulé pour encapsuler la clé de chiffrement d'élément. Si la clé d'encapsulation est une clé AES, la clé est encapsulée à l'aide de `AES-Keywrap` non complétée, comme défini dans [RFC 3394](https://tools.ietf.org/html/rfc3394.html). Si la clé d'encapsulation est une clé RSA, elle est chiffrée à l'aide de RSA OAEP avec rembourrage. MGF1 

**Traitement**

Lorsque vous chiffrez un élément, vous transmettez une clé d'encapsulation et une clé de signature. Une clé de désencapsulation est facultative et ignorée.

1. Le fournisseur CMP encapsulé génère une clé de chiffrement d'élément symétrique unique pour l'élément de table.

1. Il utilise la clé d'encapsulation que vous spécifiez pour encapsuler la clé de chiffrement d'élément. Puis, il la supprime de la mémoire dès que possible.

1. Il retourne la clé de chiffrement d'élément en texte brut, la clé de signature que vous avez fournie et une [description de matériau réel](DDBEC-legacy-concepts.md#legacy-material-description) qui inclut la clé de chiffrement d'élément encapsulé, ainsi que les algorithmes de chiffrement et d'encapsulation.

1. Le chiffreur d'élément utilise la clé de chiffrement en texte brut pour chiffrer l'élément. Il utilise la clé de signature que vous avez fournie pour signer l'élément. Puis, il supprime les clés en texte brut de la mémoire dès que possible. Il copie les champs de la description du matériel réel, y compris la clé de chiffrement encapsulée (`amzn-ddb-env-key`), dans l'attribut de la description de matériau de l'élément.

### Obtention des matériaux de déchiffrement
<a name="wrapped-cmp-get-decryption-materials"></a>

Cette section décrit en détail les entrées, les sorties et le traitement du fournisseur CMP encapsulé quand il reçoit une demande de matériaux de déchiffrement. 

**Entrée** (depuis l'application)
+ Clé d'encapsulation : facultative et ignorée.
+ Clé de désencapsulation : la même clé symétrique [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) ou la même clé privée [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) qui correspond à la clé publique RSA utilisée pour chiffrer. Obligatoire si les valeurs d'attribut sont chiffrées. Sinon, elle est facultative et ignorée.
+ Clé de signature

**Entrée** (depuis le chiffreur d'élément)
+ Copie du contexte de [chiffrement DynamoDB](concepts.md#encryption-context) qui contient le contenu de l'attribut de description du matériau.

**Sortie** (vers le chiffreur d'élément)
+ Clé de chiffrement d'élément en texte brut
+ Clé de signature (inchangée)

**Traitement**

Lorsque vous déchiffrez un élément, vous transmettez une clé de désencapsulation et une clé de signature. Une clé d'encapsulation est facultative et ignorée.

1. Le fournisseur CMP encapsulé obtient la clé de chiffrement d'élément encapsulé depuis l'attribut de description du matériau de l'élément.

1. Il utilise la clé et l'algorithme de désencapsulation pour désencapsuler la clé de chiffrement d'élément. 

1. Il retourne la clé de chiffrement de l'élément en texte brut, la clé de signature, et les algorithmes de chiffrement et de signature au chiffreur d'élément.

1. Le chiffreur d'élément utilise la clé de signature pour vérifier l'élément. S'il réussit, il utilise la clé de chiffrement d'élément pour déchiffrer l'élément. Puis, il supprime les clés en texte brut de la mémoire dès que possible.

# À propos du fournisseur le plus récent
<a name="most-recent-provider"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). La rubrique suivante fournit des informations sur les versions 1. *x* —2. *x* du client de chiffrement DynamoDB pour Java et versions 1. *x* —3. *x* du client de chiffrement DynamoDB pour Python. Pour plus d'informations, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Le *fournisseur le plus récent* est un [fournisseur CMP](DDBEC-legacy-concepts.md#concept-material-provider) conçu pour travailler avec un [magasin de fournisseur](DDBEC-legacy-concepts.md#provider-store). Il CMPs provient du magasin du fournisseur et obtient le matériel cryptographique qu'il renvoie depuis le CMPs. Il utilise généralement chaque CMP pour répondre à plusieurs demandes de matériaux de chiffrement. Cependant, vous pouvez utiliser les fonctions de son magasin de fournisseur pour contrôler jusqu'à quelle mesure les matériaux sont réutilisés, déterminer la fréquence de rotation de son fournisseur CMP et, même, modifier le type de fournisseur CMP utilisé sans modifier le fournisseur le plus récent.

**Note**  
Le code associé au `MostRecentProvider` symbole du fournisseur le plus récent peut stocker du matériel cryptographique en mémoire pendant toute la durée de vie du processus. Cela peut permettre à un appelant d'utiliser des clés qu'il n'est plus autorisé à utiliser.   
Le `MostRecentProvider` symbole est obsolète dans les anciennes versions prises en charge du client de chiffrement DynamoDB et supprimé de la version 2.0.0. Il est remplacé par le `CachingMostRecentProvider` symbole. Pour en savoir plus, consultez [Mises à jour du fournisseur le plus récent](#mrp-versions).

Le fournisseur le plus récent constitue un bon choix pour les applications qui doivent minimiser les appels au magasin de fournisseur et à sa source de chiffrement, et pour les applications qui peuvent réutiliser certains matériaux de chiffrement sans enfreindre leurs exigences de sécurité. Par exemple, il vous permet de protéger votre matériel cryptographique sous un [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)in [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) sans appeler AWS KMS chaque fois que vous cryptez ou décryptez un élément.

Le magasin de fournisseurs que vous choisissez détermine le type de magasin utilisé par le fournisseur le plus récent et la fréquence à CMPs laquelle il reçoit un nouveau CMP. Vous pouvez utiliser tout magasin de fournisseur compatible avec le fournisseur le plus récent, y compris les magasins de fournisseur personnalisés que vous concevez. 

Le client de chiffrement DynamoDB inclut *MetaStore*un qui crée et [renvoie des fournisseurs de matériaux encapsulés (encapsulés](wrapped-provider.md)). CMPs Il MetaStore enregistre plusieurs versions du Wrapped CMPs qu'il génère dans une table DynamoDB interne et les protège par un chiffrement côté client par une instance interne du client de chiffrement DynamoDB. 

Vous pouvez configurer le MetaStore pour utiliser n'importe quel type de CMP interne pour protéger le contenu du tableau, y compris un [fournisseur KMS direct](direct-kms-provider.md) qui génère du matériel cryptographique protégé par vos soins AWS KMS key, un CMP encapsulé qui utilise les clés d'encapsulage et de signature que vous fournissez, ou un CMP personnalisé compatible que vous concevez.

**Pour obtenir un exemple de code, consultez :**
+ Java: [MostRecentEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/MostRecentEncryptedItem.java)
+ Python : [most\$1recent\$1provider\$1encrypted\$1table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/most_recent_provider_encrypted_table.py)

**Topics**
+ [Comment l'utiliser](#mrp-how-to-use-it)
+ [Comment ça marche](#mrp-how-it-works)
+ [Mises à jour du fournisseur le plus récent](#mrp-versions)

## Comment l'utiliser
<a name="mrp-how-to-use-it"></a>

Pour créer un fournisseur le plus récent, vous devez créer et configurer un magasin de fournisseur, puis créer un fournisseur le plus récent qui utilise le magasin de fournisseur. 

[Les exemples suivants montrent comment créer un fournisseur le plus récent qui utilise un MetaStore et protège les versions de sa table DynamoDB interne avec du matériel cryptographique provenant d'un fournisseur KMS direct.](direct-kms-provider.md) Ces exemples utilisent le [`CachingMostRecentProvider`](#mrp-versions)symbole. 

Chaque fournisseur le plus récent possède un nom qui l'identifie CMPs dans le MetaStore tableau, un paramètre [time-to-live](#most-recent-provider-ttl)(TTL) et un paramètre de taille de cache qui détermine le nombre d'entrées que le cache peut contenir. Ces exemples définissent la taille du cache à 1 000 entrées et à un TTL de 60 secondes.

------
#### [ Java ]

```
// Set the name for MetaStore's internal table
final String keyTableName = 'metaStoreTable'

// Set the Region and AWS KMS key
final String region = 'us-west-2'
final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

// Set the TTL and cache size
final long ttlInMillis = 60000;
final long cacheSize = 1000;

// Name that identifies the MetaStore's CMPs in the provider store
final String materialName = 'testMRP'

// Create an internal DynamoDB client for the MetaStore
final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion(region).build();

// Create an internal Direct KMS Provider for the MetaStore
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider kmsProv = new DirectKmsMaterialProvider(kms, keyArn);

// Create an item encryptor for the MetaStore,
// including the Direct KMS Provider
final DynamoDBEncryptor keyEncryptor = DynamoDBEncryptor.getInstance(kmsProv);

// Create the MetaStore
final MetaStore metaStore = new MetaStore(ddb, keyTableName, keyEncryptor);

//Create the Most Recent Provider
final CachingMostRecentProvider cmp = new CachingMostRecentProvider(metaStore, materialName, ttlInMillis, cacheSize);
```

------
#### [ Python ]

```
# Designate an AWS KMS key
kms_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

# Set the name for MetaStore's internal table
meta_table_name = 'metaStoreTable'

# Name that identifies the MetaStore's CMPs in the provider store
material_name = 'testMRP'

# Create an internal DynamoDB table resource for the MetaStore
meta_table = boto3.resource('dynamodb').Table(meta_table_name)

# Create an internal Direct KMS Provider for the MetaStore
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
    
# Create the MetaStore with the Direct KMS Provider
meta_store = MetaStore(
    table=meta_table,
    materials_provider=kms_cmp
)

# Create a Most Recent Provider using the MetaStore
#    Sets the TTL (in seconds) and cache size (# entries)
most_recent_cmp = MostRecentProvider(
    provider_store=meta_store,
    material_name=material_name,
    version_ttl=60.0,
    cache_size=1000
)
```

------

## Comment ça marche
<a name="mrp-how-it-works"></a>

Le fournisseur le plus récent CMPs provient d'un magasin de fournisseurs. Puis, il utilise le fournisseur CMP pour générer les matériaux de chiffrement qu'il retourne au chiffreur d'élément.

### À propos du fournisseur le plus récent
<a name="about-mrp"></a>

Le fournisseur le plus récent obtient un [fournisseur CMP](DDBEC-legacy-concepts.md#concept-material-provider) à partir d'un [magasin de fournisseur](DDBEC-legacy-concepts.md#provider-store). Puis, il utilise le fournisseur CMP pour générer les matériaux de chiffrement qu'il retourne. Chaque fournisseur le plus récent est associé à une boutique de fournisseurs, mais une boutique de fournisseurs peut CMPs approvisionner plusieurs fournisseurs sur plusieurs hôtes.

Le fournisseur le plus récent peut travailler avec n'importe quel fournisseur CMP compatible d'un magasin de fournisseur. Il demande du matériel de chiffrement ou de déchiffrement au CMP et renvoie le résultat au chiffreur d'articles. Il n'effectue pas d'opération de chiffrement.

Pour demander un fournisseur CMP auprès de son magasin de fournisseur, le fournisseur le plus récent fournit son nom de matériau et la version d'un fournisseur CMP existant qu'il veut utiliser. Pour les matériaux de chiffrement, le fournisseur le plus récent demande toujours la version maximale (la « plus récente »). Pour les matériaux de chiffrement, il demande la version du fournisseur CMP qui a été utilisée pour créer les matériaux de chiffrement, comme illustré dans le diagramme suivant.

![\[Fournisseur le plus récent\]](http://docs.aws.amazon.com/fr_fr/database-encryption-sdk/latest/devguide/images/most-recent-provider-1.png)


Le fournisseur le plus récent enregistre les versions CMPs renvoyées par le magasin du fournisseur dans un cache local le moins récemment utilisé (LRU) en mémoire. Le cache permet au fournisseur le plus récent d'obtenir CMPs ce dont il a besoin sans avoir à appeler le magasin du fournisseur pour chaque élément. Vous pouvez effacer le cache à la demande.

Le fournisseur le plus récent utilise une [time-to-livevaleur](#most-recent-provider-ttl) configurable que vous pouvez ajuster en fonction des caractéristiques de votre application.

### À propos de MetaStore
<a name="about-metastore"></a>

Vous pouvez utiliser un fournisseur le plus récent avec n'importe quel magasin de fournisseur, y compris un magasin de fournisseur personnalisé compatible. Le client de chiffrement DynamoDB inclut MetaStore une implémentation sécurisée que vous pouvez configurer et personnaliser.

A *MetaStore*est un [magasin fournisseur](DDBEC-legacy-concepts.md#provider-store) qui crée et renvoie des [Wrapped CMPs](wrapped-provider.md) configurés avec la clé d'encapsulation, la clé de déballage et la clé de signature requises par Wrapped CMPs . A MetaStore est une option sécurisée pour le fournisseur le plus récent, car Wrapped génère CMPs toujours des clés de chiffrement uniques pour chaque article. Seule la clé d'encapsulation qui protège la clé de chiffrement d'élément et la clé de signature sont réutilisées.

Le schéma suivant montre les composants du fournisseur le plus récent MetaStore et la manière dont il interagit avec celui-ci.

![\[UN MetaStore\]](http://docs.aws.amazon.com/fr_fr/database-encryption-sdk/latest/devguide/images/most-recent-provider-2.png)


Il MetaStore génère le Wrapped CMPs, puis le stocke (sous forme cryptée) dans une table DynamoDB interne. La clé de partition est le nom du matériel du fournisseur le plus récent ; la clé de tri son numéro de version. Les éléments de la table sont protégés par un client de chiffrement DynamoDB interne, comprenant un crypteur d'éléments et un fournisseur [interne de matériel cryptographique](DDBEC-legacy-concepts.md#concept-material-provider) (CMP).

Vous pouvez utiliser n'importe quel type de CMP interne MetaStore, y compris un [fournisseur KMS direct](wrapped-provider.md), un CMP encapsulé avec du matériel cryptographique que vous fournissez ou un CMP personnalisé compatible. Si le CMP interne de votre ordinateur MetaStore est un fournisseur KMS direct, vos clés d'emballage et de signature réutilisables sont protégées par un [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)in [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS). Les MetaStore appels AWS KMS chaque fois qu'il ajoute une nouvelle version CMP à sa table interne ou qu'il obtient une version CMP à partir de sa table interne.

### Définition d'une time-to-live valeur
<a name="most-recent-provider-ttl"></a>

Vous pouvez définir une valeur time-to-live (TTL) pour chaque fournisseur le plus récent que vous créez. En général, utilisez la valeur TTL la plus basse adaptée à votre application.

L'utilisation de la valeur TTL est modifiée dans le `CachingMostRecentProvider` symbole du fournisseur le plus récent. 

**Note**  
Le `MostRecentProvider` symbole du fournisseur le plus récent est obsolète dans les anciennes versions prises en charge du client de chiffrement DynamoDB et supprimé de la version 2.0.0. Il est remplacé par le `CachingMostRecentProvider` symbole. Nous vous recommandons de mettre à jour votre code dès que possible. Pour en savoir plus, consultez [Mises à jour du fournisseur le plus récent](#mrp-versions).

**`CachingMostRecentProvider`**  
`CachingMostRecentProvider`Utilise la valeur TTL de deux manières différentes.   
+ Le TTL détermine la fréquence à laquelle le fournisseur le plus récent vérifie la présence d'une nouvelle version du CMP dans le magasin du fournisseur. Si une nouvelle version est disponible, le fournisseur le plus récent remplace son CMP et actualise son matériel cryptographique. Dans le cas contraire, il continue d'utiliser son CMP et son matériel cryptographique actuels.
+ Le TTL détermine la durée pendant CMPs laquelle le cache peut être utilisé. Avant d'utiliser un CMP mis en cache pour le chiffrement, le fournisseur le plus récent évalue le temps passé dans le cache. Si le temps de cache du CMP dépasse le TTL, le CMP est expulsé du cache et le fournisseur le plus récent obtient une nouvelle version de CMP dans le magasin de son fournisseur.

**`MostRecentProvider`**  
Dans le`MostRecentProvider`, le TTL détermine la fréquence à laquelle le fournisseur le plus récent vérifie la présence d'une nouvelle version du CMP dans le magasin du fournisseur. Si une nouvelle version est disponible, le fournisseur le plus récent remplace son CMP et actualise son matériel cryptographique. Dans le cas contraire, il continue d'utiliser son CMP et son matériel cryptographique actuels.

Le TTL ne détermine pas la fréquence à laquelle une nouvelle version du CMP est créée. Vous créez de nouvelles versions CMP en faisant [pivoter les matériaux cryptographiques](#most-recent-provider-rotate).

La valeur TTL idéale varie en fonction de l'application et de ses objectifs de latence et de disponibilité. Un TTL inférieur améliore votre profil de sécurité en réduisant le temps pendant lequel les documents cryptographiques sont stockés en mémoire. En outre, un TTL inférieur actualise les informations critiques plus fréquemment. Par exemple, si votre CMP interne est un [fournisseur KMS direct](direct-kms-provider.md), il vérifie plus fréquemment que l'appelant est toujours autorisé à utiliser un. AWS KMS key

Toutefois, si le TTL est trop bref, les appels fréquents vers le magasin du fournisseur peuvent augmenter vos coûts et obliger ce dernier à limiter les demandes provenant de votre application et d'autres applications partageant votre compte de service. Il peut également être avantageux de coordonner le TTL avec la vitesse à laquelle vous faites pivoter les documents cryptographiques. 

Pendant les tests, modifiez le TTL et la taille du cache en fonction des différentes charges de travail jusqu'à ce que vous trouviez une configuration adaptée à votre application et à vos normes de sécurité et de performance.

### Rotation des matériaux de chiffrement
<a name="most-recent-provider-rotate"></a>

Lorsqu'un fournisseur le plus récent a besoin de matériel de chiffrement, il utilise toujours la version la plus récente de son CMP dont il a connaissance. La fréquence à laquelle il vérifie la présence d'une version plus récente est déterminée par la valeur [time-to-live](#most-recent-provider-ttl)(TTL) que vous définissez lorsque vous configurez le fournisseur le plus récent. 

Lorsque le TTL expire, le fournisseur le plus récent vérifie la version la plus récente du CMP dans le magasin du fournisseur. Si un CMP est disponible, le fournisseur le plus récent l'obtient et remplace le CMP dans son cache. Il utilise ce CMP et son matériel cryptographique jusqu'à ce qu'il découvre que le magasin du fournisseur dispose d'une version plus récente.

Pour demander au magasin de fournisseur de créer une version d'un CMP pour un fournisseur le plus récent, appelez l'opération Create New Provider du magasin de fournisseur avec le nom de matériau du fournisseur le plus récent. Le magasin de fournisseur crée un CMP et enregistre une copie chiffrée dans son stockage interne avec un numéro de version supérieur. (Il retourne aussi un CMP, mais vous pouvez l'ignorer.) Par conséquent, la prochaine fois que le fournisseur le plus récent demandera au magasin du fournisseur le numéro de version maximal de celui-ci CMPs, il obtiendra le nouveau numéro de version supérieur et l'utilisera dans les demandes ultérieures adressées au magasin pour voir si une nouvelle version du CMP a été créée.

Vous pouvez planifier vos appels Create New Provider en fonction de l'heure, du nombre d'éléments ou d'attributs traités, ou de toute autre métrique qui revêt un sens pour votre application.

### Obtention des matériaux de chiffrement
<a name="most-recent-provider-encrypt"></a>

Le fournisseur le plus récent utilise le processus suivant, illustré dans le diagramme, pour obtenir les matériaux de chiffrement qu'il retourne au chiffreur d'élément. La sortie dépend du type de fournisseur CMP que le magasin de fournisseur retourne. Le fournisseur le plus récent peut utiliser n'importe quel magasin de fournisseurs compatible, y compris MetaStore celui inclus dans le client de chiffrement DynamoDB.

![\[Entrée, traitement et sortie du fournisseur le plus récent dans le client de chiffrement DynamoDB\]](http://docs.aws.amazon.com/fr_fr/database-encryption-sdk/latest/devguide/images/most-recent-provider-provider-store.png)


Lorsque vous créez un fournisseur le plus récent à l'aide du [`CachingMostRecentProvider`symbole](#mrp-versions), vous spécifiez un magasin de fournisseurs, le nom du fournisseur le plus récent et une valeur [time-to-live](#most-recent-provider-ttl)(TTL). Vous pouvez également éventuellement spécifier une taille de cache, qui détermine le nombre maximal de documents cryptographiques pouvant exister dans le cache.

Quand le chiffreur d'élément demande au fournisseur le plus récent les matériaux de chiffrement, le fournisseur le plus récent commence par chercher dans le cache le dernier numéro de version de ses fournisseurs CMP.
+ S'il trouve la dernière version du CMP dans son cache et que le CMP n'a pas dépassé la valeur TTL, le fournisseur le plus récent utilise le CMP pour générer du matériel de chiffrement. Puis, il retourne les matériaux de chiffrement au chiffreur d'élément. Cette opération ne requiert pas d'appel au magasin de fournisseur.
+ Si la dernière version du CMP n'est pas dans son cache, ou si elle est dans le cache mais a dépassé sa valeur TTL, le fournisseur le plus récent demande un CMP à son magasin de fournisseurs. La demande inclut le nom de matériau du fournisseur le plus récent et le numéro de version maximal qu'il connaît.

  1. Le magasin de fournisseur retourne un fournisseur CMP à partir de son stockage permanent. Si le magasin du fournisseur est un MetaStore, il obtient un CMP encapsulé chiffré à partir de sa table DynamoDB interne en utilisant le nom du matériau du fournisseur le plus récent comme clé de partition et le numéro de version comme clé de tri. Il MetaStore utilise son crypteur d'éléments interne et son CMP interne pour déchiffrer le CMP encapsulé. Ensuite, il retourne le fournisseur CMP en texte brut au fournisseur le plus récent. Si le CMP interne est un [fournisseur KMS direct](direct-kms-provider.md), cette étape inclut un appel de [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. Le fournisseur CMP ajoute le champ `amzn-ddb-meta-id` à la [description du matériau réel](DDBEC-legacy-concepts.md#legacy-material-description). Sa valeur est le nom de matériau et la version du CMP dans sa table interne. Le magasin de fournisseur retourne le fournisseur CMP au fournisseur le plus récent.

  1. Le fournisseur le plus récent met en cache mémoire le fournisseur CMP.

  1. Le fournisseur le plus récent utilise le fournisseur CMP pour générer les matériaux de chiffrement. Puis, il retourne les matériaux de chiffrement au chiffreur d'élément.

### Obtention des matériaux de déchiffrement
<a name="most-recent-provider-decrypt"></a>

Quand le chiffreur d'élément demande au fournisseur le plus récent les matériaux de chiffrement, le fournisseur le plus récent utilise le processus suivant pour les obtenir et les retourner.

1. Le fournisseur le plus récent demande au magasin de fournisseur le numéro de version des matériaux de chiffrement utilisés pour chiffrer l'élément. Il transmet la description du matériau réel depuis l'[attribut de description du matériau](DDBEC-legacy-concepts.md#legacy-material-description) de l'élément.

1. Le magasin de fournisseur obtient le numéro de version du CMP en charge du chiffrement auprès du champ `amzn-ddb-meta-id` de la description du matériau réel et le retourne au fournisseur le plus récent.

1. Le fournisseur le plus récent recherche dans son cache le numéro de version du CMP utilisé pour chiffrer et signer l'élément.
+ S'il trouve que la version correspondante du CMP se trouve dans son cache et que le CMP n'a pas dépassé la [valeur time-to-live (TTL)](#most-recent-provider-ttl), le fournisseur le plus récent utilise le CMP pour générer du matériel de déchiffrement. Puis, il retourne les matériaux de déchiffrement au chiffreur d'élément. Cette opération ne requiert pas d'appel au magasin de fournisseur ou à un autre fournisseur CMP.
+ Si la version correspondante du CMP ne se trouve pas dans son cache, ou si le cache AWS KMS key a dépassé sa valeur TTL, le fournisseur le plus récent demande un CMP à son magasin de fournisseurs. Il envoie le nom de matériau et le numéro de version du CMP de chiffrement dans la demande.

  1. Le magasin de fournisseur recherche dans le stockage permanent le fournisseur CMP en utilisant le nom du fournisseur le plus récent comme clé de partition et le numéro de version comme clé de tri.
     + Si le nom et le numéro de version ne sont pas dans le stockage permanent, le magasin de fournisseur lève une exception. Si le magasin de fournisseur a été utilisé pour générer le CMP, celui-ci doit être stocké dans son stockage permanent, à moins qu'il ne soit intentionnellement supprimé.
     + Si le CMP avec le nom et le numéro de version correspondants se trouve dans le stockage permanent du magasin de fournisseur, celui-ci retourne le CMP spécifié au fournisseur le plus récent. 

       Si le magasin du fournisseur est un MetaStore, il obtient le CMP chiffré à partir de sa table DynamoDB. Puis, il utilise les matériaux de chiffrement de son fournisseur CMP interne pour déchiffrer le CMP chiffré avant de retourner le fournisseur CMP au fournisseur le plus récent. Si le CMP interne est un [fournisseur KMS direct](direct-kms-provider.md), cette étape inclut un appel de [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. Le fournisseur le plus récent met en cache mémoire le fournisseur CMP.

  1. Le fournisseur le plus récent utilise le fournisseur CMP pour générer les matériaux de déchiffrement. Puis, il retourne les matériaux de déchiffrement au chiffreur d'élément.

## Mises à jour du fournisseur le plus récent
<a name="mrp-versions"></a>

Le symbole du fournisseur le plus récent est remplacé par `MostRecentProvider``CachingMostRecentProvider`. 

**Note**  
Le `MostRecentProvider` symbole, qui représente le fournisseur le plus récent, est obsolète dans la version 1.15 du client de chiffrement DynamoDB pour Java et dans la version 1.3 du client de chiffrement DynamoDB pour Python et supprimé des versions 2.0.0 du client de chiffrement DynamoDB dans les deux implémentations linguistiques. Utilisez plutôt le`CachingMostRecentProvider`.

`CachingMostRecentProvider`implémente les modifications suivantes :
+ Supprime `CachingMostRecentProvider` périodiquement les documents cryptographiques de la mémoire lorsque leur durée en mémoire dépasse la valeur configurée [time-to-live (TTL).](#most-recent-provider-ttl) 

  Ils `MostRecentProvider` peuvent stocker du matériel cryptographique en mémoire pendant toute la durée de vie du processus. Par conséquent, le fournisseur le plus récent n'est peut-être pas au courant des modifications d'autorisation. Il peut utiliser des clés de chiffrement une fois que les autorisations de l'appelant à les utiliser ont été révoquées. 

  Si vous ne pouvez pas effectuer la mise à jour vers cette nouvelle version, vous pouvez obtenir un effet similaire en appelant régulièrement la `clear()` méthode dans le cache. Cette méthode vide manuellement le contenu du cache et oblige le fournisseur le plus récent à demander un nouveau CMP et de nouveaux matériaux cryptographiques. 
+ `CachingMostRecentProvider`Il inclut également un paramètre de taille de cache qui vous permet de mieux contrôler le cache.

Pour effectuer la mise à jour vers le`CachingMostRecentProvider`, vous devez modifier le nom du symbole dans votre code. À tous les autres égards, le `CachingMostRecentProvider` est entièrement rétrocompatible avec le`MostRecentProvider`. Il n'est pas nécessaire de chiffrer à nouveau les éléments du tableau.

Cependant, cela `CachingMostRecentProvider` génère davantage d'appels vers l'infrastructure clé sous-jacente. Il appelle le magasin du fournisseur au moins une fois par intervalle time-to-live (TTL). Les applications avec de nombreuses applications actives CMPs (en raison de rotations fréquentes) ou les applications avec de grands flottes sont les plus susceptibles d'être sensibles à ce changement. 

Avant de publier votre code mis à jour, testez-le minutieusement pour vous assurer que les appels les plus fréquents n'altèrent pas votre application ou n'entraînent pas de ralentissement de la part des services dont dépend votre fournisseur, tels que AWS Key Management Service (AWS KMS) ou Amazon DynamoDB. Pour atténuer les problèmes de performances, ajustez la taille du cache et celle time-to-live du en `CachingMostRecentProvider` fonction des caractéristiques de performance que vous observez. Pour de plus amples informations, consultez [Définition d'une time-to-live valeur](#most-recent-provider-ttl).

# Fournisseur de matériaux statique
<a name="static-provider"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). La rubrique suivante fournit des informations sur les versions 1. *x* —2. *x* du client de chiffrement DynamoDB pour Java et versions 1. *x* —3. *x* du client de chiffrement DynamoDB pour Python. Pour plus d'informations, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Le *fournisseur de matériaux statiques* (Static CMP) est un [fournisseur de matériaux cryptographiques](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) très simple destiné aux tests, aux proof-of-concept démonstrations et à la compatibilité existante.

Pour utiliser le fournisseur CMP statique afin de chiffrer un élément de table, vous fournissez une clé de chiffrement symétrique [AES (Advanced Encryption Standard)](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) et une clé ou paire de clés de signature. Vous devez fournir les mêmes clés pour déchiffrer l'élément chiffré. Le fournisseur CMP statique n'assure aucune opération de chiffrement. Au lieu de cela, il transmet inchangées les clés de chiffrement que vous fournissez au chiffreur d'élément. Le chiffreur d'élément chiffre les éléments directement sous la clé de chiffrement. Puis, il utilise directement la clé de signature pour les signer. 

Comme le fournisseur CMP statique ne génère pas de matériau de chiffrement unique, tous les éléments de table que vous traitez sont chiffrés avec la même clé de chiffrement et signés par la même clé de signature. Lorsque vous utilisez la même clé pour chiffrer les valeurs d'attribut de nombreux éléments, ou que vous utilisez la même clé ou paire de clés pour signer tous les éléments, vous risquez de dépasser les limites de chiffrement des clés. 

**Note**  
Le [fournisseur statique asymétrique](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) de la bibliothèque Java n'est pas un fournisseur statique. Il fournit juste d'autres constructeurs au [fournisseur CMP encapsulé](wrapped-provider.md). Il est sûr pour une utilisation en production, mais vous devez utiliser directement le CMP encapsulé chaque fois que possible.

Le CMP statique est l'un des nombreux [fournisseurs de matériel cryptographique](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) pris en charge par le client de chiffrement DynamoDB. Pour plus d'informations sur l'autre CMPs, voir[Fournisseur de matériel cryptographique](crypto-materials-providers.md).

**Pour obtenir un exemple de code, consultez :**
+ Java: [SymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/SymmetricEncryptedItem.java)

**Topics**
+ [Comment l'utiliser](#static-cmp-how-to-use)
+ [Comment ça marche](#static-cmp-how-it-works)

## Comment l'utiliser
<a name="static-cmp-how-to-use"></a>

Pour créer un fournisseur statique, fournissez une clé ou paire de clés de chiffrement, et une clé ou paire de clés de signature. Vous devez fournir le matériau de clé pour chiffrer et déchiffrer les éléments de table.

------
#### [ Java ]

```
// To encrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Signing key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);

// To decrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Verification key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);
```

------
#### [ Python ]

```
# You can provide encryption materials, decryption materials, or both
encrypt_keys = EncryptionMaterials(
    encryption_key = ...,
    signing_key = ...
)

decrypt_keys = DecryptionMaterials(
    decryption_key = ...,
    verification_key = ...
)

static_cmp = StaticCryptographicMaterialsProvider(
    encryption_materials=encrypt_keys
    decryption_materials=decrypt_keys
)
```

------

## Comment ça marche
<a name="static-cmp-how-it-works"></a>

Le fournisseur statique transmet les clés de chiffrement et de signature que vous fournissez au chiffreur d'élément, où elles sont utilisées directement pour chiffrer et signer vos éléments de table. À moins que vous ne fournissiez différentes clés pour chaque élément, les mêmes clés sont utilisées pour chaque élément.

![\[Entrée, traitement et sortie du fournisseur de matériaux statiques dans le client de chiffrement DynamoDB\]](http://docs.aws.amazon.com/fr_fr/database-encryption-sdk/latest/devguide/images/staticCMP.png)


### Obtention des matériaux de chiffrement
<a name="static-cmp-get-encryption-materials"></a>

Cette section décrit en détail les entrées, les sorties et le traitement du fournisseur CMP statique quand il reçoit une demande de matériaux de chiffrement.

**Entrée** (depuis l'application)
+ Une clé de chiffrement — Il doit s'agir d'une clé symétrique, telle qu'une clé AES ([Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html)). 
+ Une clé de signature : il peut s'agir d'une clé symétrique ou d'une paire de clés asymétrique. 

**Entrée** (depuis le chiffreur d'élément)
+ [Contexte de chiffrement DynamoDB](concepts.md#encryption-context)

**Sortie** (vers le chiffreur d'élément)
+ Clé de chiffrement transmise comme entrée.
+ Clé de signature transmise comme entrée.
+ Description de matériau réel : [description de matériau demandé](DDBEC-legacy-concepts.md#legacy-material-description), le cas échéant, inchangé.

### Obtention des matériaux de déchiffrement
<a name="static-cmp-get-decryption-materials"></a>

Cette section décrit en détail les entrées, les sorties et le traitement du fournisseur CMP statique quand il reçoit une demande de matériaux de déchiffrement.

Même s'il comporte des méthodes distinctes pour l'obtention des matériaux de chiffrement et celle des matériaux de déchiffrement, le comportement est le même. 

**Entrée** (depuis l'application)
+ Une clé de chiffrement — Il doit s'agir d'une clé symétrique, telle qu'une clé AES ([Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html)). 
+ Une clé de signature : il peut s'agir d'une clé symétrique ou d'une paire de clés asymétrique. 

**Entrée** (depuis le chiffreur d'élément)
+ Contexte de [chiffrement DynamoDB (non utilisé)](concepts.md#encryption-context)

**Sortie** (vers le chiffreur d'élément)
+ Clé de chiffrement transmise comme entrée.
+ Clé de signature transmise comme entrée.