Warum schnelle Hashes für Passwörter gefährlich sind
MD5 und SHA-1 fallen einer GPU in Sekunden zum Opfer, weil sie schnell und oft ungesalzen sind. Erfahre, warum langsame KDFs wie bcrypt und Argon2 widerstehen.
Nicht alle Hashes sind gleich verwundbare Ziele. Der mit Abstand wichtigste Faktor dafür, ob eine gestohlene Passwortdatenbank an einem Nachmittag geknackt wird oder jahrelang sicher bleibt, ist die Geschwindigkeit des Hash-Algorithmus. Das klingt verkehrt — ist schnell nicht gut? — doch für die Passwortspeicherung ist genau die Schnelligkeit das Problem.
Geschwindigkeit ist der Freund des Angreifers
Ein kryptografischer Hash wie MD5 oder SHA-1 wurde auf Tempo ausgelegt: Um eine Datei zu prüfen oder eine Nachricht zu signieren, soll der Prüfwert sofort berechnet werden. Genau diese Schnelligkeit ist ein Geschenk für den Angreifer. Eine moderne GPU berechnet Milliarden MD5-Hashes pro Sekunde. Ist der Algorithmus schnell, verschwindet der Engpass, und der Angreifer ist nur dadurch begrenzt, wie viele Vermutungen er erzeugen kann.
Verschlimmere es, indem du den Hash ungesalzen lässt, und zwei Dinge passieren. Erstens erzeugen identische Passwörter identische Prüfwerte, sodass das Knacken eines Kontos alle Konten knackt, die das Passwort wiederverwendet haben. Zweitens kann der Angreifer vorberechnete Rainbow Tables einsetzen — riesige Nachschlagedateien, die Speicherplatz gegen das sofortige Umkehren gängiger Prüfwerte eintauschen. Ein ungesalzener MD5 eines schwachen Passworts ist in der Praxis bereits gebrochen, bevor der Angriff überhaupt beginnt.
hashcat -m 0 -a 0 dump.txt rockyou.txt
Richte das auf eine Liste ungesalzener MD5-Hashes, und die gängigen Passwörter fallen in Sekunden.
Salts helfen, reichen aber nicht
Einen Salt hinzuzufügen — einen einzigartigen Zufallswert, der vor dem Hashen unter jedes Passwort gemischt wird — behebt das Rainbow-Table-Problem. Jeder Prüfwert wird einzigartig, Vorberechnung wird nutzlos, und der Angreifer muss jeden Hash einzeln angreifen. Das ist eine echte Verbesserung. Aber ein Salt verlangsamt keine einzelne Vermutung. Gegen gesalzenes, aber schnelles MD5 rast die GPU weiter durch Milliarden Versuche pro Sekunde; der Angreifer hat lediglich die Abkürzung verloren, nicht das Tempo.
Langsame, speicherintensive KDFs widerstehen von Natur aus
Die wahre Verteidigung besteht darin, jede Vermutung absichtlich teuer zu machen. Passwort-Hash-Funktionen wie bcrypt, sha512crypt, md5crypt und das moderne Argon2 sind Schlüsselableitungsfunktionen rund um einen einstellbaren Kostenfaktor. Statt einer einzigen schnellen Operation führen sie Tausende Iterationen aus, und Argon2 verlangt zusätzlich große Mengen Speicher, was den Parallelismus einer GPU neutralisiert.
Ein bcrypt-Hash mit Kostenfaktor 12 braucht vielleicht eine Viertelsekunde zur Berechnung. Für einen sich anmeldenden Nutzer ist das unmerklich, doch es lässt den Durchsatz des Angreifers von Milliarden pro Sekunde auf wenige Tausend einbrechen. Dieselbe Wortliste, die eine MD5-Datenbank in Sekunden leert, bräuchte gegen gut eingestelltes bcrypt Jahrhunderte.
Erkenntnisse für Verteidiger
Wenn du Passwörter speicherst, sind die Regeln kurz. Verwende niemals rohes MD5 oder SHA-1 für Anmeldedaten. Salze immer — behandle den Salt aber als Mindestanforderung, nicht als Lösung. Wähle eine langsame, speicherintensive KDF (Argon2id, wo möglich, sonst bcrypt oder sha512crypt) und erhöhe den Kostenfaktor, während die Hardware schneller wird. Wenn du bestätigen musst, welchen Algorithmus ein geleakter Hash tatsächlich nutzt, sagen dir der Hash-Typ-Index und der frühere Leitfaden zum Identifizieren eines unbekannten Hashes das in Sekunden — privat, in deinem Browser.