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 très répandus dans les bases de code de production bien qu'ils soient cryptographiquement cassés depuis des décennies. MD5 est considéré comme non sécurisé depuis 2004, et 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 de l'intégrité, alors que les attaques par collision et les attaques par préimage posent de réels risques pour la 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 pratiques avec les ressources de l'informatique en nuage.
Pourquoi c'est important
Implications en matière de sécurité : MD5 et SHA-1 sont vulnérables aux attaques par collision lorsque deux entrées différentes produisent le même résultat de hachage. Les attaquants exploitent ce phénomène pour créer des fichiers malveillants dont le hachage est identique à celui de fichiers légitimes, contournant ainsi les contrôles d'intégrité. Pour le stockage des mots de passe, ces algorithmes sont catastrophiquement faibles parce qu'ils sont rapides, rendant triviales les attaques par force brute et par table arc-en-ciel. 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 déchiffré en quelques heures.
Conformité et risque juridique : Les normes de sécurité telles que 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 risque de bloquer l'accès à vos services.
Maintenabilité du code : Lorsque des algorithmes de hachage obsolètes sont découverts dans le code, il faut immédiatement y remédier. Cela crée une dette technique qui s'alourdit au fil du temps, car la migration devient plus difficile à mesure que les données s'accumulent. L'adoption précoce d'algorithmes sécurisés permet d'éviter les migrations futures coûteuses et les correctifs de sécurité d'urgence.
Extension 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 craquage 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 ne demande 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 des mots de passe n'offre aucune sécurité contre les outils de piratage modernes. SHA-1 pour l'intégrité des fichiers peut être déjoué par des attaques par collision, ce qui permet à des fichiers malveillants de passer la vérification. Les deux algorithmes sont peu coûteux en termes de calcul et peuvent être forcés de manière 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) rend le craquage de mots de passe exponentiellement plus lent. SHA-256 pour l'intégrité des fichiers est résistant aux collisions et ne fait l'objet d'aucune attaque pratique connue. Les deux algorithmes répondent aux normes de sécurité actuelles et aux exigences de conformité.
Conclusion
MD5 et SHA-1 n'ont pas leur place dans les codes sensibles à la sécurité. Leurs vulnérabilités sont bien documentées, les moyens de les exploiter sont accessibles au public et il existe des alternatives sûres dans tous les principaux langages. 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 de l'intégrité. Chaque jour où ces algorithmes faibles restent en production augmente votre surface d'attaque.
.avif)
