Hashfunktionen einfach erklärt: MD5, SHA-1 oder SHA-256 und wie man sie einsetzt
Download-Prüfsummen, Git-Commit-IDs und Blockchain-Adressen sind allesamt Hashwerte. Dieser Leitfaden erklärt, wie sich Hashing von Verschlüsselung unterscheidet und welcher Algorithmus für welche Aufgabe passt.
Was eine Hashfunktion ist
Eine Hashfunktion nimmt eine Eingabe beliebiger Länge und erzeugt einen kurzen Wert fester Länge, den Hash oder Digest. Ob Sie ein Wort oder ein mehrere Gigabyte großes Video hashen — SHA-256 liefert immer 256 Bit, also 64 Hexadezimalzeichen.
Entscheidend ist, dass Hashing eine Einbahnstraße ist. Aus dem Hash lässt sich die ursprüngliche Eingabe nicht berechnen. Das ist der wesentliche Unterschied zur Verschlüsselung, die sich mit einem Schlüssel umkehren lässt, und zu Base64, das jeder umkehren kann.
Drei Eigenschaften eines guten Hashes
Eine kryptografische Hashfunktion für Sicherheitszwecke muss Folgendes erfüllen.
- Deterministisch: Dieselbe Eingabe ergibt immer denselben Hash.
- Lawineneffekt: Schon ein geändertes Zeichen verändert die Ausgabe vollständig, wie das Beispiel unten mit hello und hello! zeigt.
- Kollisionsresistenz: Es muss praktisch unmöglich sein, zwei verschiedene Eingaben mit demselben Hash zu finden.
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("hello!") = ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b
MD5("hello") = 5d41402abc4b2a76b9719d911017c592
Auch Groß- und Kleinschreibung zählt: Hello und hello ergeben völlig unterschiedliche Hashes. Prüfen Sie vor einem Hash-Vergleich, ob die Eingaben exakt übereinstimmen, einschließlich Leerzeichen, Zeilenumbrüchen und Großschreibung.
MD5, SHA-1 und SHA-256 im Vergleich
MD5 erzeugt einen 128-Bit-Digest (32 Hexadezimalzeichen). Es ist schnell, doch seit 2004 sind praktische Kollisionsangriffe bekannt, daher darf es nicht für Sicherheitszwecke verwendet werden. Als einfache Prüfsumme gegen versehentliche Beschädigung ist es weiterhin brauchbar.
SHA-1 erzeugt 160 Bit. 2017 veröffentlichten Forscher von Google und dem CWI zwei verschiedene PDF-Dateien mit demselben SHA-1-Hash (SHAttered) und beendeten damit seinen Einsatz für Sicherheitszwecke. Browser und Zertifizierungsstellen vertrauen SHA-1-Zertifikaten nicht mehr.
SHA-256 gehört zur SHA-2-Familie und erzeugt 256 Bit. Es ist der De-facto-Standard für Software-Prüfsummen, TLS-Zertifikate und Blockchains. Für neue Systeme ist SHA-256 oder stärker die Standardwahl.
Dateien mit Prüfsummen verifizieren
Download-Seiten nennen oft einen SHA-256-Wert neben der Datei. Berechnen Sie den Hash der heruntergeladenen Datei und vergleichen Sie: Hat sich bei der Übertragung auch nur ein Bit geändert oder wurde manipuliert, ist der Hash völlig anders.
Liegt die Prüfsumme auf demselben Server wie die Datei, könnte ein Angreifer beide austauschen. Wichtige Software signiert die Prüfsummendatei daher mit GPG oder veröffentlicht sie über einen separaten HTTPS-Kanal.
Warum reines SHA-256 für Passwörter falsch ist
Wenn Hashes Einbahnstraßen sind, klingt das Speichern von Passwörtern als SHA-256 sicher — ist es aber nicht. SHA-256 ist auf Geschwindigkeit ausgelegt, und eine einzige GPU kann Milliarden Hashes pro Sekunde berechnen. Ein Angreifer, der eine Hash-Liste stiehlt, kann gängige Passwörter in enormem Tempo durchprobieren.
Verwenden Sie spezielle, absichtlich langsame Funktionen wie bcrypt, scrypt oder Argon2. Sie mischen jedem Passwort ein eindeutiges zufälliges Salt bei, sodass identische Passwörter unterschiedliche gespeicherte Werte ergeben — das macht auch vorberechnete Rainbow-Tables wirkungslos.
Hash, HMAC oder Verschlüsselung?
Lassen Sie im Hash-Generator von AIBIZAP denselben Satz durch mehrere Algorithmen laufen und sehen Sie, wie stark sich das Ergebnis ändert, wenn Sie ein einziges Zeichen ändern. Wenn Sie Daten verbergen und später wiederherstellen müssen, probieren Sie den AES-Verschlüsselungstester aus.
- Prüfen, ob Daten unverändert sind: ein SHA-256-Hash.
- Prüfen, ob eine Nachricht von jemandem mit einem gemeinsamen Geheimnis stammt: HMAC-SHA256 (Signaturen für Webhooks und API-Anfragen).
- Passwörter speichern: bcrypt, scrypt oder Argon2.
- Daten verbergen und später wieder lesen: Verschlüsselung wie AES-GCM.