2 Kryptographie mit symmetrischen Schlüsseln
2.1 Algorithmen der Blockchiffren

Blockchiffren transformieren eine Gruppe von Symbolen des Klartextes in eine Gruppe von Symbolen des Geheimtextes. So wird die Verschlüsselung des Klartextes blockweise realisiert.

Die Symbole des Klartextes werden in Blöcke gruppiert und eine kryptographische Transformation wird dann mittels des Schlüssels angewendet. Das Ergebnis der Verschlüsselung ist ein Block des Geheimtextes, der die Größe des Klartextes besitzt.

Die Größe des Klartextes muss dem Mehrfachen der Blocklänge nicht genau entsprechen. Dann wird üblicherweise der letzte Block durch Padding gefüllt. In Abhängigkeit vom Betriebsmodus muss jedoch kein Padding erforderlich sein. Das Prinzip der Ver- und Entschlüsselung auf der Basis der Blockchiffre ist auf dem folgenden Bild gezeigt.

2.2 Modell der Blockchiffre

Die meisten Blockchiffren arbeiten in einem iterierten Modus. Das heißt, dass die Verschlüsselung über viele Runden erfolgt. Jede Runde wiederholt eine Reihe von Operationen mit den Daten mittels eines unterschiedlichen „Subschlüssels“, der von dem ursprünglichen Schlüssel abgeleitet wurde. Die Operationen in jeder Runde umfassen normalerweise eine Substitution, Permutation und Erweiterung von Schlüsseln. Diese Chiffren sind als Substitutions-Permutations-Netzwerke (SPN, engl. substitution-permutation network) und Feistelchiffren bekannt. Weil die Substitution häufig der einzige nichtlineare Teil der meisten Chiffren ist, werden S-Boxen (engl. substitution box) sehr sorgfältig gewählt werden, um einen guten Schutz gegen kryptographische Angriffe zu gewährleisten.

Die Entschlüsselung erfolgt analogisch. Dabei wird auf Blöcke des Geheimtextes dieselbe Transformation mittels des gleichen Schlüssels (bei symmetrischen Kryptosystemen) wie bei der Verschlüsselung angewendet. Das Ergebnis dieses Prozesses sind entschlüsselte Blöcke des Klartextes.

Typischerweise haben die Blöcke des Klar- und Geheimtextes 64 oder 128 Bits.

Vorteile der Blockchiffren:

- hohe Diffusion
- Immunität gegen Verfälschung (es ist schwierig, Symbole hinzuzufügen, ohne entdeckt zu werden)

Die meistverwendeten Algorithmen der Blockchiffren sind:

- Data Encryption Standard (DES)
- Advanced Encryption Standard (AES)

Es wird nicht empfohlen, dieselben Bits des geheimen Schlüssels zur Verschlüsselung der gleichen Teile des Klartextes zu verwenden. Wenn ein Algorithmus für mehrere identische Blöcke des Klartextes angewendet wird, werden mehr identische Blöcke des Geheimtextes erzeugt. Es stehen Möglichkeiten zur Verfügung, die Blöcke des Klartextes mit den Blöcken des Geheimtextes zu verdecken und zu mischen, die den Angriffen durch Modifizierung der Blöcke vorbeugen. Diese Methoden werden als Betriebsmodi der Blockchiffren bezeichnet.

## Betriebsmodi der Blockchiffren

Blockchiffren können auf verschiedene Art und Weise für die Geheimhaltung und Fehlerbehebung eingesetzt werden. Die Wahl des Betriebsmodus beeinflusst die Geschwindigkeit, die Geheimhaltung und die Fehlerfortpflanzung.

ECB-Modus (Electronic Code Book)

Dieser Modus stellt die grundlegende Chiffre ohne jede Modifizierung dar. Die Nachricht wird in Blöcke aufgeteilt und jeder Block des Klartextes wird gesondert, unabhängig von anderen verschlüsselt. Daher gibt es keine gegenseitige Abhängigkeit zwischen den Blöcken und als Folge davon wird dieser Modus nicht empfohlen. Die Anwendung dieses Modus bringt einige Nachteile:

