|
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
|