© buchachon - Fotolia.com

Verschlüsselungsmodus im Detail / Empfehlung

Der heutige Beitrag ist eine Fortsetzung des Beitrags "Grundlagen der Verschlüsselung", es geht etwas mehr in die technischen Details: Der Verschlüsselungsmodus. Der letzte Beitrag dieses Blogs ist etwas länger her, leider habe ich momentan relativ wenig Zeit. Aktuell schreibe ich parallel einen Beitrag über die Absicherung des ngnix Webservers, beim Verfassen des Beitrags habe ich jedoch bemerkt, dass vielen die Relevanz der Auswahl des Verschlüsselungsmodus nicht bewusst ist.

Wird beispielsweise der im folgenden erklärte Electronic Codeblock Mode gemeinsam mit der Verschlüsselung AES in bestimmten Anwendungssituationen genutzt, kann die Verschlüsselung trotz sehr gutem Passwort vollkommen unsicher und leicht zu "knacken" sein.

Die symmetrische Verschlüsselung kann in zwei Grundtypen eingeteilt werden:

  • Blockchiffrierungen, hierbei wird der Klar- und der Chiffretext (das verschlüsselte Gegenstück zum Klartext) blockweise verarbeitet. Ein Block hat eine typische Größe von 64, 128, 192 oder auch 256 bit.
  • Stromchiffrierungen, hierbei wird der Text bitweise (manchmal auch byteweise) verarbeitet.

Der kryptographische Modus ist eine Art Erweiterung der Grundchiffrierung (AES, Serpent, Blowfish, ...) mit einer Rückkopplung und einigen einfachen mathematischen Operationen.

In vielen Anwendungen kann der Modus konfiguriert werden, im Artikel "TLS (SSL) Verschlüsselung und Schwachstellen im Detail" habe ich beispielsweise gezeigt, dass zu Beginn einer verschlüsselten Sitzung eine Cipher Suite ausgehandelt werden muss. Innerhalb der Suite wird auch die Verschlüsselung, die Blockgröße und der Modus festgelegt, z.B.:

  • AES_128_GCM (= Grundverschlüsselung AES, Keysize 128 bit und Modus GCM), oder
  • AES_128_CBC.

Auch in vielen Verschlüsselungs-Anwendungen wie OpenVPN oder OpenSSL basierten Programmen kann der Nutzer einen Algorithmus frei wählen. Zur Wahl des am Besten passenden ist jedoch einiges an Hintergrundwissen notwendig, welches ich im Folgenden vermitteln möchte.

Der Electronic Codeblock Mode (ECB)

Beim Electronic Codeblock Mode wird immer ein Klartextblock ohne Rückkopplung in einen Chiffretextblock übersetzt.

Verschlüsselungsmodus ECB
Diese Darstellung verdeutlicht die Funktionsweise des Verschlüsselungsmode Electronic Codebook Mode (ECB). [1]
Durch die fehlende Rückkopplung ist das Ergebnis zweier gleicher Klartextblöcke stets exakt das Selbe:

ECB Mode Problem
Darstellung des Klar- und Chiffretextes im ECB Modus.

Das Beispiel zeigt das Risiko: Nachrichten lassen sich statistisch auswerten. Enthält eine verschlüsselte Nachricht viel Redundanz (Sprachen sind z.B. häufig hoch redundant), erhält ein Kryptoanalytiker viele ihm nützliche Informationen. Einmal entschlüsselte Blöcke können innerhalb derselben Nachricht bei jedem Vorkommen dieses Chiffretextblocks entschlüsselt werden. Im Beispiel der oberen Graphik lässt sich durch Entschlüsselung des ersten Blocks der vierte Block gleich mit entschlüsseln.

Die statistische Auswertung lässt sich am Problem der stereotypischen Anfänge und Enden gut demonstrieren: Im Kopf- und Fußteil einer Nachricht kommen häufig Absender bzw. Empfänger Informationen, das Datum oder typische Anreden wie "sehr geehrte Damen und Herren" vor. Diese Informationen können für Angriffe genutzt werden.

Eine große Stärke des Electronic Codeblock Mode ist die "Toleranz" gegenüber Bitfehlern: Bei einem Bitfehler im Chiffretext ist immer nur ein Block von diesem Fehler betroffen, die anderen Blöcke bleiben intakt.

Ein weiteres großes Problem liegt an der Möglichkeit, dass ein Angreifer Blöcke modifizieren kann, ohne dass er den Algorithmus oder Schlüssel kennen muss. Der Empfänger hat keine Möglichkeit diese Modifikation zu entdecken. Abhilfe könnte hierbei beispielsweise das Hinzufügen eines "message authentication codes" (MAC) schaffen.

