Utilo

MD5 vs SHA-256: Différences, sécurité et le moment d'utiliser chacun

Comparez MD5, SHA-1, SHA-256 et SHA-3: comment fonctionnent les fonctions de hachage, pourquoi MD5 est cassé, vitesse, somme de contrôle, HMAC et la bonne façon de hacher les mots de passe.

· 7 min de lecture

Les fonctions de hachage sont parmi les blocs de construction les plus utilisés dans les logiciels. Ils vérifient les téléchargements, dédupliquent les fichiers, signent les demandes API, alimentent Git et les blockchains, et protègent les mots de passe stockés. MD5 et SHA-256 sont les deux noms que les développeurs rencontrent le plus souvent, et la question " puis-je toujours utiliser MD5 ? " se pose constamment. La réponse courte: pour tout ce qui concerne la sécurité, non; pour détecter la corruption accidentelle, cela fonctionne toujours. La réponse plus longue explique pourquoi, et ce qu'il faut utiliser à la place.

Ce qu'une fonction de hachage cryptographique fait

Une fonction de hachage prend une entrée de n'importe quelle longueur et produit une sortie de longueur fixe appelée digest. MD5 produit 128 bits (32 caractères hexagonales); SHA-256 produit 256 bits (64 caractères hexagonales).

MD5("hello world")     = 5eb63bbbe01eeed093cb22bb8f5acdc3
SHA-256("hello world") = b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

Un bon hachage cryptographique a trois propriétés de sécurité:

  1. ** Résistance à la préimage:** compte tenu d'un résumé, il est impossible de trouver une entrée qui le produit.
  2. Résistance à la deuxième préimage: étant donné une entrée, il est impossible de trouver une entrée différente avec le même résumé.
  3. ** Résistance aux collisions:** il est impossible de trouver deux entrées différentes avec le même digeste.

Il devrait également montrer l'effet d'avalanche: changer un seul bit d'entrée change environ la moitié des bits de sortie, de sorte que les entrées similaires ont des digestions complètement indépendantes. Essayez dans un [générateur de hachage] ((/outils/hachage): "bonjour monde" et "bonjour monde!" produisent des digestions sans rien en commun.

Une brève histoire du MD5

Ron Rivest a conçu le MD5 en 1991. C'était rapide et il est devenu omniprésent: somme de contrôle de fichiers, stockage de mots de passe, certificats numériques. Les faiblesses sont apparues en quelques années, et en 2004, les chercheurs ont démontré des collisions pratiques. En 2008, une équipe a créé un certificat de l'autorité de certification malveillante en exploitant les collisions MD5, et en 2012, le malware Flame a utilisé une collision MD5 pour falsifier les certificats de signature de code de Microsoft. Aujourd'hui, générer une collision MD5 prend quelques secondes sur un ordinateur portable.

Les attaques de préimage sur MD5 restent théoriques, mais la résistance à la collision est complètement brisée, ce qui suffit à l'exclure pour les signatures, les certificats et les contrôles d'intégrité où un attaquant pourrait être impliqué.

SHA-1: également retiré

SHA-1, avec une sortie de 160 bits, a suivi une voie similaire. Des faiblesses théoriques ont été publiées en 2005, et en 2017, Google et CWI Amsterdam ont produit la première collision réelle ("SHAttered"): deux fichiers PDF différents avec le même hachage SHA-1. Les navigateurs ont cessé d'accepter les certificats SHA-1, et Git migre vers SHA-256. Traitez SHA-1 comme MD5.

SHA-256 et la famille SHA-2

SHA-2, publié par le NIST en 2001, comprend SHA-224, SHA-256, SHA-384 et SHA-512. SHA-256 est le plus largement utilisé: certificats TLS, signature de code, Bitcoin, gestionnaires de paquets, intégrité des sous-ressources, signatures JWT (HS256 et RS256) et bien plus encore. Après plus de deux décennies d'analyse, aucune attaque pratique n'existe contre sa résistance à la collision ou à la préimage.

SHA-512 utilise des opérations 64 bits et est souvent plus rapide que SHA-256 sur les processeurs 64 bits sans accélération matérielle. SHA-384 est un SHA-512 tronqué qui résiste également aux attaques par extension de longueur.

SHA-3

SHA-3 (Keccak), normalisé en 2015, utilise une conception interne complètement différente une construction en éponge afin qu'une percée contre SHA-2 ne l'affecte pas automatiquement. Ce n'est pas un remplacement de SHA-2 autant qu'une sauvegarde avec des propriétés différentes. Utilisez-le lorsqu'une spécification l'exige; sinon, SHA-256 reste le paramètre par défaut pragmatique.

Comparaison parallèle

L' algorithme Taille de sortie Résistance à la collision Le statut
Le MD5 128 bits Fracturé (secondes) Pas pour la sécurité .
SHA-1 160 bits Détruit (2017) Pas pour la sécurité .
SHA-256 256 bits Sécurisé Défaut recommandé
SHA-512 512 bits Sécurisé Recommandé
SHA3-256 / SHA3-512 Les données de base sont fournies à l'adresse suivante: 256 / 512 bits Sécurisé Alternative recommandée
Je ne sais pas. 256 bits (extensibles) Sécurisé Adoption très rapide et croissante

Vitesse

MD5 est plus rapide que SHA-256 dans le logiciel pur, mais l'écart importe moins que les gens ne le pensent. Les processeurs x86 et ARM modernes incluent des instructions matérielles SHA-256, qui permettent à SHA-256 d'exécuter à des gigaoctets par seconde. En pratique, la lecture d'un fichier à partir du disque ou du réseau est généralement le goulot d'étranglement, pas le hachage. Si la vitesse brute est critique pour les utilisations non sécurisées, BLAKE3 ou des hachages non cryptographiques tels que xxHash battent les deux.

