

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.

# Was ist das AWS Database Encryption SDK?
<a name="what-is-database-encryption-sdk"></a>


****  

|  | 
| --- |
| Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS Dieses Entwicklerhandbuch enthält weiterhin Informationen zum [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md). | 

Das AWS Database Encryption SDK besteht aus einer Reihe von Softwarebibliotheken, mit denen Sie die clientseitige Verschlüsselung in Ihr Datenbankdesign integrieren können. Das AWS Database Encryption SDK bietet Verschlüsselungslösungen auf Datensatzebene. Sie geben an, welche Felder verschlüsselt sind und welche Felder in den Signaturen enthalten sind, die die Authentizität Ihrer Daten sicherstellen. Durch die Verschlüsselung Ihrer sensiblen Daten während der Übertragung und im Speicher wird sichergestellt, dass Ihre Klartextdaten nicht für Dritte verfügbar sind, einschließlich. AWS Das AWS Database Encryption SDK wird kostenlos unter der Apache 2.0-Lizenz bereitgestellt.

Dieses Entwicklerhandbuch bietet einen konzeptionellen Überblick über das AWS Database Encryption SDK, einschließlich einer [Einführung in seine Architektur](concepts.md), Einzelheiten darüber, [wie es Ihre Daten schützt](how-it-works.md), wie es sich von [serverseitiger Verschlüsselung](client-server-side.md) unterscheidet, und Anleitungen zur [Auswahl kritischer Komponenten für Ihre Anwendung](configure.md), um Ihnen den Einstieg zu erleichtern.

Das AWS Database Encryption SDK unterstützt Amazon DynamoDB mit Verschlüsselung auf *Attributebene*.

Das AWS Database Encryption SDK bietet die folgenden Vorteile:

**Speziell für Datenbankanwendungen entwickelt**  
Sie müssen kein Kryptografie-Experte sein, um das AWS Database Encryption SDK verwenden zu können. Die Implementierungen beinhalten Hilfsmethoden, die so konzipiert sind, dass sie mit Ihren vorhandenen Anwendungen funktionieren.   
Nachdem Sie die erforderlichen Komponenten erstellt und konfiguriert haben, verschlüsselt und signiert der Verschlüsselungsclient Ihre Datensätze transparent, wenn Sie sie einer Datenbank hinzufügen, und verifiziert und entschlüsselt sie, wenn Sie sie abrufen.

**Beinhaltet sichere Verschlüsselung und Signierung**  
Das AWS Database Encryption SDK umfasst sichere Implementierungen, die die Feldwerte in jedem Datensatz mit einem eindeutigen Datenverschlüsselungsschlüssel verschlüsseln und den Datensatz anschließend signieren, um ihn vor unbefugten Änderungen wie dem Hinzufügen oder Löschen von Feldern oder dem Austauschen verschlüsselter Werte zu schützen.

