next up previous
Nächste Seite: Die Schlüsselgenerierung Aufwärts: Der Algorithmus Vorherige Seite: Eigenschaften

Die Verschlüsselungsfunktion

Zur Verschlüsselung werden auf jeden einzelnen Block nacheinander die 32 Rundenfunktionen angewandt.

\begin{eqnarray*}
B_0 & = & IP(plaintext) \\
B_{i+1} & = & Round_i(B_i,Key) \qquad i=0, .., 31 \\
ciphertext & = & FP(B_{32})
\end{eqnarray*}

Dabei bezeichnen $IP$ und $FP$ schlüsselunabhängige Permutationen der übergebenen Blöcke. Sie haben keine kryptographische Bedeutung sondern sollen eine effizientere Implementation gestatten, auf die später noch eingegangen wird. $FP$ ist dabei die Inverse von $IP$.

Serpent verwendet acht 4x4 S-Boxen, d.h. injektive Funktionen von und auf die Menge der 4-Bit-Folgen, welche von den Entwicklern in der Algorithmusspezifikation angegeben sind. Sie wurden deterministisch aus den DES S-Boxen generiert, um so die Sicherheitseigenschaften dieser bereits sehr gut untersuchten S-Boxen zu übernehmen. So garantieren sie unter anderem, daß sich bei jeder Änderung eines Eingabe-Bits mindestens zwei Ausgabe-Bits verändern. Jede Runde verwendet jeweils eine der S-Boxen in 32-fach paralleler Ausführung (32 * 4 Bit = 128 Bit = Blockgröße).

\begin{eqnarray*}
Round_i(X, Key) & = & LT(S_{i \; mod \; 8}(X \oplus K_i)) \qq...
...\\
Round_{31}(X, Key) & = & S_0(X \oplus K_{31}) \oplus K_{32}
\end{eqnarray*}

$S_i$ bezeichnet hierbei die 32-fach parallele Anwendung der i-ten S-Box, die $K_i$ sind die einzelnen 128-Bit Rundenschlüssel, die aus dem originalen 256-Bit Schlüssel ($Key$) generiert werden und $LT$ bezeichnet eine lineare Transformation.

Zunächst fällt auf, daß sich die letzte Runde von allen vorhergehenden unterscheidet. Würde man hier wie in den anderen Runden die lineare Transformation verwenden, könnte diese von einem Angreifer problemlos wieder rückgängig gemacht werden, da sowohl die Transformation als auch ihre Inverse in der Algorithmusspezifikation angegeben sind. In den anderen Runden dient die lineare Transformation hauptsächlich zur Erzeugung des sogenannten Lawineneffekts, d.h. daß sich die Änderung eines einzelnen Eingabe-Bits sehr schnell auf sehr viele Ausgabe-Bits auswirkt. Die lineare Transformation $LT(X)$ kann wie folgt durchgeführt werden:

\begin{eqnarray*}
X_0, X_1, X_2, X_3 & = & FP(X) \\
X_0 & = & X_0 <<< 13 \\
...
...\
X_2 & = & X_2 <<< 22 \\
LT(X) & = & IP(X_0, X_1, X_2, X_3)
\end{eqnarray*}

Die Eingabe $X$ wird also zurückpermutiert und in vier 32-Bit Wörter zerlegt. Diese werden dann rotiert ($<<<$), geshiftet ($<<$), XOR-verknüpft und am Ende aneinandergesetzt und wieder zurechtpermutiert. Da nur einfache bitweise Operationen verwendet werden, läßt sich die Transformation einfach und effizient in Soft- und Hardware implementieren. Über diese lineare Transformation stellen die Entwickler sicher, daß nach drei Runden jedes Eingabe-Bit jedes Ausgabe-Bit beeinflußt hat.


next up previous
Nächste Seite: Die Schlüsselgenerierung Aufwärts: Der Algorithmus Vorherige Seite: Eigenschaften
Michael Ueckerdt 2002-08-23