Ein Fingerabdruck für Daten
Eine Hashfunktion nimmt eine beliebige Eingabe (ein Wort, ein Dokument, ein 4-GB-Video) und macht daraus eine kurze Zeichenfolge fester Länge, den Hash, auch Digest oder Prüfsumme. Dieselbe Eingabe ergibt immer denselben Hash, und schon eine winzige Änderung ergibt einen völlig anderen:
| Eingabe | SHA-256-Hash |
hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
Hello | 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 |
hello! | ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b |
Ein Großbuchstabe oder ein Ausrufezeichen ändert jedes Zeichen des Ergebnisses. Probier es im Hash-Generator aus.
Was eine gute Hashfunktion ausmacht
- Deterministisch: Dieselbe Eingabe ergibt auf jedem Computer denselben Hash.
- Einweg: Vom Hash kommt man nicht zurück zur Eingabe.
- Kollisionsresistent: Es sollte praktisch unmöglich sein, zwei verschiedene Eingaben mit demselben Hash zu finden.
- Schnell zu berechnen für Prüfsummen, was nützlich ist und zugleich der Grund, warum schnelle Hashes für Passwörter falsch sind (dazu unten mehr).
Hashen ist keine Verschlüsselung
Verschlüsselung funktioniert in beide Richtungen: Mit dem Schlüssel bekommst du das Original zurück. Ein Hash hat keinen Schlüssel und lässt sich nicht umkehren. Er zeigt nur, ob etwas übereinstimmt. Base64 ist wieder etwas anderes: nur eine Kodierung, die jeder dekodieren kann.
Die gängigen Algorithmen
| Algorithmus | Länge | Status |
| MD5 | 128 Bit (32 Hex-Zeichen) | Seit 2004 gebrochen; nur noch für versehentliche Beschädigung |
| SHA-1 | 160 Bit (40 Hex-Zeichen) | Gebrochen: Die erste echte Kollision wurde 2017 veröffentlicht |
| SHA-256 | 256 Bit (64 Hex-Zeichen) | Sicher; heute die Standardwahl |
| SHA-512 | 512 Bit (128 Hex-Zeichen) | Sicher; auf 64-Bit-Computern oft schneller als SHA-256 |
Hier das Wort hello in jedem:
- MD5:
5d41402abc4b2a76b9719d911017c592 - SHA-1:
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d - SHA-256:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Was „gebrochen“ bei MD5 und SHA-1 heißt
Bei MD5 und SHA-1 können Forscher gezielt zwei verschiedene Dateien mit demselben Hash erzeugen. Ein Angreifer könnte so eine harmlose Datei gegen eine schädliche mit passender Prüfsumme tauschen oder ein signiertes Dokument fälschen. Umkehrbar sind beide nicht, und zufällige Beschädigung ändert den Hash weiterhin, eine MD5-Prüfsumme erkennt also noch einen abgebrochenen Download. Sie kann nur nicht beweisen, dass niemand die Datei manipuliert hat.
SHA-256 und SHA-512 gehören zur 2001 veröffentlichten SHA-2-Familie, und es ist kein praktischer Angriff auf sie bekannt. SHA-3, 2015 standardisiert, ist ein anderes Design, das als Reserve bereitsteht.
Wo Hashes verwendet werden
- Downloads prüfen: Entwickler veröffentlichen den SHA-256 ihrer Dateien; stimmt deiner überein, ist die Datei identisch. Siehe Prüfsumme prüfen.
- Digitale Signaturen und HTTPS-Zertifikate: Das Dokument oder Zertifikat wird gehasht, und der Hash wird signiert.
- Git: Jeder Commit und jede Datei wird über ihren Hash identifiziert. Git nutzt seit Langem SHA-1 und unterstützt inzwischen auch SHA-256.
- Bitcoin und andere Blockchains: Die Blöcke sind mit SHA-256 verkettet.
- Doppelte Dateien finden: Zwei Dateien mit demselben SHA-256 sind dieselbe Datei.
Hashes und Passwörter
Websites sollten nie dein Passwort speichern, nur einen Hash davon; beim Anmelden hashen sie deine Eingabe und vergleichen. SHA-256 ist dafür aber das falsche Werkzeug: Es ist so schnell, dass ein Angreifer mit einer geleakten Datenbank Milliarden Versuche pro Sekunde machen kann. Passwörter brauchen langsames Hashing mit Salt, das dafür gemacht ist, etwa bcrypt, scrypt oder Argon2. Ein Salt ist ein Zufallswert, der vor dem Hashen an jedes Passwort gehängt wird, damit zwei Menschen mit demselben Passwort verschiedene Hashes bekommen.
Ausprobieren
Der Hash-Generator berechnet MD5, SHA-1, SHA-256, SHA-384 und SHA-512 von beliebigem Text oder Dateien gleichzeitig, in deinem Browser, und vergleicht sie mit einer veröffentlichten Prüfsumme.