Ein Hash ist ein Fingerabdruck fester Länge: SHA-256 liefert für „hallo“ und für ein ganzes Buch jeweils 64 hexadezimale Zeichen. Ändert sich ein einziges Zeichen — „Hallo“ statt „hallo“ —, ist das Ergebnis nicht ähnlich, sondern vollständig anders. Deshalb taugt ein Hash zum Vergleichen, nicht zum Suchen nach Ähnlichem: Zwei fast gleiche Texte haben in ihren Hashes nichts gemeinsam.
Gerechnet wird im Browser, und zwar über die UTF-8-Darstellung des Textes. Ein Leerzeichen oder ein Zeilenumbruch am Ende zählt mit: Wer den Wert mit der Ausgabe von sha256sum vergleicht und eine Abweichung sieht, findet die Ursache fast immer dort. Dateien nimmt das Feld nicht entgegen, nur Text.
MD5 und SHA-1 sind gebrochen
Gebrochen heißt: Man kann gezielt zwei verschiedene Eingaben mit demselben Hash erzeugen. Für MD5 ist das seit 2004 bekannt; heute rechnet ein Notebook eine solche Kollision in Sekunden, und auch die teurere Variante mit frei gewähltem Anfang — erst sie erlaubt es, zwei sinnvolle Dateien gegeneinander auszutauschen — ist seit dem gefälschten CA-Zertifikat von 2008 bezahlbar. Für SHA-1 gelang es 2017 erstmals: Mit einem Rechenaufwand von rund 6 500 CPU-Jahren legten Forscher zwei verschiedene PDF-Dateien mit identischem SHA-1 vor; seit 2019 kostet ein solcher Angriff nur noch einige zehntausend Euro Rechenzeit — billig genug, dass sich niemand mehr darauf verlassen sollte. Wer damit signiert, Zertifikate ausstellt oder einen Download gegen Manipulation absichert, sichert nichts ab.
Als Prüfsumme gegen zufällige Beschädigung bleiben beide brauchbar: Ob eine Datei beim Kopieren oder Herunterladen kaputtgegangen ist, verrät ein MD5 so zuverlässig wie eh und je — ein Bit kippt nicht mit Absicht. Sobald jemand ein Interesse daran hat, dass zwei Dateien gleich aussehen, ist SHA-256 die Untergrenze; MD5 (RFC 1321, von 1992) und SHA-1 führt das BSI in seiner Technischen Richtlinie TR-02102-1 seit Jahren nicht mehr als geeignet auf. Darum ist SHA-256 hier voreingestellt.
Passwörter gehören nicht in einen schnellen Hash
SHA-256 ist auf Tempo gebaut. Eine Grafikkarte rechnet Milliarden davon pro Sekunde — genau die Eigenschaft, die den Algorithmus für Prüfsummen tauglich macht, macht ihn als Passwortspeicher untauglich. Wer Passwörter in einer Datenbank ablegt, nimmt bcrypt, scrypt oder Argon2: absichtlich langsame Verfahren mit einstellbarem Aufwand und einem eigenen Salt je Benutzer.
Dass ein Hash nicht umkehrbar ist, hilft dabei wenig. Kurze und häufige Eingaben muss niemand zurückrechnen, sie werden nachgeschlagen: Wortlisten, Name mit Jahreszahl und ganze Leak-Sammlungen liegen längst als fertige Hash-Listen bereit, und Rainbow Tables pressen dasselbe platzsparend in Ketten. Erst ein zufälliges Salt je Eintrag macht diese Vorberechnung wertlos — und ein Salt kennt dieser Rechner nicht.
Was der Rechner nicht kann
Er hasht Text, keine Dateien. Die Prüfsumme einer heruntergeladenen ISO holen Sie sich schneller lokal: sha256sum datei.iso unter Linux, shasum -a 256 datei.iso unter macOS, Get-FileHash datei.iso in der PowerShell. Verglichen wird das Ergebnis mit dem Wert von der Seite des Anbieters, nicht mit dem, der beim Spiegelserver neben der Datei liegt. Gegen einen kaputten Download hilft das; gegen einen manipulierten Anbieter hilft nur eine Signatur — GPG oder minisign, mit einem Schlüssel, den Sie anderswoher kennen.
HMAC, Schlüssel und Salt fehlen ebenfalls. Für eine Webhook-Signatur brauchen Sie HMAC-SHA-256 mit dem geheimen Schlüssel des Absenders; ein reiner Hash über denselben Text ergibt einen anderen Wert und prüft gar nichts. Und auch wenn die Eingabe hier den Browser nicht verlässt: Echte Geheimnisse tippt man grundsätzlich nicht in ein Webformular.