Comparatifs Sécurité

MD5, SHA-256 ou bcrypt

MD5 est cassé, SHA-256 est le hachage rapide polyvalent et bcrypt un hachage de mots de passe lent par conception. À quoi sert chacun et lequel choisir.

Dernière vérification :

AdSense Placeholder
Slot: header_reference_page
Sur cette page

Tous trois s'appellent « hachages », mais ils résolvent des problèmes différents. MD5 est un hachage rapide dont la résistance aux collisions est cassée depuis 2004 ; gardez-le pour des sommes de contrôle sans adversaire. SHA-256 est le choix rapide et sûr pour l'intégrité des fichiers, les signatures et HMAC. bcrypt est une fonction de hachage de mots de passe lente par conception, qui sale automatiquement ; utilisez-la (ou Argon2 ou scrypt) pour les mots de passe, jamais MD5 ni SHA-256 seul.

En un coup d'œil

Propriété MD5 SHA-256 bcrypt
Conçu pour Hachage général (1992) Hachage général (famille SHA-2, 2001) Stockage des mots de passe (1999)
Sortie 128 bits, 32 caractères hexadécimaux 256 bits, 64 caractères hexadécimaux Chaîne de 60 caractères avec version, coût, sel et empreinte
Vitesse Très rapide Rapide Lent par conception, réglable
Sel Aucun (à ajouter vous-même) Aucun (à ajouter vous-même) Sel de 128 bits intégré
Facteur de travail Aucun Aucun Paramètre de coût : 2^coût tours
Limite d'entrée Pratiquement aucune Pratiquement aucune Seuls les 72 premiers octets sont utilisés
Résistance aux collisions Cassée : une collision s'obtient en quelques secondes Aucune attaque connue Pas l'objectif
À utiliser pour Sommes de contrôle hors sécurité uniquement Intégrité de fichiers, signatures, HMAC, identifiants de contenu Mots de passe

La même entrée dans chaque fonction :

Fonction Entrée correct horse battery staple
MD5 9cc2ae8a1ba7a93da39b46fc1019c481
SHA-256 c4bbcb1fbec99d65bf59d85c8cb62ee2db963f0fe106f483d9afa73bd4e39a8a
bcrypt, coût 12 $2a$12$dPxev78KNUQr7ZVJEsj1QuHnlgkTm.VnudJ/Cny1cr4OIlm0ogWU.

MD5 et SHA-256 donnent toujours la même sortie pour la même entrée. bcrypt donne une chaîne différente à chaque fois, car il tire un nouveau sel aléatoire ; la chaîne contient la version (2a), le coût (12), le sel de 22 caractères et l'empreinte de 31 caractères, soit tout ce qu'il faut pour vérifier le mot de passe plus tard. Essayez les trois avec le générateur de hachage et le générateur bcrypt.

MD5

MD5 est rapide et omniprésent, mais des collisions pratiques (deux entrées différentes de même empreinte) ont été publiées en 2004, puis des collisions à préfixe choisi, utilisées pour forger un faux certificat d'autorité de certification en 2008 et pour signer le logiciel malveillant Flame en 2012. Un attaquant qui peut influer sur l'entrée peut faire partager une même empreinte MD5 à deux fichiers.

Choisissez MD5 uniquement quand vous détectez des dommages accidentels, comme un téléchargement abîmé en route, sans que personne n'ait intérêt à falsifier une correspondance, ou quand un ancien système ne publie rien d'autre. Même alors, SHA-256 ne coûte guère plus.

SHA-256

SHA-256 appartient à la famille SHA-2 normalisée par le NIST. Aucune attaque pratique par collision ou par préimage n'est connue, et les processeurs modernes disposent d'instructions dédiées. Les gestionnaires de paquets, le nouveau format d'objets de Git, les certificats TLS, la signature de code et Bitcoin reposent dessus.

