SHA256 vs SHA1
SHA1 et SHA256 sont toutes deux des fonctions de hachage cryptographique de la famille SHA (Secure Hash Algorithm), mais elles diffèrent considérablement en termes de sécurité et de taille de sortie. Choisir la mauvaise fonction de hachage pour votre application peut avoir de graves conséquences sur la sécurité, allant de l'affaiblissement des signatures numériques au compromis complet des systèmes de vérification de mots de passe. Ce guide fournit une comparaison approfondie pour vous aider à prendre une décision éclairée.
Une fonction de hachage cryptographique prend une entrée de n'importe quelle taille et produit une sortie de taille fixe appelée digest ou valeur de hachage. Les propriétés critiques d'une fonction de hachage sécurisée incluent la résistance à la préimage (étant donné un haché, il doit être infaisable de trouver une entrée qui le produit), la résistance à la seconde préimage (étant donné une entrée, il doit être infaisable de trouver une entrée différente avec le même haché), et la résistance aux collisions (il doit être infaisable de trouver deux entrées différentes qui produisent le même haché). SHA1 et SHA256 ont toutes deux été conçues pour offrir ces propriétés, mais la résistance aux collisions de SHA1 a été compromise en pratique.
Comment Fonctionnent les Fonctions de Hachage
SHA1 et SHA256 appartiennent toutes deux à la famille de construction Merkle-Damgard. Elles traitent les données d'entrée en blocs de taille fixe de 512 bits. L'entrée est d'abord rembourrée pour garantir que sa longueur est un multiple de la taille du bloc. Le rembourrage inclut la longueur originale du message, ce qui empêche certains types d'attaques. Chaque bloc est ensuite traité via une fonction de compression qui met à jour un état interne. L'état final après le traitement de tous les blocs devient la sortie de hachage.
SHA1 utilise 80 rounds de compression avec des mots de 32 bits et produit une sortie de 160 bits. L'algorithme utilise quatre constantes de round et vingt fonctions de round, chaque round opérant sur cinq variables de travail de 32 bits. SHA256 utilise 64 rounds de compression, également avec des mots de 32 bits, mais produit une sortie de 256 bits en utilisant huit variables de travail et six fonctions logiques. Le nombre accru de variables de travail et des fonctions de round plus complexes rendent SHA256 significativement plus résistante aux attaques cryptanalytiques.
Différences Clés
| Caractéristique | SHA1 | SHA256 |
|---|---|---|
| Taille de sortie | 160 bits (40 caractères) | 256 bits (64 caractères) |
| Sécurité | Cassée (attaque SHAttered) | Sûre |
| Vitesse | Plus rapide | Plus lente |
| Rounds | 80 | 64 |
| Taille de bloc | 512 bits | 512 bits |
| Taille de mot | 32 bits | 32 bits |
| Recommandée ? | Non | Oui |
La différence la plus critique est la sécurité. SHA1 est considérée comme cryptographiquement cassée car des chercheurs ont démontré des attaques de collision pratiques. SHA256, en 2026, reste sûre sans aucune attaque pratique connue réduisant sa sécurité effective en dessous de son niveau de sécurité de 128 bits. Un niveau de sécurité de n bits signifie que la meilleure attaque connue nécessite environ 2^n opérations pour casser la fonction de hachage. Pour SHA256, cela signifie 2^128 opérations, ce qui est infaisable avec la technologie actuelle et prévisible.
La différence de taille de sortie est également significative en pratique. Une sortie de 160 bits signifie qu'il n'y a que 2^160 valeurs de hachage possibles. Par le paradoxe des anniversaires, une collision peut être trouvée en environ 2^80 opérations. Bien que 2^80 ait été autrefois considéré comme infaisable, les progrès du calcul GPU et du matériel spécialisé ont rendu cette surface d'attaque pratique pour des attaquants bien financés. La résistance aux collisions de 2^128 de SHA256 reste hors de portée.
Comparaison Complète de la Famille SHA
La famille SHA a évolué sur trois décennies, chaque génération améliorant les faiblesses de ses prédécesseurs.
| Algorithme | Sortie | Niveau de Sécurité | Année | Statut |
|---|---|---|---|---|
| SHA0 | 160 bits | 80 bits | 1993 | Cassée |
| SHA1 | 160 bits | 80 bits | 1995 | Dépréciée |
| SHA224 | 224 bits | 112 bits | 2004 | Sûre |
| SHA256 | 256 bits | 128 bits | 2004 | Sûre |
| SHA384 | 384 bits | 192 bits | 2004 | Sûre |
| SHA512 | 512 bits | 256 bits | 2004 | Sûre |
| SHA3-256 | 256 bits | 128 bits | 2015 | Sûre |
SHA0 a été retirée peu après sa publication en raison d'un défaut non divulgué. SHA1 a été conçue comme correctif pour SHA0 et a servi de standard industriel pendant près de deux décennies. SHA224, SHA256, SHA384 et SHA512 sont collectivement connues sous le nom de SHA-2 et ont été publiées par le NIST en 2001 (normalisées en 2004). SHA-3, publiée en 2015, est basée sur la construction en éponge Keccak et offre une alternative à SHA-2 avec des principes de conception fondamentalement différents.
Lors du choix d'une fonction de hachage, vous devriez utiliser SHA256 par défaut pour la plupart des applications. SHA384 et SHA512 offrent des niveaux de sécurité plus élevés mais au prix de sorties plus grandes et de performances plus lentes. SHA3-256 est un excellent choix lorsque vous souhaitez diversifier vos dépendances cryptographiques en dehors de la famille SHA-2.
Pourquoi SHA1 a été Retirée
Le retrait de SHA1 ne s'est pas produit du jour au lendemain. Les cryptanalystes avaient averti des faiblesses de SHA1 depuis 2005, lorsque des chercheurs ont démontré que la résistance théorique aux collisions n'était que de 2^69 opérations au lieu des 2^80 attendues. Au cours de la décennie suivante, ces estimations ont été progressivement réduites à mesure que les techniques cryptanalytiques s'amélioraient.
En 2017, Google a démontré la première attaque de collision pratique sur SHA1 (SHAttered). Ils ont créé deux fichiers PDF différents avec le même haché SHA1 en utilisant environ 9 quintillions (9 223 372 036 854 775 808) de calculs SHA1. Cela a nécessité environ 6 500 années de temps CPU, mais seulement 110 années GPU. L'attaque a été réalisée en utilisant l'infrastructure cloud de Google et a coûté environ 110 000 $ en temps de calcul, démontrant que les collisions SHA1 étaient à la portée d'organisations bien financées.
L'attaque SHAttered génère spécifiquement deux fichiers PDF en collision en construisant soigneusement des structures PDF qui permettent de grands blocs identiques tout en différant sur un petit nombre de bits qui produisent le même haché SHA1. L'impact pratique de cette attaque inclut la possibilité de créer deux logiciels ou documents avec des contenus différents mais des hachés SHA1 identiques. Une signature sur l'un pourrait être frauduleusement revendiquée comme s'appliquant à l'autre.
Les principaux navigateurs et autorités de certification ont depuis déprécié SHA1. Depuis 2017, Chrome affiche un avertissement de sécurité pour les certificats SHA1. En 2020, tous les principaux navigateurs avaient supprimé la confiance dans les certificats basés sur SHA1, mettant fin à l'utilisation de SHA1 dans l'écosystème PKI web.
Comparaison des Performances
SHA1 est plus rapide que SHA256 pour plusieurs raisons. Premièrement, SHA1 traite l'entrée en 80 rounds par bloc, mais chaque round est plus simple que les 64 rounds de SHA256. SHA256 utilise des fonctions logiques plus complexes et un état interne plus grand, ce qui nécessite plus de calcul par round. Deuxièmement, l'état interne de 160 bits de SHA1 tient dans moins de registres que l'état de 256 bits de SHA256, permettant une implémentation plus efficace sur les processeurs 32 bits.
En pratique, SHA256 est environ 25 à 40 pour cent plus lente que SHA1 dans les implémentations logicielles. Sur le matériel moderne avec accélération matérielle (extensions SHA dans les processeurs x86), les performances de SHA256 sont significativement meilleures. Les processeurs Intel et AMD avec les extensions SHA-NI peuvent calculer SHA256 à des vitesses dépassant 2 Go/s, réduisant l'écart avec SHA1.
Pour la plupart des applications, la différence de performance entre SHA1 et SHA256 est négligeable. Le délai perceptible par l'humain pour hacher un fichier ou vérifier une signature est dominé par les opérations d'E/S, pas par le calcul du haché. Le seul scénario où l'avantage de vitesse de SHA1 compte est dans les systèmes à haut débit qui calculent des milliards de hachés, comme le minage de blockchain ou le craquage de mots de passe à grande échelle, qui ne sont ni l'un ni l'autre des cas d'utilisation légitimes pour SHA1 dans les nouvelles conceptions.
Quand Utiliser SHA256
| Cas d'Utilisation | Haché Recommandé |
|---|---|
| Certificats SSL/TLS | SHA256 |
| Vérification d'intégrité de fichiers | SHA256 ou SHA512 |
| Hachage de mots de passe (avec sel) | bcrypt ou argon2 |
| Signatures numériques | SHA256 |
| Blockchain | SHA256 (Bitcoin) |
| Signature de code | SHA256 |
Pour les certificats SSL/TLS, SHA256 est l'exigence minimale depuis que les principaux navigateurs ont déprécié SHA1 en 2017. Les autorités de certification ne sont plus autorisées à émettre des certificats signés par SHA1 pour la confiance publique. La vérification d'intégrité des fichiers, comme les fichiers de somme de contrôle distribués avec les téléchargements de logiciels, devrait utiliser SHA256. De nombreuses plateformes de distribution de logiciels ont migré des sommes de contrôle SHA1 vers SHA256, bien que vous puissiez encore rencontrer des sommes de contrôle SHA1 pour des logiciels hérités.
Le hachage de mots de passe nécessite une attention particulière. Bien que SHA256 soit une fonction de hachage cryptographique sécurisée, elle n'est pas adaptée au stockage de mots de passe à elle seule. SHA256 est conçue pour être rapide, ce qui est exactement ce que les attaquants veulent lorsqu'ils essaient de craquer des hachés de mots de passe volés. Pour le stockage de mots de passe, utilisez une fonction de hachage dédiée comme bcrypt, scrypt ou argon2. Ces fonctions intègrent le salage et sont délibérément lentes et résistantes en mémoire pour contrer les attaques par force brute.
Exemples de Migration Réels
Git, le système de contrôle de version largement utilisé, a migré de SHA1 vers SHA256 dans le cadre de sa transition vers le stockage d'objets basé sur SHA256. À partir de Git 2.29, Git prend en charge les référentiels SHA256 aux côtés des référentiels SHA1 traditionnels. La transition a nécessité un effort significatif car le modèle de données de Git repose fortement sur les valeurs de hachage pour identifier les objets et vérifier l'intégrité du référentiel.
La communauté du noyau Linux a commencé à accepter les sommes de contrôle SHA256 pour les archives de versions du noyau à partir de 2011, en complément des sommes de contrôle SHA1 existantes. En 2017, kernel.org a cessé de générer des sommes de contrôle SHA1 pour les nouvelles versions, utilisant exclusivement SHA256 et SHA512.
Utilisez l'outil Générateur SHA256 pour générer des hachés SHA256 en ligne.