Aikido

MD5 und SHA-1 nicht mehr verwenden: Modernes Hashing für 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+

Einführung

MD5 und SHA-1 sind nach wie vor in Produktionscodebasen weit verbreitet, obwohl sie seit Jahrzehnten kryptografisch gebrochen sind. MD5 gilt seit 2004 als unsicher, SHA-1 seit 2017. Dennoch verwenden Entwickler sie weiterhin für das Hashing von Passwörtern, digitale Signaturen und die Integritätsprüfung, wo Kollisionsangriffe und Preimage-Angriffe echte Sicherheitsrisiken darstellen. Der Rechenaufwand für die Erzeugung von MD5-Kollisionen ist inzwischen trivial, und SHA-1-Kollisionsangriffe sind mit Cloud-Computing-Ressourcen praktikabel.

Warum das wichtig ist

Auswirkungen auf die Sicherheit: MD5 und SHA-1 sind anfällig für Kollisionsangriffe, bei denen zwei unterschiedliche Eingaben die gleiche Hash-Ausgabe erzeugen. Angreifer nutzen dies aus, um bösartige Dateien mit demselben Hash-Wert wie legitime Dateien zu erstellen und so die Integritätsprüfungen zu umgehen. Für die Speicherung von Passwörtern sind diese Algorithmen katastrophal schwach, weil sie schnell sind und Brute-Force- und Rainbow-Table-Angriffe trivial machen. Ein moderner Grafikprozessor kann Milliarden von MD5-Hashes pro Sekunde berechnen, was bedeutet, dass ein 8-Zeichen-Passwort innerhalb weniger Stunden geknackt werden kann.

Compliance und rechtliche Risiken: Sicherheitsstandards wie PCI DSS, HIPAA und SOC 2 verbieten ausdrücklich MD5 und SHA-1 für kryptografische Zwecke. Ihre Verwendung in regulierten Umgebungen führt zu Prüfungsfehlern und rechtlicher Haftung. Die wichtigsten Browser warnen Benutzer, wenn sie auf SHA-1-Zertifikate stoßen, was das Vertrauen erschüttert und möglicherweise den Zugriff auf Ihre Dienste blockiert.

Wartungsfreundlichkeit des Codes: Wenn veraltete Hashing-Algorithmen im Code entdeckt werden, müssen sie sofort behoben werden. Dies führt zu technischen Schulden, die sich im Laufe der Zeit erhöhen, da die Migration schwieriger wird, je mehr Daten anfallen. Die frühzeitige Einführung sicherer Algorithmen verhindert kostspielige künftige Migrationen und Sicherheitspatches für Notfälle.

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

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 Hashing von Passwörtern bietet keine Sicherheit gegen moderne Cracking-Tools. SHA-1 für die Dateiintegrität kann durch Kollisionsangriffe überwunden werden, so dass bösartige Dateien die Überprüfung passieren können. Beide Algorithmen sind rechnerisch billig zu erzwingen.

✅ 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 hoher Iterationszahl (310.000) macht das Knacken von Passwörtern exponentiell langsamer. SHA-256 für die Dateiintegrität ist kollisionssicher, und es sind keine praktischen Angriffe bekannt. Beide Algorithmen erfüllen die aktuellen Sicherheitsstandards und compliance .

Schlussfolgerung

MD5 und SHA-1 haben in sicherheitsrelevantem Code nichts zu suchen. Ihre Schwachstellen sind gut dokumentiert, Exploits sind öffentlich zugänglich, und sichere Alternativen gibt es in jeder wichtigen Sprache. Der Weg zur Migration 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 es akzeptabel, MD5 oder SHA-1 zu verwenden?

Nur in nicht sicherheitsrelevanten Kontexten, in denen keine Kollisionssicherheit erforderlich ist: Cache-Schlüssel, ETags für die Verteilung nicht sensibler Inhalte oder Prüfsummen zur Erkennung versehentlicher Datenverfälschungen (nicht böswilliger Manipulationen). Selbst dann muss dokumentiert werden, warum der schwächere Algorithmus akzeptabel ist. Für die Authentifizierung, Autorisierung, Integritätsprüfung oder kryptografische Signierung 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 zu widerstehen. Argon2 ist der moderne Standard und hat 2015 die Password Hashing Competition gewonnen. Vermeiden Sie es, allgemeine Hash-Funktionen wie SHA-256 direkt für Passwörter zu verwenden, da sie zu schnell sind. Wenn Sie SHA-256 verwenden müssen, verpacken Sie es in PBKDF2 mit mindestens 310.000 Iterationen.

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

SHA-256 ist derzeit sicher und wird weitgehend unterstützt. SHA-3 (Keccak) bietet noch stärkere Sicherheitsgarantien mit einer anderen internen Struktur, die für den Fall, dass SHA-2 jemals geknackt wird, einen umfassenden Schutz bietet. Für die meisten Anwendungen ist SHA-256 ausreichend. Verwenden Sie SHA-512 für zusätzliche Sicherheit oder wenn Sie mit sehr großen Datensätzen arbeiten. Beide sind resistent gegen bekannte Kollisions- und Preimage-Angriffe.

Wie kann ich vorhandene MD5/SHA-1-Hashes migrieren, ohne alles zu zerstören?

Bei Passwörtern sollten Sie während der Migration eine doppelte Hash-Funktion implementieren: Behalten Sie die alten Hash-Werte vorübergehend bei, aber wenn sich die Benutzer erfolgreich anmelden, hacken Sie ihr Passwort mit dem neuen Algorithmus neu und aktualisieren Sie die Datenbank. Bei API-Tokens oder Integritäts-Hashes sollten Sie das Hash-Format variieren (z. B. md5:abc123 vs. sha256:def456), damit die Systeme während der Umstellung mit beiden umgehen können. Legen Sie eine Frist für die Migration fest und zwingen Sie die verbleibenden Benutzer, sich nach diesem Datum zurückzusetzen.

Gibt es Leistungsunterschiede zwischen diesen Algorithmen?

Ja, aber nicht in einer Weise, die für die Sicherheit von Bedeutung ist. MD5 ist schneller als SHA-256, und genau das ist das Problem beim Hashing von Kennwörtern, wo Langsamkeit ein Merkmal ist. Für die Dateiintegrität ist der Leistungsunterschied auf moderner Hardware vernachlässigbar. SHA-256 verlängert Operationen, die normalerweise eine in Millisekunden gemessene Festplatten-E/A beinhalten, um Mikrosekunden. Der Sicherheitsvorteil überwiegt bei weitem die Kosten für die Leistung.

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 Probleme mit compliance . HMAC-SHA-256 ist für den Einsatz auf Bundesebene zugelassen (FIPS 198-1) und erfüllt alle wichtigen Sicherheitsstandards.

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

Suche nach gängigen Mustern: md5, sha1, MessageDigest.getInstance("MD5"), hashlib.md5(), crypto.createHash('md5'). Überprüfen Sie die Abhängigkeits-Konfigurationen für SSL/TLS-Einstellungen mit SHA-1-Zertifikaten. Überprüfen Sie API-Integrationen mit Drittanbietern, die diese Algorithmen erfordern könnten. Automatisierte Code-Scan-Tools können diese Muster über mehrere Sprachen hinweg erkennen und sie zur Überprüfung markieren.

Starten Sie kostenlos

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

Keine Kreditkarte erforderlich | Scanergebnisse in 32 Sekunden.