Choisissez SHA-256 quand il vous faut l'empreinte de données : vérifier un téléchargement avec le calculateur de somme de contrôle de fichier, stockage adressé par contenu, signatures numériques ou code d'authentification de message. Dans ce dernier cas, utilisez HMAC-SHA-256 (essayez le générateur HMAC) plutôt que SHA-256(clé + message), vulnérable aux attaques par extension de longueur.

Ne le choisissez pas pour les mots de passe. Sa rapidité est exactement ce que veut un casseur de mots de passe.

bcrypt

bcrypt repose sur la coûteuse préparation de clé du chiffrement Blowfish, répétée 2^coût fois. Augmenter le coût de un double le travail : générer une empreinte en JavaScript a pris environ 55 ms au coût 10, 105 ms au coût 11 et 213 ms au coût 12 lors de notre test, et un attaquant paie le même prix pour chaque essai. Le sel est généré et stocké pour vous : deux utilisateurs ayant le même mot de passe obtiennent des empreintes différentes.

Choisissez bcrypt quand vous stockez des mots de passe. Il est pris en charge presque partout, y compris dans les fichiers de mots de passe des serveurs web (voir le générateur htpasswd). Attention à la limite de 72 octets : les phrases de passe plus longues sont tronquées sans avertissement. Argon2id, vainqueur de la Password Hashing Competition, est le choix moderne le plus solide quand il est disponible, car il exige aussi beaucoup de mémoire, ce qui freine les attaques sur GPU.

Lequel choisir ?

  • Stocker les mots de passe des utilisateurs : bcrypt (coût 10 à 12 ou plus), ou Argon2id ou scrypt. Jamais MD5 ni SHA-256 seul, salé ou non.
  • Vérifier un fichier ou un téléchargement : SHA-256. MD5 seulement si c'est la seule somme publiée.
  • Signer ou authentifier des messages : HMAC-SHA-256 ou un vrai schéma de signature.
  • Produire des identifiants ou clés de cache à partir du contenu : SHA-256 (tronqué s'il faut plus court).
  • Tout ce qui touche à la sécurité dans du code neuf : pas MD5.

Pour le fonctionnement interne de ces fonctions, voyez Comment fonctionne le hachage.

Essayez ces outils

Voir aussi

  • Guide Comment fonctionne le hachage
    Ce que fait une fonction de hachage, l'effet avalanche avec une vraie sortie SHA-256, quels algorithmes restent sûrs.
  • Glossaire Hachage (hash)
    Un hachage (hash) est l'empreinte de longueur fixe qu'une fonction de hachage calcule à partir d'une entrée ; même entrée, même hachage.
  • Glossaire Sel (salt)
    Un sel (salt) est une valeur aléatoire unique ajoutée à un mot de passe avant le hachage.
  • Glossaire Attaque par force brute
    Une attaque par force brute essaie tous les mots de passe ou clés possibles, ou une énorme liste de ceux qui sont probables.
  • Glossaire Somme de contrôle (checksum)
    Une somme de contrôle (checksum) est une petite valeur calculée à partir de données pour détecter des erreurs accidentelles lors de leur.
  • Glossaire HMAC
    Le HMAC est un hachage calculé avec une clé secrète : il prouve qu'un message vient du détenteur de la clé et n'a pas été modifié.

Questions fréquemment posées

Seulement là où personne n'essaie de vous tromper : repérer une corruption accidentelle, dédoublonner vos propres fichiers ou comparer la somme de contrôle publiée par un ancien système. Jamais pour des signatures, des certificats, des mots de passe ni quoi que ce soit qu'un attaquant pourrait falsifier.

Le sel empêche les tables précalculées et rend différents des mots de passe identiques, mais SHA-256 reste rapide : une base volée peut être attaquée à des milliards d'essais par seconde sur GPU. bcrypt impose à chaque essai une quantité de travail réglable.

Le plus élevé qui garde une connexion confortablement rapide sur votre serveur, souvent quelques centaines de millisecondes. Un coût de 10 à 12 est courant aujourd'hui ; chaque cran de plus double le temps, alors mesurez sur votre propre matériel.

AdSense Placeholder
Slot: footer_leaderboard