Das AEAD-Primitive (Authenticated Encryption with Associated Data) ist die 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 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. Wenn Sie dies vermeiden möchten, verwenden Sie stattdessen deterministische AEAD.
Verknüpfte Daten
Mit AEAD können Sie den Geheimtext mit bestimmten zugehörigen Daten 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
Für die meisten Anwendungen empfehlen wir AES128_GCM. Es gibt jedoch verschiedene Schlüsseltypen für unterschiedliche Anforderungen. Für eine 256‑Bit-Sicherheit ersetzen Sie unten AES128 durch AES256. Allgemein gilt:
- AES128_CTR_HMAC_SHA256 mit einem 16-Byte-Initialisierungsvektor (IV) ist der konservativste Modus mit guten Grenzwerten.
- 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 Einschränkungen für die Anzahl der Nachrichten und die Nachrichtengröße. Wenn diese Limits für den Klartext und die zugehörigen Datenlängen (unten) überschritten werden, schlägt AES128_GCM fehl und es kommt zu einer Schlüsselleckage.
- AES128_GCM_SIV ist fast so schnell wie AES128_GCM. Die Anzahl der Nachrichten und die Nachrichtengröße sind auf dieselben Werte wie bei AES128_GCM beschränkt. Wenn diese Limits jedoch überschritten werden, ist der Fehler weniger schwerwiegend: Es wird möglicherweise nur verraten, dass zwei Nachrichten identisch sind. Dadurch ist es sicherer als AES128_GCM, wird aber in der Praxis weniger häufig verwendet. Wenn Sie diese Funktion in Java verwenden möchten, müssen Sie Conscrypt installieren.
- XChaCha20Poly1305 hat eine viel größere Begrenzung für die Anzahl der Nachrichten und die Nachrichtengröße als AES128_GCM. Bei einem Fehler (sehr unwahrscheinlich) wird jedoch auch Schlüsselmaterial weitergegeben. Da er nicht hardwarebeschleunigt ist, kann er in Situationen, in denen die Hardwarebeschleunigung verfügbar ist, langsamer als AES-Modi sein.
Sicherheitsgarantien
AEAD-Implementierungen bieten:
- CCA2-Sicherheit
- Mindestens 80-Bit-Authentifizierungsstärke.
- Es können mindestens 232 Nachrichten mit insgesamt 250 Byte verschlüsselt werden. Kein Angriff mit bis zu 232 ausgewählten Klartexten oder ausgewählten Geheimtexten hat eine Erfolgswahrscheinlichkeit größer als 2−32.
Beispielanwendungsfälle
Ich möchte Daten verschlüsseln und den Geheimtext an seinen Kontext binden.