

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Anbieter von kryptografischem Material
<a name="crypto-materials-providers"></a>

**Anmerkung**  
[Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS](DDBEC-rename.md) Das folgende Thema enthält Informationen zu Versionen 1. *x* —2. *x* des DynamoDB Encryption Client für Java und Versionen 1. *x —3*. *x* des DynamoDB Encryption Client für Python. Weitere Informationen finden Sie unter [AWS Database Encryption SDK für DynamoDB-Versionsunterstützung](legacy-dynamodb-encryption-client.md#legacy-support).

Eine der wichtigsten Entscheidungen, die Sie bei der Verwendung des DynamoDB Encryption Client treffen, ist die Auswahl eines [Anbieters für kryptografisches Material](DDBEC-legacy-concepts.md#concept-material-provider) (CMP). Das CMP stellt kryptographisches Material zusammen und gibt es an den Elementverschlüssler zurück. Außerdem legt er fest, wie Verschlüsselungs- und Signierschlüssel generiert werden, ob für jedes Element neue Schlüsselmaterialien generiert oder wiederverwendet werden und welche Verschlüsselungs- und Signierungsalgorithmen verwendet werden. 

Sie können eine CMP aus den Implementierungen auswählen, die in den DynamoDB Encryption Client-Bibliotheken bereitgestellt werden, oder eine kompatible benutzerdefinierte CMP erstellen. Welchen CMP Sie auswählen, hängt möglicherweise auch von der verwendeten [Programmiersprache](programming-languages.md) ab.

Dieses Thema beschreibt die gängigsten CMPs und bietet einige Ratschläge, die Ihnen bei der Auswahl der für Ihre Anwendung am besten geeigneten Lösung helfen sollen.

**Direct KMS Materials Provider**  
Der Direct KMS Materials Provider schützt Ihre Tabellenelemente unter einem [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)That Never Leaves [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) unverschlüsselt. Ihre Anwendung muss kein kryptographisches Material erzeugen oder verwalten. Da er die verwendet AWS KMS key , um eindeutige Verschlüsselungs- und Signaturschlüssel für jedes Element zu generieren, ruft dieser Anbieter AWS KMS jedes Mal auf, wenn er ein Element ver- oder entschlüsselt.   
Wenn Sie verwenden AWS KMS und ein AWS KMS Aufruf pro Transaktion für Ihre Anwendung praktikabel ist, ist dieser Anbieter eine gute Wahl.  
Details hierzu finden Sie unter [Direct KMS Materials Provider](direct-kms-provider.md).

**Wrapped Materials Provider (Wrapped CMP)**  
Mit dem Wrapped Materials Provider (Wrapped CMP) können Sie Ihre Verpackungs- und Signaturschlüssel außerhalb des DynamoDB Encryption Client generieren und verwalten.   
Der Wrapped CMP generiert einen eindeutigen Verschlüsselungsschlüssel für jedes Element. Dann verwendet er die von Ihnen bereitgestellten Wrapping- (oder Unwrapping-) und Signierschlüssel. Damit bestimmen Sie, wie die Wrapping- und Signierschlüssel erzeugt werden und ob sie für jedes Element eindeutig sind oder wiederverwendet werden. Der Wrapped CMP ist eine sichere Alternative zum [Direct KMS Provider](direct-kms-provider.md) für Anwendungen, die kein kryptografisches Material verwenden AWS KMS und dieses sicher verwalten können.  
Details hierzu finden Sie unter [Wrapped Materials Provider](wrapped-provider.md).

**Most Recent Provider**  
Der *Most Recent Provider* ist ein [Anbieter kryptographischer Materialien (Cryptographic Materials Provider (CMP))](DDBEC-legacy-concepts.md#concept-material-provider), der auf die Arbeit mit einem [Provider-Store](DDBEC-legacy-concepts.md#provider-store) ausgelegt ist. Es bezieht sich CMPs aus dem Provider-Store und ruft die kryptografischen Materialien ab, die es von dem zurückgibt. CMPs Der Most Recent Provider verwendet in der Regel jeden CMP, um mehrere Anfragen nach kryptographischem Material zu erfüllen, aber Sie können die Funktionen des Provider-Stores verwenden, um zu steuern, wie oft Materialien wiederverwendet werden, um zu bestimmen, wie oft ein CMP rotiert wird, und sogar, um den Typ des CMP zu ändern, der verwendet wird, ohne den Most Recent Provider zu ändern.  
Sie können den Most Recent Provider mit jedem kompatiblen Provider-Store verwenden. Der DynamoDB Encryption Client enthält einen MetaStore, bei dem es sich um einen Provider-Store handelt, der Wrapped zurückgibt. CMPs  
Der Most Recent Provider ist eine gute Wahl für Anwendungen, die Aufrufe ihrer kryptographischen Quelle minimieren müssen, sowie für Anwendungen, die bestimmte kryptographische Materialien wiederverwenden können, ohne ihre Sicherheitsanforderungen zu verletzen. So können Sie beispielsweise Ihre kryptografischen Materialien mit einem [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) schützen, ohne AWS KMS jedes Mal, wenn Sie ein Element ver- oder entschlüsseln, erneut aufrufen zu müssen.  
Details hierzu finden Sie unter [Most Recent Provider](most-recent-provider.md).

**Static Materials Provider**  
Der Static Materials Provider wurde für Tests, proof-of-concept Demonstrationen und Kompatibilität mit älteren Versionen konzipiert. Er generiert keine eindeutigen kryptographischen Materialien für jedes Element. Er gibt dieselben von Ihnen gelieferten Verschlüsselungs- und Signierschlüssel zurück, die direkt zum Verschlüsseln und Signieren Ihrer Tabellenelemente verwendet werden.   
Der [Asymmetric Static Provider](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) in der Java-Bibliothek ist kein statischer Anbieter. Er liefert nur alternative Konstruktoren für den [Wrapped CMP](wrapped-provider.md). Er ist sicher für die Produktion, aber Sie sollten den Wrapped CMP nach Möglichkeit direkt verwenden.

**Topics**
+ [Direct KMS Materials Provider](direct-kms-provider.md)
+ [Wrapped Materials Provider](wrapped-provider.md)
+ [Most Recent Provider](most-recent-provider.md)
+ [Static Materials Provider](static-provider.md)

# Direct KMS Materials Provider
<a name="direct-kms-provider"></a>

**Anmerkung**  
[Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS](DDBEC-rename.md) Das folgende Thema enthält Informationen zu Versionen 1. *x* —2. *x* des DynamoDB Encryption Client für Java und Versionen 1. *x —3*. *x* des DynamoDB Encryption Client für Python. Weitere Informationen finden Sie unter [AWS Database Encryption SDK für DynamoDB-Versionsunterstützung](legacy-dynamodb-encryption-client.md#legacy-support).

Der *Direct KMS Materials Provider* (Direct KMS Provider) schützt Ihre Tabellenelemente unter einem [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)That Never Leaves [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) unverschlüsselt. Dieser [Anbieter kryptographischer Materialien (Cryptographic Materials Provider)](DDBEC-legacy-concepts.md#concept-material-provider) gibt einen eindeutigen Verschlüsselungsschlüssel und einen Signierschlüssel für jedes Tabellenelement zurück. Zu diesem Zweck ruft er AWS KMS jedes Mal auf, wenn Sie ein Element ver- oder entschlüsseln.

Wenn Sie DynamoDB-Elemente mit hoher Frequenz und in großem Umfang verarbeiten, überschreiten Sie möglicherweise die AWS KMS [requests-per-secondGrenzwerte, was zu Verarbeitungsverzögerungen](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second) führen kann. [Wenn Sie ein Limit überschreiten müssen, erstellen Sie einen Fall im AWS Support Center.](https://console.aws.amazon.com/support/home) Sie könnten auch erwägen, einen Anbieter für kryptografisches Material mit begrenzter Schlüsselwiederverwendung zu verwenden, z. B. [den neuesten Anbieter](most-recent-provider.md).

Um den Direct KMS Provider verwenden zu können, benötigt der Anrufer mindestens [einen AWS-Konto](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) und die Berechtigung AWS KMS key, die Operationen [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)und [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) auf dem aufzurufen. AWS KMS key Das AWS KMS key muss ein symmetrischer Verschlüsselungsschlüssel sein. Der DynamoDB Encryption Client unterstützt keine asymmetrische Verschlüsselung. Wenn Sie eine [globale DynamoDB-Tabelle](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html) verwenden, möchten Sie möglicherweise einen Schlüssel für [AWS KMS mehrere](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) Regionen angeben. Details hierzu finden Sie unter [Verwendung](#provider-kms-how-to-use).

**Anmerkung**  
Wenn Sie den Direct KMS-Anbieter verwenden, werden die Namen und Werte Ihrer Primärschlüsselattribute im [AWS KMS Verschlüsselungskontext und in den AWS CloudTrail Protokollen verwandter Operationen im Klartext](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) angezeigt. AWS KMS Der DynamoDB Encryption Client macht jedoch niemals den Klartext verschlüsselter Attributwerte verfügbar.

Der Direct KMS Provider ist einer von mehreren [Anbietern von kryptografischem Material](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs), die der DynamoDB Encryption Client unterstützt. Hinweise zum anderen CMPs finden Sie unter. [Anbieter von kryptografischem Material](crypto-materials-providers.md)

**Beispielcode finden Sie unter:**
+ 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**
+ [Verwendung](#provider-kms-how-to-use)
+ [Funktionsweise](#provider-kms-how-it-works)

## Verwendung
<a name="provider-kms-how-to-use"></a>

Um einen Direct KMS-Anbieter zu erstellen, verwenden Sie den Schlüssel-ID-Parameter, um einen [KMS-Schlüssel](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) mit symmetrischer Verschlüsselung in Ihrem Konto anzugeben. Der Wert des Schlüssel-ID-Parameters kann die Schlüssel-ID, der Schlüssel-ARN, der Aliasname oder der Alias-ARN von sein AWS KMS key. Einzelheiten zu den Schlüsselkennungen finden Sie unter [Schlüsselkennungen](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) im *AWS Key Management Service Entwicklerhandbuch*.

Der Direct KMS Provider benötigt einen KMS-Schlüssel mit symmetrischer Verschlüsselung. Sie können keinen asymmetrischen KMS-Schlüssel verwenden. Sie können jedoch einen KMS-Schlüssel für mehrere Regionen, einen KMS-Schlüssel mit importiertem Schlüsselmaterial oder einen KMS-Schlüssel in einem benutzerdefinierten Schlüsselspeicher verwenden. Sie benötigen die Berechtigungen [kms: GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) und [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) für den KMS-Schlüssel. Daher müssen Sie einen vom Kunden verwalteten Schlüssel verwenden, keinen verwalteten oder AWS eigenen AWS KMS-Schlüssel.

Der DynamoDB Encryption Client für Python bestimmt die Region für den Aufruf AWS KMS aus der Region im Schlüssel-ID-Parameterwert, falls dieser einen enthält. Andernfalls verwendet er die Region im AWS KMS Client, falls Sie eine angeben, oder die Region, die Sie in der konfigurieren. AWS SDK für Python (Boto3) Informationen zur Regionsauswahl in Python finden Sie unter [Konfiguration](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html) in der AWS API-Referenz zum SDK for Python (Boto3).

Der DynamoDB Encryption Client für Java bestimmt die Region für Anrufe AWS KMS von der Region im AWS KMS Client, wenn der von Ihnen angegebene Client eine Region enthält. Andernfalls verwendet er die Region, die Sie in der konfigurieren. AWS SDK für Java Informationen zur Regionsauswahl finden Sie unter [AWS-Region Auswahl](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-region-selection.html) im AWS SDK für Java Developer Guide. AWS SDK für Java

------
#### [ 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 ]

Im folgenden Beispiel wird der Schlüssel ARN verwendet, um den zu spezifizieren AWS KMS key. Wenn Ihre Schlüssel-ID keine enthält AWS-Region, ruft der DynamoDB Encryption Client die Region aus der konfigurierten Botocore-Sitzung, falls vorhanden, oder aus den Boto-Standardwerten ab.

```
# 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)
```

------

Wenn Sie [globale Amazon DynamoDB-Tabellen](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html) verwenden, empfehlen wir Ihnen, Ihre Daten mit einem AWS KMS Schlüssel für mehrere Regionen zu verschlüsseln. Schlüssel mit mehreren Regionen sind AWS KMS keys unterschiedlich und können synonym verwendet werden AWS-Regionen , da sie dieselbe Schlüssel-ID und dasselbe Schlüsselmaterial haben. *Einzelheiten finden Sie unter [Verwenden von Schlüsseln für mehrere Regionen](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) im Entwicklerhandbuch.AWS Key Management Service *

**Anmerkung**  
Wenn Sie die [Version 2017.11.29](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html) für globale Tabellen verwenden, müssen Sie Attributaktionen so einrichten, dass die reservierten Replikationsfelder nicht verschlüsselt oder signiert werden. Details hierzu finden Sie unter [Probleme mit globalen Tabellen älterer Versionen](troubleshooting.md#fix-global-tables).

Um einen Schlüssel für mehrere Regionen mit dem DynamoDB Encryption Client zu verwenden, erstellen Sie einen Schlüssel für mehrere Regionen und replizieren Sie ihn in die Regionen, in denen Ihre Anwendung ausgeführt wird. Konfigurieren Sie dann den Direct KMS Provider so, dass er den Schlüssel für mehrere Regionen in der Region verwendet, in der der DynamoDB Encryption Client anruft. AWS KMS

Im folgenden Beispiel wird der DynamoDB Encryption Client so konfiguriert, dass er Daten in der Region USA Ost (Nord-Virginia) (us-east-1) verschlüsselt und in der Region USA West (Oregon) (us-west-2) mit einem Schlüssel für mehrere Regionen entschlüsselt.

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

In diesem Beispiel ruft der DynamoDB Encryption Client die Region für Anrufe AWS KMS von der Region im AWS KMS Client ab. Der `keyArn` Wert identifiziert einen Schlüssel mit mehreren Regionen in derselben Region.

```
// 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 ]

In diesem Beispiel ruft der DynamoDB Encryption Client die Region für Anrufe AWS KMS aus der Region im Schlüssel-ARN ab.

```
# 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)
```

------

## Funktionsweise
<a name="provider-kms-how-it-works"></a>

Der Direct KMS Provider gibt Verschlüsselungs- und Signaturschlüssel zurück, die durch einen AWS KMS key von Ihnen angegebenen Wert geschützt sind, wie in der folgenden Abbildung dargestellt.

![\[Die Eingabe, Verarbeitung und Ausgabe des Direct KMS Providers im DynamoDB Encryption Client\]](http://docs.aws.amazon.com/de_de/database-encryption-sdk/latest/devguide/images/directKMS.png)

+ Um Verschlüsselungsmaterial zu generieren, fordert der Direct KMS Provider AWS KMS auf, mithilfe [eines von Ihnen angegebenen Datenschlüssels für jedes Element einen eindeutigen Datenschlüssel AWS KMS key zu generieren](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html). Er leitet Verschlüsselungs- und Signierschlüssel für das Element aus der Klartextkopie des [Datenschlüssels](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) ab und gibt dann die Verschlüsselungs- und Signierschlüssel zusammen mit dem verschlüsselten Datenschlüssel zurück, der im [Materialbeschreibungsattribut](DDBEC-legacy-concepts.md#legacy-material-description) des Elements gespeichert wird. 

  Der Elementverschlüssler verwendet die Verschlüsselungs- und Signierschlüssel und entfernt sie so schnell wie möglich aus dem Speicher. Nur die verschlüsselte Kopie des Datenschlüssels, von dem sie abgeleitet wurden, wird im verschlüsselten Element gespeichert.
+ Um Entschlüsselungsmaterialien zu generieren, bittet der Direct KMS-Anbieter darum AWS KMS , den verschlüsselten Datenschlüssel zu entschlüsseln. Dann leitet es aus dem Klartextdatenschlüssel Verifizierungs- und Signierschlüssel ab und gibt sie an den Elementverschlüssler zurück.

  Der Elementverschlüssler verifiziert das Element und entschlüsselt bei erfolgreicher Verifikation die verschlüsselten Werte. Anschließend entfernt er die Schlüssel so schnell wie möglich aus dem Speicher.

### Verschlüsselungsmaterialien abrufen
<a name="direct-kms-get-encryption-materials"></a>

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Direct KMS Providers, wenn er eine Anfrage für Verschlüsselungsmaterialien vom [Elementverschlüssler](DDBEC-legacy-concepts.md#item-encryptor) erhält.

**Eingabe** (von der Anwendung)
+ Die Schlüssel-ID eines. AWS KMS key

**Eingabe** (vom Elementverschlüssler)
+ [DynamoDB-Verschlüsselungskontext](concepts.md#encryption-context)

**Ausgabe** (an den Elementverschlüssler)
+ Verschlüsselungsschlüssel (Klartext)
+ Signierschlüssel
+ In der [tatsächlichen Materialbeschreibung](DDBEC-legacy-concepts.md#legacy-material-description): Diese Werte werden im Materialbeschreibungsattribut gespeichert, das der Client dem Element hinzufügt.
  + amzn-ddb-env-key: Base64-codierter Datenschlüssel, verschlüsselt durch AWS KMS key
  + amzn-ddb-env-alg[: Verschlüsselungsalgorithmus, standardmäßig AES/256](https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/archived-crypto-projects/aes-development)
  + amzn-ddb-sig-alg[: Signierungsalgorithmus, standardmäßig Hmac /256 SHA256](https://en.wikipedia.org/wiki/HMAC)
  + amzn-ddb-wrap-alg: km

**Verarbeitung**

1. Der Direct KMS-Anbieter sendet AWS KMS eine Anfrage, um mithilfe der angegebenen Daten [einen eindeutigen Datenschlüssel für das Element AWS KMS key zu generieren](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html). Die Operation gibt einen Klartextschlüssel und eine Kopie zurück, die unter dem AWS KMS key verschlüsselt ist. Dies wird als *anfängliches Schlüsselmaterial* bezeichnet.

   Die Anforderung enthält die folgenden Werte im Klartext im [AWS KMS -Verschlüsselungskontext](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context). Diese nicht geheimen Werte sind kryptographisch an das verschlüsselte Objekt gebunden, sodass beim Entschlüsseln der gleiche Verschlüsselungskontext benötigt wird. Sie können diese Werte verwenden, um den Anruf AWS KMS in [AWS CloudTrail Protokollen](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html) zu identifizieren.
   + amzn-ddb-env-alg — Verschlüsselungsalgorithmus, standardmäßig AES/256
   + amzn-ddb-sig-alg — Signaturalgorithmus, standardmäßig Hmac /256 SHA256
   + (Fakultativ) — aws-kms-table *table name*
   + (Optional) *partition key name* — *partition key value* (Binärwerte sind Base64-kodiert)
   + (Optional) *sort key name* — *sort key value* (Binärwerte sind Base64-kodiert)

   Der Direct KMS-Anbieter ruft die Werte für den AWS KMS Verschlüsselungskontext aus dem [DynamoDB-Verschlüsselungskontext](concepts.md#encryption-context) für das Element ab. Wenn der DynamoDB-Verschlüsselungskontext keinen Wert enthält, z. B. den Tabellennamen, wird dieses Name-Wert-Paar aus dem Verschlüsselungskontext weggelassen. AWS KMS 

1. Der Direct KMS Provider leitet aus dem Datenschlüssel einen symmetrischen Verschlüsselungsschlüssel und einen Signierschlüssel ab. Standardmäßig verwendet es den [Secure Hash Algorithm (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) und die [RFC5869 HMAC-basierte Schlüsselableitungsfunktion, um einen symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel und einen 256-Bit-HMAC-SHA-256-Signaturschlüssel](https://tools.ietf.org/html/rfc5869) abzuleiten. 

1. Der Direct KMS Provider gibt die Ausgabe an den Elementverschlüssler zurück.

1. Der Elementverschlüssler verwendet den Verschlüsselungsschlüssel, um die angegebenen Attribute zu verschlüsseln, und den Signierschlüssel, um sie mit den in der tatsächlichen Materialbeschreibung angegebenen Algorithmen zu signieren. Er entfernt die Klartextschlüssel so schnell wie möglich aus dem Speicher.

### Entschlüsselungsmaterialien abrufen
<a name="direct-kms-get-decryption-materials"></a>

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Direct KMS Providers, wenn er eine Anfrage für Entschlüsselungsmaterialien vom [Elementverschlüssler](DDBEC-legacy-concepts.md#item-encryptor) erhält.

**Eingabe** (von der Anwendung)
+ Die Schlüssel-ID eines. AWS KMS key

  Der Wert der Schlüssel-ID kann die Schlüssel-ID, der Schlüssel-ARN, der Aliasname oder der Alias-ARN von sein AWS KMS key. Alle Werte, die nicht in der Schlüssel-ID enthalten sind, z. B. die Region, müssen im [AWS benannten Profil](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) verfügbar sein. Der Schlüssel ARN liefert alle Werte, die AWS KMS benötigt werden.

**Eingabe** (vom Elementverschlüssler)
+ Eine Kopie des [DynamoDB-Verschlüsselungskontextes](concepts.md#encryption-context), der den Inhalt des Materialbeschreibungsattributs enthält.

**Ausgabe** (an den Elementverschlüssler)
+ Verschlüsselungsschlüssel (Klartext)
+ Signierschlüssel

**Verarbeitung**

1. Der Direct KMS-Anbieter ruft den verschlüsselten Datenschlüssel aus dem Materialbeschreibungsattribut im verschlüsselten Element ab. 

1. Er fordert Sie AWS KMS auf, den angegebenen Schlüssel AWS KMS key zum [Entschlüsseln](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) des verschlüsselten Datenschlüssels zu verwenden. Die Operation gibt einen Klartextschlüssel zurück.

   Diese Anforderung muss denselben [AWS KMS -Verschlüsselungskontext](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) verwenden, in dem der Datenschlüssel generiert und verschlüsselt wurde.
   + aws-kms-table – *table name*
   + *partition key name*— *partition key value* (Binärwerte sind Base64-kodiert)
   + (Optional) *sort key name* — *sort key value* (Binärwerte sind Base64-kodiert)
   + amzn-ddb-env-alg — Verschlüsselungsalgorithmus, standardmäßig AES/256
   + amzn-ddb-sig-alg — Signaturalgorithmus, standardmäßig Hmac /256 SHA256

1. Der Direct KMS Provider verwendet den [Secure Hash Algorithm (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) und die [RFC5869 HMAC-basierte Schlüsselableitungsfunktion, um einen symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel und einen 256-Bit-HMAC-SHA-256-Signaturschlüssel](https://tools.ietf.org/html/rfc5869) aus dem Datenschlüssel abzuleiten. 

1. Der Direct KMS Provider gibt die Ausgabe an den Elementverschlüssler zurück.

1. Der Elementverschlüssler verwendet den Signierschlüssel, um das Element zu verifizieren. Wenn er erfolgreich ist, verwendet er den symmetrischen Verschlüsselungsschlüssel, um die verschlüsselten Attributwerte zu entschlüsseln. Diese Operationen verwenden die in der tatsächlichen Materialbeschreibung angegebenen Verschlüsselungs- und Signieralgorithmen. Der Elementverschlüssler entfernt die Klartextschlüssel so schnell wie möglich aus dem Speicher.

# Wrapped Materials Provider
<a name="wrapped-provider"></a>

**Anmerkung**  
[Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS](DDBEC-rename.md) Das folgende Thema enthält Informationen zu Versionen 1. *x* —2. *x* des DynamoDB Encryption Client für Java und Versionen 1. *x —3*. *x* des DynamoDB Encryption Client für Python. Weitere Informationen finden Sie unter [AWS Database Encryption SDK für DynamoDB-Versionsunterstützung](legacy-dynamodb-encryption-client.md#legacy-support).

Mit dem *Wrapped Materials Provider* (Wrapped CMP) können Sie Schlüssel aus beliebigen Quellen mit dem DynamoDB Encryption Client verpacken und signieren. Das Wrapped CMP ist von keinem Dienst abhängig. AWS Sie müssen jedoch Ihre Wrapping- und Signierschlüssel außerhalb des Clients generieren und verwalten, einschließlich der Bereitstellung der richtigen Schlüssel zur Verifizierung und Entschlüsselung des Elements. 

Der Wrapped CMP generiert einen eindeutigen Verschlüsselungsschlüssel für jedes Element. Er verpackt den Verschlüsselungsschlüssel des Elements mit dem von Ihnen bereitgestellten Wrapping-Schlüssel und speichert den verpackten Elementverschlüsselungsschlüssel im [Materialbeschreibungsattribut](DDBEC-legacy-concepts.md#legacy-material-description) des Elements. Da Sie die Wrapping- und Signierschlüssel bereitstellen, bestimmen Sie, wie die Wrapping- und Signierschlüssel erzeugt werden und ob sie für jedes Element eindeutig sind oder wiederverwendet werden. 

Der Wrapped CMP ist eine sichere Implementierung und eine gute Wahl für Anwendungen, die kryptographische Materialien verwalten können.

Der Wrapped CMP ist einer von mehreren [Anbietern von kryptografischem Material](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs), die der DynamoDB Encryption Client unterstützt. Hinweise zum anderen finden Sie unter. CMPs [Anbieter von kryptografischem Material](crypto-materials-providers.md)

**Beispielcode finden Sie unter:**
+ 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**
+ [Verwendung](#wrapped-cmp-how-to-use)
+ [Funktionsweise](#wrapped-cmp-how-it-works)

## Verwendung
<a name="wrapped-cmp-how-to-use"></a>

Um einen Wrapped CMP zu erstellen, geben Sie einen Wrapping-Schlüssel (beim Verschlüsseln erforderlich), einen Unwrapping-Schlüssel (beim Entschlüsseln erforderlich) und einen Signierschlüssel an. Sie müssen beim Ver- und Entschlüsseln von Elementen Schlüssel bereitstellen.

Die Wrapping-, Unwrapping- und Signierschlüssel können symmetrische Schlüssel oder asymmetrische Schlüsselpaare sein. 

------
#### [ 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
)
```

------

## Funktionsweise
<a name="wrapped-cmp-how-it-works"></a>

Der Wrapped CMP generiert einen neuen Verschlüsselungsschlüssel für jedes Element. Es verwendet die von Ihnen bereitgestellten Wrapping-, Unwrapping- und Signierschlüssel, wie in der folgenden Abbildung gezeigt.

![\[Die Eingabe, Verarbeitung und Ausgabe des Wrapped Materials Provider im DynamoDB Encryption Client\]](http://docs.aws.amazon.com/de_de/database-encryption-sdk/latest/devguide/images/wrappedCMP.png)


### Verschlüsselungsmaterialien abrufen
<a name="wrapped-cmp-get-encryption-materials"></a>

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Wrapped Materials Providers (Wrapped CMP), wenn er eine Anfrage für Verschlüsselungsmaterialien erhält. 

**Eingabe** (von der Anwendung)
+ Wrapping-Schlüssel: Ein symmetrischer [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES)-Schlüssel oder ein öffentlicher [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem))-Schlüssel. Erforderlich, wenn Attributwerte verschlüsselt sind. Andernfalls ist er optional und wird ignoriert.
+ Unwrapping-Schlüssel: Optional und wird ignoriert. 
+ Signierschlüssel

**Eingabe** (vom Elementverschlüssler)
+ [DynamoDB-Verschlüsselungskontext](concepts.md#encryption-context)

**Ausgabe** (an den Elementverschlüssler):
+ Klartext-Element-Verschlüsselungsschlüssel
+ Signierschlüssel (unverändert)
+ [Tatsächliche Materialbeschreibung](DDBEC-legacy-concepts.md#legacy-material-description): Diese Werte werden im [Materialbeschreibungsattribut](DDBEC-legacy-concepts.md#legacy-material-description) gespeichert, das der Client dem Element hinzufügt. 
  + `amzn-ddb-env-key`: Base64-codierter Wrapped-Element-Verschlüsselungsschlüssel
  + `amzn-ddb-env-alg`: Verschlüsselungsalgorithmus, der zur Verschlüsselung des Elements verwendet wird. Der Standardwert ist AES-256-CBC.
  + `amzn-ddb-wrap-alg`: Der Wrapping-Algorithmus, den der Wrapped CMP verwendet hat, um den Elementverschlüsselungsschlüssel zu verpacken. Wenn es sich bei dem Wrapping-Schlüssel um einen AES-Schlüssel handelt, wird der Schlüssel mit nicht aufgefülltem `AES-Keywrap` verpackt, wie in [RFC 3394](https://tools.ietf.org/html/rfc3394.html) definiert. Wenn der Wrapping-Schlüssel ein RSA-Schlüssel ist, wird der Schlüssel mithilfe von RSA OAEP mit Auffüllung verschlüsselt. MGF1 

**Verarbeitung**

Wenn Sie ein Element verschlüsseln, übergeben Sie einen Wrapping-Schlüssel und einen Signierschlüssel. Ein Unwrapping-Schlüssel ist optional und wird ignoriert.

1. Der Wrapped CMP generiert einen symmetrischen Elementverschlüsselungsschlüssel für das Tabellenelement. 

1. Er verwendet den Wrapping-Schlüssel, den Sie angeben, um den Elementverschlüsselungsschlüssel zu verpacken. Anschließend entfernt er ihn so schnell wie möglich aus dem Speicher.

1. Es gibt den Klartextelementverschlüsselungsschlüssel zurück, den von Ihnen angegebenen Signierschlüssel und eine [tatsächliche Materialbeschreibung](DDBEC-legacy-concepts.md#legacy-material-description), die den Verschlüsselungsschlüssel des verpackten Elements und die Verschlüsselungs- und Wrapping-Algorithmen enthält.

1. Der Elementverschlüssler verwendet den Klartext-Verschlüsselungsschlüssel, um das Element zu verschlüsseln. Es verwendet den von Ihnen bereitgestellten Signierschlüssel, um das Element zu signieren. Anschließend entfernt er die Klartextschlüssel so schnell wie möglich aus dem Speicher. Es kopiert die Felder in der tatsächlichen Materialbeschreibung, einschließlich des verpackten Verschlüsselungsschlüssels (`amzn-ddb-env-key`), in das Materialbeschreibungsattribut des Elements.

### Entschlüsselungsmaterialien abrufen
<a name="wrapped-cmp-get-decryption-materials"></a>

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Wrapped Materials Providers (Wrapped CMP), wenn er eine Anfrage für Entschlüsselungsmaterialien erhält. 

**Eingabe** (von der Anwendung)
+ Wrapping-Schlüssel: Optional und wird ignoriert.
+ Unwrapping-Schlüssel: Derselbe symmetrische [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES)-Schlüssel oder private [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem))-Schlüssel, der dem zum Verschlüsseln verwendeten öffentlichen RSA-Schlüssel entspricht. Erforderlich, wenn Attributwerte verschlüsselt sind. Andernfalls ist er optional und wird ignoriert.
+ Signierschlüssel

**Eingabe** (vom Elementverschlüssler)
+ Eine Kopie des [DynamoDB-Verschlüsselungskontextes](concepts.md#encryption-context), der den Inhalt des Materialbeschreibungsattributs enthält.

**Ausgabe** (an den Elementverschlüssler)
+ Klartext-Element-Verschlüsselungsschlüssel
+ Signierschlüssel (unverändert)

**Verarbeitung**

Wenn Sie ein Element entschlüsseln, übergeben Sie einen Unwrapping-Schlüssel und einen Signierschlüssel. Ein Wrapping-Schlüssel ist optional und wird ignoriert.

1. Der Wrapped CMP erhält den Verschlüsselungsschlüssel des verpackten Elements aus dem Materialbeschreibungsattribut des Elements.

1. Er verwendet den Unwrapping-Schlüssel und den Algorithmus, um den Verschlüsselungsschlüssel des Elements zu entpacken. 

1. Es gibt den Klartextelementverschlüsselungsschlüssel, den Signierschlüssel sowie Verschlüsselungs- und Signieralgorithmen an den Elementverschlüsseler zurück.

1. Der Elementverschlüssler verwendet den Signierschlüssel, um das Element zu verifizieren. Wenn dies erfolgreich ist, verwendet er den Verschlüsselungsschlüssel des Elements, um das Element zu entschlüsseln. Anschließend entfernt er die Klartextschlüssel so schnell wie möglich aus dem Speicher.

# Most Recent Provider
<a name="most-recent-provider"></a>

**Anmerkung**  
[Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS](DDBEC-rename.md) Das folgende Thema enthält Informationen zu Versionen 1. *x* —2. *x* des DynamoDB Encryption Client für Java und Versionen 1. *x —3*. *x* des DynamoDB Encryption Client für Python. Weitere Informationen finden Sie unter [AWS Database Encryption SDK für DynamoDB-Versionsunterstützung](legacy-dynamodb-encryption-client.md#legacy-support).

Der *Most Recent Provider* ist ein [Anbieter kryptographischer Materialien (Cryptographic Materials Provider (CMP))](DDBEC-legacy-concepts.md#concept-material-provider), der auf die Arbeit mit einem [Provider-Store](DDBEC-legacy-concepts.md#provider-store) ausgelegt ist. Es wird CMPs aus dem Anbieterspeicher abgerufen und ruft die kryptografischen Materialien ab, die es vom zurückgibt. CMPs Typischerweise wird jeder CMP verwendet, um mehrere Anfragen nach kryptographischem Material zu befriedigen. Sie können jedoch mit den Funktionen des Provider-Stores steuern, inwieweit Materialien wiederverwendet werden, wie oft der CMP gewechselt wird und sogar den Typ des CMP ändern, ohne den Most Recent Provider zu ändern.

**Anmerkung**  
Der Code, der dem `MostRecentProvider` Symbol für den neuesten Anbieter zugeordnet ist, speichert möglicherweise kryptografisches Material für die gesamte Lebensdauer des Prozesses im Speicher. Es könnte einem Anrufer ermöglichen, Schlüssel zu verwenden, zu deren Verwendung er nicht mehr berechtigt ist.   
Das `MostRecentProvider` Symbol ist in älteren unterstützten Versionen des DynamoDB Encryption Client veraltet und wurde aus Version 2.0.0 entfernt. Es wird durch das Symbol ersetzt. `CachingMostRecentProvider` Details hierzu finden Sie unter [Aktualisierungen für den neuesten Anbieter](#mrp-versions).

Der Most Recent Provider ist eine gute Wahl für Anwendungen, die Aufrufe des Provider-Stores und seiner kryptographischen Quelle minimieren müssen, sowie für Anwendungen, die bestimmte kryptographische Materialien wiederverwenden können, ohne ihre Sicherheitsanforderungen zu verletzen. So können Sie beispielsweise Ihr kryptografisches Material mit einem [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) schützen, ohne AWS KMS jedes Mal, wenn Sie ein Objekt ver- oder entschlüsseln, erneut aufrufen zu müssen.

Der von Ihnen gewählte Anbieterspeicher bestimmt CMPs , welchen Typ der neueste Anbieter verwendet und wie oft er eine neue CMP erhält. Sie können jeden kompatiblen Provider-Store für den Most Recent Provider verwenden, einschließlich benutzerdefinierter Provider-Stores, die Sie entwerfen. 

Der DynamoDB Encryption Client enthält einen *MetaStore*, der [Wrapped Materials Providers (Wrapped](wrapped-provider.md)) erstellt und zurückgibt. CMPs Das MetaStore speichert mehrere Versionen von Wrapped CMPs , die es generiert, in einer internen DynamoDB-Tabelle und schützt sie mit clientseitiger Verschlüsselung durch eine interne Instanz des DynamoDB Encryption Client. 

Sie können den MetaStore so konfigurieren, dass er jede Art von internem CMP verwendet, um die Materialien in der Tabelle zu schützen, einschließlich eines [direkten KMS-Anbieters](direct-kms-provider.md), der von Ihnen geschütztes kryptografisches Material generiert AWS KMS key, eines Wrapped CMP, das von Ihnen bereitgestellte Wrapping- und Signierschlüssel verwendet, oder eines kompatiblen benutzerdefinierten CMP, das Sie entwerfen.

**Beispielcode finden Sie unter:**
+ 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**
+ [Verwendung](#mrp-how-to-use-it)
+ [Funktionsweise](#mrp-how-it-works)
+ [Aktualisierungen für den neuesten Anbieter](#mrp-versions)

## Verwendung
<a name="mrp-how-to-use-it"></a>

Um einen Most Recent Provider zu erstellen, müssen Sie einen Provider-Store erstellen und konfigurieren und dann einen Most Recent Provider erstellen, der den Provider-Store verwendet. 

Die folgenden Beispiele zeigen, wie Sie einen Aktuellsten Anbieter erstellen, der einen verwendet MetaStore und die Versionen in seiner internen DynamoDB-Tabelle mit kryptografischem Material von einem [Direct](direct-kms-provider.md) KMS-Anbieter schützt. In diesen Beispielen wird das Symbol verwendet. [`CachingMostRecentProvider`](#mrp-versions) 

Jeder aktuelle Anbieter hat einen Namen, der ihn CMPs in der MetaStore Tabelle identifiziert, eine Einstellung [time-to-live](#most-recent-provider-ttl)(TTL) und eine Einstellung für die Cachegröße, die bestimmt, wie viele Einträge der Cache aufnehmen kann. In diesen Beispielen wird die Cachegröße auf 1000 Einträge und eine TTL von 60 Sekunden festgelegt.

------
#### [ 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
)
```

------

## Funktionsweise
<a name="mrp-how-it-works"></a>

Der neueste Anbieter wird CMPs aus einem Anbieterspeicher abgerufen. Dann verwendet er den CMP, um die kryptographischen Materialien zu generieren, die er an den Elementverschlüssler zurückgibt.

### Informationen über den Most Recent Provider
<a name="about-mrp"></a>

Der Most Recent Provider erhält einen [Anbieter kryptographischer Materialien (Cryptographic Materials Provider (CMP)](DDBEC-legacy-concepts.md#concept-material-provider) aus einem [Provider-Store](DDBEC-legacy-concepts.md#provider-store). Dann verwendet er den CMP, um die kryptographischen Materialien zu generieren, die er zurückgibt. Jeder aktuelle Anbieter ist einem Anbieterspeicher zugeordnet, aber ein Anbieterspeicher kann mehrere Anbieter auf mehreren Hosts beliefern CMPs .

Der Most Recent Provider kann mit jedem kompatiblen CMP aus einem beliebigen Provider-Store arbeiten. Es fordert Verschlüsselungs- oder Entschlüsselungsmaterial vom CMP an und gibt die Ausgabe an den Elementverschlüsseler zurück. Er führt keine kryptografischen Operationen durch.

Um einen CMP von seinem Provider-Store anzufordern, gibt der Most Recent Provider seinen Materialnamen und die Version eines bestehenden CMP an, den er verwenden möchte. Bei Verschlüsselungsmaterialien fordert der Most Recent Provider immer die maximale („neueste“) Version an. Bei Entschlüsselungsmaterialien wird die Version des CMP angefordert, die für die Erstellung der Verschlüsselungsmaterialien verwendet wurde, wie in der folgenden Abbildung dargestellt.

![\[Einen Most Recent Provider\]](http://docs.aws.amazon.com/de_de/database-encryption-sdk/latest/devguide/images/most-recent-provider-1.png)


Der neueste Anbieter speichert Versionen von CMPs , die der Anbieter zurückgibt, in einem lokalen LRU-Cache (Least Recently Used) im Arbeitsspeicher. Der Cache ermöglicht es dem neuesten Anbieter, die benötigten Daten abzurufen CMPs , ohne für jedes Element den Anbieterspeicher aufrufen zu müssen. Sie können den Cache bei Bedarf leeren.

Der neueste Anbieter verwendet einen konfigurierbaren [time-to-liveWert](#most-recent-provider-ttl), den Sie an die Eigenschaften Ihrer Anwendung anpassen können.

### Über den MetaStore
<a name="about-metastore"></a>

Sie können einen Most Recent Provider mit einem beliebigen Provider-Store verwenden, einschließlich eines kompatiblen benutzerdefinierten Provider-Stores. Der DynamoDB Encryption Client umfasst eine MetaStore, eine sichere Implementierung, die Sie konfigurieren und anpassen können.

A *MetaStore*ist ein [Provider-Store](DDBEC-legacy-concepts.md#provider-store), der Wrapped erstellt und zurückgibt CMPs, die mit dem [Wrapped](wrapped-provider.md) Key, dem Unwrapping Key und dem Signaturschlüssel konfiguriert sind, die Wrapped benötigen. CMPs A MetaStore ist eine sichere Option für den neuesten Anbieter, da Wrapped CMPs immer eindeutige Verschlüsselungsschlüssel für jedes Element generiert. Nur der Wrapping-Schlüssel, der den Elementverschlüsselungsschlüssel und die Signierschlüssel schützt, wird wiederverwendet.

Das folgende Diagramm zeigt die Komponenten von MetaStore und wie es mit dem neuesten Anbieter interagiert.

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


Der MetaStore generiert das Wrapped CMPs und speichert es dann (in verschlüsselter Form) in einer internen DynamoDB-Tabelle. Der Partitionsschlüssel ist der Name des aktuellsten Provider-Materials, der Sortierschlüssel die Versionsnummer. Die Materialien in der Tabelle sind durch einen internen DynamoDB Encryption Client geschützt, einschließlich eines Elementverschlüsselers und eines internen [Anbieters für kryptografische Materialien](DDBEC-legacy-concepts.md#concept-material-provider) (CMP).

Sie können jede Art von internem CMP in Ihrem verwenden MetaStore, einschließlich eines [direkten KMS-Anbieters](wrapped-provider.md), eines verpackten CMP mit von Ihnen bereitgestellten kryptografischen Materialien oder eines kompatiblen benutzerdefinierten CMP. Wenn es sich bei Ihrem internen CMP um einen Direct KMS-Anbieter MetaStore handelt, sind Ihre wiederverwendbaren Wrapping- und Signaturschlüssel mit einem in () geschützt. [AWS KMS key[AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)AWS KMS Der MetaStore ruft AWS KMS jedes Mal auf, wenn er seiner internen Tabelle eine neue CMP-Version hinzufügt oder eine CMP-Version aus seiner internen Tabelle abruft.

### Einen Wert setzen time-to-live
<a name="most-recent-provider-ttl"></a>

Sie können für jeden neuesten Anbieter, den Sie erstellen, einen Wert time-to-live (TTL) festlegen. Verwenden Sie im Allgemeinen den niedrigsten TTL-Wert, der für Ihre Anwendung praktikabel ist.

Die Verwendung des TTL-Werts wird im `CachingMostRecentProvider` Symbol für den neuesten Anbieter geändert. 

**Anmerkung**  
Das `MostRecentProvider` Symbol für den neuesten Anbieter ist in älteren unterstützten Versionen des DynamoDB Encryption Client veraltet und wurde aus Version 2.0.0 entfernt. Es wird durch das Symbol ersetzt. `CachingMostRecentProvider` Wir empfehlen Ihnen, Ihren Code so schnell wie möglich zu aktualisieren. Details hierzu finden Sie unter [Aktualisierungen für den neuesten Anbieter](#mrp-versions).

**`CachingMostRecentProvider`**  
Der `CachingMostRecentProvider` verwendet den TTL-Wert auf zwei verschiedene Arten.   
+ Die TTL bestimmt, wie oft der neueste Anbieter im Anbieterspeicher nach einer neuen Version der CMP sucht. Wenn eine neue Version verfügbar ist, ersetzt der neueste Anbieter seinen CMP und aktualisiert sein kryptografisches Material. Andernfalls verwendet er weiterhin seine aktuellen CMP- und kryptografischen Materialien.
+ Die TTL bestimmt, wie lange CMPs der Cache verwendet werden kann. Bevor er eine zwischengespeicherte CMP für die Verschlüsselung verwendet, bewertet der aktuelle Anbieter die Zeit, die er im Cache verbracht hat. Wenn die CMP-Cachezeit die TTL überschreitet, wird die CMP aus dem Cache entfernt und der neueste Anbieter erhält eine neue CMP der neuesten Version aus seinem Provider-Speicher.

**`MostRecentProvider`**  
In der bestimmt die TTL`MostRecentProvider`, wie oft der neueste Anbieter im Anbieterspeicher nach einer neuen Version des CMP sucht. Wenn eine neue Version verfügbar ist, ersetzt der neueste Anbieter seinen CMP und aktualisiert sein kryptografisches Material. Andernfalls verwendet er weiterhin seine aktuellen CMP- und kryptografischen Materialien.

Die TTL bestimmt nicht, wie oft eine neue CMP-Version erstellt wird. Sie erstellen neue CMP-Versionen, indem Sie die kryptografischen Materialien [rotieren](#most-recent-provider-rotate).

Ein idealer TTL-Wert hängt von der Anwendung und ihren Latenz- und Verfügbarkeitszielen ab. Eine niedrigere TTL verbessert Ihr Sicherheitsprofil, da sie die Zeit reduziert, in der kryptografisches Material im Speicher gespeichert wird. Eine niedrigere TTL aktualisiert außerdem wichtige Informationen häufiger. Wenn es sich bei Ihrem internen CMP beispielsweise um einen [Direct KMS-Anbieter](direct-kms-provider.md) handelt, überprüft er häufiger, ob der Anrufer weiterhin berechtigt ist, einen zu verwenden. AWS KMS key

Wenn die TTL jedoch zu kurz ist, können die häufigen Anrufe beim Provider-Store Ihre Kosten in die Höhe treiben und dazu führen, dass Ihr Provider-Store Anfragen von Ihrer Anwendung und anderen Anwendungen, die Ihr Dienstkonto gemeinsam nutzen, drosselt. Sie könnten auch davon profitieren, die TTL mit der Geschwindigkeit zu koordinieren, mit der Sie kryptografisches Material wechseln. 

Variieren Sie beim Testen die TTL und die Cachegröße je nach Arbeitslast, bis Sie eine Konfiguration gefunden haben, die für Ihre Anwendung und Ihre Sicherheits- und Leistungsstandards geeignet ist.

### Rotieren von kryptografischen Materialien
<a name="most-recent-provider-rotate"></a>

Wenn ein neuester Anbieter Verschlüsselungsmaterial benötigt, verwendet er immer die neueste Version seiner CMP, die ihm bekannt ist. Die Häufigkeit, mit der nach einer neueren Version gesucht wird, wird durch den [time-to-live](#most-recent-provider-ttl)(TTL) -Wert bestimmt, den Sie bei der Konfiguration des neuesten Anbieters festgelegt haben. 

Wenn die TTL abläuft, sucht der neueste Anbieter im Anbieterspeicher nach einer neueren Version der CMP. Wenn eine verfügbar ist, wird sie vom neuesten Anbieter abgerufen und die CMP in seinem Cache ersetzt. Er verwendet dieses CMP und seine kryptografischen Materialien, bis es feststellt, dass es im Provider-Store eine neuere Version gibt.

Um den Provider-Store anzuweisen, eine neue Version eines CMP für einen Most Recent Provider zu erstellen, rufen Sie die Operation „Create New Provider“ (Neuen Provider erstellen) des Provider-Stores mit dem Materialnamen des Most Recent Providers auf. Der Provider-Store erstellt einen neuen CMP und speichert eine verschlüsselte Kopie in seinem internen Speicher mit einer höheren Versionsnummer. (Es gibt auch einen CMP zurück, aber Sie können ihn verwerfen.) Wenn der neueste Anbieter das nächste Mal die maximale Versionsnummer des Provider-Speichers abfragt CMPs, ruft er die neue höhere Versionsnummer ab und verwendet sie in nachfolgenden Anfragen an den Speicher, um festzustellen, ob eine neue Version des CMP erstellt wurde.

Sie können Ihre „Create New Provider“-Aufrufe (Neuen Provider erstellen) abhängig von der Zeit, der Anzahl der verarbeiteten Elemente oder Attribute oder einer anderen für Ihre Anwendung sinnvollen Kennzahl planen.

### Verschlüsselungsmaterialien abrufen
<a name="most-recent-provider-encrypt"></a>

Der Most Recent Provider verwendet den folgenden Prozess, wie in dieser Abbildung gezeigt, um die Verschlüsselungsmaterialien zu erhalten, die er an den Elementverschlüssler zurückgibt. Die Ausgabe hängt vom Typ des CMP ab, den der Provider-Store zurückgibt. Der neueste Anbieter kann jeden kompatiblen Anbieterspeicher verwenden, einschließlich des Speichers MetaStore , der im DynamoDB Encryption Client enthalten ist.

![\[Eingabe, Verarbeitung und Ausgabe des neuesten Anbieters im DynamoDB Encryption Client\]](http://docs.aws.amazon.com/de_de/database-encryption-sdk/latest/devguide/images/most-recent-provider-provider-store.png)


Wenn Sie mithilfe des [`CachingMostRecentProvider`Symbols](#mrp-versions) einen aktuellen Anbieter erstellen, geben Sie einen Anbieterspeicher, einen Namen für den neuesten Anbieter und einen [time-to-live](#most-recent-provider-ttl)(TTL) -Wert an. Sie können optional auch eine Cachegröße angeben, die die maximale Anzahl kryptografischer Materialien bestimmt, die im Cache vorhanden sein können.

Wenn der Elementverschlüssler den Most Recent Provider nach Verschlüsselungsmaterialien fragt, sucht der Most Recent Provider zunächst in seinem Cache nach der neuesten Version seines CMP.
+ Wenn er die neueste Version von CMP in seinem Cache findet und der CMP den TTL-Wert nicht überschritten hat, verwendet der neueste Anbieter den CMP, um Verschlüsselungsmaterial zu generieren. Anschließend gibt er die Verschlüsselungsmaterialien an den Elementverschlüssler zurück. Für diese Operation muss der Provider-Store nicht aufgerufen werden.
+ Wenn sich die neueste Version der CMP nicht in seinem Cache befindet oder wenn sie sich im Cache befindet, aber ihren TTL-Wert überschritten hat, fordert der neueste Anbieter eine CMP aus seinem Provider-Speicher an. Die Anfrage enthält den Materialnamen des Most Recent Providers und die maximale Versionsnummer, die ihm bekannt ist.

  1. Der Provider-Store gibt einen CMP aus seinem persistenten Speicher zurück. Wenn es sich bei dem Provider-Speicher um einen handelt MetaStore, ruft er eine verschlüsselte Wrapped CMP aus seiner internen DynamoDB-Tabelle ab, indem er den Materialnamen des neuesten Anbieters als Partitionsschlüssel und die Versionsnummer als Sortierschlüssel verwendet. Der MetaStore verwendet seinen internen Elementverschlüsseler und sein internes CMP, um das Wrapped CMP zu entschlüsseln. Dann gibt er den Klartext-CMP an den Most Recent Provider zurück. Wenn der interne CMP ein [Direct KMS Provider](direct-kms-provider.md) ist, beinhaltet dieser Schritt einen Aufruf von [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. Der CMP fügt das `amzn-ddb-meta-id`-Feld der [aktuellen Materialbeschreibung](DDBEC-legacy-concepts.md#legacy-material-description) hinzu. Sein Wert sind der Materialname und die Version des CMP in seiner internen Tabelle. Der Provider-Store gibt den CMP an den Most Recent Provider zurück.

  1. Der Most Recent Provider speichert den CMP im Speicher zwischen.

  1. Der Most Recent Provider verwendet den CMP, um Verschlüsselungsmaterialien zu generieren. Anschließend gibt er die Verschlüsselungsmaterialien an den Elementverschlüssler zurück.

### Entschlüsselungsmaterialien abrufen
<a name="most-recent-provider-decrypt"></a>

Wenn der Elementverschlüssler den Most Recent Provider nach Entschlüsselungsmaterialien abfragt, verwendet der Most Recent Provider den folgenden Prozess, um diese abzurufen und zurückzugeben.

1. Der Most Recent Provider fragt den Provider-Store nach der Versionsnummer des kryptographischen Materials, das zur Verschlüsselung des Elements verwendet wurde. Er übergibt die aktuelle Materialbeschreibung aus dem [Materialbeschreibungsattribut](DDBEC-legacy-concepts.md#legacy-material-description) des Elements.

1. Der Provider Store ruft die verschlüsselnde CMP-Versionsnummer aus dem Feld `amzn-ddb-meta-id` in der aktuellen Materialbeschreibung ab und gibt sie an den Most Recent Provider zurück.

1. Der Most Recent Provider durchsucht seinen Cache nach der Version des CMP, mit der das Element verschlüsselt und signiert wurde.
+ Wenn er feststellt, dass sich die passende Version des CMP in seinem Cache befindet und der CMP den [time-to-live (TTL) -Wert](#most-recent-provider-ttl) nicht überschritten hat, verwendet der neueste Anbieter den CMP, um Entschlüsselungsmaterialien zu generieren. Anschließend gibt er die Entschlüsselungsmaterialien an den Elementverschlüssler zurück. Für diese Operation muss der Provider-Store nicht aufgerufen werden, und auch kein anderer CMP.
+ Wenn sich die passende Version der CMP nicht in ihrem Cache befindet oder wenn die zwischengespeicherte Version ihren TTL-Wert überschritten AWS KMS key hat, fordert der neueste Anbieter eine CMP von seinem Provider-Speicher an. Er sendet seinen Materialnamen und die Versionsnummer des verschlüsselnden CMP in der Anfrage.

  1. Der Provider-Store durchsucht seinen persistenten Speicher nach dem CMP, indem er den Namen des Most Recent Providers als Partitionsschlüssel und die Versionsnummer als Sortierschlüssel verwendet.
     + Wenn sich der Name und die Versionsnummer nicht in seinem persistenten Speicher befinden, wirft der Provider-Store eine Ausnahme auf. Wenn der Provider-Store zur Generierung des CMP verwendet wurde, sollte der CMP in seinem persistenten Speicher abgelegt sein, es sei denn, er wurde absichtlich gelöscht.
     + Wenn sich der CMP mit dem übereinstimmenden Namen und der Versionsnummer im persistenten Speicher des Provider-Stores befindet, gibt der Provider-Store den angegebenen CMP an den Most Recent Provider zurück. 

       Wenn es sich bei dem Provider-Speicher um einen handelt MetaStore, ruft er die verschlüsselte CMP aus seiner DynamoDB-Tabelle ab. Dann verwendet er kryptografische Materialien aus seinem internen CMP, um den verschlüsselten CMP zu entschlüsseln, bevor es den CMP an den Most Recent Provider zurückgibt. Wenn der interne CMP ein [Direct KMS Provider](direct-kms-provider.md) ist, beinhaltet dieser Schritt einen Aufruf von [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. Der Most Recent Provider speichert den CMP im Speicher zwischen.

  1. Der Most Recent Provider verwendet den CMP, um Entschlüsselungsmaterialien zu generieren. Anschließend gibt er die Entschlüsselungsmaterialien an den Elementverschlüssler zurück.

## Aktualisierungen für den neuesten Anbieter
<a name="mrp-versions"></a>

Das Symbol für den neuesten Anbieter wurde von `MostRecentProvider` zu geändert`CachingMostRecentProvider`. 

**Anmerkung**  
Das `MostRecentProvider` Symbol, das den neuesten Anbieter darstellt, ist in Version 1.15 des DynamoDB Encryption Client für Java und Version 1.3 des DynamoDB Encryption Client für Python veraltet und wurde aus den Versionen 2.0.0 des DynamoDB Encryption Client in beiden Sprachimplementierungen entfernt. Verwenden Sie stattdessen die. `CachingMostRecentProvider`

Der `CachingMostRecentProvider` implementiert die folgenden Änderungen:
+ Die entfernt in `CachingMostRecentProvider` regelmäßigen Abständen kryptografisches Material aus dem Speicher, wenn ihre Speicherdauer den konfigurierten Wert [time-to-live (TTL)](#most-recent-provider-ttl) überschreitet. 

  Sie speichern `MostRecentProvider` möglicherweise kryptografisches Material für die gesamte Lebensdauer des Prozesses im Speicher. Dies hat zur Folge, dass der neueste Anbieter von Autorisierungsänderungen möglicherweise nichts weiß. Möglicherweise werden Verschlüsselungsschlüssel verwendet, nachdem dem Anrufer die Berechtigungen zu deren Verwendung entzogen wurden. 

  Wenn Sie nicht auf diese neue Version aktualisieren können, können Sie einen ähnlichen Effekt erzielen, indem Sie die `clear()` Methode regelmäßig im Cache aufrufen. Diese Methode löscht den Cache-Inhalt manuell und erfordert, dass der neueste Anbieter eine neue CMP und neue kryptografische Materialien anfordert. 
+ Dazu gehört `CachingMostRecentProvider` auch eine Einstellung für die Cachegröße, mit der Sie mehr Kontrolle über den Cache haben.

Um auf die zu aktualisieren`CachingMostRecentProvider`, müssen Sie den Symbolnamen in Ihrem Code ändern. In jeder anderen Hinsicht `CachingMostRecentProvider` ist das vollständig abwärtskompatibel mit dem`MostRecentProvider`. Sie müssen keine Tabellenelemente erneut verschlüsseln.

Das `CachingMostRecentProvider` generiert jedoch mehr Aufrufe an die zugrunde liegende Schlüsselinfrastruktur. Es ruft den Provider-Speicher mindestens einmal in jedem time-to-live (TTL-) Intervall auf. Anwendungen mit zahlreichen aktiven Anwendungen CMPs (aufgrund häufiger Rotation) oder Anwendungen mit großen Flotten reagieren höchstwahrscheinlich empfindlich auf diese Änderung. 

Bevor Sie Ihren aktualisierten Code veröffentlichen, testen Sie ihn gründlich, um sicherzustellen, dass die häufigeren Aufrufe Ihre Anwendung nicht beeinträchtigen oder zu Drosselungen durch Dienste führen, von denen Ihr Anbieter abhängig ist, wie AWS Key Management Service (AWS KMS) oder Amazon DynamoDB. Um Leistungsprobleme zu vermeiden, passen Sie die Cachegröße und die Größe des Caches an die time-to-live von Ihnen beobachteten `CachingMostRecentProvider` Leistungsmerkmale an. Anleitungen finden Sie unter [Einen Wert setzen time-to-live](#most-recent-provider-ttl).

# Static Materials Provider
<a name="static-provider"></a>

**Anmerkung**  
Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK [umbenannt](DDBEC-rename.md). AWS Das folgende Thema enthält Informationen zu Versionen 1. *x* —2. *x* des DynamoDB Encryption Client für Java und Versionen 1. *x —3*. *x* des DynamoDB Encryption Client für Python. Weitere Informationen finden Sie unter [AWS Database Encryption SDK für DynamoDB-Versionsunterstützung](legacy-dynamodb-encryption-client.md#legacy-support).

Der *Static Materials Provider* (Static CMP) ist ein sehr einfacher [Anbieter für kryptografische Materialien](DDBEC-legacy-concepts.md#concept-material-provider) (CMP), der für Tests, proof-of-concept Demonstrationen und zur Kompatibilität mit älteren Versionen vorgesehen ist.

Um mit dem Static CMP ein Tabellenelement zu verschlüsseln, geben Sie einen symmetrischen [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES)-Verschlüsselungsschlüssel und einen Signierschlüssel oder ein Schlüsselpaar an. Sie müssen die gleichen Schlüssel angeben, um das verschlüsselte Element zu entschlüsseln. Der Static CMP führt keine kryptografischen Vorgänge durch. Stattdessen übergibt es die Verschlüsselungsschlüssel, die Sie dem Elementverschlüssler zur Verfügung stellen, unverändert. Der Elementverschlüsseler verschlüsselt die Elemente direkt unter dem Verschlüsselungsschlüssel. Anschließend verwendet er den Signierschlüssel, um sie direkt zu signieren. 

Da der Static CMP keine eindeutigen kryptographischen Materialien erzeugt, werden alle Tabellenelemente, die Sie verarbeiten, mit demselben Verschlüsselungsschlüssel verschlüsselt und mit demselben Signierschlüssel signiert. Wenn Sie den gleichen Schlüssel verwenden, um die Attributwerte in verschiedenen Elementen zu verschlüsseln, oder wenn Sie den gleichen Schlüssel oder das gleiche Schlüsselpaar verwenden, um alle Elemente zu signieren, laufen Sie Gefahr, die kryptographischen Grenzen der Schlüssel zu überschreiten. 

**Anmerkung**  
Der [Asymmetric Static Provider](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) in der Java-Bibliothek ist kein statischer Anbieter. Er liefert nur alternative Konstruktoren für den [Wrapped CMP](wrapped-provider.md). Er ist sicher für die Produktion, aber Sie sollten den Wrapped CMP nach Möglichkeit direkt verwenden.

Der statische CMP ist einer von mehreren [Anbietern für kryptografisches Material](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs), die der DynamoDB Encryption Client unterstützt. Hinweise zum anderen finden Sie unter. CMPs [Anbieter von kryptografischem Material](crypto-materials-providers.md)

**Beispielcode finden Sie unter:**
+ Java: [SymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/SymmetricEncryptedItem.java)

**Topics**
+ [Verwendung](#static-cmp-how-to-use)
+ [Funktionsweise](#static-cmp-how-it-works)

## Verwendung
<a name="static-cmp-how-to-use"></a>

Um einen statischen Anbieter zu erstellen, geben Sie einen Verschlüsselungsschlüssel oder ein Schlüsselpaar und einen Signierschlüssel oder ein Schlüsselpaar an. Sie müssen Schlüsselmaterial zum Ver- und Entschlüsseln von Tabellenelementen bereitstellen.

------
#### [ 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
)
```

------

## Funktionsweise
<a name="static-cmp-how-it-works"></a>

Der Statische Provider übergibt die von Ihnen gelieferten Verschlüsselungs- und Signierschlüssel an den Elementverschlüssler, wo sie direkt zum Verschlüsseln und Signieren Ihrer Tabellenelemente verwendet werden. Wenn Sie nicht für jedes Element unterschiedliche Schlüssel angeben, werden für jedes Element die gleichen Schlüssel verwendet.

![\[Die Eingabe, Verarbeitung und Ausgabe des Static Materials Provider im DynamoDB Encryption Client\]](http://docs.aws.amazon.com/de_de/database-encryption-sdk/latest/devguide/images/staticCMP.png)


### Verschlüsselungsmaterialien abrufen
<a name="static-cmp-get-encryption-materials"></a>

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Static Materials Providers (Static CMP), wenn er eine Anfrage für Verschlüsselungsmaterialien erhält.

**Eingabe** (von der Anwendung)
+ Ein Verschlüsselungsschlüssel — Dies muss ein symmetrischer Schlüssel sein, z. B. ein AES-Schlüssel ([Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html)). 
+ Ein Signaturschlüssel — Dies kann ein symmetrischer Schlüssel oder ein asymmetrisches key pair sein. 

**Eingabe** (vom Elementverschlüssler)
+ [DynamoDB-Verschlüsselungskontext](concepts.md#encryption-context)

**Ausgabe** (an den Elementverschlüssler)
+ Der als Eingabe übergebene Verschlüsselungsschlüssel.
+ Der als Eingabe übergebene Signierschlüssel.
+ Tatsächliche Materialbeschreibung: Die [angeforderte Materialbeschreibung](DDBEC-legacy-concepts.md#legacy-material-description), falls vorhanden, unverändert.

### Entschlüsselungsmaterialien abrufen
<a name="static-cmp-get-decryption-materials"></a>

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Static Materials Providers (Static CMP), wenn er eine Anfrage für Entschlüsselungsmaterialien erhält.

Obwohl er getrennte Methoden zum Abrufen von Verschlüsselungsmaterialien und Entschlüsselungsmaterialien enthält, ist das Verhalten das gleiche. 

**Eingabe** (von der Anwendung)
+ Ein Verschlüsselungsschlüssel — Dies muss ein symmetrischer Schlüssel sein, z. B. ein AES-Schlüssel ([Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html)). 
+ Ein Signaturschlüssel — Dies kann ein symmetrischer Schlüssel oder ein asymmetrisches key pair sein. 

**Eingabe** (vom Elementverschlüssler)
+ [DynamoDB-Verschlüsselungskontext](concepts.md#encryption-context) (nicht verwendet)

**Ausgabe** (an den Elementverschlüssler)
+ Der als Eingabe übergebene Verschlüsselungsschlüssel.
+ Der als Eingabe übergebene Signierschlüssel.