Authentifizierte Verschlüsselung mit zugehörigen Daten (AEAD)

Das AEAD-Primitive (Authenticated Encryption with Associated Data, authentifizierte Verschlüsselung mit verknüpften Daten) ist das am häufigsten verwendete Primitive für die Datenverschlüsselung und eignet sich für die meisten Anforderungen.

AEAD hat die folgenden Eigenschaften:

  • Secrecy: Außer der Länge ist nichts über den Klartext bekannt.
  • Authentizität: Es ist nicht möglich, den verschlüsselten Klartext, der dem Geheimtext zugrunde liegt, unbemerkt zu ändern.
  • Symmetrisch: Der Klartext wird verschlüsselt und der Geheimtext wird mit demselben Schlüssel entschlüsselt.
  • Zufälligkeit: Die Verschlüsselung wird zufällig durchgeführt. Zwei Nachrichten mit demselben Klartext liefern unterschiedliche Geheimtexte. Angreifer können nicht erkennen, welcher Geheimtext einem bestimmten Klartext entspricht. Wenn Sie das vermeiden möchten, verwenden Sie stattdessen Deterministic AEAD.

Verknüpfte Daten

Mit AEAD kann Geheimtext mit bestimmten zugehörigen Daten verknüpft werden. Angenommen, Sie haben eine Datenbank mit den Feldern user-id und encrypted-medical-history. In diesem Szenario kann user-id beim Verschlüsseln von encrypted-medical-history als verknüpfte Daten verwendet werden. Dadurch wird verhindert, dass ein Angreifer einen medizinischen Verlauf von einem Nutzer zu einem anderen verschieben kann.

Zugehörige Daten sind optional. Wenn angegeben, ist die Entschlüsselung nur erfolgreich, wenn dieselben zugehörigen Daten an die Verschlüsselungs- und Entschlüsselungsaufrufe übergeben werden.

Schlüsseltyp auswählen

Wir empfehlen AES128_GCM für die meisten Anwendungsfälle. Es gibt jedoch verschiedene Schlüsseltypen für unterschiedliche Anforderungen. AES128 bietet 128-Bit-Sicherheit und AES256 bietet 256-Bit-Sicherheit.

Bei der Auswahl eines Modus sind die folgenden beiden wichtigen Sicherheitsbeschränkungen zu beachten:

  1. QPS: Wie viele Nachrichten werden mit demselben Schlüssel verschlüsselt?
  2. Nachrichtengröße: Wie groß sind die Nachrichten?

Allgemein:

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) mit einem 16-Byte-Initialisierungsvektor (IV) ist der konservativste Modus mit guten Grenzen.
  • AES-EAX (AES128_EAX, AES256_EAX) ist etwas weniger konservativ und etwas schneller als AES128_CTR_HMAC_SHA256.
  • AES-GCM (AES128_GCM, AES256_GCM) ist in der Regel der schnellste Modus mit den strengsten Beschränkungen für die Anzahl der Nachrichten und die Nachrichtengröße. Wenn diese Grenzwerte für Klartext- und zugehörige Datenlängen (unten) überschritten werden, schlägt AES-GCM fehl und es wird Schlüsselmaterial offengelegt.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) ist fast so schnell wie AES-GCM. Es hat dieselben Beschränkungen wie AES-GCM in Bezug auf die Anzahl der Nachrichten und die Nachrichtengröße. Wenn diese Beschränkungen jedoch überschritten werden, schlägt es weniger katastrophal fehl: Es kann nur die Tatsache preisgeben, dass zwei Nachrichten gleich sind. Dadurch ist es sicherer als AES-GCM, wird in der Praxis aber weniger häufig verwendet. Wenn Sie diese Funktion in Java verwenden möchten, müssen Sie Conscrypt installieren.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) hat eine viel höhere Beschränkung für die Anzahl der Nachrichten und die Nachrichtengröße als AES-GCM. Wenn es jedoch fehlschlägt (sehr unwahrscheinlich), werden auch Schlüsselinformationen offengelegt. Sie ist nicht hardwarebeschleunigt und kann daher langsamer sein als AES-Modi, wenn Hardwarebeschleunigung verfügbar ist.

Sicherheitsgarantien

AEAD-Implementierungen bieten:

  • CCA2-Sicherheit
  • Mindestens 80 Bit Authentifizierungsstärke.
  • Die Möglichkeit, mindestens 232 Nachrichten mit insgesamt 250 Byte zu verschlüsseln. Kein Angriff mit bis zu 232 ausgewählten Klartexten oder ausgewählten Chiffretexten hat eine Erfolgswahrscheinlichkeit von mehr als 2–32.

Beispielanwendungsfälle

Siehe Daten verschlüsseln und Geheimtext an seinen Kontext binden.