Was ein Hash ist und wozu er dient

Eine Hashfunktion macht aus Daten beliebiger Länge einen Fingerabdruck fester Länge: 128 Bit bei MD5, 256 bei SHA-256. Ändert man einen einzigen Buchstaben, ändert sich der Fingerabdruck vollständig, und vom Fingerabdruck führt kein Weg zurück zu den Daten.

Deshalb prüft man mit Hashes, ob ein Download unversehrt ist, identifiziert Daten, ohne sie aufzubewahren, signiert Dokumente und speichert, mit langsamen Algorithmen und Salt, Passwörter. Git benennt jede Version mit einem SHA-1, Bitcoin beruht auf SHA-256.

MD5 und SHA-1 sind nicht mehr sicher: Man kann gezielt zwei verschiedene Dateien mit gleichem Fingerabdruck erzeugen. Gegen Übertragungsfehler taugen sie noch, für Sicherheit braucht es SHA-256 oder stärker.

Häufige Fehler

  • Einen Hash über einen Text mit zusätzlichem Zeilenumbruch oder Leerzeichen vergleichen: Ein unsichtbares Zeichen ändert alles.
  • Passwörter mit bloßem MD5 oder SHA-256 speichern: Sie lassen sich viel zu schnell massenhaft durchprobieren. Nötig sind langsame Verfahren wie bcrypt oder Argon2.
  • Glauben, ein Hash lasse sich entschlüsseln: Er ist keine Verschlüsselung. Seiten, die Hashes 'umkehren', schlagen sie nur in Tabellen vorberechneter Werte nach.

Häufige Fragen

Kann ich aus dem Hash den Text zurückgewinnen?

Nein. Eine gute Hashfunktion lässt sich nicht umkehren; man kann den Text nur erraten und vergleichen. Deshalb werden kurze oder häufige Passwörter trotzdem gefunden.

Wie prüfe ich eine heruntergeladene Datei?

Berechne den Hash der Datei mit einem Systemwerkzeug (sha256sum unter Linux, Get-FileHash unter Windows) und vergleiche ihn mit dem veröffentlichten. Weicht ein einziges Zeichen ab, ist die Datei eine andere.

Warum ergibt derselbe Text in verschiedenen Programmen verschiedene Hashes?

Meist wegen der Kodierung oder der Zeilenenden: Ein Text mit CRLF oder in Latin-1 hat andere Bytes als derselbe Text in UTF-8 mit LF und damit einen anderen Hash.

So funktioniert diese Berechnung

Der Text wird zuerst mit UTF-8 in Bytes umgewandelt. SHA-1, SHA-256, SHA-384 und SHA-512 berechnet die Web-Crypto-API des Browsers nach FIPS 180-4. MD5 folgt RFC 1321: Die Daten werden mit ihrer Länge auf ein Vielfaches von 512 Bit aufgefüllt, dann durchläuft jeder Block 64 Schritte aus Additionen, Rotationen und logischen Funktionen auf vier 32-Bit-Wörtern.