Begriff
Hashing (Hash Function)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Ein Fleischwolf für Daten. Du wirfst ein ganzes Buch ("Krieg und Frieden") rein. Unten kommt eine kurze Zahlenreihe raus ("a3f9..."). Regeln des Fleischwolfs:
- Einweg: Du kannst aus der Wurst ("a3f9...") nicht wieder das Buch machen.
- Deterministisch: Das gleiche Buch ergibt immer die gleiche Wurst.
- Chaos (Avalanche): Wenn du im Buch nur ein Komma änderst, sieht die Wurst komplett anders aus ("7b2x...").
Wozu? Um zu prüfen, ob das Buch verändert wurde (Prüfsumme/Checksum) oder um Passwörter sicher zu speichern (man speichert nur den Hash, nie das Passwort).
Merksatz: Eine mathematische Funktion, die eine beliebig lange Zeichenfolge auf eine feste Länge abbildet, wobei die Umkehrung praktisch unmöglich ist.
In Python:
import hashlib
print(hashlib.sha256(b"Hallo").hexdigest())
Anwendungen:
- Git: Jede Commit-ID ist ein SHA-1 Hash des Inhalts.
- Passwörter: Datenbank speichert Hash. Beim Login wird deine Eingabe gehasht und verglichen.
- Downloads: "SHA256 Checksum" auf der Webseite, damit du prüfen kannst, ob der Download fehlerfrei war.
1. Schnelle vs. Langsame Hashes
- Schnell (MD5, SHA-256, CRC32): Optimiert für Speed. Gut für Datei-Checks. Schlecht für Passwörter (Hacker schafft Milliarden pro Sekunde).
- Langsam (bcrypt, Argon2, scrypt): Absichtlich langsam (CPU/RAM intensiv). Gut für Passwörter. (Key Stretching).
2. Kollisionsresistenz
Es ist mathematisch unmöglich, dass jeder Input einen einzigartigen Hash hat (Input ist unendlich, Hash ist endlich). Eine Kollision ist, wenn zwei verschiedene Dateien den gleichen Hash haben. Bei MD5 und SHA-1 wurden Kollisionen gefunden ("Shattered"). Sie gelten als gebrochen. SHA-256 gilt (noch) als sicher.
3. Length Extension Attack
Bei naivem Hashing (hash(secret + message)) kann ein Angreifer Daten anhängen, ohne das Secret zu kennen.
Deshalb nutzt man für Signaturen HMAC (hash(secret + hash(secret + message))), das immun dagegen ist.
1. Merkle Trees (Hash-Bäume)
Eine der wichtigsten Datenstrukturen im Netz (Torrent, Blockchain, Git). Liest du eine 100 GB Datei aus dem Internet, willst du nicht am Ende 100 GB hashen (dauert Stunden), um zu sehen, dass ein Bit beim Download flippte. Du brichst die Datei in winzige Chunks. Jeder Chunk hat einen eigenen kleinen Hash. Diese "Blätter"-Hashes werden kombiniert, wieder gehasht, und formen Äste, bis oben ein einziger End-Hash (Root Hash) entsteht. Läd das Peer-to-Peer Netzwerk Block 5 fehlerhaft, invalidiert sich nur der Hash von Ast 5 (lokaler Fehler). Das System sieht das sofort und fordert isoliert nur diesen winzigen Chunk erneut an, ohne den Rest zu verwerfen.
2. Time-Memory Trade-Off (Rainbow Tables)
MD5 Passwörter ohne Salt kann ein Hacker binnen Sekunden durch Abgleichlisten (Rainbow Table) knacken.
Die Table enthält Millionen vor-berechneter Kombinationen: MD5("12345") = 827cc... und der Hacker macht nur noch billiges SELECT in seiner Datenbank.
Der Key Derivation Gegenschlag ist Salting + Work Factors (bcrypt / scrypt / pbkdf2 / Argon2).
Man fügt 16 Zufalls-Bytes (Salt) an: hash(password + salt). Der Hash verändert sich radikal. Die Rainbow Table des Hackers ist nutzlos, er muss für jeden User die komplette CPU-Rechenarbeit von Milliarden Hash-Durchläufen pro Test von vorne anfangen. Argon2 verlangt zusätzlich massiv RAM (Memory-hard function), was das Knacken per ASIC/GPU-Clustern unbezahlbar und unmöglich macht.
3. Hash Collisions und das Birthday Paradox
Warum sind 128-Bit (MD5) heute veraltet? Ein Hash hat $2^{128}$ mögliche Ausgaben. Riesig. Aber aufgrund des Geburtstagsparadoxons brauchst du nicht $2^{128}$ Versuche, um eine identische Doppelung zweier Hashes zu finden. Vergleichen sich Werte untereinander stetig, steigt die Wahrscheinlichkeit extrem an. Nach nur ca. $2^{64}$ Generierungen (Shor's Square Root Bound) wird das Finden einer Kollision plötzlich realistisch machbar für Google Serverfarmen (siehe "SHAttered" Attacke für SHA-1). Moderne Standards fordern daher zwingend SHA-256 oder SHA-3.
Quick-Check
Unterschied zu Verschlüsselung?
Verschlüsselung ist umkehrbar (mit Key). Hashing ist NICHT umkehrbar (Einbahnstraße).Map/Dictionary?
In der Programmierung (HashMap) nutzt man Hashes, um Daten schnell zu finden (O(1)). Hier ist kryptografische Sicherheit egal, Speed ist alles.Bit-Rot Detection?
Filesysteme wie ZFS nutzen Hashes für jeden Block. Wenn die Festplatte ein Bit kippt (Bit Rot), merkt ZFS: Hash stimmt nicht mehr -> Reparatur.