Hash

Les fonctions de hachage

Nous allons commencer cette partie technique en vous parlant des fonctions de hachage, ces dernières sont utilisées par toutes les blockchain !

Bien assimiler le fonctionnement du hachage va être très important pour les chapitres qui vont suivre.

Rappel sur les fonctions

Avant de parler des fonctions de hachage, voyons ensemble un petit rappel sur les fonctions :

En mathématiques on dit qu’une fonction est un procédé qui pour un nombre donné associe un nombre unique.

Pour faire simple, on donne un nombre à la fonction et elle nous en donne un nouveau !

Un exemple qui vous parlera sûrement est la fonction carré f(x) = x² :

\begin{equation*} f(x) = x^{2} \Leftrightarrow f(x) = x \times x \end{equation*}
  • l'image de 4 par la fonction carré est 16
  • l'image de 6 par la fonction carré est 36

Vous pouvez essayer la démo qui va suivre, si vous entrez un nombre vous obtiendrez un résultat (le nombre au carré).

En informatique les fonctions servent principalement à traiter des données et à accomplir une ou plusieurs tâches spécifiques.

En général elles reçoivent des données et en retourne des nouvelles mais pas toujours.

Toutes les blockchain utilisent des fonctions informatiques, le type de fonctions qui vont nous intéresser sont les fonctions de hachage !

Qu'est-ce qu'une fonction de hachage et un hash

Schéma du fonctionnement d'une fonction de hachage
Schéma du fonctionnement d'une fonction de hachage

Une fonction de hachage est une fonction qui reçoit des données de taille variable (input) et qui va donner de nouvelles données en sortie (output) : le nom de cette donnée de sortie est l'empreinte (ou hash en anglais), elle est toujours de taille fixe.

On peut dire que c'est plus ou moins une représentation de la donnée sous une forme plus compacte.

En pratique, la donnée d'entrée est souvent une image, un fichier, une vidéo ou un texte...

La fonction de hachage utilisée par Bitcoin est SHA-256 : cette fonction retournera toujours 64 caractères représentés en base 16 (hexadécimal) soit 256 bits.

Cas d'usage

Il faut savoir qu'à l'heure actuelle, nous ne savons pas inverser le processus : trouver directement la donnée d'entrée à partir du hash.

Les fonctions de hachage sont donc utiles pour stocker des mots de passes en base de données (pour éviter de les stocker en clair), dans cette situation on utilisera plutôt la fonction argon2i avec d'autres étapes comme le salage (salt).

Elles peuvent également servir à savoir si le fichier a été modifié (vérifier l'intégrité d'un fichier), vu que son empreinte sera différente s'il a été changé.

C'est une des raisons pour laquelle beaucoup de sites indiquent le hash d'un fichier volumineux afin de vérifier qu'on a bien reçu le bon fichier à la fin du téléchargement et qu'il est bien resté intact (non modifié entre temps).

Vous allez bientôt comprendre pourquoi c'est très utile dans la blockchain ! Petite indice : une modification entraine un hash différent ;).

Essayez la démo de la fonction de hachage SHA-256 :

Saisissez du texte dans la démo qui va suivre.

Que remarquez-vous ?

À chaque fois que vous entrez un nouveau caractère, le hash (empreinte) change mais a toujours la même taille : 64 caractères hexadécimaux !

Et ce, même si le texte saisi (donnée d'entrée) est très long !

Collisions

Schéma d'une collision (hash)
Schéma d'une collision (hash)

La fonction SHA256 est résistante aux collisions.

Une collision, c'est lorsque deux données d'entrée différentes (ou plus) donnent un même hash.

À l'heure actuelle nous n'avons pas encore trouvé de collisions avec SHA-256, la probabilité est très faible.

Les collisions surviennent car étant donné que le hash est toujours de même taille mais que la donnée d'entrée est variable, il est logique qu'on puisse trouver un hash identique.

La donnée d'entrée est un ensemble infini alors que le hash un ensemble fini.

Sur d'anciennes fonctions de hachage comme MD5 et SHA1, des chercheurs ont déjà trouvé des collisions et nous savons maintenant créer deux fichiers différents donnant un même hash avec l'attaque des anniversaires (mathématiques).

Ces deux anciennes fonctions ne sont donc plus considérées comme étant sécurisées.

Prochain chapitre

Dans le chapitre suivant, nous verrons ce qu'est un block dans la blockchain, ce dernier utilise les hash.