Die Feistel-Chiffre

Grundlage von vielen heute verwendeten Produktalgorithmen sind sogenannte Feistel-Netzwerke. Das sind Produktalgorithmen, wo jeder Schritt, also jede Runde eine sogenannte Feistel-Runde ist:

Abb: Eine Runde in einem Feistel Netzwerk

Vor jeder Runde wird der Text in eine linke Hälfte und eine rechte eingeteilt. Dann wird auf die rechte Hälfte eine Funktion losgelassen, die Teile des Schlüssels bzw des sogenannten Rundenschlüssels zusätzlich als Parameter mitbekommt. Das Ergebnis wird mit XOR mit der linken Texthälfte verknüpft. Das Ergebnis ist dann die rechte Texthälfte für die nächste Runde. Die alte rechte Texthälfte wird die neue linke.

Die Frage, warum man diese Vorgehensweise Sinn macht, zeigt folgende Rechnung:

Seien die Rundenfunktionen mit fi gekennzeichnet, die Hälften mit Li und Ri. Dann gilt:

Li = Li XOR fi(Ri) XOR fi(Ri) = R(i+1) XOR fi(Ri)

Es folgt:

R(n-1)=Ln
L(n-1)=Rn XOR fn(R(n-1))
...
R0 = L1
L0 = R1 XOR f1(R0)

Wer also die Funktionen fi und die Rundenschlüssel kennt, kann den Klartext wieder erzeugen. Die Funktionen brauchen also nicht umkehrbar zu sein, was die Bandbreite möglicher Funktionen erheblich erweitert.

Beispiele für Feistelnetzwerke sind DES, FEAL, Blowfish.

Fragen, Anmerkungen, Kritik