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:
zugeordnet
werden, iterativ weitere 64 Worte
nach folgender Vorschrift:17

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.
handeln, dann initialisiere
mit den
Konstanten:

dem Vektor
zu.
), im speziellen Fall von SHA-1 genau
Runden
(
), nach folgender Vorschrift:

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:

, welche letztlich den Hash-Wert
dieses Blocks ausmachen,
wiefolgt:18

SHA-2 Bei den SHA-2 Hash-Funktionen ist dieses Prinzip erhalten geblieben, die Änderungen liegen im Detail [NIS08]:
wurde auf
erweitert, genau wie auch
die Zwischenwerte
auf
.
verwendet.