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