MD5 vs. SHA-256: Unterschiede, Sicherheit und wann jeder verwendet werden soll
Vergleichen Sie MD5, SHA-1, SHA-256 und SHA-3: wie Hash-Funktionen funktionieren, warum MD5 kaputt ist, Geschwindigkeit, Prüfsummen, HMAC und der richtige Weg, um Hash-Passwörter zu erstellen.
· 6 Min. Lesezeit
Hash-Funktionen gehören zu den am häufigsten verwendeten Bausteinen in der Software. Sie überprüfen Downloads, entfalten Dateien, unterschreiben API-Anfragen, versorgen Git und Blockchains und schützen gespeicherte Passwörter. MD5 und SHA-256 sind die beiden Namen, denen Entwickler am häufigsten begegnen, und die Frage "kann ich MD5 immer noch verwenden?" taucht ständig auf. Die kurze Antwort: bei allem, was Sicherheit betrifft, nein; bei der Erkennung von versehentlicher Korruption funktioniert es trotzdem. Die längere Antwort erklärt, warum und was stattdessen verwendet werden soll.
Was eine kryptographische Hashfunktion tut
Eine Hash-Funktion nimmt Eingaben beliebiger Länge an und erzeugt eine Ausgabe mit fester Länge, die als Digest bezeichnet wird. MD5 erzeugt 128 Bits (32 Hexzeichen); SHA-256 erzeugt 256 Bits (64 Hexzeichen).
MD5("hello world") = 5eb63bbbe01eeed093cb22bb8f5acdc3
SHA-256("hello world") = b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Ein guter kryptographischer Hash hat drei Sicherheitsmerkmale:
- ** Vorbilderbeständigkeit:** Bei einer Verarbeitung ist es unmöglich, einen Eingang zu finden, der sie erzeugt.
- Widerstand gegen das zweite Vorbild: Bei einem Eingang ist es unmöglich, einen anderen Eingang mit demselben Digest zu finden.
- Kollisionsbeständigkeit: Es ist unmöglich, zwei verschiedene Eingänge mit demselben Verbrennungsgrad zu finden.
Es sollte auch den "Avalanche-Effekt" zeigen: Das Ändern eines einzigen Input-Bits ändert etwa die Hälfte der Ausgabe-Bits, so dass ähnliche Inputs völlig unabhängige Abläufe haben. Versuchen Sie es in einem [Hash-Generator] ((/tools/hash): "Hallo World" und "Hello World!" produzieren Verdacht, der nichts gemeinsam hat.
Eine kurze Geschichte von MD5
Ron Rivest entwarf MD5 1991. Es war schnell und wurde allgegenwärtig: Dateiüberprüfungssummen, Passwortspeicherung, digitale Zertifikate. Innerhalb weniger Jahre zeigten sich Schwachstellen, und 2004 zeigten Forscher praktische Zusammenstöße. Im Jahr 2008 erstellte ein Team ein Schurkenzertifikat, indem es MD5-Kollisionen ausnutzte, und im Jahr 2012 nutzte die Malware Flame eine MD5-Kollision, um Microsoft-Code-Signaturzertifikate zu fälschen. Heute dauert es auf einem Laptop Sekunden, eine MD5-Kollision zu erzeugen.
Preimage-Angriffe auf MD5 bleiben theoretisch, aber die Kollisionsbeständigkeit ist vollständig gebrochen, und das reicht aus, um sie für Signaturen, Zertifikate und Integritätsprüfungen auszuschließen, bei denen ein Angreifer beteiligt sein könnte.
SHA-1: ebenfalls ausgeschlossen
SHA-1, mit 160-Bit-Ausgabe, folgte einem ähnlichen Pfad. Theoretische Schwächen wurden 2005 veröffentlicht, und 2017 produzierten Google und CWI Amsterdam die erste echte Kollision ("SHAttered"): zwei verschiedene PDF-Dateien mit dem gleichen SHA-1-Hash. Browser akzeptieren keine SHA-1-Zertifikate mehr, und Git wandert auf SHA-256 um. Behandeln Sie SHA-1 wie MD5.
SHA-256 und die SHA-2-Familie
SHA-2, veröffentlicht von NIST im Jahr 2001, umfasst SHA-224, SHA-256, SHA-384 und SHA-512. SHA-256 ist die am weitesten verbreitete: TLS-Zertifikate, Code-Unterzeichnung, Bitcoin, Paketmanager, Subressource Integrity, JWT-Signaturen (HS256 und RS256) und vieles mehr. Nach mehr als zwei Jahrzehnten der Analyse gibt es keine praktischen Angriffe gegen seine Kollisions- oder Vorbildfestigkeit.
SHA-512 verwendet 64-Bit-Operationen und ist oft schneller als SHA-256 auf 64-Bit-CPUs ohne Hardwarebeschleunigung. SHA-384 ist eine abgekürzte SHA-512, die auch Längenerweiterungsangriffen widersteht.
SHA-3
SHA-3 (Keccak), das 2015 standardisiert wurde, verwendet ein völlig anderes internes Design eine Schwammkonstruktion , so dass ein Durchbruch gegen SHA-2 es nicht automatisch beeinflussen würde. Es ist nicht so sehr ein Ersatz für SHA-2 als ein Backup mit anderen Eigenschaften. Verwenden Sie es, wenn eine Spezifikation es erfordert; andernfalls bleibt SHA-256 der pragmatische Standard.
Vergleich nebeneinander
| Algorithmus | Ausgangsgröße | Kollisionsbeständigkeit | Status |
|---|---|---|---|
| MD5 | 128 Bits | Bremsen (Sekunden) | Nicht wegen der Sicherheit. |
| SHA-1 | 160 Bits | Broken (2017) | Nicht wegen der Sicherheit. |
| SHA-256 | 256 Bits | Sicher | Empfohlener Standard |
| SHA-512 | 512 Bits | Sicher | Empfohlen |
| SHA3-256 / SHA3-512 | 256 / 512 Bits | Sicher | Empfohlene Alternative |
| BLAKE3 | 256 Bits (erweiterbar) | Sicher | Sehr schnelle, wachsende Annahme |
Geschwindigkeit
MD5 ist schneller als SHA-256 in reiner Software, aber die Lücke ist weniger wichtig, als die Leute denken. Moderne x86- und ARM-Prozessoren enthalten SHA-256-Hardwareanweisungen, die SHA-256 mit einer Geschwindigkeit von Gigabyte pro Sekunde ausführen. In der Praxis ist das Lesen einer Datei von der Festplatte oder dem Netzwerk normalerweise der Engpass, nicht das Hashing. Wenn die Rohgeschwindigkeit für Nichtsicherheitsanwendungen kritisch ist, schlagen BLAKE3 oder nicht-kryptographische Hashes wie xxHash beide.
Wenn MD5 noch akzeptabel ist
Die Kollisionsschwäche von MD5 spielt nur eine Rolle, wenn jemand absichtlich Eingänge herstellen kann. Es bleibt für:
- Erkennung versehentlicher Korruption bei Übertragungen oder Speicherung, wenn kein Angreifer beteiligt ist.
- Cache-Schlüssel und Deduplikation vertrauenswürdiger Daten, z. B. das Verwalten eigener Dateien.
- Legacy-Kompatibilität, z. B. Systeme, die nur MD5-Checksummen veröffentlichen, oder Protokolle, die dies erfordern.
Selbst in diesen Fällen kostet die Wahl von SHA-256 wenig und entfernt die Notwendigkeit zu argumentieren, dass kein Angreifer jemals beteiligt sein könnte. Viele Vorfälle begannen mit einer Schecksumme, die "nur für Korruption" war und später zur Sicherheit verwendet wurde.
Überprüfung der richtigen Downloads
Wenn ein Projekt eine SHA-256-Checksumme veröffentlicht, berechnen Sie den Hash Ihres Downloads und vergleichen Sie jedes Zeichen:
sha256sum ubuntu.iso # Linux
shasum -a 256 ubuntu.iso # macOS
Get-FileHash ubuntu.iso # Windows PowerShell
Eine passende Prüfsumme beweist, dass die Datei mit dem übereinstimmt, was der Herausgeber hashte. Es beweist nicht, dass der Herausgeber legitim ist: Wenn ein Angreifer die Website kontrolliert, kann er sowohl die Datei als auch die Prüfsumme ersetzen. Unterzeichnete Prüfsummen (GPG oder Sigstore) schließen diese Lücke.
HMAC: Hashing mit einem Schlüssel
Ein einfacher Hash beweist Integrität, aber nicht Authentizität jeder kann es berechnen. HMAC kombiniert einen geheimen Schlüssel mit der Nachricht, so dass nur Parteien mit dem Schlüssel das Ergebnis erzeugen oder überprüfen können. Webhooks von Stripe, GitHub und Slack verwenden HMAC-SHA256-Signaturen, und [JWTs, die mit HS256] unterzeichnet sind, sind HMAC-SHA256 unter der Haube.
Erstellen Sie nicht Ihren eigenen Keyed-Hash, indem Sie secret + message verbinden und hashen. Mit MD5, SHA-1 und SHA-256 ist dies anfällig für Längen-Erweiterung Angriffe. Verwenden Sie die Standardkonstruktion HMAC, die jede Sprache bietet. Verwenden Sie beim Vergleich von Signaturen eine Konstante-Zeit-Vergleichsfunktion, um Zeitangriffe zu vermeiden.
Passwörter brauchen ein ganz anderes Tool.
Weder MD5 noch SHA-256 sollten direkt zur Speicherung von Passwörtern verwendet werden. Schnelle Hashes sind hier ein Nachteil: Eine moderne GPU berechnet Milliarden von SHA-256 Hashes pro Sekunde, so dass ein Angreifer, der Ihre Datenbank stiehlt, riesige Listen wahrscheinlicher Passwörter schnell testen kann. Ungesalzte Hashes sind schlimmer, weil vorbereitete Tabellen gängige Passwörter sofort knacken.
Verwenden Sie eine Passwort-Hash-Funktion, die langsam und speicherhaft ist:
- Argon2id der Gewinner des Passwort-Hashing-Wettbewerbs und die aktuelle erste Wahl.
- scrypt Speicher-hard und weit verbreitet.
- bcrypt älter, aber immer noch akzeptabel, mit einer Eingabegrenzung von 72 Bytes.
- PBKDF2 mit einer hohen Iterationszahl wenn die Einhaltung von NIST-zugelassenen Primitiven erfordert.
Diese Funktionen fügen ein einzigartiges Salz pro Passwort und einen konfigurierbaren Kostenfaktor hinzu, den Sie erhöhen können, wenn die Hardware schneller wird. Die Bibliotheken kümmern sich um die Details: Sie rufen hash(password) und verify(password, stored) an.
Codierung von Digests
Digests sind rohe Bytes, die normalerweise als hexadezimal (zwei Zeichen pro Byte) oder Base64 (kompakter) angezeigt werden. Der gleiche SHA-256 Digest ist 64 Hexzeichen oder 44 Base64 Zeichen. Die Subressource Integrity-Attribute verwenden Base64 (sha384-...), während die Checksum-Dateien Hex verwenden. Weitere Informationen zur Codierung finden Sie unter [Base64 erklärt] ((/blog/base64-erklärt).
Entscheidungshilfe
- Integritätsprüfung, Unterschriften, Zertifikate, alles, was mit der Sicherheit zusammenhängt: SHA-256 (oder SHA-512, SHA-3, BLAKE3).
- Authentifizierung von Nachrichten mit einem gemeinsamen Geheimnis: HMAC-SHA256.
- ** Speicherung von Passwörtern:** Argon2id, scrypt oder bcrypt niemals ein einfacher Hash.
- ** Nicht-adversarial Checksums oder Cache-Schlüssel:** MD5 funktioniert, aber SHA-256 ist die sicherere Gewohnheit.
- ** Sehr schnelles nicht-sicherheitsbezogenes Hashing (Hashtabellen, Sharding):** xxHash oder ähnliche nicht-kryptographische Hashes.
Zusammenfassung
MD5 und SHA-1 sind für Kollisionsbeständigkeit gebrochen und dürfen nicht verwendet werden, wenn ein Angreifer von Crafting-Eingängen profitieren könnte. SHA-256 ist sicher, schnell, mit Hardware-Unterstützung und dem richtigen Standard für Integrität und Signaturen. Verwenden Sie HMAC für die Authentifizierung mit Schlüssel und dedizierte langsame Funktionen wie Argon2id für Passwörter. Wenn Sie Zweifel haben, wählen Sie SHA-256 es ist nie die falsche Antwort für Integrität, und MD5 ist zunehmend.
Diese Seite wurde automatisch aus dem Englischen übersetzt. Wenn dir ein Fehler auffällt, sag uns bitte Bescheid.