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.
.avif)
