Skip to main content
Security & Privacy

AES-GCM vs AES-CBC: Welchen Modus verwenden und warum

Was Blockchiffre-Modi leisten, warum GCM CBC bei neuem Code ersetzt hat, was eine wiederverwendete Nonce preisgibt, und welche NIST-Grenzen dabei Pflicht sind.

Von 6 min read
Titelkarte des Artikels. Zwei Reihen Chiffreblöcke auf dunklem Raster, die untere endet in einem bernsteinfarbenen Block mit der Aufschrift tag, mit der Zeile: one mode authenticates, one does not

AES verschlüsselt 16 Byte. Alles Längere braucht einen Betriebsmodus darum herum, und im Modus liegen die eigentlichen Sicherheitseigenschaften.

Zwei davon begegnen einem ständig: CBC und GCM. Sie sind nicht austauschbar, und die falsche Wahl ergibt Code, der jeden Test besteht und still eine Eigenschaft verliert, deren Fehlen niemandem auffällt.

Wozu Modi überhaupt

Daten in 16-Byte-Blöcke teilen, jeden einzeln verschlüsseln, aneinanderhängen. Das ist ECB, und es scheitert sichtbar: Gleiche Klartextblöcke ergeben gleiche Chiffratblöcke, Struktur überlebt also die Verschlüsselung.

Jeder andere Modus existiert, um das zu beheben, und dann das, was danach kommt.

  • CBC XORt jeden Klartextblock mit dem vorherigen Chiffratblock vor dem Verschlüsseln. Ein Initialisierungsvektor bricht das Muster für den ersten Block.
  • GCM betreibt AES als Stromchiffre im Counter-Modus und berechnet ein Authentifizierungs-Tag über das Ergebnis.

Was jeder Modus auf die Leitung legt

CBC liefert einen unvorhersehbaren IV plus aufgefülltes Chiffrat und braucht einen separat angewandten HMAC, den man vergessen kann. GCM liefert eine Nonce, ein Chiffrat in Klartextlänge und ein Authentifizierungs-Tag aus derselben Konstruktion
Der Unterschied ist nicht die Stärke der Chiffre. Es ist die Zahl der Teile, die man richtig zusammensetzen muss.

CBC braucht drei Dinge, um sicher zu sein, und liefert zwei. Der IV muss unvorhersehbar sein, nicht nur einmalig, denn ein vorhersehbarer IV erlaubt einen Angriff mit gewähltem Klartext. Der Klartext muss auf ein Vielfaches von 16 aufgefüllt werden, üblicherweise mit PKCS#7. Und das Chiffrat muss von einem separaten HMAC in einer Encrypt-then-MAC-Konstruktion authentifiziert werden, mit eigenem Schlüssel, in einem Schritt, zu dem Sie nichts zwingt.

Daraus folgen zwei Fehlerbilder:

Padding-Orakel. Verrät der Entschlüsselungspfad, ob das Padding gültig war, über eine Fehlermeldung, einen Statuscode oder einen Zeitunterschied, stellt ein Angreifer den Klartext Byte für Byte ohne Schlüssel wieder her. Der kanonische Produktionsfall ist die ASP.NET-Schwachstelle von 20103, und sie war nicht die erste.

Formbarkeit. Ohne MAC kippt ein gekipptes Bit im Chiffrat das entsprechende Bit im Klartext. Die Empfängerseite entschlüsselt etwas, das die Absenderin nie geschrieben hat, und kann es nicht bemerken.

GCM hat ein bewegliches Teil weniger. Counter-Modus heisst, das Chiffrat ist genau so lang wie der Klartext, es gibt also kein Padding zum Angreifen. Das Tag entsteht im selben Aufruf wie das Chiffrat, es kann also nicht vergessen werden. Und auf jeder modernen CPU ist es schneller als CBC plus HMAC-SHA-256, weil beide Hälften hardwarebeschleunigt sind.

Für eine laufende Implementierung: Unser AES verschlüsseln/entschlüsseln beherrscht GCM, CBC und CTR mit 128, 192 oder 256 Bit, vollständig in der Seite. Es nimmt Text statt Dateien, leitet den Schlüssel per PBKDF2 aus Ihrer Passphrase ab und gibt einen einzelnen base64-Block zurück, der Salt, IV und Chiffrat enthält, statt die Felder einzeln anzuzeigen.

Die eine scharfe Kante

Verschlüsseln Sie zwei verschiedene Nachrichten mit demselben Schlüssel und derselben Nonce, wird GCM nicht schwächer. Es fällt in sich zusammen.

