Règle
Ne pas utiliser obsolètes de hachage périmés à moins qu'ils ne soient contexte
contexte.Évitez d'utiliser obsolètes hachage périmés (MD5, SHA-1)
dans tout contexte sécurité. Ces sont cryptographiques
cassés, faciles facile brute-force, et nuire système la maintenabilité du système.
Langues prises en charge : 45+Introduction
MD5 et SHA-1 restent largement utilisés dans les bases de code en production bien qu'ils soient cryptographiquement cassés depuis des décennies. MD5 est considéré comme non sécurisé depuis 2004, SHA-1 depuis 2017. Pourtant, les développeurs continuent de les utiliser pour le hachage de mots de passe, les signatures numériques et la vérification d'intégrité, où les attaques par collision et les attaques de préimage posent de réels risques de sécurité. Le coût de calcul pour générer des collisions MD5 est désormais trivial, et les attaques par collision SHA-1 sont réalisables avec des ressources de cloud computing.
Pourquoi c'est important
Implications de sécurité : MD5 et SHA-1 sont vulnérables aux attaques par collision, où deux entrées différentes produisent la même sortie de hachage. Les attaquants exploitent cela pour créer des fichiers malveillants ayant le même hachage que des fichiers légitimes, contournant ainsi les vérifications d'intégrité. Pour le stockage des mots de passe, ces algorithmes sont catastrophiquement faibles car ils sont rapides, rendant les attaques par force brute et par table arc-en-ciel triviales. Un GPU moderne peut calculer des milliards de hachages MD5 par seconde, ce qui signifie qu'un mot de passe de 8 caractères peut être craqué en quelques heures.
Risque de conformité et juridique : Les standards de sécurité comme PCI DSS, HIPAA et SOC 2 interdisent explicitement l'utilisation de MD5 et SHA-1 à des fins cryptographiques. Leur utilisation dans des environnements réglementés entraîne des échecs d'audit et une responsabilité juridique. Les principaux navigateurs avertissent désormais les utilisateurs lorsqu'ils rencontrent des certificats SHA-1, ce qui nuit à la confiance et peut potentiellement bloquer l'accès à vos services.
Maintenabilité du code : Lorsque des algorithmes de hachage obsolètes sont découverts dans le code, ils nécessitent une remédiation immédiate. Cela crée une dette technique qui s'accumule avec le temps car la migration devient plus difficile à mesure que les données s'accumulent. L'adoption précoce d'algorithmes sécurisés prévient les migrations futures coûteuses et les correctifs de sécurité d'urgence.
Expansion de la surface d'attaque : Les algorithmes de hachage faibles créent de multiples vecteurs d'attaque. Les bases de données de mots de passe deviennent vulnérables au cassage hors ligne. Les signatures numériques peuvent être falsifiées. Les systèmes d'intégrité des fichiers peuvent être contournés. Chaque utilisation de MD5 ou SHA-1 est un incident de sécurité potentiel qui n'attend qu'à se produire.
Exemples de code
❌ Non conforme :
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;
}
Pourquoi ce n'est pas sûr : MD5 pour le hachage de mots de passe n'offre aucune sécurité contre les outils de cassage modernes. SHA-1 pour l'intégrité des fichiers peut être contourné par des attaques par collision, permettant à des fichiers malveillants de passer la vérification. Les deux algorithmes sont peu coûteux en calcul pour une attaque par force brute.
✅ Conforme :
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;
}Pourquoi c'est sûr : PBKDF2 avec SHA-256 et un nombre élevé d'itérations (310 000) ralentit exponentiellement le cassage de mots de passe. SHA-256 pour l'intégrité des fichiers est résistant aux collisions sans attaques pratiques connues. Les deux algorithmes respectent les normes de sécurité actuelles et les exigences de conformité.
Conclusion
MD5 et SHA-1 n'ont pas leur place dans le code sensible à la sécurité. Leurs vulnérabilités sont bien documentées, des exploits sont publiquement disponibles, et des alternatives sécurisées existent dans tous les langages majeurs. La voie de migration est claire : utilisez bcrypt, scrypt ou Argon2 pour les mots de passe, et SHA-256 ou SHA-3 pour la vérification d'intégrité. Chaque jour où ces algorithmes faibles restent en production augmente votre surface d'attaque.
.avif)