Quand MD5 est encore acceptable

La faiblesse de collision de MD5 n'a d'importance que si quelqu'un peut délibérément fabriquer des entrées. Il reste acceptable pour:

  • ** Détecter une corruption accidentelle** dans les transferts ou le stockage quand aucun attaquant n'est impliqué
  • Cache keys et déduplication de données de confiance, par exemple en regroupant vos propres fichiers.
  • ** Compatibilité avec l'ancienne version**, comme les systèmes qui publient uniquement des sommes de contrôle MD5 ou les protocoles qui en ont besoin.

Même dans ces cas, choisir SHA-256 coûte peu et élimine le besoin de soutenir qu'aucun attaquant ne pourrait jamais être impliqué. Beaucoup d'incidents ont commencé avec une somme de contrôle qui était "uniquement pour la corruption" et qui a ensuite été utilisée pour la sécurité.

Vérifier les téléchargements correctement

Lorsqu'un projet publie une somme de contrôle SHA-256, calculez le hachage de votre téléchargement et comparez chaque caractère:

sha256sum ubuntu.iso          # Linux
shasum -a 256 ubuntu.iso      # macOS
Get-FileHash ubuntu.iso       # Windows PowerShell

Une somme de contrôle correspondante prouve que le fichier correspond à ce que l'éditeur a haché. Cela ne prouve pas que l'éditeur est légitime: si un attaquant contrôle le site Web, il peut remplacer à la fois le fichier et la somme de contrôle. La somme de contrôle signée (GPG ou Sigstore) comble cette lacune.

HMAC: hachage à l'aide d'une clé

Un simple hachage prouve l'intégrité mais pas l'authenticité tout le monde peut le calculer. HMAC combine une clé secrète avec le message, de sorte que seules les parties ayant la clé peuvent produire ou vérifier le résultat. Les webhooks de Stripe, GitHub et Slack utilisent des signatures HMAC-SHA256, et JWTs signées avec HS256 sont HMAC-SHA256 sous le capot.

Ne construisez pas votre propre hachage à clé en concaténant secret + message et en le hachant. Avec MD5, SHA-1 et SHA-256, cela est vulnérable aux attaques par extension de longueur. Utilisez la construction HMAC standard, fournie par chaque langage. Lorsque vous comparez des signatures, utilisez une fonction de comparaison à temps constant pour éviter les attaques de synchronisation.

Les mots de passe ont besoin d'un outil complètement différent

Ni MD5 ni SHA-256 ne doivent être utilisés directement pour stocker des mots de passe. Les hachages rapides sont un inconvénient ici: un GPU moderne calcule des milliards de hachages SHA-256 par seconde, donc un attaquant qui vole votre base de données peut tester rapidement d'énormes listes de mots de passe probables. Les hachages non salés sont pires, parce que les tables pré-calculées déchiffrent instantanément les mots de passe communs.

Utilisez une fonction de hachage de mot de passe conçue pour être lente et dur à mémoriser:

  • Argon2id le gagnant du concours de hachage de mot de passe et le premier choix actuel.
  • scrypt dur à mémoriser et largement disponible.
  • bcrypt plus ancien mais toujours acceptable, avec une limite d'entrée de 72 octets.
  • PBKDF2 avec un nombre élevé d'itérations lorsque la conformité nécessite des primitives approuvées par le NIST.

Ces fonctions ajoutent un sel unique par mot de passe et un facteur de coût configurable que vous pouvez augmenter à mesure que le matériel devient plus rapide. Les bibliothèques s'occupent des détails: vous appelez hash(password) et verify(password, stored).

Digest de codage

Les digests sont des octets bruts, généralement affichés en hexadécimal (deux caractères par octet) ou Base64 (plus compact). Le même résumé SHA-256 est de 64 caractères hexagonales ou 44 caractères Base64. Les attributs d'intégrité des sous-ressources utilisent Base64 (sha384-...), tandis que les fichiers de somme de contrôle utilisent hex. Pour plus d'informations sur le côté de l'encodage, voir [Base64 expliqué] ((/blog/base64-expliqué).

Guide de décision

  • Vérification de l'intégrité, signatures, certificats, tout ce qui est lié à la sécurité: SHA-256 (ou SHA-512, SHA-3, BLAKE3).
  • Authentification des messages avec un secret partagé: HMAC-SHA256.
  • Enregistrement des mots de passe: Argon2id, scrypt ou bcrypt jamais un simple hachage.
  • ** Sommes de contrôle non contradictoires ou clés de cache:** MD5 fonctionne, mais SHA-256 est l'habitude la plus sûre.
  • Hashing non sécurisé très rapide (tableaux de hachage, fragmentation): xxHash ou hachages non cryptographiques similaires.

Résumé

MD5 et SHA-1 sont brisés pour résister aux collisions et ne doivent pas être utilisés lorsqu'un attaquant pourrait bénéficier d'entrées de fabrication. SHA-256 est sécurisé, rapide avec support matériel et la bonne valeur par défaut pour l'intégrité et les signatures. Utilisez HMAC pour l'authentification à clé et des fonctions lentes dédiées telles qu'Argon2id pour les mots de passe. En cas de doute, choisissez SHA-256 ce n'est jamais la mauvaise réponse pour l'intégrité, et MD5 est de plus en plus.

Cette page a été traduite automatiquement depuis l'anglais. Si vous repérez une erreur, dites-le-nous.

Guides associés