Das AEAD-Primitive (Authenticated Encryption with Associated Data) 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: Mit Ausnahme 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.
- Randomisierung: 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. Wenn Sie das vermeiden möchten, verwenden Sie stattdessen deterministische AEAD.
Verknüpfte Daten
Mit AEAD können Sie Chiffretext mit bestimmten verknüpften Daten verbinden. Angenommen, Sie haben eine Datenbank mit den Feldern user-id und encrypted-medical-history. In diesem Szenario kann user-id als verknüpfte Daten beim Verschlüsseln von encrypted-medical-history verwendet werden. Dadurch wird verhindert, dass ein Angreifer die Krankengeschichte von einem Nutzer zu einem anderen verschiebt.
Verknüpfte Daten sind optional. Wenn angegeben, ist die Entschlüsselung nur erfolgreich, wenn dieselben verknüpften Daten sowohl an Verschlüsselungs- als auch an 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.
Die beiden wichtigsten Sicherheitseinschränkungen bei der Auswahl eines Modus sind:
- QPS: Wie viele Nachrichten werden mit demselben Schlüssel verschlüsselt?
- Nachrichtengröße: Wie groß sind die Nachrichten?
Unterstützte Schlüsseltypen:
- AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) mit einem 16-Byte-Initialisierungsvektor (IV) ist der konservativste Modus mit guten Grenzen.
- Schlüsselbindung.
- AES-EAX (AES128_EAX, AES256_EAX) ist etwas weniger konservativ und etwas schneller als AES128_CTR_HMAC_SHA256.
- Nicht schlüsselbindendes MLGR.
- AES-GCM (AES128_GCM, AES256_GCM) ist in der Regel der schnellste Modus mit den strengsten Limits für die Anzahl der Nachrichten (232) und die Nachrichtengröße (~64 GB pro Nachricht). Wenn diese Limits überschritten werden, schlägt AES-GCM katastrophal fehl, da Klartext und der Authentifizierungsteil des internen AES-GCM-Schlüssels offengelegt werden.
- AES-GCM ist weder robust [ABN] noch schlüsselbindend [GLR]. Es ist möglich, einen Geheimtext zu generieren, der mit zwei verschiedenen Schlüsseln entschlüsselt werden kann. Dies kann zu praktischen Angriffen führen [DGRW]. Überprüfen Sie Ihr Bedrohungsmodell sorgfältig, wenn der Schlüssel vom Angreifer ausgewählt wird.
- AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] ist resistent gegen versehentlichen Nonce-Missbrauch und fast so leistungsfähig wie AES-GCM. Die Limits für die Anzahl der Nachrichten und die Nachrichtengröße für AES-GCM-SIV mit zufälligen IVs sind viel höher als die Limits von AES-GCM. Wenn diese Limits überschritten werden, schlägt AES-GCM-SIV weniger katastrophal fehl: Es wird nur offengelegt, dass zwei Nachrichten gleich sind.
AES-GCM-SIV ist sicherer, wird in der Praxis aber weniger häufig verwendet.
- Grenzen für zufällige Nonces:
- 232 Nachrichten, wobei jeder Klartext maximal 8 GiB groß ist
- 248 Nachrichten, wobei jeder Klartext maximal 32 MiB groß ist
- 264 Nachrichten, wobei jeder Klartext höchstens 128 KiB groß ist
- Installieren Sie Conscrypt, um es in Java zu verwenden.
- Nicht schlüsselbindend ADGKLS.
- Grenzen für zufällige Nonces:
- XChaCha20-Poly1305 (XCHACHA20_POLY1305) hat ein viel höheres Limit für die Anzahl der Nachrichten und die Nachrichtengröße als AES-GCM. Wenn es jedoch fehlschlägt (sehr unwahrscheinlich), werden auch Schlüsselmaterialien preisgegeben. Er ist nicht hardwarebeschleunigt und kann daher in Situationen, in denen Hardwarebeschleunigung verfügbar ist, langsamer als AES-Modi sein.
- Nicht schlüsselbindendes LGR.
Weitere Informationen zum Wire-Format des AEAD-Chiffretexts
Sicherheitsgarantien
AEAD-Implementierungen bieten:
- CCA2-Sicherheit.
- Authentifizierungsstärke von mindestens 80 Bit.
- 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.