- verbleibende offene Struktur des Klartextes
- Empfindlichkeit gegen Angriffe durch Modifizierung der Blöcke (sie können umgestellt werden und ihre Umstellung oder Wiederholung kann die Nachricht ändern)
- Möglichkeit der Ausnutzung eines mit demselben Schlüssel verschlüsselten Geheimtextes als Quelle für Angreifer

Eine typische Schwachstelle der ECB-Verschlüsselung ist die Kodierung eines Bitmap-Bildes (z. B. eine bmp-Datei). Nicht einmal ein so starker Verschlüsselungsalgorithmus, der den ECB-Modus verwendet, kann seinen Inhalt nicht effizient verdecken.

2.3 Verschlüsselung eines bmp-Bildes im ECB-Modus

CBC-Modus (Cipher Block Chaining)

Der CBC-Modus kombiniert („verkettet”) Blöcke des Klartextes mit vorigen Blöcken des Geheimtextes. Dazu ist ein Initialisierungsvektor IV erforderlich, der mit dem ersten Block des Klartextes kombiniert wird.

Vor der Verschlüsselung an sich wird die Operation XOR mit dem Vektor IV und dem ersten Block des Klartextes durchgeführt. Das Ergebnis wird danach verschlüsselt und damit erhält man den ersten Block des Geheimtextes. Für die weiteren Blöcke wird der vorige Geheimtext anstatt IV angewendet. Die Verkettung führt dazu, dass der Block gj des Geheimtextes vom Block kj des Klartextes und vom vorigen Block des Geheimtextes gj-1 abhängig ist. So kann man sagen, dass der Block gj des Geheimtextes vom aktuellen und allen vorigen Blöcken des Klartextes abhängt.

2.4 Ver- und Entschlüsselung im CBC-Modus

Die Verwendung des CBC-Modus löst die Nachteile des ECB-Modus, aber hat zwei eigene Nachteile:

- Parallele Verschlüsselung ist nicht möglich. Der Block kj+1 kann nicht vor oder während der Verschlüsselung des Blocks kj verschlüsselt werden, weil man noch gj braucht. Eine parallele Entschlüsselung ist jedoch möglich: Der Block kj des Klartextes erfordert die Blöcke gj und gj-1 des Geheimtextes.
- Fehlerfortpflanzung. Ein Fehler in einem einzigen Bit während der Übertragung des Blocks gj wird nicht nur zu einem Fehler im Block kj, sondern auch zu einem Fehler im Block kj+1 führen. Jedoch nur ein Bit des Block kj+1 wird beeinflusst. Dies wird als eine „beschränkte Fehlerfortpflanzung” bezeichnet.

CFB-Modus (Cipher Feedback)

Laut der Definition von NIST ist der CFB-Modus ein Vertraulichkeitsmodus, der die Rückkopplung der nacheinander folgenden Segmente des Geheimtextes in die Eingangsblöcke des Klartextes einschließt, um Ausgangsblöcke zu generieren. Mit diesen Blöcken und mit dem Klartext wird dann die XOR-Operation ausgeführt, um den Geheimtext zu erzeugen. Ein wichtiger Parameter in diesem Modus ist die ganze Zahl s, wobei 1 ≤ s ≤ L. L ist dabei die Länge des Blocks.

Der erste Eingangsblock ist der Initialisierungsvektor IV. Im Prinzip nimmt der CFB-Verschlüsselungsprozess als Eingang die L-s niedrigstwertigen Bits des vorigen Eingangs zusammen mit den s Bits des vorigen Geheimtextes und verschlüsselt sie. Dann werden mit den s höchstwertigen Bits und den entsprechenden s Bits des Blocks des Klartextes die XOR-Operation ausgeführt, um den nächsten Block des Geheimtextes zu erzeugen. Dieser Modus wird auf dem folgenden Bild gezeigt.

2.5 CFB-Verschlüsselung

Falls s=1, transformiert der CFB die Blockchiffre in eine Stromchiffre und verschlüsselt die einzelnen Bits.

Dieser Modus kann wie der CBC-Modus nicht parallel eingesetzt werden. Das heißt, dass mehrere Chiffreoperationen bei der Verschlüsselung nicht durchgeführt werden können, aber bei der Entschlüsselung schon.

Was die Fehlerfortpflanzung betrifft, ein Fehler in einem Bit des Geheimtextes verursacht einen Fehler nicht nur in dem entsprechenden Block des Klartextes, jedoch auch Fehler in den folgenden Blöcken des Klartextes.

OFB-Modus (Output Feedback)

Der OFB-Modus arbeitet wie folgt:

Der erste Eingangsblock ist der Initialisierungsvektor IV. Der entsprechende Eingangsblock wird verschlüsselt und die s höchstwertigen Bits des Ausgangs dieser Verschlüsselung werden auf zwei Weisen verwendet: als Eingang des nächsten Blocks und als Summand mit s Bits des Klartextblocks für die XOR-Summe. So wird der Ergebnisblock des Geheimtextes erzeugt.

OFB ist tatsächlich eine Form der Stromchiffre. Der OFB-Modus wird auf dem folgenden Bild gezeigt.

2.6 OFB-Verschlüsselung

Es ist offensichtlich, dass Fehler in diesem Modus nicht fortgepflanzt werden - ein Fehler in einem Bit in gj beeinflusst nur das entsprechende Bit in kj.

Der Hauptvorteil des OFB-Modus im Vergleich mit dem CFB-Modus ist der folgende:

Falls IV bekannt ist, können die Ausgangsblöcke vorverarbeitet werden, bevor man den Klartext (oder Geheimtext bei der Entschlüsselung) kennt.

Der OFB-Modus hat die folgenden Nachteile:

Weder die Ver- noch Entschlüsselung können parallel ausgeführt werden, weil jeder Eingangsblock von den Ergebnissen der vorigen Verschlüsselungsfunktion abhängt.

Weil es hier keine Fehlerfortpflanzung gibt, kann ein aktiver Angreifer den Klartext ändern, um Auswirkungen auf den Geheimtext zu beobachten.

CTR-Modus (Counter)

Der CTR-Modus basiert auf der Verschlüsselung einer Menge von Eingangsblöcken, die als Zähler bezeichnet werden. Mit den Ausgangsblöcken und dem Klartext wird dann die XOR-Operation ausgeführt, um den Geheimtext zu generieren, und umgekehrt. Nach der Initialisierung des Zählers werden die weiteren Zählerblöcke mittels der Inkrementfunktion abgeleitet. Der Zähler ist üblicherweise in zwei Sektionen aufgeteilt: Nummer der Nachricht und Nummer des Blocks im Rahmen der Nachricht. Dabei ist es entscheidend, dass sich der Wert des Zählers für den gleichen Schlüssel nicht wiederholt. Der CTR-Modus wird auf dem folgenden Bild gezeigt.

2.7 CTR-Verschlüsselung

In diesem Modus werden Fehler nicht fortgepflanzt - falls ein Block infolge eines Übertragungsfehlers modifiziert ist, wird nur dieser Block falsch entschlüsselt.

Hauptvorteile des CTR-Modus:

Sowohl CTR-Verschlüsselung als auch CTR-Entschlüsselung können parallel ausgeführt werden - es gibt keine Verbindung zwischen den einzelnen Prozessen.

Eine Vorverarbeitung ist möglich: die Verschlüsselungsfunktionen können verwendet werden, bevor man den Klartext (oder Geheimtext bei der Entschlüsselung) kennt.

Hauptnachteil:

Wie beim OFB-Modus kann ein Angreifer den Klartext kontrolliert ändern.

Allgemeine Bemerkungen

Der CBC-Modus ist der Beste für eine allgemeine Verschlüsselung von Dateien oder Paketen. Wenn eine hohe Geschwindigkeit der Verschlüsselung gefordert wird, sollte man den CTR-Modus wählen. Wenn Fehlerfortpflanzung vermieden werden soll und es Rauschen im Übertragungskanal gibt, ist OFB eine gute Variante. Und wenn es ein Risiko gibt, dass ein Byte oder ein Bit gelöscht wird, sollte der CFB-Modus mit s=8 oder s=1 eingesetzt werden.