Aikido

Verzichten Sie auf MD5 und SHA-1: Modernes Hashing für mehr Sicherheit

Sicherheit

Regel
Nicht verwenden veraltete Hashing Algorithmen es sei denn, kontextuell 
gerechtfertigt.vermeiden Sie die Verwendung von veraltete Hashing Algorithmen (MD5, SHA-1)
in jeder sicherheitssensiblen Kontext. Diese sind kryptographisch
gebrochen, einfach zu zu erzwingen, und Schaden System Wartbarkeit.

Unterstützte Sprachen: 45+

Einleitung

MD5 und SHA-1 sind in Produktions-Codebasen immer noch weit verbreitet, obwohl sie seit Jahrzehnten kryptografisch gebrochen sind. MD5 gilt seit 2004 als unsicher, SHA-1 seit 2017. Dennoch verwenden Entwickelnde sie weiterhin für Passwort-Hashing, digitale Signaturen und Integritätsprüfung, wo Kollisionsangriffe und Preimage-Angriffe reale Sicherheitsrisiken darstellen. Die Rechenkosten zur Generierung von MD5-Kollisionen sind inzwischen trivial, und SHA-1-Kollisionsangriffe sind mit Cloud-Computing-Ressourcen praktikabel.

Warum es wichtig ist

Auswirkungen auf die Sicherheit: MD5 und SHA-1 sind anfällig für Kollisionsangriffe, bei denen zwei unterschiedliche Eingaben denselben Hash-Output erzeugen. Angreifer nutzen dies aus, um bösartige Dateien mit demselben Hash wie legitime zu erstellen und so Integritätsprüfungen zu umgehen. Für die Passwortspeicherung sind diese Algorithmen katastrophal schwach, da sie schnell sind, was Brute-Force- und Rainbow-Table-Angriffe trivial macht. Eine moderne GPU kann Milliarden von MD5-Hashes pro Sekunde berechnen, was bedeutet, dass ein 8-stelliges Passwort in Stunden geknackt werden kann.

Compliance- und Rechtsrisiko: Sicherheitsstandards wie PCI DSS, HIPAA und SOC 2 verbieten MD5 und SHA-1 explizit für kryptografische Zwecke. Deren Verwendung in regulierten Umgebungen führt zu Audit-Fehlern und rechtlicher Haftung. Gängige Browser warnen Nutzer nun, wenn sie auf SHA-1-Zertifikate stoßen, was das Vertrauen schädigt und den Zugriff auf Ihre Dienste potenziell blockiert.

Code-Wartbarkeit: Wenn veraltete Hashing-Algorithmen im Code entdeckt werden, erfordern sie eine sofortige Behebung. Dies erzeugt technische Schulden, die sich im Laufe der Zeit anhäufen, da die Migration schwieriger wird, je mehr Daten sich ansammeln. Die frühzeitige Einführung sicherer Algorithmen verhindert kostspielige zukünftige Migrationen und Notfall-Sicherheitspatches.

Erweiterung der Angriffsfläche: Schwache Hashing-Algorithmen schaffen mehrere Angriffsvektoren. Passwortdatenbanken werden anfällig für Offline-Cracking. Digitale Signaturen können gefälscht werden. Dateintegritätssysteme können umgangen werden. Jede Verwendung von MD5 oder SHA-1 ist ein potenzieller Sicherheitsvorfall, der darauf wartet, zu geschehen.

Code-Beispiele

❌ Nicht konform:

const crypto = require('crypto');

function hashPassword(password) {
  return crypto.createHash('md5')
    .update(password)
    .digest('hex');
}

function verifyFileIntegrity(fileContent, expectedHash) {
  const hash = crypto.createHash('sha1')
    .update(fileContent)
    .digest('hex');
  return hash === expectedHash;
}

Warum es unsicher ist: MD5 für das Password-Hashing bietet keine Sicherheit gegen moderne Cracking-Tools. SHA-1 für die Dateiintegrität kann durch Kollisionsangriffe umgangen werden, wodurch bösartige Dateien die Verifizierung bestehen können. Beide Algorithmen sind rechnerisch günstig per Brute-Force zu knacken.

✅ Konform:

const crypto = require('crypto');

async function hashPassword(password) {
  const salt = crypto.randomBytes(16);
  return new Promise((resolve, reject) => {
    crypto.pbkdf2(password, salt, 310000, 32, 'sha256', (err, key) => {
      if (err) reject(err);
      resolve({ salt: salt.toString('hex'), hash: key.toString('hex') });
    });
  });
}

function verifyFileIntegrity(fileContent, expectedHash) {
  const hash = crypto.createHash('sha256')
    .update(fileContent)
    .digest('hex');
  return hash === expectedHash;
}

Warum es sicher ist: PBKDF2 mit SHA-256 und einer hohen Iterationsanzahl (310.000) verlangsamt das Knacken von Passwörtern exponentiell. SHA-256 für die Dateiintegrität ist kollisionsresistent ohne bekannte praktische Angriffe. Beide Algorithmen erfüllen die aktuellen Sicherheitsstandards und Compliance-Anforderungen.

Fazit