Cipher Block Chaining Mode (CBC)

Im CBC Modus wird der Klartextblock mit dem vorherigen Chiffretextblock XOR-verknüpft. Durch diese Verknüpfung ist jeder Block direkt abhängig vom Ergebnis aller vorherigen Blöcke:

Verschlüsselungsmodus CBC
Diese Darstellung verdeutlicht die Funktionsweise des Verschlüsselungsmode Cipher Block Chaining Mode (CBC). [2]
Durch den CBC Modus können identische Klartextblöcke zu verschiedenen Chiffretextblöcken verschlüsselt werden, insofern mindestens ein Vorläuferblock unterschiedlich ist. Um bei zwei gleichen ersten Klartextblöcken unterschiedliche Chiffretextblöcke zu erhalten, wird ein so genannter Initialisierungsvektor (IV) eingesetzt. Es handelt sich hierbei um einen Block mit Zufallsdaten, der das fehlende Ergebniss des nicht existenten vorhergehenden ("nullten") Chiffretextblocks kompensiert. Eine Geheimhaltung des IVs ist meist nicht erforderlich.

In vielen Betriebsmodi ist es wichtig, dass ein Initialisierungsvektor niemals mehrfach mit dem selben Schlüssel verwendet wird. Im den Betriebsmodi CTR und OFB zerstört die Wiederverwendung eines IVs beispielsweise komplett die Sicherheit.

Der Header eines (verschlüsselten) Private Keys (z.B. zur Absicherung einer SSH Verbindung oder zur Nutzung mit OpenPGP) enthält beispielsweise den IV hinter dem Cipher (AES-128-CBC):

Private Key Header
Private Key Header mit Initialisierungsvektor (IV).

Am Beispiel des CBC Modus möchte ich kurz noch auf das "Padding" eingehen. Es handelt sich hierbei primär um eine Möglichkeit, unvollständige Blöcke aufzufüllen. Eine Nachricht lässt sich nicht immer exakt durch die Blockgröße teilen, am Schluss wird häufig ein Block entstehen, der unvollständig ist. Für den Verschlüsselungs-Algorithmus wird jedoch vorausgesetzt, dass die Blöcke vollständig sind. Padding löst dieses Problem auf verschiedene Möglichkeiten, z.B.:

  • es wird ein Trennzeichen definiert, anschließend wird der Block mit Nullen aufgefüllt, oder
  • der Block wird mit Nullen aufgefüllt, am Schluss des letzten Blocks steht die Anzahl der hinzugefügten Füllbits.

Eine andere Möglichkeit ist auch das häufig verwendete "Ciphertext Stealing".

Der Cipher Feedback Mode (CFB)

Den Cipher Feedback Mode fand ich Anfangs etwas schwierig nachvollziehbar. Der CFB Modus wird verwendet, wenn Nachrichten verschlüsselt werden sollen, deren Länge kein Vielfaches der Blocklänge ist. In diesem Fall kann die Blockchiffre im Cipher Feedback Mode als "selbstsynchronisierende Stromchiffre" verwendet werden.

Ein schönes Beispiel zur Verdeutlichung kann eine Tastatur sein: Bei der verschlüsselten Übertragungen der Tastaturanschläge ist es nicht sinnvoll, immer erst so viele Tastendrücke abzuwarten, bis ein Block vollständig ist. Der Algorithmus muss in der Lage sein, jedes Zeichen sofort zu übertragen. Hier kommt der CFB Modus ins Spiel:

Verschlüsselungsmodus CFB
Diese Darstellung verdeutlicht die Funktionsweise des Verschlüsselungsmode Cipher Feedback Mode (CFB). [3]
Man muss sich das System wie ein Schieberegister vorstellen: Zu Beginn wird das Register mit dem Initialisierungsvektor gefüllt und als Block komplett verschlüsselt. Anschließend wird der Klartext, der auch kürzer als die Blockgröße sein kann mit dem verschlüsselten IV XOR-verknüpft. Das Ergebnis ist der erste Ciphertextblock.

Wird beispielsweise ein Bit Klartext verschlüsselt, wird das Schieberegister mit dem letzten Bit des Chiffretextblocks um eins nach links verschoben. Das daraus resultierende Register wird anschließend wieder verschlüsselt und mit dem nächsten Klartextblock XOR-verknüpft.

Output Feedback Mode (OFB)

Der Output Feedback Mode hat einige Ähnlichkeit mit dem Cipher Feedback Mode:

Verschlüsselungsmodus OFB
Diese Darstellung verdeutlicht die Funktionsweise des Verschlüsselungsmode Output Feedback Mode (OFB). [4]
Der OFB Modus hat den großen Vorteil, dass der Rückkopplungsmechanismus vollkommen unabhängig vom Klartext- und Chiffretextstrom ist. Dies ermöglicht es, den Großteil der Arbeit bereits vorab berechnen zu können, noch bevor der Klartext bekannt ist.

In diesem Modus wird das Schieberegister, anders als beim Cipher Feedback Mode stets n Positionen nach links verschoben.

Counter Mode (CTR)

Größe Besonderheit im Vergleich zu den vorherigen Betriebsmodi ist die Berechnung des Initialisierungsvektors, im CTR Modus wird dieser bei jedem Block neu generiert. Er setzt sich aus einem Zufallswert (Nonce) kombiniert mit einem Zähler zusammen. Der Zähler wird bei jedem Block um eins erhöht.

Verschlüsselungsmodus CTR
Diese Darstellung verdeutlicht die Funktionsweise des Verschlüsselungsmode Counter Mode (CTR). [5]
Der Counter Mode hat viele Gemeinsamkeiten mit dem vorherigen OFB Mode, durch den berechenbaren IV hat man hier jedoch wahlfreien Zugriff auf jeden verschlüsselten Block. Weiterhin können sämtliche Ver- und Entschlüsselungsoperationen parallel durchgeführt werden. Sinnvoll ist dies immer dann, wenn es notwendig ist, auch Teile einer Chiffrats entschlüsseln können zu müssen ohne das Chiffrat vorher vollständig zu entschlüsseln.

Der fur https Verbindungen immer beliebter werdende AES-128/256-GCM (Galois/Counter Mode) Cipher ist Beispielsweise eine Kombination des Counter Mode mit einer Authentisierung.

Welcher Verschlüsselungsmodus ist der Beste?

Leider gibt es nicht den besten, für alle Anwendungsfälle passenden Modus. Jeder Modus hat seine Stärken und Schwächen, je nach Anwendungsfall.

Im ECB Modus werden keine Klartextmuster verborgen, weiterhin lässt sich der Klartext durch die Manipulationen oder Entfernung einzelner Blöcke leicht unerkannt verändern. Vorteil ist jedoch die Möglichkeit der Parallelisierung. Fur die meisten alltäglichen Anwendungsfälle wird dieser Modus jedoch ungeeignet sein, etwa zur Verschlüsselung von Sprache. Ein im ECB Modus verschlüsselter Buchtext wird sich trotz AES Verschlüsselung mit einem sicheren Passwort extrem leicht statistisch auswerten und wahrscheinlich auch in absehbarer Zeit "knacken" lassen.

Der CBC Modus hat viele Stärken, wie beispielsweise das Verstecken der Klartext Muster, die Verschlüsselung lässt sich jedoch nicht parallelisieren (die Entschlüsselung dagegen schon). Der CBC Modus eignet sich am besten für die Verschlüsselung von Dateien, viele Verschlüsselungs-Anwendungen verwenden diesen Modus als Standard.

Der CFB Modus eignet sich primär für die Verschlüsselung von Zeichenströmen. Wichtig ist hierbei jedoch die Konsequente Nutzung unterschiedlicher IVs je Einsatz des Modus.

Aufgrund der in den letzten Jahren bekannt gewordenen Angriffsmöglichkeiten bei https Verbindungen etabliert sich der Galois/Counter Mode zunehmend im Bereich der Webverschlüsselungen.

In diesem Artikel bin ich nicht auf Betriebsmodi für Festplattenverschlüsselungen eingegangen, vielleicht werde ich dies jedoch in einem weiteren Post erläutern. Kurzfassung: Empfehlenswert ist für diesen Anwendungszweck der XTS Mode.

Bildnachweis:

  • Beitragsbild: © buchachon - Fotolia.com
  • [1] Das Bild ist Public Domain / Quelle: https://en.wikipedia.org/wiki/File:ECB_encryption.svg
  • [2] Das Bild ist Public Domain / Quelle: https://en.wikipedia.org/wiki/File:CBC_encryption.svg
  • [3] Das Bild ist Public Domain / Quelle: https://en.wikipedia.org/wiki/File:CFB_encryption.svg
  • [4] Das Bild ist Public Domain / Quelle: https://en.wikipedia.org/wiki/File:OFB_encryption.svg
  • [5] Das Bild ist Public Domain / Quelle: https://en.wikipedia.org/wiki/File:CTR_encryption.svg

2 Gedanken zu „Verschlüsselungsmodus im Detail / Empfehlung“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert