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 die Verschlüsselung großer Dateien oder Live-Datenstreams.
Die Verschlüsselung erfolgt in Segmenten, die in einem Geheimtext 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. Wenn ein vorhandener Geheimtext geändert werden soll, 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. Teilweise Klartexte können ohne Verarbeitung des gesamten Geheimtexts abgerufen werden.
Streaming-AEAD-Implementierungen erfüllen die AEAD-Definition und sind nOAE-sicher. Sie haben folgende Eigenschaften:
- Secrecy: Über den Klartext ist nur seine Länge bekannt.
- Authentizität: Es ist nicht möglich, den verschlüsselten Klartext, der dem Geheimtext zugrunde liegt, unbemerkt zu ändern.
- Symmetrisch: Der Klartext wird mit demselben Schlüssel 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 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. Dadurch wird verhindert, dass ein Angreifer einen medizinischen Verlauf von einem Nutzer zu einem anderen verschieben kann.
Schlüsseltyp auswählen
Wir empfehlen für die meisten Anwendungsfälle AES128_GCM_HKDF_1MB. Allgemein gilt:
- AES128_GCM_HKDF_1MB (oder AES256_GCM_HKDF_1MB) ist die schnellere Option. Es können 264 Dateien mit jeweils bis zu 264 Byte verschlüsselt werden. Während der Verschlüsselung und Entschlüsselung wird etwa 1 MB Arbeitsspeicher verbraucht.
- AES128_GCM_HKDF_4KB verbraucht etwa 4 KB Arbeitsspeicher und ist eine gute Wahl, wenn Ihr System nicht viel Arbeitsspeicher hat.
- AES128_CTR_HMAC_SHA256_1MB (oder AES256_CTR_HMAC_SHA256_1MB) ist eine konservativere Option.
Sicherheitsgarantien
Streaming-AEAD-Implementierungen bieten:
- CCA2-Sicherheit
- Mindestens 80-Bit-Authentifizierungsstärke.
- Es können mindestens 264 Nachrichten3 mit insgesamt 251 Byte2 verschlüsselt werden. Bei keinem Angriff mit bis zu 232 ausgewählten Klartexten oder ausgewählten Geheimtexten ist die Erfolgswahrscheinlichkeit größer als 2–32.
Anwendungsbeispiel
Weitere Informationen finden Sie unter Ich möchte große Dateien oder Datenstreams verschlüsseln.
-
Ein Grund für diese Einschränkung ist die Verwendung der AES-GCM-Chiffre. Das Verschlüsseln eines anderen Klartextsegments am selben Speicherort würde der Wiederverwendung des IV entsprechen, was gegen die Sicherheitsgarantien von AES-GCM verstößt. Außerdem werden so Rollback-Angriffe verhindert, bei denen der Angreifer versucht, eine frühere Version der Datei unbemerkt wiederherzustellen. ↩
-
Es werden 232 Segmente unterstützt, wobei jedes Segment
segment_size - tag_size
Byte Klartext enthält. Bei 1-MB-Segmenten beträgt die Gesamtgröße des Klartexts 232 * (220–16) ≈ 251 Byte. ↩ -
Streaming AEAD wird unsicher, wenn eine Kombination aus abgeleitetem Schlüssel (128 Bit) und Nonce-Prefix (unabhängiger, zufälliger 7-Byte-Wert) wiederholt wird. Wir haben eine Kollisionsresistenz von 184 Bit, was ungefähr 264 Nachrichten entspricht, wenn die Erfolgswahrscheinlichkeit unter 2−32 liegen soll. ↩