Kryptografische Hash-Funktionen bilden das Rückgrat von Kryptoverfahren und -algorithmen [39]. Wie die aus der Informatik bekannten Hash-Funktionen auch, bilden sie eine große Eingangsmenge {𝑥} eindeutig (deterministisch) auf eine viel kleinere Ausgangsmenge 𝑦 = H(𝑥) ab. Sie haben jedoch folgende ergänzende Eigenschaften, welche deren algorithmische Komplexität mit dem jeweiligen Stand der Technik in Verbindung bringen:
Insbesondere ältere Hash-Funktionen, wie z. B. der MD5 können dies heute nicht mehr gewährleisten, aber auch der SHA-1 gilt seit 2005 als „geknackt”. Alternativen wie SHA-256 oder SHA-512 (auch kurz SHA-2 genannt) stehen zwar zur Verfügung, werden aber noch nicht überall konsequent genutzt.15
Wirkprinzip Die Berechnung des Hash-Wertes 𝑦 erfolgt üblicherweise durch Zerlegung des Eingangs-Vektors 𝑥 in 𝑘 Blöcke fester Breite, die dann iterativ mit Hilfe einer nichtlinearen Kompressionsfunktion C verarbeitet werden. Abbildung 13 zeigt die unter dem Namen Merkle/Damgård-Konstruktion bekannte Struktur [40, 14].16 Für jeden Zwischenwert gilt ausgehend von 𝑦0 = IV die Gleichung 𝑦𝑖 = C(𝑦𝑖−1,𝑥𝑖) und so für das Ergebnis: 𝑦 = H(𝑥) = 𝑦𝑘.
Zu den Mitgliedern dieser Hash-Familie, welche von R. RIVEST entwickelt wurde, gehören unter anderem der MD2…MD5, SHA-1 und SHA-2 [55, 44, 27]. Am Beispiel des SHA-1 soll deren prinzipielle Arbeitsweise verdeutlicht werden, wofür in Abbildung 14 die zugehörige Kompressionsfunktion C dargestellt ist.
Der SHA-1 ist für 32-Bit Architekturen optimiert, d. h. alle Variablen in Abbildung 14 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 𝑓1,…,𝑓4 reduzieren kann. Der Algorithmus kann folgendermaßen beschrieben werden:
Erzeuge im „Message Schedule” aus den 16 Eingangsworten, welche 𝑊0,…,𝑊15 zugeordnet werden, iterativ weitere 64 Worte 𝑊𝑖 nach folgender Vorschrift:17

Darin steht rol für „Rotate Left” und der zugehörige Exponent für die Anzahl der Bits, um die es nach links zu rotieren gilt.
Sollte es sich um den ersten Block 𝑥1 handeln, dann initialisiere 𝐻0,…,𝐻5 mit den Konstanten:

Berechne 80 Runden (0 ≤ 𝑡 ≤ 79), im speziellen Fall von SHA-1 genau 4 · 20 Runden (1 ≤ 𝑛 ≤ 4), nach folgender Vorschrift:

wobei Additionen immer modulo 232 ausgeführt werden. Die Konstanten 𝐾𝑡 sind definiert als:

Die Funktionen 𝑓1,…,𝑓4, welche für jeweils 20 Runden verwendet werden, sind folgendermaßen spezifiziert:

Berechne die Ergebniswerte (𝐻0,…,𝐻4), 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 [44]:
Die Anzahl der Bits im Hash-Wert wurde erhöht und entspricht dem jeweiligen Namen: SHA-224, SHA-256, SHA-384, SHA-512. Dazu gab es zwei wesentliche Modifikationen:19
Da jede Hash-Funktion für eine fixe (Eingangs-) Blockbreite konzipiert ist, muß man den letzten Block meist auf diese erweitern. Bei den standardisierten Hash-Algorithmen scheint sich folgende Vorgehensweise durchgesetzt zu haben: