Home
IPSec
SSL
AES-Kandidaten

e-Mail an mich

Der Algorithmus Serpent

zurück     weiter

Serpent

Auch Serpent, eine Entwicklung von Ross Anderson, Eli Biham und Lars Knudsen, erreichte die AES-Endrunde der letzten fünf Kandidaten und belegte schließlich den zweiten Platz.

Prinzipiell erlaubt Serpent jede Schlüssellänge bis 256 Bit, wobei jedoch durch Padding immer auf 256 Bit ergänzt wird. Als Padding bezeichnet man das Anfügen definierter Bits um eine bestimmte Datenlänge zu erzielen. Im Falle von Serpent werden ein ´1´- und entsprechend viele ´0´ -Bits angefügt. Auch hier beträgt die Blocklänge 128 Bit und die Rundenzahl beträgt 32.

Ähnlich, wie bei DES, wird der Textblock zunächst einer Eingangspermutation unterzogen. Anschließend beginnen 32 Runden des Algorithmus, von denen die letzte allerdings leicht abgewandelt ist. In den Runden i = 0,...,30 wird der Textblock mit einem 128-Bit-Teilschlüssel Ki XOR-verknüpft und danach in Worte à 4 Bit aufgeteilt. Diese 32 Worte dienen nun parallel als Input für acht S-Boxen, die in 32-facher Kopie vorhanden sind. Es wird jeweils ein Eintrag der S-Box ausgewählt und die 4-Bit-Outputs werden anschließend wieder miteinander verknüpft. Jede S-Box wird dabei genau viermal benutzt, S-Box 0 z.B. wird in den Runden 0, 8, 16 und 24 benutzt. Nachdem die Outputs wieder zusammengefügt wurden, wird der Textblock einer Lineartransformation unterzogen.

Diese Lineartransformation wird in der 32. Runde, also Runde 31, nicht durchgeführt. Stattdessen wird der Textblock hier mit einem 33. Teilschlüssel K32 XOR-verknüpft. Nach Beendigung aller Runden wird eine Ausgangspermutation durchgeführt, die der Inversen der Eingangspermutation entspricht.

Zur Entschlüsselung wird der Algorithmus in umgekehrter Richtung durchlaufen und die Teilschlüssel werden ebenfalls in umgekehrter Reihenfolge benutzt. Außerdem werden statt der S-Boxen deren Inverse genutzt und auch die Lineartransformation wird in inverser Form genutzt.

Die 33 benötigten 128-Bit-Teilschlüssel Ki werden zunächst als 32-Bit-Worte k0 bis k131 gebildet. Hierzu werden 132 temporäre Variablen w0 bis w131 benötigt, die mit Hilfe des geheimen Schlüssels gesetzt werden. Dieser wird, falls er kürzer als 256 Bit ist, durch Padding auf eine Länge von 256 Bit gebracht. Anschließend wird der geheime Schlüssel in den 32-Bit-Worten w-8 bis w-1 gespeichert und die Variablen w0 bis w131 werden dann nach folgender Regel gesetzt:

                 wi          = (wi-8Å wi-5Å wi-3Å wi-1Åf – 1 Å i) <<< 11

mit            Å           XOR-Verknüpfung

                 x <<< y  Rotation nach links von x um y Positionen

                 f           goldener Schnitt =

Die Variablen w0 bis w131 dienen nun als Inputs für die acht S-Boxen, aus deren Outputs die Teilschlüssel zusammengesetzt werden. Es gilt:

                 {k0, k1, k2, k3}                = S3[{w0, w1, w2, w3}]

                 {k4, k5, k6, k7}                = S2[{w4, w5, w6, w7}]

                                             ...

                 {k128, k129, k130, k131} = S3[{w128, w129, w130, w131}]

und           Ki = {k4i, k4i+1, k4i+2, k4i+3}                       ,i = 0,…,32

Das Design von Serpent kann als äußerst konservativ angesehen werden, was von den Entwicklern von Serpent auch so beabsichtigt wurde. Die Geschwindigkeit von Serpent entspricht etwa der von DES, wobei die Sicherheit oberhalb von Triple-DES anzusiedeln ist, solange die Schlüssellänge hinreichend groß ist.

zurück     weiter

[Home] [IPSec] [SSL] [AES-Kandidaten] [Über mich] [Links] [Gästebuch]