Streaming Authenticated Encryption with Associated Data (Streaming AEAD)

Das Streaming AEAD-Primitive bietet eine authentifizierte Verschlüsselung für Streamingdaten. Dies ist nützlich, wenn die zu verschlüsselnden Daten zu groß sind, um in einem einzigen Schritt verarbeitet zu werden. Typische Anwendungsfälle sind beispielsweise die Verschlüsselung großer Dateien oder Live-Datenströme.

Die Verschlüsselung erfolgt in Segmenten, die innerhalb eines Geheimtexts an ihren Standort gebunden sind und nicht entfernt oder neu angeordnet werden können. Segmente aus einem Geheimtext können nicht in einen anderen Geheimtext eingefügt werden. Zum Ändern eines vorhandenen Geheimtexts muss der gesamte Datenstream neu verschlüsselt werden.1

Die Entschlüsselung ist schnell, da jeweils nur ein Teil des Geheimtexts entschlüsselt und authentifiziert wird. Partielle Klartexte sind ohne Verarbeitung des gesamten Geheimtextes verfügbar.

AEAD-Streamingimplementierungen erfüllen die AEAD-Definition und sind OAE2-sicher. Sie haben folgende Eigenschaften:

  • Geheimhaltung: Abgesehen von seiner Länge ist der Klartext nicht bekannt.
  • Authentizität: Der verschlüsselte Klartext, der dem Geheimtext zugrunde liegt, kann nur erkannt werden, wenn er erkannt wird.
  • Symmetrisch: Die Verschlüsselung des Klartexts und die Entschlüsselung des Geheimtexts erfolgt mit demselben Schlüssel.
  • Zufälligkeit: Die Verschlüsselung wird zufällig durchgeführt. Zwei Nachrichten mit demselben Klartext liefern unterschiedliche Geheimtexte. Angreifer können nicht wissen, welcher Geheimtext einem bestimmten Klartext entspricht.

Verknüpfte Daten

Streaming-AEAD kann verwendet werden, um Geheimtext mit bestimmten verknüpften Daten zu verknüpfen. 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. Dies verhindert, dass ein Angreifer die Krankengeschichte von einem Benutzer zum anderen überträgt.

Schlüsseltyp auswählen

Für die meisten Anwendungsfälle empfehlen wir AES128_GCM_HKDF_1MB. Allgemein:

  • AES128_GCM_HKDF_1MB (oder AES256_GCM_HKDF_1MB) ist die schnellere Option. Er kann 264 Dateien mit jeweils bis zu 264 Byte verschlüsseln. Während des Ver- und Entschlüsselungsprozesses wird ca. 1 MB Arbeitsspeicher verbraucht.
  • AES128_GCM_HKDF_4KB belegt ca. 4 KB Arbeitsspeicher und ist eine gute Wahl, wenn Ihr System nicht über viel Arbeitsspeicher verfügt.
  • AES128_CTR_HMAC_SHA256_1MB (oder AES256_CTR_HMAC_SHA256_1MB) ist eine konservativere Option.

Sicherheitsgarantien

Streaming-AEAD-Implementierungen bieten Folgendes:

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

Anwendungsbeispiel

Weitere Informationen finden Sie unter Ich möchte große Dateien oder Datenströme verschlüsseln.


  1. Ein Grund für diese Einschränkung ist die Verwendung der AES-GCM-Chiffre. Die Verschlüsselung eines anderen Klartextsegments am selben Ort entspricht der Wiederverwendung der IV, die gegen die Sicherheitsgarantien von AES-GCM verstößt. Ein weiterer Grund ist, dass dadurch Rollback-Angriffe verhindert werden, bei denen der Angreifer versuchen könnte, eine frühere Version der Datei wiederherzustellen, ohne dass diese erkannt wurde. 

  2. Es werden 232 Segmente unterstützt, wobei jedes Segment segment_size - tag_size Byte Klartext enthält. Bei Segmenten mit 1 MB beträgt die gesamte Klartextgröße 232 × (220 - 16) ~= 251 Byte.

  3. Das Streaming von AEAD wird unsicher, wenn eine Kombination aus abgeleitetem Schlüssel (128 Bit) und Nonce-Präfix (unabhängiger zufälliger 7-Byte-Wert) wiederholt wird. Wir haben eine 184-Bit-Kollisionsbeständigkeit, die ungefähr 264 Nachrichten entspricht, wenn die Erfolgswahrscheinlichkeit kleiner als 2–32 sein soll.