Sécurité · 4 min de lecture ·

MD5, SHA-1 ou SHA-256 : quel hachage choisir ?

Sommes de contrôle, intégrité des fichiers, mots de passe et signatures ont chacun leurs besoins. Un guide court pour choisir le bon hachage, et l’erreur à éviter absolument.

Une fonction de hachage transforme n’importe quelle entrée en une empreinte courte de longueur fixe. La même entrée donne toujours le même hachage, et modifier un seul octet change complètement le résultat. Ce qui distingue les algorithmes, c’est la difficulté à les tromper.

"hello"  MD5      5d41402abc4b2a76b9719d911017c592
"hello"  SHA-256  2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5 et SHA-1 : cassés pour la sécurité

On peut produire en quelques secondes deux entrées différentes ayant le même hachage MD5, et des collisions SHA-1 pratiques sont publiques depuis 2017. Ne les utilisez pas pour des signatures, des certificats ou quoi que ce soit qu’un attaquant pourrait falsifier. Ils restent utiles comme sommes de contrôle rapides, par exemple pour repérer des fichiers en double ou construire des clés de cache.

SHA-256 : le choix sûr par défaut

Pour les contrôles d’intégrité, la vérification des téléchargements, les signatures numériques et l’adressage par contenu, SHA-256 de la famille SHA-2 est le choix standard. SHA-3 et BLAKE2 sont des alternatives modernes d’un niveau de sécurité comparable.

CRC32 : contre les accidents, pas les attaques

CRC32 et Adler-32 sont des sommes de contrôle rapides qui détectent les corruptions accidentelles lors des transferts et dans les archives. N’importe qui peut fabriquer volontairement une valeur identique, ils ne protègent donc pas contre la falsification.

Ne jamais stocker des mots de passe avec un hachage rapide

C’est l’erreur la plus courante. La vitesse est exactement ce qu’on ne veut pas pour des mots de passe : une carte graphique peut tester des milliards de hachages SHA-256 par seconde. Utilisez un algorithme lent et salé conçu pour les mots de passe, comme Argon2, bcrypt ou scrypt, via la bibliothèque de mots de passe de votre framework.

Hachage, chiffrement et encodage sont trois choses différentes

Encodage    Base64, hex, URL   réversible par tous, sans clé
Chiffrement AES, RSA           réversible seulement avec la clé
Hachage     SHA-256, MD5       à sens unique, irréversible

Un hash ne se « déchiffre » pas. Les sites qui prétendent inverser le MD5 cherchent simplement le hash dans d’immenses tables d’entrées connues, ce qui marche pour les mots courants et les mots de passe courts et échoue pour tout ce qui est long et aléatoire.

Vérifier un téléchargement

Beaucoup de projets publient une somme de contrôle SHA-256 à côté de leurs téléchargements. Calculez le hash du fichier reçu et comparez les deux valeurs ; si un seul caractère diffère, le fichier est corrompu ou ce n’est pas celui publié par l’éditeur. Chaque système d’exploitation a une commande intégrée :

Linux        sha256sum file.iso
macOS        shasum -a 256 file.iso
Windows      certutil -hashfile file.iso SHA256
PowerShell   Get-FileHash file.iso -Algorithm SHA256

Longueur des hashes

MD5 produit 128 bits (32 caractères hexadécimaux), SHA-1 160 bits (40), SHA-256 256 bits (64) et SHA-512 512 bits (128). Si vous devez prouver qui a créé un message, et pas seulement qu’il n’a pas changé, utilisez un HMAC ou une signature numérique : n’importe qui peut recalculer un simple hash après avoir modifié le contenu.

Lequel choisir, en une ligne

  • Vérifier un téléchargement ou une sauvegarde : SHA-256.
  • Signatures, certificats et tout ce qui touche à la sécurité : SHA-256 ou plus fort, jamais MD5 ni SHA-1.
  • Trouver des fichiers en double ou construire des clés de cache : MD5 ou SHA-1 conviennent et sont rapides.
  • Détecter des erreurs de transmission dans un protocole ou une archive : CRC32.
  • Stocker des mots de passe : aucun d’eux ; utilisez Argon2, bcrypt ou scrypt.

Pourquoi vos hachages ne correspondent pas

Si deux outils donnent des hachages différents pour le « même » texte, l’entrée n’est presque jamais identique : un saut de ligne final, des fins de ligne Windows ou un autre encodage de texte changent tout le résultat. Le générateur de hachage de 4Dev hache le texte en octets UTF-8, comme md5sum, sha256sum et hashlib de Python, et prend en charge 17 algorithmes, dont MD5, SHA-1, SHA-2, SHA-3, BLAKE2 et CRC32.

Ouvrir le générateur de hachage

LinkedInXFacebook