**Verwendet kryptographisches Material aus beliebigen Quellen**  
Das AWS Database Encryption SDK verwendet [Schlüsselringe](concepts.md#keyring-concept), um den eindeutigen Datenverschlüsselungsschlüssel zu generieren, zu verschlüsseln und zu entschlüsseln, der Ihren Datensatz schützt. Schlüsselringe bestimmen die [Umschließungsschlüssel, mit denen dieser Datenschlüssel](concepts.md#wrapping-key) verschlüsselt wird.   
Sie können Schlüssel aus jeder beliebigen Quelle einschließen, einschließlich Kryptografiediensten wie [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)()AWS KMS oder. [AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/) Das AWS Database Encryption SDK benötigt keinen AWS-Konto oder keinen AWS Dienst.

**Support für das Zwischenspeichern kryptografischer Materialien**  
Der [AWS KMS hierarchische Schlüsselbund ist eine Caching-Lösung](use-hierarchical-keyring.md) für kryptografisches Material, die die Anzahl der AWS KMS Aufrufe reduziert, indem AWS KMS geschützte *Branch-Schlüssel* verwendet werden, die in einer Amazon DynamoDB-Tabelle gespeichert sind, und anschließend das für Ver- und Entschlüsselungsvorgänge verwendete Zweigschlüsselmaterial lokal zwischenspeichert. Damit können Sie Ihre kryptografischen Materialien mit einem KMS-Schlüssel mit symmetrischer Verschlüsselung schützen, ohne jedes Mal, wenn Sie einen Datensatz ver- oder entschlüsseln, erneut aufrufen zu müssen. AWS KMS Der AWS KMS hierarchische Schlüsselbund ist eine gute Wahl für Anwendungen, bei denen die Anzahl der Aufrufe minimiert werden muss. AWS KMS

**Durchsuchbare Verschlüsselung**  
Sie können Datenbanken entwerfen, die verschlüsselte Datensätze durchsuchen können, ohne die gesamte Datenbank zu entschlüsseln. Abhängig von Ihrem Bedrohungsmodell und Ihren Abfrageanforderungen können Sie eine [durchsuchbare Verschlüsselung](searchable-encryption.md) verwenden, um Suchen nach exakten Treffern oder individuellere komplexe Abfragen in Ihrer verschlüsselten Datenbank durchzuführen.

**Support für mehrinstanzenfähige Datenbankschemas**  
Mit dem AWS Database Encryption SDK können Sie Daten schützen, die in Datenbanken mit einem gemeinsamen Schema gespeichert sind, indem Sie jeden Mandanten mit unterschiedlichen Verschlüsselungsmaterialien isolieren. Wenn mehrere Benutzer Verschlüsselungsvorgänge in Ihrer Datenbank durchführen, verwenden Sie einen der AWS KMS Schlüsselbunde, um jedem Benutzer einen eigenen Schlüssel zur Verfügung zu stellen, den er für seine kryptografischen Operationen verwenden kann. Weitere Informationen finden Sie unter [Arbeiten mit Mehrmandantendatenbanken](configure.md#config-multitenant-databases).

**Support für nahtlose Schemaaktualisierungen**  
Wenn Sie das AWS Database Encryption SDK konfigurieren, stellen Sie [kryptografische Aktionen](concepts.md#crypt-actions) bereit, die dem Client mitteilen, welche Felder verschlüsselt und signiert, welche Felder signiert (aber nicht verschlüsselt) und welche ignoriert werden sollen. Nachdem Sie das AWS Database Encryption SDK zum Schutz Ihrer Datensätze verwendet haben, können Sie immer noch [Änderungen an Ihrem Datenmodell vornehmen](ddb-update-data-model.md). Sie können Ihre kryptografischen Aktionen, wie das Hinzufügen oder Entfernen verschlüsselter Felder, in einer einzigen Bereitstellung aktualisieren.

## Entwickelt in Open-Source-Repositorien
<a name="dbesdk-repos"></a>

Das AWS Database Encryption SDK wurde in Open-Source-Repositorien am entwickelt. GitHub Sie können diese Repositorys verwenden, um den Code einzusehen, Probleme zu lesen und zu melden sowie Informationen zu finden, die für Ihre Implementierung spezifisch sind. 

**Das AWS Datenbankverschlüsselungs-SDK für DynamoDB**
+ Das Repository [aws-database-encryption-sdk-dynamodb](https://github.com/aws/aws-database-encryption-sdk-dynamodb/) on GitHub unterstützt die neuesten Versionen des AWS Database Encryption SDK für DynamoDB in Java, .NET und Rust.

  Das AWS Database Encryption SDK für DynamoDB ist ein Produkt von [Dafny](https://github.com/dafny-lang/dafny/blob/master/README.md), einer überprüfungsfähigen Sprache, in der Sie Spezifikationen, den Code zu ihrer Implementierung und die Beweise, um sie zu testen, schreiben. Das Ergebnis ist eine Bibliothek, die die Funktionen des AWS Database Encryption SDK für DynamoDB in einem Framework implementiert, das die funktionale Korrektheit gewährleistet.

## Support und Wartung
<a name="support"></a>

Das AWS Database Encryption SDK verwendet dieselbe [Wartungsrichtlinie](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) wie das AWS SDK und die Tools, einschließlich der Versionierungs- und Lebenszyklusphasen. Als bewährte Methode empfehlen wir, dass Sie die neueste verfügbare Version des AWS Database Encryption SDK für Ihre Datenbankimplementierung verwenden und ein Upgrade durchführen, sobald neue Versionen veröffentlicht werden.

Weitere Informationen finden Sie in den [Wartungsrichtlinien AWS SDKs und Tools](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) im AWS SDKs Tools-Referenzhandbuch.

## Senden von Feedback
<a name="feedback"></a>

Wir freuen uns über Ihr Feedback\$1 Wenn Sie eine Frage oder einen Kommentar haben oder ein Problem melden möchten, verwenden Sie bitte die folgenden Ressourcen.

Wenn Sie eine potenzielle Sicherheitslücke im AWS Database Encryption SDK entdecken, [benachrichtigen Sie bitte den AWS Sicherheitsdienst](https://aws.amazon.com/security/vulnerability-reporting/). Erstellen Sie kein öffentliches GitHub Problem.

Über den auf jeder Seite angezeigten Feedback-Link können Sie Feedback zu dieser Dokumentation bereitstellen.

# AWS SDK-Konzepte für Datenbankverschlüsselung
<a name="concepts"></a>


****  

|  | 
| --- |
| Unsere clientseitige Verschlüsselungsbibliothek wurde in AWS Database Encryption SDK umbenannt. Dieses Entwicklerhandbuch enthält weiterhin Informationen zum [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md). | 

In diesem Thema werden die im AWS Database Encryption SDK verwendeten Konzepte und Terminologie erläutert. 

Informationen zum Zusammenspiel der Komponenten des AWS Database Encryption SDK finden Sie unter[So funktioniert das AWS Database Encryption SDK](how-it-works.md).

Weitere Informationen zum AWS Database Encryption SDK finden Sie in den folgenden Themen.
+ Erfahren Sie, wie das AWS Database Encryption SDK [Umschlagverschlüsselung](#envelope-encryption) verwendet, um Ihre Daten zu schützen.
+ Erfahren Sie mehr über die Elemente der Umschlagverschlüsselung: die [Datenschlüssel](#data-key), die Ihre Datensätze schützen, und die [Umhüllungsschlüssel](#wrapping-key), die Ihre Datenschlüssel schützen. 
+ Erfahren Sie mehr über die [Schlüsselanhänger](#keyring-concept), die bestimmen, welche Verpackungsschlüssel Sie verwenden.
+ Erfahren Sie mehr über den [Verschlüsselungskontext](#encryption-context), der Ihrem Verschlüsselungsprozess Integrität verleiht.
+ Erfahren Sie mehr über die [Materialbeschreibung](#material-description), die die Verschlüsselungsmethoden Ihrem Datensatz hinzufügen.
+ Erfahren Sie mehr über die [kryptografischen Aktionen](#crypt-actions), die dem AWS Database Encryption SDK mitteilen, welche Felder verschlüsselt und signiert werden sollen.

**Topics**
+ [Umschlagverschlüsselung](#envelope-encryption)
+ [Datenschlüssel](#data-key)
+ [Schlüssel zum Umschließen](#wrapping-key)
+ [Schlüsselanhänger](#keyring-concept)
+ [Kryptografische Aktionen](#crypt-actions)
+ [Materialbeschreibung](#material-description)
+ [Verschlüsselungskontext](#encryption-context)
+ [Manager von kryptographischen Materialien](#crypt-materials-manager)
+ [Symmetrische und asymmetrische Verschlüsselung](#symmetric-key-encryption)
+ [Wichtiges Engagement](#key-commitment)
+ [Digitale Signaturen](#digital-sigs)

## Umschlagverschlüsselung
<a name="envelope-encryption"></a>

Die Sicherheit Ihrer verschlüsselten Daten hängt teilweise vom Schutz des Datenschlüssels ab, der sie entschlüsseln kann. Eine akzeptierte bewährte Methode zum Schutz des Datenschlüssels ist seine Verschlüsselung. [Dazu benötigen Sie einen weiteren Verschlüsselungsschlüssel, einen sogenannten Schlüsselverschlüsselungsschlüssel oder *Wrapping-Schlüssel*.](#wrapping-key) *Die Praxis, Datenschlüssel mit einem Wrapping-Schlüssel zu verschlüsseln, wird als Envelope-Verschlüsselung bezeichnet.*

**Schutz von Datenschlüsseln**  
Das AWS Database Encryption SDK verschlüsselt jedes Feld mit einem eindeutigen Datenschlüssel. Anschließend verschlüsselt es jeden Datenschlüssel unter dem von Ihnen angegebenen Wrapping-Schlüssel. Es speichert die verschlüsselten Datenschlüssel in der [Materialbeschreibung](#material-description).  
Um Ihren Verpackungsschlüssel anzugeben, verwenden Sie einen [Schlüsselbund](#keyring-concept).  

![\[Umschlagverschlüsselung mit dem AWS Database Encryption SDK\]](http://docs.aws.amazon.com/de_de/database-encryption-sdk/latest/devguide/images/dbesdk-envelope.png)


**Verschlüsseln derselben Daten unter mehreren Wrapping-Schlüsseln**  
Sie können den Datenschlüssel mit mehreren Umschließungsschlüsseln verschlüsseln. Möglicherweise möchten Sie unterschiedliche Umschließungsschlüssel für verschiedene Benutzer oder Umschließungsschlüssel unterschiedlichen Typs oder an verschiedenen Speicherorten bereitstellen. Jeder der Umschließungsschlüssel verschlüsselt denselben Datenschlüssel. Das AWS Database Encryption SDK speichert alle verschlüsselten Datenschlüssel zusammen mit den verschlüsselten Feldern in der [Materialbeschreibung](#material-description).  
Um die Daten zu entschlüsseln, müssen Sie mindestens einen Wrapping-Schlüssel angeben, mit dem die verschlüsselten Datenschlüssel entschlüsselt werden können.

**Kombination der Stärken mehrerer Algorithmen**  
[Um Ihre Daten zu verschlüsseln, verwendet das AWS Database Encryption SDK standardmäßig eine [Algorithmussuite](supported-algorithms.md) mit symmetrischer AES-GCM-Verschlüsselung, einer HMAC-basierten Schlüsselableitungsfunktion (HKDF) und ECDSA-Signatur.](#digital-sigs) [Um den Datenschlüssel zu verschlüsseln, können Sie einen symmetrischen oder asymmetrischen Verschlüsselungsalgorithmus angeben, der zu Ihrem Wrapping-Schlüssel passt.](#symmetric-key-encryption)  
Im Allgemeinen sind symmetrische Schlüsselverschlüsselungsalgorithmen schneller und erzeugen kleinere Verschlüsselungstexte als eine asymmetrische Verschlüsselung oder eine *Verschlüsselung mit öffentlichem Schlüssel*. Algorithmen mit öffentlichen Schlüsseln bieten jedoch eine inhärente Rollentrennung. Um die Stärken der beiden zu kombinieren, können Sie den Datenschlüssel mit einer Verschlüsselung mit öffentlichen Schlüsseln verschlüsseln.  
Wir empfehlen, wann immer möglich einen der AWS KMS Schlüsselringe zu verwenden. Wenn Sie den [AWS KMS Schlüsselbund](use-kms-keyring.md) verwenden, können Sie die Stärken mehrerer Algorithmen kombinieren, indem Sie einen asymmetrischen RSA AWS KMS key als Umschließungsschlüssel angeben. Sie können auch einen KMS-Schlüssel für die symmetrische Verschlüsselung verwenden.

## Datenschlüssel
<a name="data-key"></a>

Ein *Datenschlüssel* ist ein Verschlüsselungsschlüssel, den das AWS Database Encryption SDK verwendet, um die Felder in einem Datensatz zu verschlüsseln, die `ENCRYPT_AND_SIGN` in den [kryptografischen](#crypt-actions) Aktionen markiert sind. Jeder Datenschlüssel ist ein Byte-Array, das die Anforderungen für kryptografische Schlüssel erfüllt. Das AWS Database Encryption SDK verwendet einen eindeutigen Datenschlüssel, um jedes Attribut zu verschlüsseln.

Sie müssen Datenschlüssel nicht spezifizieren, generieren, implementieren, erweitern, schützen oder verwenden. Das AWS Database Encryption SDK erledigt das für Sie, wenn Sie die Verschlüsselungs- und Entschlüsselungsvorgänge aufrufen. 

[Um Ihre Datenschlüssel zu schützen, verschlüsselt das AWS Database Encryption SDK sie mit einem oder mehreren *Schlüsselverschlüsselungsschlüsseln, den sogenannten Wrapping Keys*.](#wrapping-key) Nachdem das AWS Database Encryption SDK Ihre Klartext-Datenschlüssel verwendet hat, um Ihre Daten zu verschlüsseln, werden sie so schnell wie möglich aus dem Speicher entfernt. Speichert dann den verschlüsselten Datenschlüssel in der [Materialbeschreibung](#material-description). Details hierzu finden Sie unter [So funktioniert das AWS Database Encryption SDK](how-it-works.md).

**Tipp**  
Im AWS Database Encryption SDK unterscheiden wir *Datenschlüssel* von *Datenverschlüsselungsschlüsseln*. Als bewährte Methode verwenden alle unterstützten [Algorithmus-Suiten](supported-algorithms.md) eine [Funktion zur Schlüsselableitung](https://en.wikipedia.org/wiki/Key_derivation_function). Die Schlüsselableitungsfunktion verwendet einen Datenschlüssel als Eingabe und gibt die Datenverschlüsselungsschlüssel zurück, die tatsächlich zur Verschlüsselung Ihrer Datensätze verwendet werden. Aus diesem Grund sagen wir oft, dass die Daten „unter“ einem Datenschlüssel verschlüsselt werden, statt „von“ dem Datenschlüssel.

Jeder verschlüsselte Datenschlüssel enthält Metadaten, einschließlich der Kennung des Wrapping-Schlüssels, mit dem er verschlüsselt wurde. Diese Metadaten ermöglichen es dem AWS Database Encryption SDK, beim Entschlüsseln gültige Wrapping-Schlüssel zu identifizieren.

## Schlüssel zum Umschließen
<a name="wrapping-key"></a>

Ein *Wrapping Key* ist ein Schlüssel zur Verschlüsselung, den das AWS Database Encryption SDK verwendet, um den [Datenschlüssel](#data-key) zu verschlüsseln, der Ihre Datensätze verschlüsselt. Jeder Datenschlüssel kann mit einem oder mehreren Umschließungsschlüsseln verschlüsselt werden. Bei der Konfiguration eines Schlüsselbunds legen Sie fest, welche [Umschließungsschlüssel](#keyring-concept) zum Schutz Ihrer Daten verwendet werden.

![\[Verschlüsseln Sie einen Datenschlüssel mit mehreren Umschließungsschlüsseln\]](http://docs.aws.amazon.com/de_de/database-encryption-sdk/latest/devguide/images/dbesdk-wrapping-key.png)


Das AWS Database Encryption SDK unterstützt mehrere häufig verwendete Wrapping-Schlüssel, wie z. B. [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)(AWS KMS) KMS-Schlüssel mit symmetrischer Verschlüsselung (einschließlich Schlüssel für [mehrere Regionen) und asymmetrische AWS KMS RSA-KMS-Schlüssel](use-kms-keyring.md#config-mrks)[, AES-GCM-Rohschlüssel (Advanced Encryption Standard/Galois Counter Mode) und RSA-Rohschlüssel](https://docs.aws.amazon.com/kms/latest/developerguide/asymmetric-key-specs.html#key-spec-rsa). Wir empfehlen, wann immer möglich KMS-Schlüssel zu verwenden. Informationen zur Entscheidung, welchen Wrapping-Schlüssel Sie verwenden sollten, finden Sie unter [Auswählen von Wrapping-Schlüsseln](configure.md#config-keys).

Wenn Sie die Envelope-Verschlüsselung verwenden, müssen Sie Ihre Wrapping Keys vor unberechtigtem Zugriff schützen. Sie können dies auf eine der folgenden Arten tun:
+ Verwenden Sie einen Dienst, der für diesen Zweck entwickelt wurde, z. B. [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/).
+ Verwenden Sie ein [Hardwaresicherheitsmodul (HSM)](https://en.wikipedia.org/wiki/Hardware_security_module), wie z. B. die Angebote von [AWS CloudHSM](https://aws.amazon.com/cloudhsm/).
+ Verwenden Sie andere wichtige Verwaltungstools und -dienste.

Wenn Sie kein Schlüsselverwaltungssystem haben, empfehlen wir AWS KMS. Das AWS Database Encryption SDK lässt sich integrieren AWS KMS , damit Sie Ihre Wrapping-Schlüssel schützen und verwenden können.

## Schlüsselanhänger
<a name="keyring-concept"></a>

Um die Wrapping-Schlüssel anzugeben, die Sie für die Verschlüsselung und Entschlüsselung verwenden, verwenden Sie einen Schlüsselbund. Sie können die Schlüsselbunde verwenden, die das AWS Database Encryption SDK bereitstellt, oder Ihre eigenen Implementierungen entwerfen.

Ein *Schlüsselbund* generiert, verschlüsselt und entschlüsselt Datenschlüssel. Es generiert auch die MAC-Schlüssel, die zur Berechnung der Hash-Based Message Authentication Codes (HMACs) in der Signatur verwendet werden. Wenn Sie einen Schlüsselbund definieren, können Sie die [Wrapping-Schlüssel angeben, mit denen Ihre Datenschlüssel](#wrapping-key) verschlüsselt werden. Die meisten Schlüsselbunde spezifizieren mindestens einen Umschließungsschlüssel oder einen Dienst, der Schlüssel zum Umschließen bereitstellt und schützt. Bei der Verschlüsselung verwendet das AWS Database Encryption SDK alle im Schlüsselbund angegebenen Umschließungsschlüssel, um den Datenschlüssel zu verschlüsseln. [Hilfe zur Auswahl und Verwendung der Schlüsselbunde, die das AWS Database Encryption SDK definiert, finden Sie unter Schlüsselbunde verwenden.](keyrings.md)

## Kryptografische Aktionen
<a name="crypt-actions"></a>

*Kryptografische Aktionen* teilen dem Verschlüsseler mit, welche Aktionen für jedes Feld in einem Datensatz ausgeführt werden sollen. 

Bei den kryptografischen Aktionswerten kann es sich um einen der folgenden Werte handeln:
+ **Verschlüsseln und signieren** — Verschlüsseln Sie das Feld. Schließt das verschlüsselte Feld in die Signatur ein.
+ **Nur signieren** — Schließt das Feld in die Signatur ein.
+ **Signieren und in den Verschlüsselungskontext** aufnehmen — Schließt das Feld in den Signatur- und [Verschlüsselungskontext](#encryption-context) ein.

  Standardmäßig sind die Partitions- und Sortierschlüssel das einzige Attribut, das im Verschlüsselungskontext enthalten ist. Sie könnten erwägen, zusätzliche Felder zu definieren, `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` damit der Anbieter der Branch-Schlüssel-ID für Ihren [AWS KMS hierarchischen Schlüsselbund](use-hierarchical-keyring.md) ermitteln kann, welcher Filialschlüssel für die Entschlüsselung aus dem Verschlüsselungskontext erforderlich ist. Weitere Informationen finden Sie unter Lieferant für die [Filialschlüssel-ID](use-hierarchical-keyring.md#branch-key-id-supplier).
**Anmerkung**  
Um die `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` kryptografische Aktion verwenden zu können, müssen Sie Version 3.3 oder höher des AWS Database Encryption SDK verwenden. Stellen Sie die neue Version für alle Lesegeräte bereit, bevor [Sie Ihr Datenmodell so aktualisieren](ddb-update-data-model.md), dass es diese enthält`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.
+ **Nichts tun** — Verschlüsseln Sie das Feld nicht und nehmen Sie es nicht in die Signatur auf.

Verwenden Sie für jedes Feld, in dem vertrauliche Daten gespeichert werden können, die Option **Verschlüsseln und Signieren**. Verwenden Sie für Primärschlüsselwerte (z. B. einen Partitionsschlüssel und einen Sortierschlüssel in einer DynamoDB-Tabelle) im **Verschlüsselungskontext **nur signieren** oder Signieren und einschließen**. Wenn Sie Attribute vom Typ „**Signieren“ und „Im Verschlüsselungskontext einschließen**“ angeben, müssen auch die Partitions- und Sortierattribute „**Im Verschlüsselungskontext signieren und einbeziehen**“ lauten. Sie müssen keine kryptografischen Aktionen für die [Materialbeschreibung](#material-description) angeben. Das AWS Database Encryption SDK signiert automatisch das Feld, in dem die Materialbeschreibung gespeichert ist.

Wählen Sie Ihre kryptografischen Aktionen sorgfältig aus. Verwenden Sie im Zweifelsfall **Verschlüsseln und signieren**. Nachdem Sie das AWS Database Encryption SDK zum Schutz Ihrer Datensätze verwendet haben, können Sie weder ein vorhandenes `ENCRYPT_AND_SIGN` `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Feld noch die einem vorhandenen `DO_NOTHING` Feld zugewiesene kryptografische Aktion ändern. `SIGN_ONLY` `DO_NOTHING` Sie können jedoch weiterhin [andere Änderungen an Ihrem Datenmodell](ddb-update-data-model.md) vornehmen. Sie können beispielsweise verschlüsselte Felder in einer einzigen Bereitstellung hinzufügen oder entfernen.

## Materialbeschreibung
<a name="material-description"></a>

Die Materialbeschreibung dient als Header für einen verschlüsselten Datensatz. Wenn Sie Felder mit dem AWS Database Encryption SDK verschlüsseln und signieren, zeichnet der Verschlüsseler die Materialbeschreibung auf, während er die kryptografischen Materialien zusammenstellt, und speichert die Materialbeschreibung in einem neuen Feld (`aws_dbe_head`), das der Verschlüsseler Ihrem Datensatz hinzufügt.

Bei der Materialbeschreibung handelt es sich um eine übertragbare, [formatierte Datenstruktur](reference.md#material-description-format), die verschlüsselte Kopien der Datenschlüssel und andere Informationen wie Verschlüsselungsalgorithmen, [Verschlüsselungskontext](#encryption-context) sowie Verschlüsselungs- und Signieranweisungen enthält. Der Verschlüsseler zeichnet die Materialbeschreibung auf, während er die kryptografischen Materialien für die Verschlüsselung und Signierung zusammenstellt. Wenn er später kryptografisches Material zusammenstellen muss, um ein Feld zu verifizieren und zu entschlüsseln, verwendet er die Materialbeschreibung als Leitfaden.

Wenn Sie die verschlüsselten Datenschlüssel zusammen mit dem verschlüsselten Feld speichern, wird der Entschlüsselungsvorgang optimiert und Sie müssen keine verschlüsselten Datenschlüssel unabhängig von den Daten, die sie verschlüsseln, speichern und verwalten.

Technische Informationen zur Materialbeschreibung finden Sie unter. [Format der Materialbeschreibung](reference.md#material-description-format)

## Verschlüsselungskontext
<a name="encryption-context"></a>

Um die Sicherheit Ihrer kryptografischen Operationen zu verbessern, enthält das AWS Database Encryption SDK in allen Anfragen zum Verschlüsseln und Signieren eines Datensatzes einen Verschlüsselungskontext.

Ein *Verschlüsselungskontext* ist eine Gruppe von Name-Wert-Paaren mit willkürlichen, nicht geheimen, zusätzlich authentifizierten Daten. Das AWS Database Encryption SDK enthält den logischen Namen für Ihre Datenbank und Primärschlüsselwerte (z. B. einen Partitionsschlüssel und einen Sortierschlüssel in einer DynamoDB-Tabelle) im Verschlüsselungskontext. Wenn Sie ein Feld verschlüsseln und signieren, ist der Verschlüsselungskontext kryptografisch an den verschlüsselten Datensatz gebunden, sodass derselbe Verschlüsselungskontext erforderlich ist, um das Feld zu entschlüsseln.

Wenn Sie einen AWS KMS Schlüsselbund verwenden, verwendet das AWS Database Encryption SDK auch den Verschlüsselungskontext, um zusätzliche authentifizierte Daten (AAD) in den Aufrufen des Schlüsselbunds bereitzustellen. AWS KMS

Immer wenn Sie die [Standard-Algorithmus-Suite](supported-algorithms.md#recommended-algorithms) verwenden, fügt der [Cryptographic Materials Manager](#crypt-materials-manager) (CMM) dem Verschlüsselungskontext ein Name-Wert-Paar hinzu, das aus einem reservierten Namen und einem Wert besteht`aws-crypto-public-key`, der den öffentlichen Bestätigungsschlüssel darstellt. [Der öffentliche Bestätigungsschlüssel wird in der Materialbeschreibung gespeichert.](#material-description)

## Manager von kryptographischen Materialien
<a name="crypt-materials-manager"></a>

Der Cryptographic Materials Manager (CMM) stellt die kryptografischen Materialien zusammen, die zum Verschlüsseln, Entschlüsseln und Signieren Ihrer Daten verwendet werden. Wann immer Sie die [Standardalgorithmussuite](supported-algorithms.md#recommended-algorithms) verwenden, umfassen die *kryptografischen Materialien* Klartext- und verschlüsselte Datenschlüssel, symmetrische Signaturschlüssel und einen asymmetrischen Signaturschlüssel. Sie interagieren nie direkt mit dem CMM. Die Ver- und Entschlüsselungsmethoden übernehmen das für Sie.

Da das CMM als Bindeglied zwischen dem AWS Database Encryption SDK und einem Schlüsselbund fungiert, ist es ein idealer Ort für Anpassungen und Erweiterungen, z. B. zur Unterstützung der Richtliniendurchsetzung. Sie können ein CMM explizit angeben, dies ist jedoch nicht erforderlich. Wenn Sie einen Schlüsselbund angeben, erstellt das AWS Database Encryption SDK ein Standard-CMM für Sie. Das Standard-CMM ruft die Ver- oder Entschlüsselungsmaterialien aus dem von Ihnen angegebenen Schlüsselbund ab. Dabei könnte es sich um einen Aufruf eines kryptographischen Dienstes handeln, z. B. [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

## Symmetrische und asymmetrische Verschlüsselung
<a name="symmetric-key-encryption"></a>

Bei der *symmetrischen Verschlüsselung* wird derselbe Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwendet. 

*Asymmetrische Verschlüsselung* verwendet ein mathematisch verwandtes Datenschlüsselpaar. Ein Schlüssel des Paares verschlüsselt die Daten; nur der andere Schlüssel im Paar kann die Daten entschlüsseln.

Das AWS Database Encryption SDK verwendet [Umschlagverschlüsselung](#envelope-encryption). Es verschlüsselt Ihre Daten mit einem symmetrischen Datenschlüssel. Es verschlüsselt den symmetrischen Datenschlüssel mit einem oder mehreren symmetrischen oder asymmetrischen Wrapping-Schlüsseln. Es fügt dem Datensatz eine [Materialbeschreibung](#material-description) hinzu, die mindestens eine verschlüsselte Kopie des Datenschlüssels enthält.

**Verschlüsselung Ihrer Daten (symmetrische Verschlüsselung)**  
Um Ihre Daten zu verschlüsseln, verwendet das AWS Database Encryption SDK einen symmetrischen [Datenschlüssel](#data-key) und eine [Algorithmussuite, die einen symmetrischen Verschlüsselungsalgorithmus](supported-algorithms.md) enthält. Um die Daten zu entschlüsseln, verwendet das AWS Database Encryption SDK denselben Datenschlüssel und dieselbe Algorithmus-Suite.

**Verschlüsselung Ihres Datenschlüssels (symmetrische oder asymmetrische Verschlüsselung)**  
Der [Schlüsselbund](#keyring-concept), den Sie für einen Verschlüsselungs- und Entschlüsselungsvorgang angeben, bestimmt, wie der symmetrische Datenschlüssel ver- und entschlüsselt wird. Sie können einen Schlüsselbund wählen, der symmetrische Verschlüsselung verwendet, z. B. einen AWS KMS Schlüsselbund mit einem symmetrischen Verschlüsselungs-KMS-Schlüssel, oder einen Schlüsselbund, der asymmetrische Verschlüsselung verwendet, z. B. einen Schlüsselbund mit einem asymmetrischen RSA-KMS-Schlüssel. AWS KMS 

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

Das AWS Database Encryption SDK unterstützt *Key Commitment* (manchmal auch als *Robustheit* bezeichnet), eine Sicherheitseigenschaft, die sicherstellt, dass jeder Chiffretext nur in einen einzigen Klartext entschlüsselt werden kann. Zu diesem Zweck stellt Key Commitment sicher, dass nur der Datenschlüssel, mit dem Ihr Datensatz verschlüsselt wurde, zum Entschlüsseln verwendet wird. Das AWS Database Encryption SDK beinhaltet Key Commitment für alle Verschlüsselungs- und Entschlüsselungsvorgänge.

Die meisten modernen symmetrischen Chiffren (einschließlich AES) verschlüsseln Klartext unter einem einzigen geheimen Schlüssel, wie dem [eindeutigen Datenschlüssel](#data-key), den das AWS Database Encryption SDK verwendet, um jedes in einem Datensatz markierte Klartextfeld zu verschlüsseln. `ENCRYPT_AND_SIGN` Beim Entschlüsseln dieses Datensatzes mit demselben Datenschlüssel wird ein Klartext zurückgegeben, der mit dem Original identisch ist. Die Entschlüsselung mit einem anderen Schlüssel schlägt normalerweise fehl. Obwohl schwierig, ist es technisch möglich, einen Chiffretext unter zwei verschiedenen Schlüsseln zu entschlüsseln. In seltenen Fällen ist es möglich, einen Schlüssel zu finden, der Chiffretext teilweise in einen anderen, aber dennoch verständlichen Klartext entschlüsseln kann.

Das AWS Database Encryption SDK verschlüsselt jedes Attribut immer unter einem eindeutigen Datenschlüssel. Es kann diesen Datenschlüssel unter mehreren Umschließungsschlüsseln verschlüsseln, aber die Umschließungsschlüssel verschlüsseln immer denselben Datenschlüssel. Dennoch kann ein ausgeklügelter, manuell erstellter verschlüsselter Datensatz tatsächlich unterschiedliche Datenschlüssel enthalten, von denen jeder mit einem anderen Umschließungsschlüssel verschlüsselt ist. Wenn beispielsweise ein Benutzer den verschlüsselten Datensatz entschlüsselt, gibt er 0x0 (falsch) zurück, während ein anderer Benutzer, der denselben verschlüsselten Datensatz entschlüsselt, 0x1 (wahr) erhält.

Um dieses Szenario zu verhindern, beinhaltet das AWS Database Encryption SDK wichtige Verpflichtungen beim Verschlüsseln und Entschlüsseln. Bei der Verschlüsselungsmethode wird der eindeutige Datenschlüssel, der den Chiffretext erzeugt hat, kryptografisch mit der *Schlüsselzusage* verknüpft. Dabei handelt es sich um einen Hash-Based Message Authentication Code (HMAC), der anhand der Materialbeschreibung anhand einer Ableitung des Datenschlüssels berechnet wird. [Anschließend wird die Schlüsselzusage in der Materialbeschreibung gespeichert.](#material-description) Wenn es einen Datensatz mit Schlüsselzusage entschlüsselt, überprüft das AWS Database Encryption SDK, ob der Datenschlüssel der einzige Schlüssel für diesen verschlüsselten Datensatz ist. Wenn die Überprüfung des Datenschlüssels fehlschlägt, schlägt der Entschlüsselungsvorgang fehl.

## Digitale Signaturen
<a name="digital-sigs"></a>

Das AWS Database Encryption SDK verschlüsselt Ihre Daten mit einem authentifizierten Verschlüsselungsalgorithmus, AES-GCM, und der Entschlüsselungsprozess überprüft die Integrität und Authentizität einer verschlüsselten Nachricht ohne Verwendung einer digitalen Signatur. Da AES-GCM jedoch symmetrische Schlüssel verwendet, könnte jeder, der den zur Entschlüsselung des Chiffretextes verwendeten Datenschlüssel entschlüsseln kann, auch manuell einen neuen verschlüsselten Chiffretext erstellen, was zu potenziellen Sicherheitsbedenken führen könnte. Wenn Sie beispielsweise einen AWS KMS key als Umschließungsschlüssel verwenden, könnte ein Benutzer mit entsprechenden Berechtigungen verschlüsselte Chiffretexte erstellen, ohne ihn anzurufen. `kms:Decrypt` `kms:Encrypt`

Um dieses Problem zu vermeiden, fügt die [Standard-Algorithmus-Suite verschlüsselten Datensätzen](supported-algorithms.md#recommended-algorithms) eine ECDSA-Signatur (Elliptic Curve Digital Signature Algorithm) hinzu. Die Standard-Algorithmus-Suite verschlüsselt die Felder in Ihrem Datensatz, die mit einem authentifizierten Verschlüsselungsalgorithmus, `ENCRYPT_AND_SIGN` AES-GCM, markiert sind. Anschließend berechnet sie sowohl Hash-basierte Nachrichtenauthentifizierungscodes (HMACs) als auch asymmetrische ECDSA-Signaturen für die mit, und markierten Felder in Ihrem Datensatz. `ENCRYPT_AND_SIGN` `SIGN_ONLY` `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Bei der Entschlüsselung wird anhand der Signaturen überprüft, ob ein autorisierter Benutzer den Datensatz verschlüsselt hat.

Wenn die Standard-Algorithmus-Suite verwendet wird, generiert das AWS Database Encryption SDK für jeden verschlüsselten Datensatz ein temporäres Paar aus privatem Schlüssel und öffentlichem Schlüssel. Das AWS Database Encryption SDK speichert den öffentlichen Schlüssel in der [Materialbeschreibung](#material-description) und verwirft den privaten Schlüssel. Dadurch wird sichergestellt, dass niemand eine weitere Signatur erstellen kann, die mit dem öffentlichen Schlüssel verifiziert wird. Der Algorithmus bindet den öffentlichen Schlüssel als zusätzliche authentifizierte Daten in der Materialbeschreibung an den verschlüsselten Datenschlüssel und verhindert so, dass Benutzer, die nur Felder entschlüsseln können, den öffentlichen Schlüssel ändern oder die Signaturüberprüfung beeinträchtigen.

Das AWS Database Encryption SDK beinhaltet immer die HMAC-Verifizierung. Digitale ECDSA-Signaturen sind standardmäßig aktiviert, aber nicht erforderlich. Wenn die Benutzer, die Daten verschlüsseln, und die Benutzer, die Daten entschlüsseln, gleichermaßen vertrauenswürdig sind, sollten Sie die Verwendung einer Algorithmussuite in Betracht ziehen, die keine digitalen Signaturen enthält, um Ihre Leistung zu verbessern. Weitere Informationen zur Auswahl alternativer Algorithmus-Suiten finden Sie unter [Auswahl einer Algorithmus-Suite](ddb-java-using.md#config-algorithm).

**Anmerkung**  
Wenn ein Schlüsselbund nicht zwischen Verschlüsselern und Entschlüsselern unterscheidet, bieten digitale Signaturen keinen kryptografischen Wert.

[AWS KMS Schlüsselbunde,](use-kms-keyring.md) einschließlich des asymmetrischen RSA-Schlüsselbunds, können auf der Grundlage von AWS KMS Schlüssel- und IAM-Richtlinien zwischen Verschlüsselern und Entschlüsselern unterscheiden. AWS KMS 

Aufgrund ihres kryptografischen Charakters können die folgenden Schlüsselbunde nicht zwischen Verschlüsselern und Entschlüsselern unterscheiden:
+ AWS KMS Hierarchischer Schlüsselbund
+ AWS KMS ECDH-Schlüsselanhänger
+ Unformatierter AES-Schlüsselbund
+ Unformatierter RSA-Schlüsselbund
+ Roher ECDH-Schlüsselanhänger

# So funktioniert das AWS Database Encryption SDK
<a name="how-it-works"></a>


****  

|  | 
| --- |
| Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS Dieses Entwicklerhandbuch enthält weiterhin Informationen zum [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md). | 

Das AWS Database Encryption SDK bietet clientseitige Verschlüsselungsbibliotheken, die speziell für den Schutz der Daten entwickelt wurden, die Sie in Datenbanken speichern. Die Bibliotheken enthalten sichere Implementierungen, die Sie erweitern oder unverändert verwenden können. Weitere Informationen zur Definition und Verwendung benutzerdefinierter Komponenten finden Sie im GitHub Repository für Ihre Datenbankimplementierung.

In den Workflows in diesem Abschnitt wird erklärt, wie das AWS Database Encryption SDK die Daten in Ihrer Datenbank verschlüsselt, signiert und entschlüsselt und verifiziert. Diese Workflows beschreiben den grundlegenden Prozess unter Verwendung abstrakter Elemente und der Standardfunktionen. Einzelheiten dazu, wie das AWS Database Encryption SDK mit Ihrer Datenbankimplementierung zusammenarbeitet, finden Sie im Thema *Was ist verschlüsselt* für Ihre Datenbank.

Das AWS Database Encryption SDK verwendet [Umschlagverschlüsselung](concepts.md#envelope-encryption), um Ihre Daten zu schützen. Jeder Datensatz wird unter einem eindeutigen [Datenschlüssel](concepts.md#data-key) verschlüsselt. Der Datenschlüssel wird verwendet, um einen eindeutigen *Datenverschlüsselungsschlüssel* für jedes Feld abzuleiten, das `ENCRYPT_AND_SIGN` in Ihren kryptografischen Aktionen markiert ist. Anschließend wird eine Kopie des Datenschlüssels mit den von Ihnen angegebenen Wrapping-Schlüsseln verschlüsselt. Um den verschlüsselten Datensatz zu entschlüsseln, verwendet das AWS Database Encryption SDK die von Ihnen angegebenen Wrapping-Schlüssel, um mindestens einen verschlüsselten Datenschlüssel zu entschlüsseln. Anschließend kann es den Chiffretext entschlüsseln und einen Klartexteintrag zurückgeben.

Weitere Hinweise zu den im AWS Database Encryption SDK verwendeten Begriffen finden Sie unter. [AWS SDK-Konzepte für Datenbankverschlüsselung](concepts.md)

## Verschlüsseln und signieren
<a name="encrypt-and-sign"></a>

Im Kern ist das AWS Database Encryption SDK ein Datensatzverschlüsseler, der die Datensätze in Ihrer Datenbank verschlüsselt, signiert, verifiziert und entschlüsselt. Es enthält Informationen über Ihre Datensätze und Anweisungen darüber, welche Felder verschlüsselt und signiert werden müssen. Es ruft die Verschlüsselungsmaterialien und Anweisungen zu ihrer Verwendung von einem [Manager für kryptografische Materialien](concepts.md#crypt-materials-manager) ab, der anhand des von Ihnen angegebenen Verpackungsschlüssels konfiguriert wurde.

In der folgenden exemplarischen Vorgehensweise wird beschrieben, wie das AWS Database Encryption SDK Ihre Dateneinträge verschlüsselt und signiert.

1. Der Cryptographic Materials Manager stellt dem AWS Database Encryption SDK eindeutige Datenverschlüsselungsschlüssel zur Verfügung: einen [Klartext-Datenschlüssel](concepts.md#data-key), eine Kopie des mit dem angegebenen [Wrapping-Schlüssel verschlüsselten Datenschlüssels und einen MAC-Schlüssel](concepts.md#wrapping-key).
**Anmerkung**  
Sie können den Datenschlüssel unter mehreren Wrapping-Schlüsseln verschlüsseln. Jeder der Umschließungsschlüssel verschlüsselt eine separate Kopie des Datenschlüssels. Das AWS Database Encryption SDK speichert alle verschlüsselten Datenschlüssel in der [Materialbeschreibung](concepts.md#material-description). Das AWS Database Encryption SDK fügt dem Datensatz, der die Materialbeschreibung speichert, ein neues Feld (`aws_dbe_head`) hinzu.  
Für jede verschlüsselte Kopie des Datenschlüssels wird ein MAC-Schlüssel abgeleitet. Die MAC-Schlüssel sind nicht in der Materialbeschreibung gespeichert. Stattdessen verwendet die Entschlüsselungsmethode die Wrapping-Schlüssel, um die MAC-Schlüssel erneut abzuleiten.

1. Die Verschlüsselungsmethode verschlüsselt jedes Feld, das `ENCRYPT_AND_SIGN` in den von Ihnen angegebenen [kryptografischen](concepts.md#crypt-actions) Aktionen als markiert ist.

1. Die Verschlüsselungsmethode leitet a `commitKey` aus dem Datenschlüssel ab und generiert daraus einen [Wert für die Schlüsselzuweisung](concepts.md#key-commitment). Anschließend wird der Datenschlüssel verworfen.

1. Die Verschlüsselungsmethode fügt dem Datensatz eine [Materialbeschreibung](concepts.md#material-description) hinzu. Die Materialbeschreibung enthält die verschlüsselten Datenschlüssel und die anderen Informationen über den verschlüsselten Datensatz. Eine vollständige Liste der in der Materialbeschreibung enthaltenen Informationen finden Sie unter [Format der Materialbeschreibung](reference.md#material-description-format).

1. Die Verschlüsselungsmethode verwendet die in **Schritt 1** zurückgegebenen MAC-Schlüssel, um die HMAC-Werte (Hash-Based Message Authentication Code) anhand der Kanonisierung der Materialbeschreibung, des [Verschlüsselungskontextes](concepts.md#encryption-context) und aller mit `ENCRYPT_AND_SIGN``SIGN_ONLY`, oder markierten Felder `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` in den kryptografischen Aktionen zu berechnen. Die HMAC-Werte werden in einem neuen Feld (`aws_dbe_foot`) gespeichert, das die Verschlüsselungsmethode dem Datensatz hinzufügt.

1. Die Verschlüsselungsmethode berechnet anhand der Kanonisierung der Materialbeschreibung, des Verschlüsselungskontextes und jedes mit, oder markierten `ENCRYPT_AND_SIGN` Felds eine [ECDSA-Signatur](concepts.md#digital-sigs) `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` und speichert die ECDSA-Signaturen in dem Feld. `SIGN_ONLY` `aws_dbe_foot`
**Anmerkung**  
ECDSA-Signaturen sind standardmäßig aktiviert, aber nicht erforderlich.

1. Die Verschlüsselungsmethode speichert den verschlüsselten und signierten Datensatz in Ihrer Datenbank

## Entschlüsseln und verifizieren
<a name="decrypt-and-verify"></a>

1. Der Cryptographic Materials Manager (CMM) stellt die Entschlüsselungsmethode mit den in der Materialbeschreibung gespeicherten Entschlüsselungsmaterialien bereit, einschließlich des [Klartext-Datenschlüssels und des zugehörigen MAC-Schlüssels](concepts.md#data-key).

   1. Das CMM entschlüsselt den verschlüsselten Datenschlüssel, wobei die Schlüssel im angegebenen Schlüsselbund eingeschlossen sind[, und gibt den Klartext-Datenschlüssel](concepts.md#wrapping-key) zurück.

1. Bei der Entschlüsselungsmethode wird der in der Materialbeschreibung angegebene Wert für die Schlüsselzusage verglichen und verifiziert.

1. Die Entschlüsselungsmethode überprüft die Signaturen im Signaturfeld.

   Sie identifiziert, welche Felder markiert sind `ENCRYPT_AND_SIGN``SIGN_ONLY`, oder `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` anhand der Liste der [erlaubten, nicht authentifizierten Felder](ddb-java-using.md#allowed-unauth), die Sie definiert haben. Die Entschlüsselungsmethode verwendet den in **Schritt 1** zurückgegebenen MAC-Schlüssel, um die HMAC-Werte für die mit, oder markierten Felder neu zu berechnen und zu vergleichen. `ENCRYPT_AND_SIGN` `SIGN_ONLY` `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` [Anschließend werden die [ECDSA-Signaturen anhand des im Verschlüsselungskontext](concepts.md#digital-sigs) gespeicherten öffentlichen Schlüssels überprüft.](concepts.md#encryption-context)

1. Die Entschlüsselungsmethode verwendet den Klartext-Datenschlüssel, um jeden markierten Wert zu entschlüsseln. `ENCRYPT_AND_SIGN` Das AWS Database Encryption SDK verwirft dann den Klartext-Datenschlüssel.

1. Die Entschlüsselungsmethode gibt den Klartext-Datensatz zurück.

# Unterstützte Algorithmus-Suiten im AWS Database Encryption SDK
<a name="supported-algorithms"></a>


****  

|  | 
| --- |
| Unsere clientseitige Verschlüsselungsbibliothek wurde in AWS Database Encryption SDK umbenannt. Dieses Entwicklerhandbuch enthält weiterhin Informationen zum [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md). | 

Ein *Algorithmen-Paket* ist eine Sammlung von kryptografischen Algorithmen und zugehörigen Werten. Kryptografische Systeme verwenden die Implementierung des Algorithmus, um den Chiffretext zu generieren.

Das AWS Database Encryption SDK verwendet eine Algorithmus-Suite, um die Felder in Ihrer Datenbank zu verschlüsseln und zu signieren. Alle unterstützten Algorithmus-Suiten verwenden den Advanced Encryption Standard (AES) -Algorithmus mit Galois/Counter Modus (GCM), auch bekannt als AES-GCM, zur Verschlüsselung von Rohdaten. Das AWS Database Encryption SDK unterstützt 256-Bit-Verschlüsselungsschlüssel. Die Länge des Authentifizierungs-Tags beträgt immer 16 Bytes.


**AWS Algorithmus-Suiten für das Datenbankverschlüsselungs-SDK**  

| Algorithmus | Verschlüsselungsalgorithmus | Länge des Datenschlüssels (in Bit) | Schlüsselableitungsalgorithmus | Symmetrischer Signaturalgorithmus | Asymmetrischer Signaturalgorithmus | Wichtiges Engagement | 
| --- | --- | --- | --- | --- | --- | --- | 
| Standard | AES-GCM | 256 | HKDF mit SHA-512 | HMAC-SHA-384 | ECDSA mit P-384 und SHA-384 | HKDF mit SHA-512 | 
| AES-GCM ohne digitale ECDSA-Signaturen | AES-GCM | 256 | HKDF mit SHA-512 | HMAC-SHA-384 | Keine | HKDF mit SHA-512 | 

**Verschlüsselungsalgorithmus**  
Der Name und der Modus des verwendeten Verschlüsselungsalgorithmus. Die Algorithmus-Suiten im AWS Database Encryption SDK verwenden den Advanced Encryption Standard (AES) -Algorithmus mit Galois/Counter Modus (GCM).  


**Länge des Datenschlüssels**  
Die Länge des [Datenschlüssels](concepts.md#data-key) in Bits. Das AWS Database Encryption SDK unterstützt 256-Bit-Datenschlüssel. Der Datenschlüssel wird als Eingabe für eine HMAC-basierte extract-and-expand Schlüsselableitungsfunktion (HKDF) verwendet. Die Ausgabe des HKDF wird als Datenverschlüsselungsschlüssel im Verschlüsselungsalgorithmus verwendet.

**Schlüsselableitungsalgorithmus**  
Die HMAC-basierte extract-and-expand Schlüsselableitungsfunktion (HKDF), die zur Ableitung des Datenverschlüsselungsschlüssels verwendet wird. [Das AWS Database Encryption SDK verwendet das in RFC 5869 definierte HKDF.](https://tools.ietf.org/html/rfc5869)   
+ Die verwendete Hash-Funktion ist SHA-512
+ Für den Extraktionsschritt:
  + Es wird kein Salt verwendet. Gemäß dem RFC ist das Salz auf eine Zeichenfolge aus Nullen gesetzt.
  + [Das Eingabematerial ist der Datenschlüssel aus dem Schlüsselbund.](concepts.md#keyring-concept)
+ Für den Expansionsschritt:
  + Der pseudozufällige Eingabeschlüssel ist die Ausgabe aus dem Extraktionsschritt.
  + Die Schlüsselbezeichnung besteht aus den UTF-8-kodierten Bytes der `DERIVEKEY` Zeichenfolge in Big-Endian-Byte-Reihenfolge.
  + Die Eingabeinformationen sind eine Verkettung der Algorithmus-ID und der Schlüsselbezeichnung (in dieser Reihenfolge).
  + **Die Länge des Ausgabe-Keying-Materials entspricht der Länge des Datenschlüssels.** Diese Ausgabe wird als Datenverschlüsselungsschlüssel im Verschlüsselungsalgorithmus verwendet.

**Symmetrischer Signaturalgorithmus**  
Der HMAC-Algorithmus (Hash-Based Message Authentication Code), der zur Generierung einer symmetrischen Signatur verwendet wird. Alle unterstützten Algorithmus-Suiten beinhalten die HMAC-Verifizierung.  
Das AWS Database Encryption SDK serialisiert die Materialbeschreibung und alle mit`ENCRYPT_AND_SIGN`, `SIGN_ONLY` oder markierten Felder. `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Anschließend verwendet es HMAC mit einem kryptografischen Hashfunktionsalgorithmus (SHA-384), um die Kanonisierung zu signieren.  
Die symmetrische HMAC-Signatur wird in einem neuen Feld (`aws_dbe_foot`) gespeichert, das das Database Encryption SDK dem AWS Datensatz hinzufügt.

**Asymmetrischer Signaturalgorithmus**  
Der Signaturalgorithmus, der zur Generierung einer asymmetrischen digitalen Signatur verwendet wird.  
Das AWS Database Encryption SDK serialisiert die Materialbeschreibung und alle mit`ENCRYPT_AND_SIGN`, `SIGN_ONLY` oder markierten Felder. `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Anschließend verwendet es den Elliptic Curve Digital Signature Algorithm (ECDSA) mit den folgenden Besonderheiten, um die Kanonisierung zu signieren:  
+ Bei der verwendeten elliptischen Kurve handelt es sich um die P-384, wie sie im [Digital Signature Standard (DSS) (](http://doi.org/10.6028/NIST.FIPS.186-4)FIPS PUB 186-4) definiert ist.
+ Die verwendete Hash-Funktion ist SHA-384.
Die asymmetrische ECDSA-Signatur wird zusammen mit der symmetrischen HMAC-Signatur im Feld gespeichert. `aws_dbe_foot`  
Digitale ECDSA-Signaturen sind standardmäßig enthalten, aber nicht erforderlich.

**Wichtiges Engagement**  
Die HMAC-basierte extract-and-expand Schlüsselableitungsfunktion (HKDF), die zur Ableitung des Commit-Schlüssels verwendet wird.  
+ Die verwendete Hash-Funktion ist SHA-512
+ Für den Extraktionsschritt:
  + Es wird kein Salt verwendet. Gemäß dem RFC ist das Salz auf eine Zeichenfolge aus Nullen gesetzt.
  + [Das Eingabematerial ist der Datenschlüssel aus dem Schlüsselbund.](concepts.md#keyring-concept)
+ Für den Expansionsschritt:
  + Der pseudozufällige Eingabeschlüssel ist die Ausgabe aus dem Extraktionsschritt.
  + Die Eingabeinformationen sind die UTF-8-kodierten Bytes der `COMMITKEY` Zeichenfolge in Big-Endian-Byte-Reihenfolge.
  + Die Länge des Ausgangs-Keying-Materials beträgt 256 Bit. Diese Ausgabe wird als Commit-Schlüssel verwendet.
[Mit dem Commit-Schlüssel wird das [Record Commitment](reference.md#format-commitment), ein eindeutiger 256-Bit-HMAC-Hash (Hash-Based Message Authentication Code), anhand der Materialbeschreibung berechnet.](reference.md#material-description-format) Eine technische Erläuterung des Hinzufügens von Key Commitment zu einer Algorithmus-Suite finden Sie unter [Key AEADs Committing](https://eprint.iacr.org/2020/1153) in Cryptology ePrint Archive. 

## Standard-Algorithmus-Suite
<a name="recommended-algorithms"></a>

Standardmäßig verwendet das AWS Database Encryption SDK eine Algorithmus-Suite mit AES-GCM, einer HMAC-basierten extract-and-expand Schlüsselableitungsfunktion (HKDF), HMAC-Verifizierung, digitalen ECDSA-Signaturen, Key Commitment und einem 256-Bit-Verschlüsselungsschlüssel.

[Die Standard-Algorithmus-Suite umfasst HMAC-Verifizierung (symmetrische Signaturen) und digitale ECDSA-Signaturen (asymmetrische Signaturen).](concepts.md#digital-sigs) Diese Signaturen werden in einem neuen Feld (`aws_dbe_foot`) gespeichert, das das AWS Database Encryption SDK dem Datensatz hinzufügt. Digitale ECDSA-Signaturen sind besonders nützlich, wenn die Autorisierungsrichtlinie es einer Benutzergruppe erlaubt, Daten zu verschlüsseln und einer anderen Benutzergruppe, Daten zu entschlüsseln.

Die standardmäßige Algorithmussuite leitet außerdem eine [Schlüsselzusage](concepts.md#key-commitment) ab — einen HMAC-Hash, der den Datenschlüssel mit dem Datensatz verknüpft. Der Key Commitment-Wert ist ein HMAC, der anhand der Materialbeschreibung und des Commit-Schlüssels berechnet wird. Der Key Commitment Value wird dann in der Materialbeschreibung gespeichert. Key Commitment stellt sicher, dass jeder Chiffretext nur in einen Klartext entschlüsselt wird. Dazu validieren sie den Datenschlüssel, der als Eingabe für den Verschlüsselungsalgorithmus verwendet wird. Bei der Verschlüsselung leitet die Algorithmus-Suite eine Schlüsselzusage (HMAC) ab. Vor der Entschlüsselung überprüfen sie, ob der Datenschlüssel dieselbe Schlüsselzusage (HMAC) erzeugt. Ist dies nicht der Fall, schlägt der Entschlüsselungsaufruf fehl.

## AES-GCM ohne digitale ECDSA-Signaturen
<a name="other-algorithms"></a>

Obwohl die Standard-Algorithmus-Suite wahrscheinlich für die meisten Anwendungen geeignet ist, können Sie auch eine alternative Algorithmussuite wählen. Einige Vertrauensmodelle würden beispielsweise durch eine Algorithmussuite ohne digitale ECDSA-Signaturen erfüllt. Verwenden Sie diese Suite nur, wenn die Benutzer, die Daten verschlüsseln, und die Benutzer, die Daten entschlüsseln, gleichermaßen vertrauenswürdig sind.

Alle Algorithmus-Suiten des AWS Database Encryption SDK beinhalten HMAC-Verifizierung (symmetrische Signaturen). Der einzige Unterschied besteht darin, dass der AES-GCM-Algorithmussuite ohne digitale ECDSA-Signatur die asymmetrische Signatur fehlt, die eine zusätzliche Ebene für Authentizität und Unwiderlegbarkeit bietet.

Wenn Ihr Schlüsselbund,, und beispielsweise mehrere Schlüssel zum Umschließen enthält und Sie einen Datensatz mithilfe der symmetrischen `wrappingKeyB` HMAC-Signatur entschlüsseln`wrappingKeyC`, bestätigt die symmetrische HMAC-Signatur`wrappingKeyA`, dass der Datensatz von einem Benutzer mit Zugriff auf verschlüsselt wurde. `wrappingKeyA` `wrappingKeyA` Wenn Sie die standardmäßige Algorithmussuite verwendet haben, HMACs stellen sie dieselbe Überprüfung von bereit und verwenden zusätzlich die digitale ECDSA-Signatur`wrappingKeyA`, um sicherzustellen, dass der Datensatz von einem Benutzer mit Verschlüsselungsberechtigungen für verschlüsselt wurde. `wrappingKeyA`

Um die AES-GCM-Algorithmussuite ohne digitale Signaturen auszuwählen, nehmen Sie den folgenden Ausschnitt in Ihre Verschlüsselungskonfiguration auf.

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

Der folgende Ausschnitt spezifiziert die AES-GCM-Algorithmussuite ohne digitale ECDSA-Signaturen. Weitere Informationen finden Sie unter [Verschlüsselungskonfiguration im AWS Database Encryption SDK für DynamoDB](ddb-java-using.md#ddb-config-encrypt).

```
.algorithmSuiteId(
    DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384)
```

------
#### [ C\$1 / .NET ]

Der folgende Ausschnitt spezifiziert die AES-GCM-Algorithmussuite ohne digitale ECDSA-Signaturen. Weitere Informationen finden Sie unter [Verschlüsselungskonfiguration im AWS Database Encryption SDK für DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).

```
AlgorithmSuiteId = DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384
```

------
#### [ Rust ]

Der folgende Ausschnitt spezifiziert die AES-GCM-Algorithmussuite ohne digitale ECDSA-Signaturen. Weitere Informationen finden Sie unter [Verschlüsselungskonfiguration im AWS Database Encryption SDK für DynamoDB](ddb-rust-using.md#ddb-rust-config-encrypt).

```
.algorithm_suite_id(
    DbeAlgorithmSuiteId::AlgAes256GcmHkdfSha512CommitKeyEcdsaP384SymsigHmacSha384,
)
```

------