Zwei Nachrichten, mit AES-256-GCM unter demselben Schlüssel und derselben Nonce verschlüsselt. Die Chiffrate sind identisch bis auf die abweichende Stelle, das XOR der Chiffrate entspricht dem XOR der Klartexte, und wer eine Nachricht kennt, liest die andere
Mit Nodes crypto-Modul ausgeführt. Nichts davon ist ein theoretischer Angriff.

Weil der Schlüsselstrom nur vom Schlüssel und der Nonce abhängt, heisst beides wiederzuverwenden, zwei Klartexte mit demselben Schlüsselstrom zu XORen. Das XOR der Chiffrate ist damit das XOR der Klartexte, der Schlüssel kürzt sich vollständig heraus. Wir haben "Transfer 100 EUR to Alice" und "Transfer 900 EUR to Mallory" unter einem Schlüssel und einer Nonce verschlüsselt: Die Chiffrate kamen identisch heraus bis auf das eine Byte, an dem sich die Beträge unterscheiden, und das Einrechnen der ersten Nachricht gab die zweite im Klartext zurück.

Fälschung kommt dazu. Eine wiederverwendete Nonce gibt genug über den GHASH-Teilschlüssel preis, dass ein Angreifer neue Nachrichten erzeugen kann, die die Tag-Prüfung bestehen.

NIST formuliert die Anforderung nüchtern: Die Wahrscheinlichkeit, die Verschlüsselung je mit demselben IV und Schlüssel aufzurufen, darf nicht grösser als 2^-32 sein, und "in practice this requirement is almost as important as the secrecy of the key"1.

Der entsprechende CBC-Fehler ist schlimm und überlebbar: Ein wiederverwendeter IV verrät, ob zwei Nachrichten einen gemeinsamen Anfang haben, mehr nicht.

Auf der richtigen Seite bleiben

Zwei Konstruktionen, und je Schlüssel muss man sich für genau eine entscheiden1.

Zufällige 96-Bit-Nonces aus einem echten CSPRNG. Kollisionen folgen der Geburtstagsschranke, die Obergrenze ist also nicht "wenn es sich unwohl anfühlt": NIST begrenzt die Gesamtzahl der Aufrufe je Schlüssel auf 2^321. Das ist eine harte Grenze, keine vorsichtige, und sie gehört auf den Auslöser für den Schlüsselwechsel.

Zählerbasierte Nonces, bei denen ein festes Feld das Gerät benennt und ein Aufruffeld je Nachricht hochzählt. Den Zähler nie ohne Schlüsselwechsel zurücksetzen. Für Clients, die über schlechte Netze erneut senden, ist das die belastbarere Wahl, denn ein erneuter Versuch, der neu verschlüsselt, ist genau der Weg, auf dem Systeme mit Zufalls-Nonces versehentlich eine wiederholen.

Erzeugen Sie Schlüssel und Nonces aus einer kryptografischen Quelle: crypto.randomBytes in Node, secrets.token_bytes in Python, SecureRandom in Ruby. Unser Zufalls-String-Generator nutzt crypto.getRandomValues, dieselbe Primitive, die WebCrypto intern verwendet.

Die Wahl

  • GCM für Neues. Netzwerkprotokolle, Dateiverschlüsselung, alles, wo Vertraulichkeit und Integrität aus einer Primitive kommen sollen.
  • CBC plus HMAC-SHA-256 nur zur Kompatibilität mit etwas, das es schon spricht, oder wo Regularien Sie festlegen.
  • Nie CBC allein über eine Vertrauensgrenze hinweg.
  • Nie ECB.

Die ehrliche Zusammenfassung ist eine Zählung der Fussangeln. CBC hat drei: vorhersehbare IVs, Padding-Orakel und ein vergessener MAC. GCM hat eine, und anders als die anderen ist sie laut, sobald man weiss, worauf man achtet.

Schlüssellängen

AES nimmt Schlüssel mit 128, 192 oder 256 Bit, und beide Modi akzeptieren jede davon unverändert. AES-128 ist gegen klassische Angriffe solide. Grovers Algorithmus würde die effektive symmetrische Sicherheit halbieren, was AES-128 nominell auf 64 Bit und AES-256 auf 128 setzt, gegenüber einem grossen Quantenrechner, den es noch nicht gibt. Der Kostenunterschied ist klein genug, dass AES-256 die vernünftige Vorgabe ist, und mehrere Regelwerke verlangen es ohnehin.

Wechseln Sie den Schlüssel, wenn die Aufrufgrenze näher rückt, wenn ein Gerät oder Zugangsdatum kompromittiert ist, oder nach Plan. Ein Jahr ist für langlebige Schlüssel üblich; Sitzungsschlüssel sollten kurzlebig sein.

