Das Streaming-AEAD-Primitive bietet eine authentifizierte Verschlüsselung für Streamingdaten. Sie 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 an ihren Speicherort innerhalb eines Geheimtexts 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 noch einmal 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 Außer der Länge ist nichts über den Klartext bekannt.
- Authenticity Es ist nicht möglich, den verschlüsselten Klartext, der dem Geheimtext zugrunde liegt, unbemerkt zu ändern.
- Symmetric 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
Mit der Streaming-AEAD-Primitiv 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 Fall 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:
- AES-GCM-HKDF
- 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 belegt etwa 4 KB Arbeitsspeicher und ist eine gute Wahl, wenn Ihr System nicht viel Arbeitsspeicher hat.
- AES-CTR HMAC
- 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 . Kein Angriff mit bis zu 232 ausgewählten Klartexten oder ausgewählten Geheimtexten hat eine Erfolgswahrscheinlichkeit, die größer als 2−32 ist.
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. ↩