Zur Verschlüsselung werden auf jeden einzelnen Block nacheinander die 32 Rundenfunktionen angewandt.
Dabei bezeichnen und
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.
ist dabei die Inverse von
.
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).
bezeichnet hierbei die 32-fach parallele Anwendung der i-ten S-Box, die
sind die einzelnen
128-Bit Rundenschlüssel, die aus dem originalen 256-Bit Schlüssel (
) generiert werden und
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 kann wie folgt durchgeführt werden:
Die Eingabe 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.