MD5 vs SHA-256 — Warum Sie MD5 nicht mehr verwenden sollten
MD5 ist überall. Es ist in jeder Programmiersprache, jeder Datenbank und jedem Cloud-Provider-SDK enthalten. Entwickler greifen aus Gewohnheit darauf zurück — es ist schnell, erzeugt einen ordentlichen 32-Zeichen-Hex-String, und die API sind zwei Codezeilen. Das Problem: MD5 ist seit 2004 kryptografisch gebrochen, und die Angriffe sind seitdem nur schneller und billiger geworden.
Das ist nicht theoretisch. Ein Cyberangriff aus dem Jahr 2012 auf iranische Infrastruktur — die Flame-Malware — hat ein Microsoft-Code-Signing-Zertifikat gefälscht, indem er eine MD5-Kollision ausnutzte. Dieselbe Technik, die akademische Kryptografen in einem Forschungspapier demonstrierten, wurde zu einer Waffe, die bei geopolitischer Spionage eingesetzt wurde. MD5 ist nicht leicht geschwächt — es ist fundamental kompromittiert für jede Anwendung, bei der ein Angreifer Eingaben wählen kann.
SHA-256, Teil der SHA-2-Familie, die vom NIST standardisiert wurde, hat keine bekannten Kollisionsangriffe und bleibt der Standard für kryptografische Integrität im Jahr 2026. Dieser Artikel erklärt genau, was der Unterschied bedeutet, wann (selten) MD5 noch akzeptabel ist und wie man sicher migriert. Sie können beide Hashes sofort mit den Tools Toova MD5-Hash und Toova SHA-256-Hash berechnen.
Wie Hash-Funktionen funktionieren
Eine kryptografische Hash-Funktion nimmt eine Eingabe beliebiger Länge und erzeugt eine Ausgabe fester Länge (den Digest) mit diesen Eigenschaften:
- Deterministisch: Die gleiche Eingabe erzeugt immer die gleiche Ausgabe.
- Lawineneffekt: Eine einzelne Bit-Änderung in der Eingabe verändert die Ausgabe vollständig.
- Preimage-Resistenz: Gegeben einem Hash ist es rechnerisch nicht machbar, die Eingabe zu finden.
- Kollisionsresistenz: Es ist rechnerisch nicht machbar, zwei verschiedene Eingaben zu finden, die denselben Hash erzeugen.
Der Lawineneffekt ist der Grund, warum MD5 und SHA-256 auf den ersten Blick ähnlich aussehen:
MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6
MD5("The quick brown fox jumps over the lazy cog")
= 1055d3e698d289f2af8663725127bd4b SHA-256("The quick brown fox jumps over the lazy dog")
= d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
SHA-256("The quick brown fox jumps over the lazy cog")
= e4c4d8f3bf76b692de791a173e05321150f7a345b46484fe427f6acc7ecc81be Ein Zeichen in der Eingabe wurde geändert ("dog" → "cog"), dennoch ist die Ausgabe völlig anders. Diese Eigenschaft gilt für beide Algorithmen. Der Unterschied liegt darin, was passiert, wenn ein Angreifer absichtlich versucht, eine Kollision zu finden.
MD5 — Eine Chronik des Versagens (1996–2025)
MD5 wurde 1991 von Ron Rivest als Ersatz für MD4 entwickelt. Bis 1996 hatte Hans Dobbertin Kollisionen in MD5's Kompressionsfunktion gefunden — nicht im vollständigen Algorithmus, aber ein Warnsignal, dass das Design fragil war. Die Sicherheits-Community begann, die Migration zu SHA-1 zu empfehlen. Die meisten Systeme ignorierten das.
2004 — Vollständige Kollisionen demonstriert
Im August 2004 präsentierten Xiaoyun Wang und Hongbo Yu auf der CRYPTO-Konferenz einen praktischen Kollisionsangriff auf MD5. Sie konnten in weniger als einer Stunde auf einem Cluster zwei verschiedene 1.024-Bit-Nachrichten mit demselben MD5-Hash generieren. Die fundamentale Garantie von MD5 — Kollisionsresistenz — war gebrochen.
Das NIST begann sofort, MD5 für den föderalen Einsatz zu verwerfen. Die meisten Branchenempfehlungen folgten. Der tatsächliche Einsatz von MD5 in Produktionssystemen veränderte sich kaum.
2008 — Gefälschte CA-Zertifikate
Eine Gruppe von Forschern (Sotirov, Stevens u. a.) demonstrierte, dass sie ein gefälschtes Certificate-Authority-Zertifikat erstellen konnten, dem alle großen Browser vertrauen würden. Der Angriff nutzte aus, dass mehrere Zertifizierungsstellen noch Zertifikate mit MD5 signierten. Die Forscher generierten eine Kollision zwischen einer legitim wirkenden Zertifikatsanfrage und einem selbst erstellten CA-Zertifikat — und ließen dann eine echte CA das legitime unterzeichnen, was eine Signatur erzeugte, die auch für das gefälschte CA-Zertifikat gültig war.
Jeder große Browser blockierte sofort MD5-signierte Zertifikate. Die meisten Zertifizierungsstellen hörten auf, sie auszustellen. Eine wichtige Lektion: Kryptografische Schwächen werden ausnutzbar in dem Moment, in dem ein Angreifer die Eingabe für die Hash-Funktion kontrolliert.
2012 — Flame-Malware
Die Flame-Cyberspionage-Malware, 2012 entdeckt und staatlichen Akteuren zugeschrieben, fälschte ein Microsoft-Windows-Update-Zertifikat unter Verwendung einer Chosen-Prefix-MD5-Kollision. Der Angriff war ausgefeilter als die Demonstration von 2008: Angreifer konnten eine bösartige Nutzlast erstellen, die unter Bedingungen mit einem legitimen Microsoft-Zertifikat kollidierte, bei denen Microsofts Signierinfrastruktur unwissentlich kooperieren würde.
Das Ergebnis: Flame konnte sich über Windows Update verteilen, als wäre es ein legitimes Microsoft-Update, mit einer gültigen Microsoft-Signatur. Hunderttausende Windows-Rechner im Iran, Libanon, Syrien und Sudan wurden infiziert. Das war eine reale Ausnutzung von MD5-Kollisionsangriffen auf staatlichem Niveau. Weitere Details finden Sie im Wikipedia-Artikel zur Flame-Malware.
2019–2025 — HashClash und sofortige Kollisionen
Das HashClash-Projekt (Marc Stevens, CWI Amsterdam) trieb die MD5-Kollisionsgenerierung an praktische Grenzen. Bis 2019 konnten Chosen-Prefix-MD5-Kollisionen — bei denen ein Angreifer beliebige Präfixe für beide kollidierenden Nachrichten wählen kann — in Tagen auf Consumer-Hardware generiert werden. Bis 2022 reduzierten optimierte Implementierungen das auf Stunden. In 2024 demonstrierte ein HashClash-Paper Kollisionen in unter einer Minute auf einer einzigen modernen GPU.
Die Trajektorie ist klar: MD5-Kollisionsangriffe werden nicht schwieriger, wenn Hardware besser wird — sie werden einfacher. Was 2004 einen Cluster erforderte, schafft 2026 ein Laptop.
SHA-256 — Warum es standhält
SHA-256 ist Teil der SHA-2-Familie, von der NSA entwickelt und 2001 vom NIST standardisiert. Es erzeugt einen 256-Bit-(32-Byte-)Digest. Gegen SHA-256 sind ab 2026 keine praktischen Kollisionsangriffe bekannt. Die besten veröffentlichten Angriffe reduzieren den theoretischen Arbeitsaufwand für das Finden von Kollisionen auf ca. 2^187 Operationen — immer noch weit jenseits aller existierenden oder absehbaren Rechenressourcen.
SHA-256's Sicherheitsmarge ist bewusst konservativ. Selbst wenn sich Hardware um einen Faktor einer Milliarde verbessert (ca. 30 Verdoppelungen nach dem Mooreschen Gesetz), bleibt das Brechen von SHA-256 rechnerisch nicht machbar. MD5's effektiver Arbeitsaufwand von 2^18 bis 2^23 für Kollisionen war 2004 mit bescheidener Hardware erreichbar.
SHA-256 ist auch schneller als Sie vielleicht erwarten: Moderne CPUs umfassen dedizierte SHA-Anweisungen (Intel SHA Extensions, ARM Cryptography Extensions), mit denen Software Millionen von SHA-256-Hashes pro Sekunde und Kern berechnen kann. Für typische Anwendungsfälle ist es nicht nennenswert langsamer als MD5.
Wann MD5 noch akzeptabel ist (selten)
"Gebrochen" bedeutet nicht "für jeden Zweck nutzlos". MD5 bleibt akzeptabel in Kontexten, wo:
- Es keinen Angreifer gibt: das Erkennen versehentlicher Dateibeschädigung in einem vertrauenswürdigen internen System — nicht das Verifizieren von Downloads aus dem Internet, sondern das Prüfen, ob eine Dateikopie erfolgreich abgeschlossen wurde.
- Geschwindigkeit wichtiger ist als Sicherheit: das Berechnen von Cache-Schlüsseln oder Shard-Bezeichnern, bei denen eine Kollision einfach einen Cache-Miss bedeutet, keine Sicherheitsverletzung. Das Angreifer-Modell ist abwesend.
- Sie ein bestehendes externes System abgleichen: Einige Legacy-APIs senden noch MD5-ETags oder Prüfsummen. Sie können MD5 akzeptieren und berechnen, um zu interoperieren, solange Sie es nicht für Sicherheitsentscheidungen verwenden.
- Hash-Tabellen-Partitionierung: Daten über Buckets durch MD5 eines Schlüssels verteilen. Kollisionen hier verursachen Ungleichgewicht, keine Sicherheitsversagen.
Der gemeinsame Faden: MD5 ist akzeptabel, wenn die Anwendung nicht auf Kollisionsresistenz angewiesen ist und kein Angreifer vorhanden ist, der Eingaben erstellen kann. Sobald eine dieser Bedingungen bricht — Angreifer vorhanden oder Kollision = Sicherheitsversagen — wechseln Sie zu SHA-256.
Häufige Mythen über MD5
"MD5 ist in Ordnung, wenn wir ein Salt hinzufügen"
Salting ändert die Eingabe, sodass zwei Nutzer mit demselben Passwort unterschiedliche Hashes erhalten — es verhindert Rainbow-Table-Angriffe. Es behebt aber nicht das Kollisionsproblem. Ein Angreifer mit dem gesalteten MD5-Hash kann ihn noch effizient brute-force-cracken, weil MD5 schnell ist: Moderne GPUs berechnen ca. 10–30 Milliarden MD5-Hashes pro Sekunde. Ein Salt fügt Aufwand proportional zum Suchraum hinzu, nicht zur Schwierigkeit des Algorithmus.
Für Passwort-Hashing ist weder MD5 noch SHA-256 angemessen, unabhängig von Salting. Verwenden Sie bcrypt, scrypt oder Argon2.
"MD5 ist in Ordnung, weil wir es nur intern verwenden"
Interne Systeme werden gehackt. Das Bedrohungsmodell "Angreifer kann nicht auf unsere Eingaben zugreifen" hält meist bis zu einem Supply-Chain-Angriff, einer Insider-Bedrohung oder einer Fehlkonfiguration, die das System exponiert. Der Flame-Angriff ereignete sich gegen Systeme, die vermutlich ähnliches Vertrauen in ihre internen Kontrollen hatten.
"SHA-256 ist übertrieben — MD5 ist schneller"
Auf moderner Hardware mit SHA-Beschleunigungsanweisungen ist SHA-256 ca. 2–5x langsamer als MD5. Für die meisten Anwendungen — Dateiintegritätsprüfungen, API-Signaturen, Cache-Schlüssel — ist der Unterschied Mikrosekunden pro Operation, in der Praxis nicht wahrnehmbar. Das Leistungsargument für MD5 gegenüber SHA-256 gilt nur in extrem hochdurchsatzstarken Szenarien, in denen sogar Mikrosekunden wichtig sind, und selbst dann gibt es meist bessere Lösungen als einen gebrochenen Algorithmus zu verwenden.
Migrationsanleitung — MD5 zu SHA-256
Passwort-Hashing
// FALSCH: MD5 für Passwort-Hashing
const crypto = require('crypto');
const hash = crypto.createHash('md5').update(password).digest('hex');
// Crack time with modern GPU: seconds to minutes // FALSCH: SHA-256 für Passwort-Hashing (noch zu schnell)
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update(password).digest('hex');
// RICHTIG: bcrypt, scrypt oder Argon2 für Passwörter verwenden
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 12); Die Migration gespeicherter Passwort-Hashes erfordert einen schrittweisen Ansatz. Bei jeder erfolgreichen Anmeldung: das Passwort gegen den vorhandenen MD5-Hash verifizieren, dann sofort mit bcrypt neu hashen und den gespeicherten Wert ersetzen. Jedes Konto als migriert markieren. Nach einer angemessenen Frist (typischerweise 90 Tage) eine Passwort-Zurücksetzung für alle verbleibenden Konten erzwingen, die noch MD5-Hashes verwenden.
Dateiintegrität / Prüfsummen
# Linux: Datei-Download verifizieren
sha256sum -c ubuntu-24.04-desktop-amd64.iso.sha256
# macOS
shasum -a 256 ubuntu-24.04-desktop-amd64.iso
# Windows PowerShell
Get-FileHash ubuntu-24.04-desktop-amd64.iso -Algorithm SHA256 Das Umstellen von Dateiintegritätsprüfungen von MD5 auf SHA-256 ist in der Regel ein einfaches Suchen-und-Ersetzen im Code. Die zwei Fallstricke: (1) Bestehende Prüfsummen, die in Datenbanken oder Dateien gespeichert sind, müssen neu berechnet und aktualisiert werden — es gibt keine Abkürzung; (2) Externe APIs oder Speichersysteme, die MD5-ETags bereitstellen (wie manche S3-Konfigurationen), erfordern Koordination beim Umstellen.
HMAC für API-Authentifizierung
// HMAC-SHA-256 für Nachrichtenauthentifizierung
const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', process.env.SECRET_KEY)
.update(message)
.digest('hex'); Wenn Sie HMAC-MD5 für API-Request-Signing verwenden, wechseln Sie zu HMAC-SHA-256. Die HMAC-Konstruktion fügt einen geheimen Schlüssel hinzu, was einige MD5-Angriffe begrenzt, aber HMAC-MD5 hat Length-Extension-Schwachstellen und das zugrundeliegende Primitiv ist noch kompromittiert. Moderne Standards (JWT, AWS SigV4, OAuth 2.0) spezifizieren alle HMAC-SHA-256. Toova's HMAC Generator unterstützt sowohl HMAC-SHA-256 als auch HMAC-SHA-512 zum Testen.
Digitale Signaturen und Zertifikate
Jedes mit MD5 signierte Zertifikat sollte sofort neu ausgestellt werden — die meisten Zertifizierungsstellen haben nach 2008 aufgehört, MD5-signierte Zertifikate auszustellen, und alle großen Browser und Betriebssysteme lehnen sie ab. Für interne PKI: Ihre CA-Konfiguration auditieren und sicherstellen, dass SHA-256 der mindestens erlaubte Signaturalgorithmus ist. RSA-SHA256 oder ECDSA-SHA256 sind die aktuellen Standards.
MD5 vs SHA-256 — Kurzreferenz
| Eigenschaft | MD5 | SHA-256 |
|---|---|---|
| Ausgabelänge | 128 Bit (32 Hex-Zeichen) | 256 Bit (64 Hex-Zeichen) |
| Kollisionsresistenz | Gebrochen (praktische Angriffe) | Sicher (keine bekannten Angriffe) |
| Passwort-Hashing | Niemals | Nein (bcrypt/Argon2 verwenden) |
| Digitale Signaturen | Niemals | Ja |
| Dateiintegrität (Sicherheit) | Niemals | Ja |
| Nicht-sicherheitsrelevante Prüfsummen | Akzeptabel (kein Angreifer) | Immer in Ordnung |
| Cache-Schlüssel | Akzeptabel | Immer in Ordnung |
| TLS-Zertifikatssignierung | Von Browsern abgelehnt | Standard |
| FIPS 140-3-konform | Nein (veraltet) | Ja |
Fazit
MD5 ist seit 2004 kryptografisch gebrochen. Chosen-Prefix-Kollisionen — die Technik, die die Flame-Malware antrieb — sind jetzt rechnerisch günstig. Jede Anwendung, die auf MD5 für Sicherheit angewiesen ist (Signaturen, Integritätsprüfung, Authentifizierung), ist anfällig für Angriffe, die Minuten Rechenzeit kosten.
SHA-256 hat keine bekannten praktischen Angriffe, ist auf modernen CPUs hardware-beschleunigt und ist der Standard für kryptografische Integrität in TLS, Code-Signierung und API-Authentifizierung. Die Leistungskosten im Vergleich zu MD5 sind für nahezu jeden Anwendungsfall vernachlässigbar.
Der Migrationspfad ist unkompliziert: Dateiintegritätsprüfungen sind ein Suchen-und-Ersetzen. API-Signaturen erfordern die Koordination eines Versions-Bumps. Passwort-Hashes benötigen eine schrittweise Neuberechnung beim Login. Für jeden neuen Code sollte SHA-256 die Standardwahl sein. Hashes berechnen und vergleichen Sie direkt mit Toova MD5 und Toova SHA-256 — oder generieren Sie HMAC-SHA-256-Authentifizierungscodes mit dem HMAC Generator.