Leçon 3 de 4
En cours

Les fonctions de hachage

La preuve de travail va valider les transactions, diffuser les nouveaux blocs à la blockchain et la sécuriser. Pour valider un bloc et l’intégrer à la blockchain, les mineurs sont en compétition pour trouver en premier le résultat d’une équation complexe : le nonce (un nombre arbitraire utilisé qu’une fois).
Cependant, il est facile de tester un résultat pour savoir si l’on a trouvé la solution. Ce nombre à trouver est pseudo-aléatoire comme nous allons le voir.

Mineurs en concurrence qui cherchent le nonce
Mineurs en concurrence qui cherchent le nonce

Le résultat à trouver est celui d’une fonction de hachage. Il en existe plusieurs.
Pour Bitcoin, il s’agit de SHA-256. Une fonction de hachage prend en entrée une chaîne de caractère d’une taille arbitraire et la transforme en une chaîne de taille fixe (256 bits pour la SHA-256) appelée le hash (ou condensé).
Comme son nom l’indique, elle va hacher la chaîne jusqu’à ce qu’elle soit de la taille souhaitée.

Le système binaire
Un bit peut seulement prendre deux valeurs : 0 ou 1

Voilà à quoi ressemble la fonction de hachage (ce n’est pas à retenir) :
Représentation algorithmique du SHA-256
Représentation algorithmique du SHA-256

Pour un humain normal, c’est du charabia, mais l’ordinateur lui comprend et exécute cette fonction très rapidement. C’est cette fonction que le mineur va exécuter des millions/milliards de fois jusqu’à trouver un résultat adéquat, et cela, pour chaque bloc à valider.

Le hash en sortie de fonction est une chaîne de caractères en hexadécimal.

Le système hexadécimal ?
L’alphabet hexadécimal est composé de chiffres de 0 à 9 et de lettres de a à f

Il faut 4 bits (exemple : 0101) pour représenter une lettre ou un chiffre en hexadécimal (voir alphabet sur l’image ci-dessous). C’est pour cela que la chaîne en sortie fait 256 bits, mais qu’il n’y a que 64 caractères (64 × 4 bits).
Explication fonction de hachage SHA-256
Explication fonction de hachage SHA-256
Une fonction de hachage a les caractéristiques suivantes :
  • Facile et rapide à tester
  • Déterministe : Une même entrée donne toujours le même hash en sortie
  • Irréversible (résistante à la préimage) : il est impossible de déterminer la valeur d’entrée à partir de la valeur de sortie
  • Résistante à la falsification : la moindre modification de la chaîne en entrée modifie complètement le hash en sortie. Sur l’image ci-dessus, la moindre modification (un h minuscule au lieu d’un H majuscule) sur la chaîne en entrée donne un hash absolument différent
  • Résistante aux collisions : presque impossible d’avoir le même hash pour deux entrées ou plus. Il existe obligatoirement des collisions, mais il faudrait des milliers (millions) d’années ou une technologie qui n’existe pas encore pour les trouver