𝗖𝗕𝗖 𝗕𝗶𝘁 𝗙𝗹𝗶𝗽𝗽𝗶𝗻𝗴 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱

Encryption does not mean your data is safe from tampering.

Many developers make this mistake. They think if an attacker cannot read the data, they cannot change it. This is wrong. Cryptography treats secrecy and integrity as two different tasks.

The CBC Bit Flipping attack proves this. An attacker can change your data without knowing your secret key.

Here is how it works:

AES does not encrypt data in one large piece. It breaks data into 16-byte blocks. In CBC mode, these blocks chain together. The encrypted output of the first block mixes into the plaintext of the second block.

This chain creates a weakness during decryption. To get the original text of Block 2, the server decrypts it and combines it with the ciphertext from Block 1.

An attacker can exploit this:

The attacker does not need to read the message. They just flip bits to change the final result.

Consider an old web app using encrypted cookies for sessions. A cookie might hold: userid=994;role=user;

An attacker intercepts this cookie and flips bits in the ciphertext. They send many requests until the server accepts one. Because the server only checks if the data decrypts, it processes the modified text. Suddenly, the decrypted string reads: userid=994;role=admi;

The attacker now has admin access. They never read the key or the original cookie.

The mistake is assuming encryption guarantees integrity.

To fix this, use Authenticated Encryption like AES-GCM. It creates a cryptographic tag. This tag acts like a seal. If an attacker changes even one bit, the seal breaks. The server rejects the data immediately.

If you must use CBC, use an Encrypt-then-MAC architecture. Create an authentication code for the ciphertext and verify it before you start decryption.

Secret data is not always trustworthy data. Always prove your data is unchanged before you use it to make decisions.

CBC Bit-Flipping erklärt: Warum Verschlüsselung allein keine Integrität garantiert

Haben Sie jemals angenommen, dass eine Verschlüsselung ausreicht, um die Integrität Ihrer Daten zu gewährleisten? Wenn ja, sind Sie nicht allein. Viele Entwickler machen diesen Fehler.

In diesem Artikel werden wir untersuchen, wie ein Bit-Flipping-Angriff auf den Cipher Block Chaining (CBC)-Modus funktioniert und warum Verschlüsselung und Integrität zwei völlig unterschiedliche Konzepte sind.

Vertraulichkeit vs. Integrität

Bevor wir in die Details gehen, müssen wir zwei grundlegende Konzepte der Kryptografie unterscheiden:

  1. Vertraulichkeit (Confidentiality): Stellt sicher, dass unbefugte Personen den Inhalt der Daten nicht lesen können.
  2. Integrität (Integrity): Stellt sicher, dass die Daten nicht unbemerkt verändert wurden.

Verschlüsselung allein bietet Vertraulichkeit, aber nicht zwangsläufig Integrität.

Wie CBC funktioniert

Im Cipher Block Chaining (CBC)-Modus wird jeder Block des Klartexts mit dem vorherigen Geheimtextblock mittels einer XOR-Operation verknüpft, bevor er verschlüsselt wird.

Die Formel für die Verschlüsselung lautet: $C_i = E_k(P_i \oplus C_{i-1})$

Und für die Entschlüsselung: $P_i = D_k(C_i) \oplus C_{i-1}$

Hierbei ist:

Der Bit-Flipping-Angriff

Schauen wir uns die Entschlüsselungsformel genauer an: $P_i = D_k(C_i) \oplus C_{i-1}$

Wenn ein Angreifer ein Bit im Geheimtextblock $C_{i-1}$ manipuliert, hat dies eine direkte und vorhersehbare Auswirkung auf den Klartextblock $P_i$. Da die Entschlüsselung von $C_i$ unabhängig von $C_{i-1}$ erfolgt, wird der Block $C_i$ zwar korrekt entschlüsselt, aber das Ergebnis wird dann mit dem manipulierten $C_{i-1}$ XOR-verknüpft.

Das bedeutet: Wenn ein Angreifer das $n$-te Bit in $C_{i-1}$ umdreht, wird auch das $n$-te Bit im Klartextblock $P_i$ umgedreht.

Ein praktisches Beispiel

Stellen Sie sich vor, Sie senden eine verschlüsselte Nachricht, die ein JSON-Objekt enthält: {"user": "guest", "admin": false}

Ein Angreifer kann den Inhalt nicht lesen, aber er weiß vielleicht aus dem Kontext oder durch Ausprobieren, wo das Feld "admin": false steht. Wenn der Angreifer das entsprechende Bit im vorherigen Geheimtextblock (oder im IV) manipuliert, kann er den Wert von false zu true ändern, ohne den Schlüssel zu kennen.

Obwohl der Block $C_{i-1}$ durch die Manipulation "zerstört" wird (der Klartextblock $P_{i-1}$ wird unleserlich/korrupt), kann der Angreifer den Zielblock $P_i$ präzise manipulieren.

Warum das gefährlich ist

Das Problem ist, dass das System die Nachricht erfolgreich entschlüsselt, ohne zu bemerken, dass sie manipuliert wurde. Wenn die Anwendung den korrupten Block $P_{i-1}$ ignoriert oder nicht validiert, wird der manipulierte Block $P_i$ (z. B. mit erhöhten Privilegien) verarbeitet.

Wie man sich schützt

Um sowohl Vertraulichkeit als auch Integrität zu gewährleisten, sollten Sie Authenticated Encryption verwenden.

Es gibt zwei Hauptansätze:

1. AEAD-Modi (Authenticated Encryption with Associated Data)

Modi wie AES-GCM (Galois/Counter Mode) oder ChaCha20-Poly1305 sind so konzipiert, dass sie sowohl die Verschlüsselung als auch eine Authentifizierung in einem Schritt durchführen. Wenn ein einziges Bit im Geheimtext manipuliert wird, schlägt die gesamte Entschlüsselung fehl.

2. MAC (Message Authentication Code)

Wenn Sie einen Modus wie CBC verwenden müssen, sollten Sie einen MAC (z. B. HMAC) verwenden. Der sicherste Weg ist das Encrypt-then-MAC-Verfahren:

  1. Verschlüsseln Sie den Klartext mit CBC.
  2. Berechnen Sie einen HMAC über den resultierenden Geheimtext.
  3. Senden Sie den Geheimtext zusammen mit dem HMAC.

Beim Empfänger wird zuerst der HMAC überprüft. Wenn der Geheimtext manipuliert wurde, wird der HMAC nicht übereinstimmen, und die Nachricht wird verworfen, bevor die Entschlüsselung überhaupt stattfindet.

Fazit

Verschlüsselung allein ist kein Schutz gegen Manipulation. Wenn Sie CBC verwenden, sind Sie anfällig für Bit-Flipping-Angriffe. Verwenden Sie immer moderne, authentifizierte Verschlüsselungsverfahren wie AES-GCM, um sicherzustellen, dass Ihre Daten nicht nur geheim, sondern auch unverändert bleiben.