Français

Outils de développement · Calculateur de hachage SHA

Attaques d'extension de longueur : pourquoi SHA-256(secret + message) n'est pas un MAC

· Pourquoi c'est important

sha-256 cryptographie sécurité

Un bloc d'état SHA-256 étendu avec des octets supplémentaires pour forger un hachage valide
Illustration vectorielle originale de ToolAcre

Ajouter un secret à un message et le hacher ressemble à une authentification, mais la structure de SHA-256 permet à un attaquant d'étendre le message sans connaître le secret. Cet article explique l'attaque et le correctif.

La signature de demande maison – hachage (secret + corps) et pourquoi elle semble sécurisée

Un développeur a besoin d'une authentification du message mais ne possède pas les connaissances HMAC. Il concatène donc un secret avec le message et hache le résultat. Cette approche semble sécurisée à première vue : le résultat est une empreinte digitale de taille fixe qui devrait changer si quelqu'un modifie le message. Cependant, SHA-256 présente une faille architecturale appelée extension de longueur qui permet à un attaquant d'ajouter des données au message et de calculer un résumé valide sans connaître le secret. Le calculateur de hachage ToolAcre SHA calcule uniquement des résumés simples, et non une authentification par clé, car cette distinction est importante pour une réelle sécurité.

Précéder un secret avant le hachage est intuitivement attrayant car seul le détenteur du secret peut recalculer le hachage. Si le message change, le hachage change également, cela ressemble donc à une preuve d'authenticité. Une API peut signer des requêtes en concaténant un secret partagé et le corps de la requête, puis en hachant le résultat et en incluant ce hachage dans la requête. Le serveur reçoit le corps, recalcule le hachage avec sa copie du secret et vérifie s'il correspond. Si un attaquant modifie le corps, le hachage ne correspondra pas, du moins c'est ce que pensent les développeurs.

Merkle-Damgård divulgue son état : le résumé final est l'état interne, afin qu'un attaquant puisse continuer à hacher là où vous vous êtes arrêté.

SHA-256 appartient à une famille appelée fonctions de hachage Merkle – Damgård. Ces fonctions traitent les entrées dans des blocs de taille fixe, enchaînant une fonction de compression qui prend l'état précédent et le bloc actuel et génère un nouvel état. La fonction de compression est la seule primitive cryptographique à l'intérieur ; la stratégie de chaînage et le schéma de remplissage font fonctionner l'ensemble de la construction. Le résumé final est simplement l'état final imprimé en hexadécimal. Ce n’est pas fortuit : la sortie est l’état interne. Quiconque voit le résumé a l'état exact nécessaire pour continuer le hachage à partir de ce point.

Pour étendre un message, un attaquant commence par le résumé observé de secret + original_message et le traite comme la variable d'état pour un nouvel appel de fonction de compression. Ils ajoutent les données qu'ils souhaitent ajouter, les complètent correctement pour toute la longueur du nouveau message et calculent le résumé. Lorsque le serveur valide ce faux résumé en ajoutant son propre secret et son hachage, le calcul se déroule de la même manière que celui de l'attaquant après l'absorption du secret initial. Le serveur calcule le même résumé et le message falsifié est accepté sans que l'attaquant connaisse le secret.

Comment fonctionne l'extension : ajout de remplissage et de données supplémentaires pour forger un hachage valide pour un message plus long

Différents algorithmes sont affectés différemment par l'extension de longueur. SHA-1 est vulnérable : un attaquant peut observer un résumé SHA-1 et étendre le message. SHA-256 est vulnérable exactement de la même manière. SHA-512 est également vulnérable aux attaques d'extension. SHA-384 résiste à l'extension de longueur car il est construit comme SHA-512 tronqué à 384 bits. Le résultat de la fonction de compression est plus long que le résumé publié, de sorte que l'attaquant ne dispose pas de suffisamment d'informations pour continuer le hachage. La construction en éponge utilisée dans SHA-3 résiste également car elle ne laisse pas fuir l'état interne.

Comprendre quels algorithmes sont vulnérables nécessite de connaître la taille de la fonction de compression par rapport à la taille du résumé publié. SHA-256 publie 256 bits et l'état de la fonction de compression est également 256 bits, donc le résumé est l'état entier. Un attaquant a tout ce qu’il faut pour continuer. SHA-384 publie 384 bits, mais l'état de la fonction de compression sous-jacente est 512 bits car SHA-384 est construit sur SHA-512. Le résumé ne révèle que 384 de ces 512 bits, laissant 128 bits inconnus à un attaquant. Il s'agit d'une propriété de conception intentionnelle de SHA-384 qui fournit cette résistance.

Les constructions SHA-1, SHA-256 et SHA-512 prises en charge exposent l'état complet ; La troncature SHA-384 modifie la limite de l'extension

Le correctif pour authentifier les messages avec un secret partagé est HMAC, le code d'authentification des messages par hachage par clé. HMAC n'ajoute pas le secret et le hachage ; au lieu de cela, il applique le secret dans deux opérations de hachage imbriquées en utilisant des schémas de remplissage spécifiques appelés pads interne et externe. La construction est HMAC(secret, message) = SHA256(secret_XOR_outer_pad, SHA256(secret_XOR_inner_pad, message)). Cette approche imbriquée comble l'écart d'extension de longueur car même si un attaquant dispose du résumé du hachage interne, il ne peut pas continuer le hachage sans le secret.

La raison pour laquelle les opérations de digestion et HMAC sont séparées est d'éviter l'erreur courante de traiter les deux de manière interchangeable. Un développeur qui apprend le hachage grâce à un outil qui fait les deux pourrait oublier lequel il utilise lorsqu'il écrit du code. Garder le calcul du résumé séparé rend le choix explicite et renforce l'apprentissage selon lequel l'authentification nécessite HMAC ou des signatures. Le calculateur de hachage ToolAcre SHA étiquette clairement les résumés simples et la documentation explique que HMAC est une opération entièrement différente.

