Utilo

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:

  1. ** Vorbilderbeständigkeit:** Bei einer Verarbeitung ist es unmöglich, einen Eingang zu finden, der sie erzeugt.
  2. Widerstand gegen das zweite Vorbild: Bei einem Eingang ist es unmöglich, einen anderen Eingang mit demselben Digest zu finden.
  3. 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.

Verwandte Ratgeber