MD5 vs SHA-256 vs SHA-512 — Hash-Funktionen erklärt
Hash-Funktionen sind überall in der Softwareentwicklung: Dateiintegritätsprüfungen, Passwortspeicherung, digitale Signaturen, API-Authentifizierung, Cache-Schlüssel, Deduplizierung. Dennoch arbeiten die meisten Entwickler mit ihnen wie mit schwarzen Boxen — Sie geben eine Zeichenkette ein und erhalten einen hexadezimalen Digest fester Länge zurück. Die Details darüber, welche Hash-Funktion zu verwenden ist und welche vermieden werden sollten, sind tatsächlich von großer Bedeutung.
MD5 ist gebrochen. SHA-1 ist veraltet. SHA-256 und SHA-512 sind derzeit sicher. SHA-3 existiert, wenn Sie Zukunftssicherheit möchten. Aber "gebrochen" bedeutet nicht in jedem Kontext dasselbe — MD5 ist für einige Anwendungsfälle in Ordnung und für andere katastrophal falsch. Dieser Leitfaden erklärt die relevanten Eigenschaften, wie jede Funktion im Vergleich abschneidet, und gibt Ihnen ein klares Entscheidungsframework für die Wahl des richtigen Hashes im Jahr 2026.
Was eine Hash-Funktion eigentlich macht
Eine kryptografische Hash-Funktion bildet eine Eingabe beliebiger Länge auf eine Ausgabe fester Länge (den Digest oder Hash) ab. Drei Eigenschaften definieren eine kryptografisch sichere Hash-Funktion:
- Preimage-Resistenz — Gegeben einem Hash
hsollte es rechnerisch nicht machbar sein, irgendeine Eingabemzu finden, sodasshash(m) = h. Das ist die "Einweg"-Eigenschaft. - Second-Preimage-Resistenz — Gegeben einer Eingabe
m1sollte es nicht machbar sein, eine andere Eingabem2zu finden, sodasshash(m1) = hash(m2). - Kollisionsresistenz — Es sollte nicht machbar sein, irgendeine zwei verschiedene Eingaben
m1undm2zu finden, sodasshash(m1) = hash(m2).
Eine Funktion, die eine dieser Eigenschaften verletzt, gilt als für kryptografische Verwendung gebrochen. "Nicht machbar" hat hier eine spezifische Bedeutung: Es bedeutet nicht mathematisch unmöglich, sondern erfordert mehr Rechenaufwand als mit aktueller oder absehbarer Hardware praktisch ist.
Darüber hinaus weisen kryptografische Hash-Funktionen den Lawineneffekt auf: Das Ändern eines einzigen Bits in der Eingabe erzeugt eine Ausgabe, die sich in etwa der Hälfte ihrer Bits unterscheidet. Dadurch wird sichergestellt, dass ähnliche Eingaben völlig unterschiedliche Digests erzeugen.
Input: "hello"
MD5: 5d41402abc4b2a76b9719d911017c592 (128-bit / 32 hex chars)
Input: "Hello"
MD5: 8b1a9953c4611296a827abf8c47804d7 (one character change = completely different output) MD5 — Schnell, allgegenwärtig und gebrochen
Geschichte und Design
MD5 (Message Digest 5) wurde 1991 von Ron Rivest entworfen und erzeugt einen 128-Bit-(16-Byte-)Digest. Den Großteil der 1990er Jahre war es die Standardwahl für Dateiintegritätsprüfung, Zertifikatssignierung und Passwort-Hashing. Es ist extrem schnell — eine moderne CPU kann Dutzende Millionen MD5-Hashes pro Sekunde berechnen, und eine GPU kann Milliarden berechnen.
Warum MD5 gebrochen ist
Im Jahr 2004 demonstrierten Xiaoyun Wang und Kollegen einen praktischen Kollisionsangriff gegen MD5 — zwei verschiedene Dateien, die denselben MD5-Hash erzeugen. Der Angriff läuft in Minuten auf Consumer-Hardware. Im Jahr 2008 erstellten Forscher ein unberechtigtes CA-Zertifikat mit einer MD5-Kollision und demonstrierten damit, dass reale PKI-Infrastrukturen anfällig waren. Im Jahr 2012 nutzte die Flame-Malware eine MD5-Kollision, um ein Microsoft-Code-Signing-Zertifikat zu fälschen.
Das NIST hat MD5 offiziell für die meisten kryptografischen Verwendungszwecke verworfen. Zertifizierungsstellen stellten bis 2009 keine MD5-signierten Zertifikate mehr aus. Browser-Hersteller entfernten die Unterstützung für MD5-Zertifikatssignaturen um 2011.
Wann MD5 noch akzeptabel ist
MD5 ist nicht universell nutzlos. Für nicht-sicherheitsrelevante Prüfsummen — zum Erkennen versehentlicher Datenbeschädigung bei Dateiübertragungen, für inhaltsbasierte Adressierung in einem Caching-System, bei dem ein Angreifer die Eingaben nicht beeinflussen kann, oder zur Generierung eindeutiger Bezeichner in einem geschlossenen internen System — bleibt MD5 ausreichend. Der entscheidende Test: Wenn ein Angreifer von der Erstellung einer Kollision profitieren kann, verwenden Sie kein MD5. Wenn es nur auf versehentliche Beschädigungen ankommt, ist MD5 in Ordnung.
- Sicher: interne Deduplizierung, Cache-Schlüssel, nicht-sicherheitsrelevante Erkennung von Dateiänderungen
- Unsicher: Zertifikate, digitale Signaturen, Passwort-Hashing, Datei-Authentizitätsprüfung, Sicherheits-Tokens
SHA-1 — Veraltet, aber noch nicht tot
SHA-1 erzeugt einen 160-Bit-Digest und war der Nachfolger von MD5. Es blieb den Großteil der 2000er Jahre der Standard für Zertifikats- und Code-Signierung. Im Jahr 2017 demonstrierte der SHAttered-Angriff die erste praktische SHA-1-Kollision und erzeugte zwei verschiedene PDF-Dateien mit identischen SHA-1-Hashes mit ca. 110 GPU-Jahren Rechenaufwand — teuer, aber innerhalb staatlicher Budgets und zunehmend zugänglich.
SHA-1 ist vom NIST und allen großen Zertifizierungsstellen veraltet. Es sollte nicht für Zertifikate, Code-Signierung oder neue sicherheitsrelevante Anwendungen verwendet werden. Einige Legacy-Systeme verwenden SHA-1 noch intern, aber eine Migration zu SHA-256 wird dringend empfohlen. Git verwendet SHA-1 noch für die Objektadressierung (obwohl der SHA-256-Übergang im Gange ist), aber dies wird schrittweise abgeschafft.
SHA-256 — Der aktuelle Standard
SHA-256 ist Teil der SHA-2-Familie, wurde von der NSA entwickelt und vom NIST in FIPS 180-4 standardisiert. Es erzeugt einen 256-Bit-(32-Byte-)Digest. SHA-256 wurde seit seiner Veröffentlichung im Jahr 2001 intensiv analysiert und es wurde kein praktischer Angriff gefunden. Es ist der De-facto-Standard für:
- TLS-Zertifikate (praktisch alle heute ausgestellten Zertifikate verwenden SHA-256)
- Code-Signierung (Windows Authenticode, Apple Notarization, JARs)
- HMAC-SHA256 für API-Authentifizierung (AWS Signature v4, GitHub Webhook-Verifizierung)
- JWT-Token-Signaturen (HS256 und RS256 verwenden beide intern SHA-256)
- Blockchain-Transaktions-IDs (Bitcoin verwendet doppeltes SHA-256)
- Dateiintegritätsprüfung in Paketmanagern (npm, pip, apt)
Input: "hello"
SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
(256-bit / 64 hex chars)
SHA-512: 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d
99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
(512-bit / 128 hex chars) Leistung von SHA-256
SHA-256 verwendet intern 32-Bit-Wortoperationen. Auf 32-Bit-Hardware oder älteren CPUs ohne Hardware-Beschleunigung ist es merklich langsamer als MD5. Auf modernen 64-Bit-CPUs mit SHA-Erweiterungen (Intel Goldmont+, AMD Zen+, Apple Silicon, ARM Cortex-A57+) ist SHA-256 hardware-beschleunigt und extrem schnell — oft MD5-Geschwindigkeiten nahekommend. Die meisten Server-Umgebungen haben Hardware-Beschleunigung, sodass SHA-256 in der Praxis für praktisch alle Anwendungen schnell genug ist.
SHA-512 — Breiter, manchmal schneller
SHA-512 erzeugt einen 512-Bit-(64-Byte-)Digest mit intern 64-Bit-Wortoperationen. Auf 64-Bit-Hardware ohne SHA-Erweiterungen kann SHA-512 tatsächlich schneller als SHA-256 sein, weil seine 64-Bit-Operationen die modernen Registerbreiten besser nutzen. Auf Hardware mit SHA-Erweiterungen ist SHA-256 typischerweise schneller, da die Erweiterungen speziell für SHA-256 optimiert sind.
SHA-512 bietet eine größere Sicherheitsmarge — 256-Bit-Kollisionsresistenz gegenüber 128-Bit bei SHA-256. Für die meisten aktuellen Bedrohungsmodelle ist die 128-Bit-Kollisionsresistenz von SHA-256 mehr als ausreichend (ein Bruch würde ca. 2^128 Operationen erfordern). SHA-512 ist geeignet, wenn:
- Sie auf 64-Bit-Servern ohne Hardware-Erweiterungen maximalen Durchsatz anstreben
- Sie längere Digests als Schlüsselmaterial für andere kryptografische Operationen benötigen
- Sie eine zusätzliche Sicherheitsmarge für Daten benötigen, die über Jahrzehnte geschützt bleiben müssen
- Sie Protokolle implementieren, die speziell SHA-512 erfordern (z. B. einige TLS-Cipher-Suites)
SHA-384 und SHA-512/256
SHA-384 ist eine abgeschnittene Version von SHA-512, die 384 Bits erzeugt — nützlich, wenn Sie die 64-Bit-internen Operationen von SHA-512 wollen, aber kürzere Ausgabe benötigen. SHA-512/256 ist eine weitere abgeschnittene Variante, die mit SHA-512's interner Berechnung 256-Bit-Ausgabe erzeugt. SHA-512/256 ist resistent gegen Length-Extension-Angriffe, die SHA-256 betreffen, was es in Kontexten nützlich macht, wo Length-Extension ein Problem ist (obwohl HMAC dies in den meisten praktischen Szenarien bereits abmildert).
SHA-3 — Andere Architektur, zukunftssicher
SHA-3 (standardisiert in NIST FIPS 202, 2015) verwendet die Keccak-Sponge-Konstruktion — ein grundlegend anderes Design als SHA-2's Merkle-Damgard-Struktur. Das ist wichtig, weil jede zukünftig entdeckte Schwäche im Merkle-Damgard-Design gleichzeitig MD5, SHA-1 und SHA-2 betreffen würde, während SHA-3 unberührt bliebe.
SHA-3 ist derzeit sicher und die richtige Wahl für neue Systeme, die langfristige Garantien oder Absicherung gegen zukünftige SHA-2-Schwächen benötigen. Es ist in reinen Software-Implementierungen langsamer als SHA-256. SHA-3 glänzt in Hardware-Implementierungen — sein Design ist sehr effizient in Silizium. SHA-3-256 und SHA-3-512 erzeugen dieselben Digest-Größen wie ihre SHA-2-Entsprechungen.
Vergleichstabelle
| Algorithmus | Ausgabe | Kollisions-Resistenz | Status | Geschwindigkeit (SW) | Für Passwörter? |
|---|---|---|---|---|---|
| MD5 | 128-Bit | Gebrochen | Veraltet | Sehr schnell | Niemals |
| SHA-1 | 160-Bit | Gebrochen | Veraltet | Schnell | Niemals |
| SHA-256 | 256-Bit | 128-Bit | Aktueller Standard | Schnell (HW-Beschl.) | Niemals (zu schnell) |
| SHA-512 | 512-Bit | 256-Bit | Sicher | Schnell auf 64-Bit | Niemals (zu schnell) |
| SHA-3-256 | 256-Bit | 128-Bit | Zukunftssicher | Moderat (SW) | Niemals (zu schnell) |
| bcrypt | 60-Zeichen-String | N/A | Nur für Passwörter | Absichtlich langsam | Ja |
Passwort-Hashing: Ein völlig anderes Problem
Das verdient einen eigenen Abschnitt, weil es einer der häufigsten Fehler ist, die Entwickler machen. SHA-256 ist das richtige Werkzeug für Dateiintegritätsprüfungen, API-Signing und Zertifikatsprüfung. Es ist das falsche Werkzeug für das Hashen von Passwörtern, und seine Verwendung für diesen Zweck führt zu echten Sicherheitsvorfällen.
Das Problem ist die Geschwindigkeit. SHA-256 ist auf Schnelligkeit ausgelegt — eine moderne GPU kann Milliarden von SHA-256-Hashes pro Sekunde berechnen. Ein Angreifer, der Ihre Hashed-Passwort-Datenbank erlangt, kann Milliarden von Passwort-Versuchen pro Sekunde unternehmen. Selbst ein langes, zufälliges Passwort kann schnell geknackt werden, wenn der Hash schnell ist.
// NEVER do this for passwords
const hash = crypto.createHash('sha256').update(password).digest('hex'); // Use bcrypt, scrypt, or Argon2 for passwords
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 12); // cost factor 12 Das Bcrypt Test-Tool ermöglicht es Ihnen, bcrypt-Passwörter im Browser zu hashen und zu verifizieren. Zum Verständnis von bcrypt-Kostenfaktoren und deren Berechnungszeit ist es eine nützliche Referenz bei der Konfiguration des Arbeitsfaktors Ihrer Anwendung.
HMAC: Authentifizierung zu einem Hash hinzufügen
Ein einfacher Hash beweist nichts darüber, wer ihn berechnet hat — jeder, der die Daten hat, kann denselben SHA-256-Hash berechnen. HMAC (Hash-based Message Authentication Code) fügt der Berechnung einen geheimen Schlüssel hinzu und erzeugt so einen Tag, der nur von jemandem reproduziert werden kann, der den Schlüssel kennt. HMAC-SHA256 ist der Standard für:
- Webhook-Signaturverifizierung (GitHub, Stripe, Shopify verwenden alle HMAC-SHA256)
- AWS Signature Version 4 (Request-Signing)
- JWT-HS256-Tokens (HMAC-SHA256 von Header + Payload)
- Cookie-Integrität (Signieren von Session-Cookies zur Verhinderung von Manipulation)
const crypto = require('crypto');
// Sign a message with HMAC-SHA256
const mac = crypto
.createHmac('sha256', secretKey)
.update(message)
.digest('hex');
// Verify: compare in constant time (prevents timing attacks)
const isValid = crypto.timingSafeEqual(
Buffer.from(mac, 'hex'),
Buffer.from(received, 'hex')
);
Beachten Sie die Verwendung von timingSafeEqual für den Vergleich. Das Vergleichen von MAC-Werten mit einer regulären Zeichenkettengleichheitsprüfung gibt Timing-Informationen preis, die bei einem Timing-Angriff ausgenutzt werden können. Verwenden Sie immer eine Vergleichsfunktion mit konstanter Zeit bei der Verifizierung von MACs. Nutzen Sie den HMAC Generator, um HMAC-SHA256-Werte für Tests und Debugging ohne Code zu berechnen.
Praktische Empfehlungen
Allgemeine Dateiintegrität (Prüfsummen)
Verwenden Sie SHA-256. Es ist der Standard für Paketprüfung (npm-Lockfiles, pip-Requirements-Hashes, Docker-Image-Layer). Das SHA-256-Hash-Tool berechnet SHA-256-Digests in Ihrem Browser für Text- oder String-Eingaben. Für schnelle nicht-sicherheitsrelevante Prüfsummen, bei denen Geschwindigkeit entscheidend ist und Sie der Quelle vertrauen, bleibt MD5 akzeptabel, aber SHA-256 ist in jedem geteilten oder automatisierten Kontext vorzuziehen.
TLS-Zertifikate und Code-Signierung
SHA-256 ist der erforderliche Standard. Alle Zertifizierungsstellen stellen SHA-256-Zertifikate aus. Verwenden Sie niemals MD5 oder SHA-1 für neue Zertifikate — sie werden von modernen Browsern und Betriebssystemen abgelehnt.
API-Authentifizierung
Verwenden Sie HMAC-SHA256. Es ist der etablierte Standard, gut unterstützt in allen Sprachen und der von den meisten API-Sicherheitsdokumentationen erwartete Algorithmus. Berechnen Sie Digests mit dem MD5-Hash-Tool oder SHA-256-Hash-Tool für schnelle Vergleiche, und generieren Sie HMAC-Signaturen mit dem HMAC Generator.
Passwort-Hashing
Verwenden Sie bcrypt (Kostenfaktor 12+), scrypt oder Argon2id. Verwenden Sie niemals MD5, SHA-1, SHA-256 oder SHA-512 direkt für Passwörter, auch nicht mit Salt. Das Bcrypt Test-Tool kann Ihnen helfen, bcrypt-Hashes während der Entwicklung zu verifizieren.
Langlebige Daten, die jahrzehntelange Sicherheit erfordern
Bevorzugen Sie SHA-512 oder SHA-3-256. Die größere Digest-Größe bietet zusätzliche Sicherheitsmarge gegen Fortschritte in der Kryptoanalyse. NIST empfiehlt SHA-512 und SHA-3 für Anwendungen, die langfristige Sicherheit erfordern. Weitere Details finden Sie in der offiziellen Spezifikation NIST FIPS 180-4.
Neue Systeme ohne Legacy-Einschränkungen
SHA-256 für allgemeine Zwecke. Argon2id für Passwörter. HMAC-SHA256 für Authentifizierungscodes. Wenn Sie Zukunftssicherheit wünschen und eine etwas geringere Leistung akzeptieren können, ist SHA-3-256 eine solide Alternative zu SHA-256 für allgemeines Hashing.