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 ergeben 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 (für 256-Bit-Sicherheit ersetzen Sie AES128 unten durch AES256). Allgemein:

  • AES128_CTR_HMAC_SHA256 mit einem 16‑Byte-Initialisierungsvektor (IV) ist der konservativste Modus mit guten Grenzen.
  • AES128_EAX ist etwas weniger konservativ und etwas schneller als AES128_CTR_HMAC_SHA256.
  • AES128_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 Limits für die Länge von Klartext und zugehörigen Daten (siehe unten) überschritten werden, schlägt AES128_GCM fehl und es werden Schlüsselinformationen offengelegt.
  • AES128_GCM_SIV ist fast so schnell wie AES128_GCM. Es hat dieselben Beschränkungen wie AES128_GCM in Bezug auf die Anzahl der Nachrichten und die Nachrichtengröße. Wenn diese Beschränkungen jedoch überschritten werden, schlägt es weniger schwerwiegend fehl: Es kann nur die Tatsache preisgeben, dass zwei Nachrichten gleich sind. Dadurch ist die Verwendung sicherer als bei AES128_GCM, aber in der Praxis wird sie weniger häufig verwendet. Wenn Sie diese Funktion in Java verwenden möchten, müssen Sie Conscrypt installieren.
  • XChaCha20Poly1305 hat ein viel höheres Limit für die Anzahl der Nachrichten und die Nachrichtengröße als AES128_GCM. Wenn es jedoch fehlschlägt (sehr unwahrscheinlich), werden auch Schlüsselinformationen preisgegeben. 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

Weitere Informationen finden Sie unter Daten verschlüsseln und Geheimtext an den Kontext binden.