Accueil
  • #sécurité
  • #hash
  • #outils

MD5, SHA-1, SHA-256 : différences et lequel choisir

Par · · 4 min de lecture

Sur une page de téléchargement, à côté d’une image disque, on trouve une longue suite de caractères hexadécimaux : un hash, souvent en SHA-256, parfois encore en MD5. Il permet de vérifier que le fichier reçu est bien celui qui a été publié. Mais tous les algorithmes ne se valent pas.

Voici ce qu’est un hash, ce qui distingue MD5, SHA-1 et SHA-256, comment vérifier l’intégrité d’un fichier, et pourquoi SHA-256 seul est une mauvaise idée pour un mot de passe.

Ce qu’est un hash#

Une fonction de hachage transforme des données de n’importe quelle taille en une empreinte de longueur fixe. Elle a trois propriétés utiles :

  • Déterministe : le même contenu donne toujours la même empreinte.
  • Sensible au moindre changement : modifier un seul caractère bouleverse tout le résultat.
  • À sens unique : on ne peut pas retrouver le contenu à partir de l’empreinte.
SHA-256("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
SHA-256("Abc") = 06d90109c8cce34ec0c776950465421e176f08b831a938b3c6e76cb7bee8790b

Une seule majuscule change tout. À ne pas confondre avec l’encodage, qui se renverse sans clé, comme l’explique l’article sur le Base64.

MD5, SHA-1 et SHA-256 : les différences#

  • MD5 (empreinte de 128 bits, 32 caractères hexadécimaux) est cassé depuis longtemps : on sait fabriquer deux contenus différents qui ont le même MD5 (une collision). Il peut détecter une corruption accidentelle, jamais servir à la sécurité.
  • SHA-1 (160 bits, 40 caractères) a connu sa première collision publique en 2017 et a été abandonné pour les certificats. Git l’a longtemps utilisé pour identifier ses objets.
  • SHA-256 (256 bits, 64 caractères) fait partie de la famille SHA-2, avec SHA-384 et SHA-512. Aucune attaque pratique connue ne le met en défaut : c’est le choix par défaut.

Pour tout nouvel usage lié à la sécurité, n’employez ni MD5 ni SHA-1.

Vérifier l’intégrité d’un fichier ou d’un texte#

Calculez l’empreinte de votre copie et comparez-la à celle publiée : si elles sont identiques, le contenu l’est aussi, octet pour octet.

Pour du texte, attention aux détails invisibles. bonjour et bonjour suivi d’un retour à la ligne n’ont pas le même SHA-256 : 2cb4b143… pour le premier, 9cec0af5… pour le second. Un espace final ou une fin de ligne Windows suffisent à faire échouer la comparaison.

Une limite : un hash publié sur la même page que le fichier protège d’une erreur de téléchargement, pas d’un site compromis dont l’attaquant aurait modifié les deux. Pour garantir l’authenticité, préférez une signature ou un hash obtenu par un autre canal.

Pourquoi ne pas hacher un mot de passe avec SHA-256 brut#

SHA-256 est conçu pour être rapide : parfait pour vérifier un fichier, désastreux pour un mot de passe. Un attaquant qui obtient une base d’empreintes peut tester de l’ordre de milliards de candidats par seconde sur un processeur graphique. Sans sel (une valeur aléatoire propre à chaque utilisateur), deux personnes ayant le même mot de passe ont la même empreinte, et des tables précalculées les retrouvent.

On stocke donc les mots de passe avec des algorithmes volontairement lents et salés : Argon2id, bcrypt, scrypt ou PBKDF2. Côté utilisateur, un mot de passe long et unique reste la meilleure défense (voir les mots de passe solides).

Calculer un hash avec l’outil#

Le générateur de hash calcule les empreintes dans votre navigateur, avec l’API Web Crypto :

  1. Choisissez la Source : Texte (encodé en UTF-8) ou Fichier, qui n’est jamais envoyé.
  2. Lisez les empreintes SHA-1, SHA-256, SHA-384 et SHA-512, en « Hex minuscules », « Hex MAJUSCULES » ou Base64, chacune avec son bouton de copie. SHA-1 est signalé comme ancien.
  3. Collez le hash publié dans « Hash attendu » : l’outil affiche « Correspond » avec l’algorithme trouvé, ou « Ne correspond pas ».
  4. Pour authentifier un message (signature d’un webhook, par exemple), cochez « Calculer un HMAC » : le hash est combiné à la clé secrète que vous saisissez.

L’outil ne propose pas MD5, que les navigateurs ne fournissent pas. Si une page n’en publie qu’un, le terminal du système fait l’affaire :

md5 fichier.iso            # macOS
md5sum fichier.iso         # Linux
shasum -a 256 fichier.iso  # macOS, SHA-256
sha256sum fichier.iso      # Linux, SHA-256

Un hash n’est pas un identifiant : pour cela, un générateur d’UUID convient mieux.

Quel algorithme choisir#

  • Vérifier un téléchargement : SHA-256, ou MD5 si c’est tout ce qui est publié et que le risque est une corruption accidentelle.
  • Authentifier un message : HMAC-SHA-256.
  • Stocker un mot de passe : Argon2id, bcrypt ou scrypt, jamais un SHA brut.
  • Tout nouvel usage : SHA-256 ou plus, ni SHA-1 ni MD5.

Outils utilisés dans cet article

À lire aussi