B06 AES-Verschlüsselung Modus CBC Kein Padding String

Nachdem wir uns in den vorigen Beispielen mit dem heutzutage unsicheren ECB-Modus („Electronic Code Book“) beschäftigt haben, wenden wir uns nun dem CBC-Modus („Cipher Block Chaining“) zu.

Ich habe auf Seite 2 der ECB-Modus Beschreibung B03 AES-Verschlüsselung Modus ECB String Seite 2 ja gezeigt, wie einfach die verschlüsselten Daten geändert werden können. Ebenso einfach war es, Teile der verschlüsselten Nachricht durch andere Teile auszutauschen, ohne das der Empfänger dieses bemerken würde.

Dieser „Webfehler“ wird durch den CBC-Modus behoben – erkennbar am „Chaining“ im Namen – was durch eine Verkettung oder Verknüpfung der einzelnen Blöcke beschrieben wird.

Wie erfolgt nun die Verknüpfung ? Der jeweilige verschlüsselte Block wird mit der XOR-Funktion mit dem vorigen Block verkettet. Mit wem aber würde der erste verschlüsselte Block verkettet werden können – hier kommt nun der Initialisierungsvektor ins Spiel (in Beschreibungen oder Programmen vielfach nur „iV“ genannt), denn mit diesem Initialisierungsvektor wird der erste Block verknüpft. Da der Initialisierungsvektor byteweise mit dem ersten Verschlüsselungsblock verknüpft wird, ist er genau so lang wie die Blocklänge des Verfahrens, nämlich 16 Byte (oder 128 Bit).

Eine Beschreibung findet Ihr in der Wikipedia und auch im nachstehenden Bild, welches Euch den Ablauf der Verschlüsselung skizziert:

Herkunft: Wikipedia

Da diese Routine kein Padding nutzt, muss der plaintext immer exakt 16 Zeichen oder ein Vielfaches davon lang sein, ansonsten erhaltet Ihr eine Fehlermeldung vom Programm. Da dieses für die meisten Verschlüsselungseinsätze nicht praktikabel ist, empfehle ich die PKCS5Padding-Variante, welche auf der nächsten Webseite beschrieben ist.

Noch ein kleiner aber wichtiger Hinweis: damit der Empfänger der verschlüsselten Nachricht diese auch entschlüsseln kann, benötigt er neben dem Passwort auch den genutzten Initialisierungsvektor (iV). Dieser ist (im Gegensatz zum Passwort) aber nicht geheim und kann somit zusammen mit den verschlüsselten Daten verschickt werden.

Hier der Steckbrief des Verfahrens:

Verschlüsselungssteckbrief
Name des Verfahrens AES/CBC/NOPADDING
Langname CBC Cipher Block Chaining
Art der Chiffre Blockchiffre
Blocklänge (Byte) 16
Schlüssellänge (Byte/Bit) 16/128, 24/192, 32/256
Padding genutzt Nein
Sicherheit sicher bei Nutzung von unterschiedlichen Initialvektoren
Besonderes Benötigt einen Initialvektor

Bitte die nachfolgende Routine nicht für den Echteinsatz nutzen, da sie aus kryptographischer Sicht sehr angreifbar ist !

Die Ausgabe auf der Konsole ist nun etwas länger, da auch der benutzte Initialvektor ausgegeben wird:

Wie schon bei den vorigen Seiten findet Ihr nachfolgende ein Beispiel mit ausgelagerten Methoden zur Ver- und Entschlüsselung:

Bitte die nachfolgende Routine nicht für den Echteinsatz nutzen, da sie aus kryptographischer Sicht sehr angreifbar ist !

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 07.11.2018