Les briques · 5 min · démo interactive

Qu'est-ce qu'un hash ? Le SHA-256 expliqué en direct

Une fonction de hachage transforme n'importe quel texte en empreinte de taille fixe. Change une seule lettre et tout change : tape, compare, casse.

L’idée en une phrase

Un hash est une empreinte digitale de données : une suite de caractères de taille fixe, calculée à partir d'un contenu quelconque, qui change entièrement dès que ce contenu change d'un seul bit.

SHA-256, la fonction utilisée par Bitcoin, produit toujours 256 bits, soit 64 caractères hexadécimaux. Le mot « bonjour » et l'intégrale de Wikipédia donnent une empreinte de la même longueur.

La démo

SHA-256 de A

Le hash s'affiche ici dès que le script est chargé.

SHA-256 de B (caractères différents surlignés)

Le second hash s'affiche ici.
–bits différents sur 256
–des bits ont basculé
–caractères hexadécimaux différents

Sans JavaScript, retiens cet exemple réel : le SHA-256 de abc est ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad, et ce résultat est le même sur toutes les machines du monde.

Intégrer cette démo

Copie ce code sur ton site, ton cours ou ton blog. La démo reste gratuite ; garde simplement le lien vers protocole.org.

Pourquoi ça compte

Tu télécharges un wallet et le site affiche une longue suite de caractères à côté du lien ? C'est le hash du fichier. Si le tien ne correspond pas, le fichier a été modifié, peut-être par un attaquant qui veut voler tes fonds. Comparer deux empreintes de 64 caractères suffit à vérifier un fichier de plusieurs gigaoctets.

Le même principe porte presque tout le reste de ce site. Les blocs de Bitcoin sont chaînés par leurs hash, le minage est une loterie de hash, les adresses sont des hash de clés publiques. Si tu comprends cette page, la blockchain devient beaucoup moins mystérieuse.

Le code

Voici la même logique en JavaScript, avec l'API Web Crypto intégrée à ton navigateur. Change les deux chaînes, ou remplace 'SHA-256' par 'SHA-1' pour voir une empreinte plus courte, puis relance.

Clique sur Lancer pour exécuter ce code dans ton navigateur.

Ce qui se passe vraiment

Regarde les deux empreintes de la démo : un point d'exclamation de plus, et la seconde ne ressemble plus du tout à la première. Le compteur tourne autour de 128 bits différents sur 256, soit à peu près la moitié. Ce n'est pas un hasard, c'est l'objectif : si chaque bit de sortie bascule avec une chance sur deux, le résultat ne donne aucun indice sur ce qui a changé. On appelle cela l'effet avalanche.

À l'intérieur, SHA-256 découpe le message en blocs de 512 bits et le mélange sur 64 tours de rotations, de décalages et d'additions. Chaque tour diffuse un peu plus chaque bit d'entrée. Après 64 tours, tout dépend de tout.

Une bonne fonction de hachage cryptographique garantit trois propriétés :

  • Résistance à la préimage : à partir d'un hash, impossible de retrouver le texte, sauf à essayer des entrées au hasard. Ce n'est pas un chiffrement, il n'existe aucune clé pour revenir en arrière.
  • Résistance à la seconde préimage : impossible de trouver un autre texte qui donne le même hash qu'un texte donné.
  • Résistance aux collisions : impossible de trouver deux textes quelconques ayant le même hash. Comme les entrées sont infinies, des collisions existent forcément, mais il faudrait de l'ordre de 2128 essais pour en trouver une par hasard.

Le calcul est aussi déterministe : même entrée, même sortie, sur n'importe quelle machine. C'est ce qui permet à des milliers de nœuds Bitcoin de vérifier la même chose sans se parler ni se faire confiance. Dans le panneau de code, l'opérateur ^ compare les caractères bit à bit : le résultat est le même que celui du compteur de la démo.

Dans la vraie vie

Bitcoin applique SHA-256 deux fois de suite pour identifier les blocs et les transactions. Le minage consiste à chercher une entrée dont le hash commence par assez de zéros : comme la sortie est imprévisible, la seule méthode est d'essayer, encore et encore.

Hors crypto, tu croises des hash tous les jours : mots de passe stockés par les sites sérieux (avec des fonctions lentes dédiées), commits Git, vérification des mises à jour logicielles, déduplication dans le cloud. Ethereum utilise une autre fonction, Keccak-256, mais le principe est identique.

Les hash servent enfin à résumer de grands ensembles : un arbre de Merkle condense des milliers de transactions dans une seule empreinte, et une signature numérique porte sur le hash du message plutôt que sur le message entier.

Ce qui peut mal tourner

  • Confondre hash et chiffrement. Un hash ne cache pas un secret. Si l'entrée est courte ou devinable, un attaquant teste des milliards de candidats. Le hash de « 123456 » se retrouve en une seconde dans une table publique.
  • Utiliser une fonction cassée. Des collisions pratiques ont été publiées pour MD5 (2004) et SHA-1 (2017, attaque SHAttered). Ces fonctions restent répandues mais ne doivent plus servir à la sécurité.
  • Vérifier une empreinte venue de la même source que le fichier. Si un attaquant contrôle le site de téléchargement, il remplace les deux. Le bon réflexe est de vérifier une signature du développeur, ou de comparer l'empreinte sur un canal différent.
  • Croire qu'un hash prouve l'auteur. Il prouve l'intégrité d'un contenu, pas son origine : n'importe qui peut hacher n'importe quoi. Pour prouver l'identité, il faut une clé privée.
  • Transformer sa phrase en clé avec un simple hash. Les « brain wallets », dont la clé privée est le hash d'une phrase choisie par l'utilisateur, ont été vidés massivement par des robots qui testent en continu les citations et les phrases connues.

Teste-toi

1. Quelle taille a le SHA-256 d'un fichier de 4 Go ?
2. Combien de bits changent environ si tu modifies une lettre de l'entrée ?
3. Peut-on retrouver un texte à partir de son hash ?