Zum Vergleichen von Fingerabdrücken, statt etwas zu entschlüsseln, deckt der Hash-Generator SHA-256 und Verwandte ab. Andere Primitive, benachbarte Aufgabe.

Was die Protokolle entschieden haben

Sie wählen den Modus selten von Hand, weil das Protokoll schon gewählt hat.

  • TLS 1.3 hat CBC vollständig entfernt. Jede definierte Cipher Suite ist AEAD2.
  • TLS 1.2 erlaubt AES-CBC-Suites weiterhin, und sie werden stetig abgeschaltet.
  • OpenSSH nutzt für moderne Verbindungen standardmässig GCM und ChaCha20-Poly1305.
  • Cloud-KMS-Dienste verwenden intern authentifizierte Modi.

Jedes Protokoll, das diese Frage neu gestellt hat, ist bei authentifizierter Verschlüsselung gelandet. Diese Konvergenz ist ein besseres Argument als jede einzelne Eigenschaft.

Das Fazit

CBC ist ein Modus, der drei Dinge richtig verlangt und Sie mit zweien ausliefern lässt. GCM verlangt eines richtig und beschwert sich über den Rest lautstark. Nehmen Sie GCM, setzen Sie die Nonce-Verwaltung auf dieselbe Checkliste wie den Schlüsselwechsel, und lassen Sie funktionierenden CBC-plus-HMAC-Code in Ruhe, bis ein geplanter Wechsel einen sauberen Moment zum Migrieren bietet.

Quellen

Jede Zahl in diesem Artikel lässt sich auf eine Quelle unten zurückführen. Behauptungen ohne Beleg wurden gestrichen, nicht abgeschwächt.

  1. PrimärquelleNIST

    Die Eindeutigkeitsanforderung in Abschnitt 8, dass die Wahrscheinlichkeit, die Verschlüsselung je mit demselben IV und Schlüssel aufzurufen, nicht grösser als 2 hoch minus 32 sein darf und dass dies fast so wichtig ist wie die Geheimhaltung des Schlüssels; die Beschränkung in Abschnitt 8.3 auf 2 hoch 32 Aufrufe je Schlüssel; und die 96-Bit-IV-Konstruktion, bei der der Zählerblock aus dem IV gefolgt vom Zähler besteht.

  2. PrimärquelleIETF

    Dass alle Cipher Suites von TLS 1.3 AEAD-Konstruktionen sind, mit AES-GCM und ChaCha20-Poly1305, und dass CBC-basierte Suites vollständig entfallen sind.

  3. PrimärquelleMicrosoft

    Die ASP.NET-Padding-Orakel-Schwachstelle von 2010, den bekanntesten Produktionsfall dafür, dass ein Entschlüsselungspfad die Gültigkeit des CBC-Paddings preisgibt.

Themen

In diesem Artikel erwähnte Tools

Neue Tools per E-Mail

Neue Tools und gelegentlich ein ausführlicher Artikel, etwa einmal im Monat. Kein Spam, deine Adresse bekommt niemand, Abmeldung mit einem Klick.

Ähnliche Artikel

Titelkarte des Artikels. Zwei Kästchenpaare, das obere durch einen einzelnen bernsteinfarbenen Pfeil verbunden, das untere durch Pfeile in beide Richtungen, mit der Zeile: one of these has no way back
Security & Privacy

Hashing vs. Verschlüsselung vs. Kodierung: Was oft verwechselt wird

Drei Umformungen, die alle Kauderwelsch erzeugen und verschiedene Probleme lösen, samt gemessener Kosten der falschen Wahl bei Passwörtern.

Titelkarte des Artikels. Ein Schild, dessen rechte Hälfte bernsteinfarben gefüllt ist, mit der Zeile: what leaves the machine, and when
Security & Privacy Guide

Datenschutz-Leitfaden: Bedrohungsmodelle für Browser-Arbeit

Bedrohungsmodelle, die einen Namen verdienen, der 30-Sekunden-Test statt jeder Datenschutzerklärung, und eine ehrliche Liste, welche unserer Tools hochladen.

Titelkarte des Artikels. Sechs kleine graue Punkte für ein getipptes Passwort neben bernsteinfarbenen konzentrischen Ringen, mit der Zeile: nothing to type, nothing to steal
Security & Privacy

Passkeys vs. Passwörter: Wie WebAuthn das Passwort tatsächlich ersetzt

Wie Passkeys, FIDO2 und WebAuthn wirklich arbeiten, warum die Origin-Bindung Phishing beendet, und die Kompromisse bei Wiederherstellung und Sync.