Skein
# Skein

Skein (englisch für „Strang“) bezeichnet eine Familie von kryptographischen Hashfunktionen und wurde von Niels Ferguson, Stefan Lucks, Bruce Schneier, Doug Whiting, Mihir Bellare, Tadayoshi Kohno, Jon Callas und Jesse Walker entwickelt. Skein war ein Kandidat im Wettbewerb für den zukünftigen Standard SHA-3, in dem er im Dezember 2010 die Runde der Finalisten erreichte.

## Aufbau

Speziell für Skein wurde die Konstruktionsmethode Unique Block Iteration (UBI) entwickelt, die die früher übliche Merkle-Damgård-Konstruktion ersetzt. UBI funktioniert ähnlich wie die HAIFA-Konstruktion. Die Nachricht wird erweitert und in Blöcke geteilt, die nacheinander verarbeitet werden. Jeder Nachrichtenblock wird zusammen mit einem Verkettungswert und einigen Verwaltungsdaten, unter anderem einem Zähler für die schon verarbeiteten Nachrichtenbits, in eine Kompressionsfunktion eingegeben, die den nächsten Verkettungswert liefert. Der letzte Verkettungswert wird durch einen weiteren Aufruf der Kompressionsfunktion finalisiert, was den Hashwert ergibt.

Skein verwendet eine Matyas–Meyer–Oseas-Kompressionsfunktion, die auf der Blockverschlüsselung Threefish basiert. Der Nachrichtenblock wird als Klartext und der Verkettungswert mit den Verwaltungsdaten als Schlüssel/Tweak eingegeben. Der nächste Verkettungswert entsteht durch XOR von Klar- und Schlüsseltext. Threefish verschlüsselt in 72 Runden bei einer Blockgröße von 256 oder 512 Bit. Für die Blockgröße 1024 Bit kommen 80 Runden zur Anwendung.

Das Design ist optimiert, um auf 64-Bit-Prozessoren eine hohe Performance zu erreichen. Bei einer Blockgröße von 512 Bit beträgt der Rechenaufwand auf einem Intel Core 2 Duo etwa 6 Zyklen pro Byte.

## Schwächen

Auf der zweiten SHA-3-Konferenz zeigten Dmitry Khovratovich, Ivica Nikolié und Christian Rechberger eine mögliche Schwäche in Threefish und der Kompressionsfunktion von Skein. Daraufhin passten die Autoren den Algorithmus geringfügig an.