MD5 und SHA-1 haben in sicherheitssensiblem Code nichts zu suchen. Ihre Schwachstellen sind gut dokumentiert, Exploits sind öffentlich verfügbar, und sichere Alternativen existieren in jeder wichtigen Sprache. Der Migrationspfad ist klar: Verwenden Sie bcrypt, scrypt oder Argon2 für Passwörter und SHA-256 oder SHA-3 für die Integritätsprüfung. Jeder Tag, an dem diese schwachen Algorithmen in der Produktion bleiben, vergrößert Ihre Angriffsfläche.

FAQs

Haben Sie Fragen?

Wann ist die Verwendung von MD5 oder SHA-1 zulässig?

Nur in nicht-sicherheitsrelevanten Kontexten, wo Kollisionsresistenz nicht erforderlich ist: Cache-Schlüssel, ETags für die Verteilung nicht-sensibler Inhalte oder Prüfsummen zur Erkennung unbeabsichtigter Datenkorruption (nicht böswillige Manipulation). Selbst dann dokumentieren Sie, warum der schwächere Algorithmus akzeptabel ist. Für Authentifizierung, Autorisierung, Integritätsprüfung oder kryptografische Signaturen sind diese Algorithmen niemals akzeptabel.

Was sollte ich anstelle von MD5 und SHA-1 für das Passwort-Hashing verwenden?

Verwenden Sie bcrypt, scrypt oder Argon2. Dies sind speziell entwickelte Passwort-Hashing-Funktionen, die Salting beinhalten und absichtlich langsam sind, um Brute-Force-Angriffen standzuhalten. Argon2 ist der moderne Standard und gewann die Password Hashing Competition im Jahr 2015. Vermeiden Sie die direkte Verwendung allgemeiner Hash-Funktionen wie SHA-256 für Passwörter, da diese zu schnell sind. Wenn Sie SHA-256 verwenden müssen, betten Sie es in PBKDF2 mit mindestens 310.000 Iterationen ein.

Was ist mit SHA-256 oder SHA-3 für die Dateintegrität?

SHA-256 ist derzeit sicher und weit verbreitet. SHA-3 (Keccak) bietet noch stärkere Sicherheitsgarantien mit einer anderen internen Struktur und sorgt für Defense-in-Depth, falls SHA-2 jemals kompromittiert wird. Für die meisten Anwendungen ist SHA-256 ausreichend. Verwenden Sie SHA-512 für eine zusätzliche Sicherheitsmarge oder bei der Arbeit mit sehr großen Datensätzen. Beide sind resistent gegen bekannte Kollisions- und Preimage-Angriffe.

Wie migriere ich bestehende MD5-/SHA-1-Hashes, ohne alles zu zerstören?

Für Passwörter implementieren Sie während der Migration Dual-Hashing: Behalten Sie alte Hashes temporär bei, aber wenn sich Benutzer erfolgreich anmelden, hashen Sie ihr Passwort mit dem neuen Algorithmus neu und aktualisieren Sie die Datenbank. Für API-Tokens oder Integritäts-Hashes versionieren Sie Ihr Hash-Format (z. B. md5:abc123 vs. sha256:def456), damit Systeme während des Übergangs beide verarbeiten können. Legen Sie eine Migrationsfrist fest und zwingen Sie verbleibende Benutzer, ihr Passwort nach diesem Datum zurückzusetzen.

Gibt es Leistungsunterschiede zwischen diesen Algorithmen?

Ja, aber nicht in einer Weise, die für die Sicherheit relevant ist. MD5 ist schneller als SHA-256, was genau das Problem beim Passwort-Hashing ist, wo Langsamkeit ein Feature ist. Für die Dateiintegrität ist der Leistungsunterschied auf moderner Hardware vernachlässigbar. SHA-256 fügt Operationen, die typischerweise Disk-I/O im Millisekundenbereich umfassen, Mikrosekunden hinzu. Der Sicherheitsvorteil überwiegt bei Weitem jegliche Leistungskosten.

Was ist mit HMAC mit MD5 oder SHA-1?

HMAC-MD5 und HMAC-SHA-1 sind widerstandsfähiger gegen Angriffe als die Basis-Hash-Funktionen, da HMAC zusätzliche Sicherheitseigenschaften bietet. Sie sind jedoch in den meisten Sicherheitsstandards immer noch veraltet. Verwenden Sie stattdessen HMAC-SHA-256. Der Leistungsunterschied ist minimal und Sie vermeiden Compliance-Probleme. HMAC-SHA-256 ist für die föderale Nutzung zugelassen (FIPS 198-1) und erfüllt alle wichtigen Sicherheitsstandards.

Wie finde ich alle Instanzen von MD5/SHA-1 in meiner Codebasis?

Suchen Sie nach gängigen Mustern: md5, sha1, MessageDigest.getInstance("MD5"), hashlib.md5(), crypto.createHash('md5'). Überprüfen Sie Abhängigkeitskonfigurationen auf SSL/TLS-Einstellungen, die SHA-1-Zertifikate verwenden. Prüfen Sie API-Integrationen mit Drittanbietern, die diese Algorithmen erfordern könnten. Automatisierte Code-Scanning-Tools können diese Muster über mehrere Sprachen hinweg erkennen und zur Überprüfung kennzeichnen.

Werden Sie jetzt sicher.

Sichern Sie Ihren Code, Ihre Cloud und Ihre Laufzeit in einem zentralen System.
Finden und beheben Sie Schwachstellen schnell und automatisch.

Keine Kreditkarte erforderlich | Scan-Ergebnisse in 32 Sek.