Hashing erklärt: MD5, SHA-256 und warum Hashing keine Verschlüsselung ist
2026-08-10
Fügen Sie beliebigen Text in ein Hash-Werkzeug ein, und Sie erhalten eine Zeichenkette wie 5d41402abc4b2a76b9719d911017c592. Ändern Sie ein einziges Zeichen der Eingabe, und die Ausgabe ist völlig anders. Diese Einweg-Transformation ist die Grundlage von Passwortspeicherung, Dateiintegritätsprüfungen, digitalen Signaturen und einem Großteil der Blockchain — doch sie ist auch eines der am meisten missverstandenen Stücke angewandter Kryptografie. Entwickler „verschlüsseln“ routinemäßig Passwörter mit MD5 oder behandeln einen Hash als Beweis, dass Daten geheim sind. Diese Anleitung erklärt, was eine Hash-Funktion tatsächlich garantiert, wo welcher Algorithmus passt und welche Fehler Systeme noch immer kompromittieren.
Was eine Hash-Funktion wirklich tut
Eine kryptografische Hash-Funktion nimmt Eingaben beliebiger Länge und erzeugt eine Ausgabe fester Länge — den Hash oder Digest. Vier Eigenschaften machen sie nützlich:
- Deterministisch: Dieselbe Eingabe erzeugt immer denselben Hash.
- Lawineneffekt: Kippen Sie ein Bit der Eingabe, ändert sich rund die Hälfte der Ausgabebits. Es gibt keine sichtbare Beziehung zwischen den Hashes von „hello“ und „Hello“.
- Einwegig: Gegeben einen Hash gibt es keinen praktischen Weg, die Eingabe zurückzugewinnen. Das ist der entscheidende Unterschied zur Verschlüsselung.
- Kollisionsresistent: Es sollte undurchführbar sein, zwei verschiedene Eingaben zu finden, die denselben Hash erzeugen.
Die letzte Eigenschaft entscheidet über Leben und Tod von Algorithmen. Wenn Sicherheitsforscher sagen, eine Hash-Funktion sei „gebrochen“, meinen sie, Kollisionen lassen sich gezielt finden — nicht, dass man sie umkehren kann.
Sie können alle vier Eigenschaften im Hash-Generator in Aktion sehen: Hashen Sie hello, dann Hello, dann ein 10.000-Wörter-Dokument. Die Ausgaben sind gleich lang und haben nichts gemeinsam.
MD5 und SHA-1: gebrochen, aber nicht nutzlos
MD5 (128-Bit-Ausgabe, 32 Hex-Zeichen) wurde 1992 veröffentlicht und 2008 gründlich gebrochen, als Forscher es nutzten, um ein gefälschtes SSL-Zertifikat zu schmieden. SHA-1 (160 Bit) hielt länger durch, aber Google demonstrierte 2017 mit dem SHAttered-Angriff eine praktische Kollision — zwei verschiedene PDF-Dateien mit demselben SHA-1-Hash.
„Gebrochen“ hat hier eine präzise Bedeutung: Ein Angreifer mit genug Rechenleistung kann zwei Eingaben mit demselben Hash konstruieren. Das ist katastrophal für Zertifikate und Signaturen, wo jemand eine bösartige Datei den vertrauenswürdigen Hash einer harmlosen erben lassen kann.
Doch MD5 und SHA-1 weigern sich zu sterben, und manchmal ist das in Ordnung. Nutzen Sie einen Hash als Prüfsumme — wurde diese Datei bei der Übertragung beschädigt? ist dieser Cache-Eintrag veraltet? —, sind Kollisionsangriffe irrelevant, weil niemand Sie täuschen will; Sie wollen nur einen schnellen Fingerabdruck. MD5 bleibt genau deshalb in ETags, Cache-Schlüsseln und Deduplizierung verbreitet.
Die Regel ist einfach: MD5 und SHA-1 sind akzeptabel für Integritätsprüfungen, die Sie kontrollieren, und inakzeptabel für alles mit einem Gegner — Signaturen, Zertifikate, Passwortspeicherung oder Dateiintegrität von Downloads aus nicht vertrauenswürdigen Quellen.
SHA-256 und Verwandte: Der aktuelle Standard
SHA-256, Teil der SHA-2-Familie, erzeugt einen 256-Bit-Digest (64 Hex-Zeichen) und ist nach zwei Jahrzehnten Prüfung ungebrochen. Es ist die Standardwahl, wenn Sie einen sicherheitsgradigen Hash brauchen: Heruntergeladene Dateien verifizieren, Content-Addressing (Git nutzt historisch SHA-1 und migriert zu SHA-256), API-Request-Signierung und Blockchain-Proof-of-Work.
Zwei benachbarte Werkzeuge, die man kennen sollte:
- HMAC ist kein Hash-Algorithmus, sondern eine Konstruktion:
HMAC(key, message)mischt einen geheimen Schlüssel in den Hashprozess. Nutzen Sie es, wenn Sie beweisen müssen, dass eine Nachricht von jemandem mit dem Schlüssel kommt — Webhook-Signaturprüfung ist der klassische Fall. Ein einfacher SHA-256 der Nachricht kann das nicht, weil jeder ihn neu berechnen kann. - SHA-3 (Keccak) ist ein völlig anderes internes Design, 2015 standardisiert als Versicherung gegen einen künftigen Bruch von SHA-2. Es ist solide, aber SHA-2 ist noch in Ordnung — migrieren Sie nicht um der Migration willen.
Hashing ist keine Verschlüsselung (und Passwörter sind der Beweis)
Verschlüsselung ist umkehrbar: Chiffretext plus Schlüssel ergibt den Klartext. Hashing ist konstruktionsbedingt nicht umkehrbar. Sie finden noch immer Altcodebasen, die „Passwörter mit MD5 verschlüsseln“ — ein Satz, der zwei Bugs auf einmal beschreibt. MD5 ist ein Hash, keine Verschlüsselung, und ein schneller Allzweck-Hash ist für Passwörter ohnehin der falsche Hash.
Hier ist warum. Angreifer kehren Hashes nicht um — sie raten. Eine GPU-Ausrüstung berechnet Milliarden MD5- oder SHA-256-Hashes pro Sekunde, eine geleakte Datenbank ungesalzener SHA-256-Passwort-Hashes fällt also schnell: Hashen Sie jedes Wort eines Wörterbuchs, jede password123-Variante, und gleichen Sie sie mit der Datenbank ab. Rainbow Tables — vorberechnete Hash-zu-Passwort-Zuordnungen — machen es fast augenblicklich.
Richtige Passwortspeicherung bekämpft das mit drei Verteidigungen:
- Salt: ein zufälliger Wert, der neben jedem Hash gespeichert und zusammen mit dem Passwort gehasht wird. Identische Passwörter erzeugen nun verschiedene Hashes, und Rainbow Tables werden nutzlos.
- Langsames Hashing: Algorithmen wie bcrypt, scrypt oder Argon2 sind absichtlich teuer — darauf abgestimmt, etwa 100 ms pro Versuch zu brauchen. Milliarden Versuche pro Sekunde brechen auf eine Handvoll zusammen. Argon2 verlangt außerdem große Speichermengen, was GPU- und ASIC-Vorteile neutralisiert.
- Arbeitsfaktor: Diese Algorithmen nehmen einen Kostenparameter, den Sie erhöhen, wenn Hardware besser wird.
Das korrekte Rezept lautet also: Argon2id(passwort, zufalls_salt) — oder bcrypt/scrypt, wenn Ihre Plattform es vorschreibt — und niemals SHA-256 allein, so stark es als allgemeiner Hash auch ist. Wollen Sie ein Gefühl dafür, was ein Passwort schwer erratbar macht, probieren Sie Kandidaten im Passwortstärke-Prüfer; um von vornherein zufällige Zugangsdaten zu erzeugen, produziert der Passwortgenerator sie lokal in Ihrem Browser.
Alltägliche Verwendungen, die nichts mit Sicherheit zu tun haben
Hören Sie auf, Hashing nur als Sicherheitswerkzeug zu betrachten, und es taucht überall auf:
- Dateiintegrität: die
SHA256SUMS-Datei neben einem Linux-ISO. Sie hashen Ihren Download und vergleichen — Übertragungsfehler und Manipulation zeigen sich beide als Abweichung. - Deduplizierung: Speichersysteme hashen jeden Block und behalten eine Kopie pro eindeutigem Hash.
- Hash-Maps: Der
O(1)-Zugriff in jedem Dictionary-Typ ist ein (nicht-kryptografischer) Hash, in ein Array einsortiert. - Cache-Busting:
app.a3f2c9.jsin einer Build-Pipeline ist ein Content-Hash — der Dateiname ändert sich genau dann, wenn sich der Inhalt ändert, sodass Caches aggressiv sein können. - Commit-Identität: Eine Git-Commit-ID ist ein Hash des Commit-Inhalts; jede Manipulation der Historie ändert jeden nachgelagerten Hash.
Bei all diesen zählt Geschwindigkeit, und Kollisionsangriffe nicht, schnelle nicht-kryptografische Hashes (xxHash, MurmurHash) schlagen SHA-256 also oft.
Kurzreferenz
- Sicherheitsgradiger Digest nötig: SHA-256.
- Nachricht mit einem geteilten Geheimnis authentifizieren: HMAC-SHA-256.
- Passwörter speichern: Argon2id (oder bcrypt/scrypt) mit einzigartigem zufälligem Salt — nie ein schneller Allzweck-Hash.
- Integritätsprüfungen unter eigener Kontrolle: MD5/SHA-1 sind tolerierbar, aber SHA-256 kostet wenig und beendet die Debatte.
- Sagen Sie nie „mit MD5 verschlüsseln“. Hashing ist einwegig; brauchen Sie die Daten zurück, brauchen Sie Verschlüsselung.