Eine Hashfunktion verwandelt beliebige Daten in einen Fingerabdruck fester Länge. Egal ob Sie ein einzelnes Zeichen, ein Passwort oder ein mehrere Gigabyte großes Festplatten-Image hineingeben: Heraus kommt immer eine Zeichenkette derselben Größe, der sogenannte Hashwert oder Digest. Dieses Prinzip steckt unsichtbar hinter dem Schloss-Symbol im Browser, hinter der Prüfsumme neben einem Download und hinter jedem Block einer Blockchain. Dieser Artikel erklärt, was eine Hashfunktion ausmacht und wodurch sie sich von Verschlüsselung und Kodierung unterscheidet.
Definition: Was eine Hashfunktion ist
Eine Hashfunktion ist ein Algorithmus, der eine Eingabe beliebiger Länge auf eine Ausgabe fester Länge abbildet. Die Eingabe nennt man auch Urbild (englisch: Preimage), die Ausgabe heißt Hashwert, Digest oder schlicht Hash. Üblicherweise wird der Hashwert als Folge hexadezimaler Zeichen dargestellt, etwa als 64 Zeichen bei einem 256-Bit-Hash.
Wichtig ist die Unterscheidung zwischen einer einfachen und einer kryptografischen Hashfunktion. Einfache Hashfunktionen, wie sie in Hashtabellen einer Programmiersprache stecken, verteilen Daten nur schnell und gleichmäßig auf Speicherplätze. Eine kryptografische Hashfunktion muss zusätzlich strenge Sicherheitsgarantien erfüllen. Wenn in der IT-Sicherheit von Hashfunktionen die Rede ist, sind fast immer die kryptografischen gemeint, und um die geht es hier.
Einen breiteren Überblick über das Themengebiet gibt unser Kryptografie-Pillar. Dort ordnen wir Hashing in das größere Bild aus Verschlüsselung, Signaturen und Schlüsselverfahren ein.
Die Kerneigenschaften einer kryptografischen Hashfunktion
Eine Hashfunktion ist nur dann brauchbar, wenn sie eine Reihe klar definierter Garantien einhält. Fällt auch nur eine davon, gilt das Verfahren als gebrochen.
Deterministisch und schnell
Dieselbe Eingabe liefert stets dieselbe Ausgabe. Hashen Sie das Wort kryptografie heute, nächstes Jahr oder auf einem anderen Rechner, erhalten Sie jedes Mal denselben Digest. Ohne diese Eigenschaft wäre kein Vergleich möglich, denn der Sinn eines Hashs liegt im Wiedererkennen. Zugleich muss die Berechnung schnell gehen. Ein Server, der Millionen von Integritätsprüfungen pro Sekunde durchführt, kann sich keine langsame Funktion leisten. Bei der Passwortspeicherung dreht man dieses Argument bewusst um, dazu später mehr.
Feste Ausgabelänge
Die Länge des Hashwerts ändert sich nie, ganz gleich wie groß die Eingabe ist. Eine leere Zeichenkette und ein kompletter Roman ergeben bei SHA-256 beide exakt 256 Bit. Diese Konstanz macht Hashwerte günstig zu speichern, zu vergleichen und zu übertragen.
Einwegfunktion und Preimage-Resistenz
Aus einem gegebenen Hashwert lässt sich die ursprüngliche Eingabe nicht mit vertretbarem Aufwand zurückrechnen. Die Funktion wirft beim Verarbeiten Struktur weg, sodass eine Umkehrung das Durchsuchen eines astronomisch großen Raums bedeuten würde. Diese Einwegeigenschaft erlaubt es, einen Fingerabdruck sensibler Daten zu speichern, ohne die Daten selbst aufzubewahren. Genau das passiert bei der Passwortspeicherung.
Zweite-Preimage- und Kollisionsresistenz
Zwei eng verwandte Garantien ergänzen die Einwegeigenschaft. Bei der Zweite-Preimage-Resistenz gilt: Zu einer bekannten Eingabe darf sich keine zweite, andere Eingabe finden lassen, die denselben Hashwert erzeugt. Die Kollisionsresistenz geht noch weiter und verlangt, dass es generell unmöglich ist, irgendein Paar verschiedener Eingaben mit identischem Hashwert zu finden. Der Unterschied ist subtil, aber bedeutsam: Bei der zweiten Preimage ist die erste Eingabe vorgegeben, bei einer Kollision darf der Angreifer beide frei wählen.
Kollisionen existieren mathematisch zwangsläufig, da unendlich viele Eingaben auf endlich viele Ausgaben treffen. Das Sicherheitsversprechen lautet nicht, dass es keine Kollisionen gibt, sondern dass niemand sie in praktikabler Zeit finden kann.
Lawineneffekt
Ändert sich auch nur ein einziges Bit der Eingabe, kippt im Schnitt die Hälfte aller Ausgabebits. Es gibt kein allmähliches Abdriften: Eine winzige Änderung erzeugt einen Digest, der mit dem ursprünglichen nichts mehr gemein hat. Diesen Lawineneffekt kann man an einem kurzen Beispiel beobachten.
Eingabe: "shattered"
SHA-256: 4c9c8f3b... (ein fester 64-Zeichen-Hex-Digest)
Eingabe: "shattereD" (nur der letzte Buchstabe wechselt die Großschreibung)
SHA-256: e1b7a402... (ein völlig anderer 64-Zeichen-Digest)
Beide Eingaben sind neun Zeichen lang und unterscheiden sich um ein einziges Bit. Dennoch ähneln sich die Digests in keiner Weise, und beide bleiben exakt 64 Hexzeichen lang. Genau diese Empfindlichkeit macht den Hash zum verlässlichen Wächter gegen Manipulation: Jede noch so kleine Änderung wird laut.
Hashing, Verschlüsselung und Kodierung: drei verschiedene Dinge
Diese drei Begriffe werden oft verwechselt, obwohl sie völlig unterschiedliche Aufgaben lösen.
Hashing ist eine Einbahnstraße. Es erzeugt einen Fingerabdruck, der sich nicht zurückrechnen lässt, und kommt ohne Schlüssel aus. Man setzt es ein, um etwas zu überprüfen, ohne die Sache selbst zu speichern.
Verschlüsselung ist umkehrbar. Daten werden mit einem Schlüssel verschleiert, und wer den passenden Schlüssel besitzt, stellt das Original wieder her. Der ganze Zweck besteht darin, die Nachricht später wieder lesbar zu machen. Eine Merkhilfe: Verschlüsselung hütet ein Geheimnis, das man später enthüllen will, während Hashing einen Fingerabdruck schafft, den man nie umkehren möchte.
Kodierung schließlich hat mit Sicherheit nichts zu tun. Verfahren wie Base64 wandeln Daten lediglich in ein anderes Format um, damit sie sich speichern oder übertragen lassen. Jeder kann eine Kodierung ohne Schlüssel und ohne Geheimnis rückgängig machen. Wer glaubt, mit Base64 etwas zu schützen, irrt: Es verschleiert nichts.
Gängige Hashfunktionen und ihr Status
Die meisten Hashfunktionen, denen man in freier Wildbahn begegnet, gehören zu einer Handvoll bekannter Designs. Ihr Sicherheitsstatus unterscheidet sich allerdings drastisch.
MD5 erzeugt einen 128-Bit-Digest und war einst überall im Einsatz. Heute gilt es als vollständig gebrochen, denn Kollisionen lassen sich in Sekunden auf einem Laptop erzeugen. MD5 taucht noch als reine Prüfsumme gegen zufällige Übertragungsfehler auf, darf aber nie dort verwendet werden, wo ein Angreifer von einer gefälschten Übereinstimmung profitieren könnte.
SHA-1 liefert einen 160-Bit-Digest und war über Jahre das Arbeitspferd des Webs. Theoretische Schwächen zeigten sich bereits 2005, der entscheidende Schlag fiel jedoch 2017 mit der ersten praktischen Kollision. Mehr dazu im Abschnitt zum Kollisionsangriff und in unserer Analyse der SHA-1-Kollision.
SHA-256 gehört zur SHA-2-Familie und ist heute der Standard für die meisten Anwendungen. Mit 256 Bit Ausgabe und ohne bekannten praktischen Angriff sichert es TLS-Zertifikate, Software-Signaturen und das Bitcoin-Netzwerk. Wie das Verfahren intern aufgebaut ist, erklärt unser SHA-256-Artikel im Detail.
SHA-3 ist ein neuerer Standard, der 2015 vom NIST verabschiedet wurde. Es beruht nicht auf der Merkle-Damgård-Konstruktion der älteren Verfahren, sondern auf einer Schwammkonstruktion (englisch: Sponge) namens Keccak. SHA-3 wurde bewusst als strukturelle Reserve gewählt, damit eine künftige Schwäche in SHA-2 nicht die gesamte Welt ohne Alternative zurücklässt.
| Hashfunktion | Ausgabelänge | Jahr | Status |
|---|---|---|---|
| MD5 | 128 Bit | 1992 | Gebrochen, meiden |
| SHA-1 | 160 Bit | 1995 | Gebrochen (Kollision 2017), abgelöst |
| SHA-256 (SHA-2) | 256 Bit | 2001 | Sicher, empfohlen |
| SHA-3 | 224 bis 512 Bit | 2015 | Sicher, alternatives Design |
Wofür Hashfunktionen verwendet werden
Hashing taucht überall dort auf, wo ein vertrauenswürdiger Fingerabdruck gebraucht wird.
Passwort-Speicherung mit Salt
Vernünftige Dienste speichern niemals Ihr Passwort im Klartext. Stattdessen hinterlegen sie dessen Hashwert. Bei der Anmeldung wird das eingegebene Passwort erneut gehasht und mit dem gespeicherten Wert verglichen. Ein Datenbankleck gibt Angreifern so nicht die Klartext-Passwörter in die Hand.
Damit das funktioniert, kommt ein sogenanntes Salt hinzu: ein zufälliger Wert, der vor dem Hashen an jedes Passwort angehängt wird. Das Salt sorgt dafür, dass zwei Nutzer mit demselben Passwort verschiedene Hashwerte erhalten, und macht vorberechnete Angriffstabellen (Rainbow Tables) wertlos. Wichtig ist außerdem, dass man für Passwörter gerade keine schnelle Hashfunktion nimmt. Empfohlen werden absichtlich langsame, speicherintensive Verfahren wie bcrypt, scrypt oder Argon2, die das massenhafte Durchprobieren für Angreifer teuer machen.
Datei-Prüfsummen und Integrität
Software-Projekte veröffentlichen neben ihren Downloads häufig einen SHA-256-Hashwert. Nach dem Herunterladen bilden Sie selbst den Hash der Datei und vergleichen ihn mit dem angegebenen Wert. Stimmen beide überein, ist die Datei unverändert angekommen. Wegen des Lawineneffekts kippt ein einziges verändertes Bit den gesamten Digest, weshalb diese Prüfung gnadenlos zuverlässig ist.
Digitale Signaturen
Signaturen verbinden Hashing mit Public-Key-Kryptografie und beweisen Urheberschaft und Integrität zugleich. Statt das gesamte Dokument zu signieren, hasht man es zunächst und verschlüsselt diesen Hashwert mit dem privaten Schlüssel. Jeder, der den öffentlichen Schlüssel besitzt, kann die Signatur zurück zum Hashwert entschlüsseln, das Dokument selbst hashen und beide Werte vergleichen. Wie dieser Ablauf im Einzelnen funktioniert und wo er scheitern kann, behandelt unser Artikel zu digitalen Signaturen.
Hier wird auch deutlich, warum eine gebrochene Hashfunktion für Signaturen gefährlich ist. Kann ein Angreifer zwei Dokumente mit identischem Hashwert herstellen, gilt eine Signatur über das harmlose Dokument automatisch auch für das bösartige.
Blockchains
In einer Blockchain identifiziert ein Hashwert jeden Block, und jeder Block enthält zugleich den Hash seines Vorgängers. So entsteht eine Kette, in der sich kein älterer Block ändern lässt, ohne alle folgenden Hashes ungültig zu machen. Bitcoin nutzt SHA-256 zusätzlich für den Proof-of-Work: Miner hashen Blockköpfe immer wieder, bis ein Ergebnis unter einem Zielwert liegt. Die Einwegeigenschaft und der Lawineneffekt machen dieses Rätsel schwer zu lösen, aber trivial zu überprüfen, genau die Asymmetrie, die ein dezentrales Netzwerk braucht.
Was ein Kollisionsangriff ist
Ein Kollisionsangriff zielt darauf ab, zwei verschiedene Eingaben zu finden, die denselben Hashwert ergeben. Gelingt das in praktikabler Zeit, ist die Kollisionsresistenz gebrochen, und alle darauf aufbauenden Sicherheitsversprechen brechen mit. Eine Signatur, eine Zertifikats-Prüfsumme oder eine Integritätsgarantie reduziert eine Datei stets auf ihren Hash und verlässt sich darauf, dass dieser eindeutig ist. Teilen sich zwei Dateien einen Hash, zerbricht die Verbindung zwischen dem, was genehmigt wurde, und dem, was tatsächlich ankommt.
Genau dieser Angriff wurde 2017 mit dem Projekt SHAttered Wirklichkeit, an dem Forscher der Cryptology Group am CWI Amsterdam und von Google beteiligt waren. Sie erzeugten zwei verschiedene PDF-Dateien mit identischem SHA-1-Hashwert und bewiesen damit, dass die Kollisionsresistenz von SHA-1 in der Praxis gefallen war. Die ausführliche Aufarbeitung samt der Frage, warum SHA-1 verwundbar war, finden Sie in unserer Analyse der SHA-1-Kollision.
Häufig gestellte Fragen
Ist Hashing eine Form der Verschlüsselung?
Nein. Verschlüsselung ist mit einem Schlüssel umkehrbar, Hashing dagegen ein Einweg-Fingerabdruck ohne Rückweg. Beide werden oft gemeinsam eingesetzt, sind aber unterschiedliche Werkzeuge für unterschiedliche Aufgaben.
Können zwei verschiedene Dateien denselben Hashwert haben?
Theoretisch ja, denn unendlich viele Eingaben treffen auf endlich viele mögliche Ausgaben. Bei einer sicheren Funktion wie SHA-256 wäre das Auffinden eines solchen Paares jedoch rechnerisch nicht durchführbar, und bislang wurde keine SHA-256-Kollision gefunden. Bei MD5 und SHA-1 hingegen lassen sich Kollisionen heute erzeugen.
Welche Hashfunktion sollte ich verwenden?
Für die meisten Zwecke ist SHA-256 die sichere Standardwahl. SHA-3 ist eine solide Alternative mit anderem Aufbau. Für die Passwortspeicherung greifen Sie nicht zu einer schnellen Hashfunktion, sondern zu einem eigens dafür gebauten, langsamen Verfahren wie bcrypt, scrypt oder Argon2.
Warum gilt SHA-1 als gebrochen, obwohl es noch Hashwerte erzeugt?
Die Funktion läuft technisch weiterhin, doch Forscher fanden 2017 einen Weg, zwei verschiedene Eingaben mit demselben SHA-1-Digest zu erzeugen. Sobald Kollisionen praktisch machbar sind, lässt sich das Verfahren für Signaturen und Zertifikate nicht mehr vertrauen, auch wenn es noch Ausgaben liefert.