HMAC comme solution - la construction imbriquée qui comble l'écart et pourquoi c'est la réponse standard

Un exemple conceptuel d'extension de longueur fonctionne sur le vecteur de test familier abc. Le calcul de SHA-256 sur le texte ASCII abc produit le résumé ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Supposons que ce résumé soit le résultat de secret + abc haché avec un secret de 5 octets, donnant un total de 8 octets d'entrée. SHA-256 traite les entrées dans des blocs de 64 octets, de sorte que le premier et unique bloc a été complété avec la longueur du message et d'autres octets de remplissage. Un attaquant voit le résumé et souhaite falsifier un message commençant par abc suivi de données supplémentaires.

Ils ne peuvent pas ajouter directement à abc car ils ne connaissent pas le remplissage exact qui a été ajouté à l'intérieur du hachage. Cependant, ils peuvent calculer ce que doit être le message entièrement complété : abc plus le remplissage requis pour une entrée 8-byte dans un bloc 64-byte. Ils ajoutent ensuite leurs données supplémentaires, calculent le remplissage pour la nouvelle longueur totale et hachent la combinaison en traitant le résumé observé comme état de départ. Le résultat est un résumé SHA-256 valide que le serveur acceptera car il ajoute le secret et calcule le même hachage.

Exemple concret : présentation conceptuelle de l'extension d'un message signé, sans cible réelle

Pour empêcher cette attaque dans un système réel, le développeur ne doit pas essayer de créer une authentification à partir d'un simple hachage. HMAC est la réponse standard, et le calculateur de hachage ToolAcre SHA est un outil permettant de calculer des résumés simples pour les contrôles d'intégrité, le hachage de contenu et à des fins similaires de non-authentification. Des exemples d'utilisations sûres des résumés SHA-256 simples incluent les sommes de contrôle de fichiers, où un attaquant ne peut pas contrôler à la fois le fichier et le résumé ; stockage adressable par contenu, où le hachage est la clé de recherche ; et les signatures numériques combinées à des signatures, où la signature fournit une authentification.

La portée complète de ce problème inclut les autres algorithmes fournis par le navigateur. SHA-1 est vulnérable à l'extension de longueur et était déjà cryptographiquement cassé avant que cela ne devienne pertinent. Le calculateur ToolAcre qualifie SHA-1 d'ancien uniquement et explique les attaques par collision qui l'ont rendu inadapté aux nouvelles applications. Pour les nouvelles applications, SHA-256 est le choix judicieux pour les résumés simples, et si une authentification est nécessaire, HMAC avec SHA-256 est la réponse. SHA-384 et SHA-512 sont tous deux vulnérables, mais SHA-384 est protégé par troncature.

Ce que cela ne couvre pas : le calculateur ToolAcre calcule des résumés simples, pas HMAC ; le message explique pourquoi cette distinction est importante

Lors de la construction du modèle mental des fonctions de hachage, la construction Merkle – Damgård et l'extension de longueur deviennent les concepts clés. Une fonction de hachage doit gérer des longueurs d'entrée arbitraires et produire une sortie fixe. Pour ce faire, il consiste à enchaîner une fonction de compression bloc par bloc, et la manière dont l'état final est converti en sortie est extrêmement importante. Si l'état final est entièrement affiché, cette sortie contient toutes les informations nécessaires pour continuer le hachage. Si l'état final est tronqué, une partie est masquée.

Pour un développeur qui découvre pour la première fois les attaques par extension de longueur, la question est de savoir si cela affecte son cas d'utilisation. Si l’entrée du hachage est une constante publique et que le hachage est utilisé comme clé de recherche ou empreinte digitale, l’extension de longueur n’est pas pertinente. Si le hachage est utilisé pour authentifier un message lorsque les deux parties partagent un secret, l'extension de longueur est une vulnérabilité critique et HMAC est la solution. Le calculateur de hachage ToolAcre SHA affiche les résumés et le nombre d'octets, indiquant clairement qu'il s'agit de sorties informatiques et non de mécanismes d'authentification.

À retenir : utilisez un MAC pour l'authentification – le calculateur de hachage ToolAcre SHA est destiné aux résumés d'intégrité ; l'authentification nécessite HMAC ou une signature

En appliquant cela aux systèmes de production, le principe est simple : ne jamais utiliser un simple hachage pour l'authentification lorsqu'un secret est impliqué. HMAC est la construction standard qui ferme entièrement le vecteur d’attaque d’extension de longueur. SHA-256 et SHA-384 sont tous deux sécurisés pour les objectifs auxquels ils sont destinés lorsqu'ils sont utilisés correctement. Comprendre les trois points clés (que Merkle-Damgård révèle son état dans le résumé, que SHA-384 tronque pour masquer une partie de l'état et que HMAC utilise une construction imbriquée pour empêcher l'extension) donne au développeur les outils nécessaires pour faire le bon choix.

Le calculateur de hachage ToolAcre SHA incarne cet enseignement : il fournit des résumés simples pour l'apprentissage et pour des utilisations légitimes non authentifiantes, il étiquette SHA-1 comme héritage et il n'implémente pas HMAC car cette opération appartient à un contexte différent. Lorsque les développeurs utilisent un simple calculateur de hachage pour authentifier une demande, le positionnement et la documentation de l'outil les guident vers HMAC et les signatures comme outils appropriés. La boîte à outils ToolAcre se concentre sur ce que le Web Crypto du navigateur fournit directement et explique les limites où chaque primitive est appropriée.