Zu den Mitgliedern dieser Hash-Familie, welche von R. RIVEST entwickelt wurde, gehören unter
anderem der MD2…MD5, SHA-1 und SHA-2 [Riv92, NIS08, ISO04]. Am Beispiel des SHA-1 soll
deren prinzipielle Arbeitsweise verdeutlicht werden, wofür in Abbildung 2.2 die zugehörige
Kompressionsfunktion dargestellt ist.
Der SHA-1 ist für 32-Bit Architekturen optimiert, d. h. alle Variablen in Abbildung 2.2 sind von
entsprechender Breite. Die (Eingangs-) Blockbreite beträgt 64 Byte, also 16 Worte zu je 32-Bit.
Ein Hash-Wert
besteht aus 160-Bit (20 Byte, 5 Worte) und wird iterativ in 80 sogenannten
Runden erzeugt. Speziell beim SHA-1 (nicht so bei SHA-2) werden jeweils 20 Runden
mit den gleichen Konstanten und Funktionen realisiert, so daß man die Darstellung auf
4 Funktionsblöcke
reduzieren kann. Der Algorithmus kann folgendermaßen beschrieben
werden:
Darin steht für „Rotate Left” und der zugehörige Exponent für die Anzahl der Bits,
um die es nach links zu rotieren gilt.
wobei Additionen immer modulo ausgeführt werden. Die Konstanten
sind definiert
als:
Die Funktionen , welche für jeweils 20 Runden verwendet werden, sind
folgendermaßen spezifiziert:
SHA-2 Bei den SHA-2 Hash-Funktionen ist dieses Prinzip erhalten geblieben, die Änderungen liegen im Detail [NIS08]: