Whirlpool (Algorithmus)
Whirlpool ist eine kryptographische Hashfunktion, die von Vincent Rijmen und Paulo S. L. M. Barreto entworfen wurde. Sie wurde nach der Whirlpool-Galaxie im Sternbild der Jagdhunde benannt. Whirlpool funktioniert mit Dateien bis zu 2256 Bit Größe und gibt einen Hash-Wert von 512 Bit aus. Bislang sind keine Schwächen des Algorithmus bekannt, was allerdings relativiert werden muss, da er bislang wenig untersucht wurde. Die Autoren haben erklärt, dass Whirlpool nicht patentiert ist und es nie sein wird. Whirlpool darf kostenlos zu jedem Zweck verwendet werden. Die Referenz-Implementierung ist gemeinfrei. Whirlpool gehört zu den vom Projekt NESSIE empfohlenen kryptografischen Algorithmen und wurde von der ISO mit ISO/IEC 10118-3:2004 standardisiert. FunktionenWhirlpool wurde nach der Square-Blockchiffre entwickelt und kann zu dieser Familie der Blockchiffre-Funktionen gezählt werden. Whirlpool ist eine Miyaguchi–Preneel-Konstruktion, welche auf dem substanziell modifizierten Advanced Encryption Standard basiert. Whirlpool nimmt eine Nachricht von jeder Länge kleiner als 2256-Bits und gibt eine 512-Bit zurück.[2] Die Entwickler setzten fest: „Whirlpool ist nicht patentiert (und wird auch nie). Die Chiffre kann kostenlos für alles verwendet werden“[3] VersionenDie originale Chiffre wurde unter dem Namen Whirlpool-0 veröffentlicht. Die erste Revision von Whirlpool hieß Whirlpool-T und die neuste Version Whirlpool in den folgenden Testvektoren.
StrukturDie Whirlpool Hashfunktion ist eine Merkle–Damgård-Konstruktion, welche auf der AES-ähnlichen Blockchiffre W in Miyaguchi–Preneel-Art basiert.[5] Die Blockchiffre W besteht aus einer statischen 8x8 Matrix aus Bytes von total 512-Bits. Der Verschlüsselungsvorgang beinhaltet die Erneuerung des Zustands von vier Rundenfunktionen über 10 Runden. Die vier Rundenfunktionen sind SubBytes (SB), ShiftColumns (SC), MixRows (MR) und AddRoundKey (AK). Während jeder Runde wird ein neuer Zustand generiert als: . SubBytesDie SubBytes-Operation verwendet eine nichtlineare Permutation unabhängig zu jedem Byte des Zustandes. Die 8-Bit S-Box besteht aus drei kleineren 4-Bit S-Boxen. ShiftColumnsDie ShiftColumns-Operation verschiebt zyklisch jeden Byte in eine neue Zeile des Zustands. Die Zeile j verschiebt seine Bytes nach j Positionen nach unten. MixRowsDie MixRows-Operation ist eine Multiplikation von jeder Reihe durch eine 8x8 Matrix über . Die Matrix wird so gewählt, dass die Zweignummer 9 ist, was dem Maximum entspricht. AddRoundKeyDie AddRoundKey-Operation verwendet bitweise XOR um einen Schlüssel hinzuzufügen berechnet durch die Key-Schedule des jetzigen Zustands. Die Key-Schedule ist identisch zur Verschlüsselung selbst, außer das die AddRoundKey-Funktion durch die AddRoundConstant-Funktion ersetzt wird, welche eine vorbestimmte Konstante in jeder Runde hinzufügt. ImplementationDie Entwickler stellen eine Referenzimplementation des Whirlpool-Algorithmus zur Verfügung, welche eine Version in C und in Java beinhalten.[5] Diese Referenzimplementationen wurden öffentlich freigegeben.[5] VerwendungZwei der größten Pioniere von kryptographischen Programmen, FreeOTFE und TrueCrypt implementierten Whirlpool schon 2005. VeraCrypt (Ein Abkömmling von TrueCrypt) unterstützt Whirlpool (die neuste Version) als Hash-Algorithmus.[6] Weblinks
Einzelnachweise
|