Hash-Funktionen (SHA-256)

Erstmal einfachWas ist ein Hash, in einem Satz?

Stell dir einen Mixer vor: Du wirfst irgendwas rein (ein Wort, ein Buch, einen Film) und raus kommt immer ein gleich großer, bunter Smoothie. Gleiche Zutaten → gleicher Smoothie. Eine winzige andere Zutat → komplett anderer Smoothie. Und das Wichtigste: aus dem Smoothie kannst du die Zutaten nicht zurückbekommen.

Genau das macht eine Hash-Funktion mit Daten — sie erzeugt einen „Fingerabdruck", der immer gleich groß ist, egal wie groß die Eingabe.

Etwas formaler: eine Hash-Funktion macht aus einem beliebig langen Text einen Fingerabdruck fester Länge. SHA-256 liefert immer 256 Bit (= 64 Hex-Zeichen). Drei zentrale Eigenschaften: deterministisch, einweg (nicht umkehrbar) und kollisionsresistent (zwei verschiedene Eingaben sollten praktisch nie denselben Hash ergeben).

Wofür? Passwortspeicherung, Integritätsprüfung von Downloads, digitale Signaturen, Blockchains, Git-Commits – überall wo man prüfen will „hat sich etwas verändert?“, ohne den Inhalt selbst zu speichern.
Warum eigentlich?Warum braucht man das überhaupt?

Stell dir vor, eine Website speichert dein Passwort im Klartext. Wenn die Datenbank geklaut wird, kennen die Angreifer dein Passwort — und wahrscheinlich auch dein E-Mail-Passwort, weil viele Leute Passwörter wiederverwenden.

Speichert die Website stattdessen nur den Hash, kann sie beim Login prüfen „ergibt das eingegebene Passwort denselben Hash?" — ohne das Passwort selbst je zu kennen. Bei einem Datenleck haben die Angreifer nur die Fingerabdrücke, nicht die Originale.

Dieselbe Idee löst noch mehr Probleme: „Wurde diese Datei unterwegs verändert?", „Sind diese zwei Dokumente identisch, ohne dass ich sie beide herumschicken muss?", „Wie verkette ich Blöcke fälschungssicher zu einer Blockchain?"

Avalanche-Effekt: 0 von 64 Hex-Zeichen sind unterschiedlich (0 %). Schon eine winzige Änderung an der Eingabe verändert den Hash komplett – das ist gewollt und macht Hashes für Sicherheitszwecke nutzbar.
Tiefer reinWarum genau die Hälfte? (Avalanche, formal)

Eine ideale kryptografische Hash-Funktion verhält sich wie eine zufällige Orakel-Funktion: jedes Bit der Ausgabe ist mit Wahrscheinlichkeit 50 % gesetzt, unabhängig von der Eingabe. Ändert sich auch nur ein Eingabe-Bit, kippt jedes Ausgabe-Bit mit Wahrscheinlichkeit 50 % — das ist das Strict Avalanche Criterion (SAC).

In Hex-Zeichen umgerechnet: zwei zufällige Hashes stimmen pro Zeichen nur mit Wahrscheinlichkeit 1/16 überein. Erwartete Übereinstimmung bei 64 Zeichen: 4 — also rund 94 % unterschiedlich. Genau das siehst du oben.

Eigenschaften im Überblick

  1. Deterministisch: Gleiche Eingabe → immer gleicher Hash.
  2. Einweg: Aus dem Hash lässt sich die Eingabe nicht zurückrechnen – nur durch Raten (Brute-Force).
  3. Kollisionsresistent: Es ist praktisch unmöglich, zwei verschiedene Eingaben mit demselben Hash zu finden.
  4. Schnell zu berechnen: Aber für Passwörter nimmt man absichtlich langsame Varianten (bcrypt, scrypt, Argon2).
Häufiger Denkfehler„Aber 2²⁵⁶ Möglichkeiten sind doch unknackbar…“

Stimmt für direktes Erraten — aber nicht für Kollisionen. Dank des Geburtstagsparadoxons brauchst du nur etwa √(2²⁵⁶) = 2¹²⁸ Versuche, um irgendeine Kollision zu finden. Das ist immer noch astronomisch viel, aber halb so viele Bits wie naiv gedacht.

Deshalb gilt die Faustregel: ein n-Bit-Hash bietet nur n/2 Bit Kollisionssicherheit. Genau aus diesem Grund ist SHA-1 (160 Bit → 80 Bit Sicherheit) heute zu schwach.

Tiefer reinWie ist SHA-256 innen aufgebaut?

SHA-256 gehört zur Familie der Merkle–Damgård-Konstruktionen: die Eingabe wird gepaddet, in 512-Bit-Blöcke geteilt, und jeder Block wird zusammen mit dem bisherigen Zustand durch eine Kompressionsfunktion geschickt. Die besteht aus 64 Runden mit Bit-Rotationen, XORs, modularen Additionen und festen Konstanten (abgeleitet aus den Kubikwurzeln von Primzahlen).

Die Konstruktion hat eine bekannte Schwäche: Length-Extension. Aus H(secret ‖ msg) kann ein Angreifer H(secret ‖ msg ‖ padding ‖ extra) berechnen, ohne das Secret zu kennen. Lösung: HMAC statt nackter Hash.

Achtung: MD5 und SHA-1 gelten als gebrochen – für Sicherheit immer mindestens SHA-256 nehmen. Für Passwörter nie reine Hashes, sondern Argon2 oder bcrypt mit Salt.
Warum eigentlich?Warum für Passwörter ein „langsamer“ Hash?

SHA-256 ist mit Absicht schnell — eine moderne GPU rechnet Milliarden pro Sekunde. Genau das wollen Angreifer beim Brute-Forcengeleakter Passwort-Datenbanken. Algorithmen wie Argon2, scrypt oder bcrypt sind absichtlich langsam und brauchen viel Speicher, damit massenhaftes Raten unbezahlbar wird.

Plus Salt: ein zufälliger Wert pro Passwort sorgt dafür, dass zwei Nutzer mit demselben Passwort trotzdem unterschiedliche Hashes haben — Rainbow Tables nutzlos.

GeschichteWie alt ist SHA-256?

SHA-256 wurde 2001 von der NSA entworfen und vom NIST standardisiert (FIPS 180-2), als Teil der SHA-2-Familie. Vorgänger SHA-1 (1995) wurde 2017 öffentlichkeitswirksam gebrochen, als Google die erste praktische Kollision (SHAttered) demonstrierte. SHA-2 gilt weiterhin als sicher; daneben existiert seit 2015 SHA-3 mit einer ganz anderen Konstruktion (Keccak-Schwamm).