B. DES BLOCS LIÉS ENTRE EUX PAR DES FONCTIONS DE HACHAGE

Chaque bloc, outre les transactions et l'horodatage, possède un identifiant (case à fond noir du bloc 90 dans le schéma ci-après), qui prend la forme d'un « hash » permettant de relier les blocs les uns aux autres 19 ( * ) . Ce hash est toujours le résultat du « hachage » du bloc précédent.

En informatique, les fonctions de « hachage » permettent de convertir n'importe quel ensemble de données numériques en un hash, c'est-à-dire en une courte suite binaire qui lui est propre. L'algorithme de compression utilisé à cet effet est appelé « fonction de hachage cryptographique ».

La structure d'une blockchain et le rôle des hashs

Source : Blockchain France

1. Le fonctionnement de ces fonctions

Le hash d'un ensemble de données peut ainsi être comparé à une empreinte digitale , bien moins complexe que l'individu entier, mais l'identifiant de manière précise et unique.

Une fonction de hachage est dite « à sens unique » : elle est conçue de telle sorte que le hash produit - à savoir une image ou empreinte de taille fixe créée à partir d'une donnée de taille variable, fournie en entrée - soit impossible à inverser. Alors qu'il est simple de produire un hash à partir d'un ensemble de données, il est impossible de remonter à un ensemble de données à partir d'un hash connu, du moins avec les puissances de calcul disponibles aujourd'hui. Cette fonction est donc dite « à sens unique » car l'image d'une donnée se calcule facilement mais le calcul inverse est impossible en pratique.

La conversion des bits en multiplets permet de réduire la longueur d'écriture des lignes de bits, elle est effectuée ainsi :

Binaire

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

Hexadécimal

0

1

2

3

4

5

6

7

8

9

a

b

c

d

e

f

À partir d'un ensemble de données au format binaire, la fonction de hachage va effectuer un très grand nombre de manipulations mathématiques relativement simples (remplacement des 0 en 1 ou inversement, combinaison de multiplets...) mais répétées à de nombreuses reprises.

Même si les données de départ représentent un volume très important, la fonction scindera celles-ci en plusieurs tronçons qu'elle combinera par paires, puis rescindera à nouveau jusqu'à obtenir une courte chaîne d'un certain nombre de bits. La longueur de ces hashs est de 256 bits dans le cas de la fonction Secure Hash Algorithm-256 ou SHA-256, utilisée pour le bitcoin par exemple.

Si l'on applique la fonction SHA-256 au texte complet de la Constitution de la V e République de 1958, on obtient son hash en base binaire :

01011100 10010000 01011111 00101111 10011010 11010010 10001001 10100101 11110110 11110010 11101100 11110110 10010101 11011110 00100011 10101111 11010001 00011100 00001100 10110101 10010000 10011101 11000101 11100101 01011101 01000010 10011100 00101000 10111111 01010010 11101011 11000001

En base hexadécimale, ce texte s'écrit :

5c905f2f9ad289a5f6f2ecf695de23afd11c0cb5909dc5e55d429c28bf52ebc1

Les transformations apportées par une fonction de hachage

Une fonction de hachage va apporter un grand nombre de transformations à un ensemble de données, quel que soit sa taille, exprimée en langage binaire (0 et 1). Pour cela, elle va utiliser des portes logiques , qui sont des outils de base de l'électronique numérique.

Quatre portes logiques, leur signe d'écriture et leur symbole peuvent être présentés :

- La porte « NON », s'écrit #172; et change les 0 en 1, et inversement.

Exemple : #172; 01101=10010

- La porte « ET », s'écrit ?, et donne 1 pour (1,1) et 0 sinon.

Exemple : 01101?11000 = 01000

- La porte « OU », s'écrit ?, et donne 0 pour (0,0) et 1 sinon.

Exemple : 01101?11000 = 11101

- La porte « OU exclusif » s'écrit ? et effectue une somme bit à bit (où 1+1=0).

Exemple : 01101?11000 = 10101

Dans une fonction de hachage telle que SHA-256, ces portes logiques et d'autres opérations vont être appliquées à l'ensemble de données de départ, qui aura été « découpé » en morceaux de 256 bits. Elles se succèdent suivant une organisation complexe répétée une soixantaine de fois, telle qu'illustrée par le schéma suivant.

Source : OPECST d'après Gilles Bailly-Maître et berkeley.edu

Dans le cas d'une chaîne de bloc, le hachage est effectué à partir du contenu du bloc , c'est-à-dire le hash du bloc précédent, un certain nombre de transactions et un horodatage .

Le rôle des hashs dans les blocs

Source : OPECST

2. L'utilité du hachage pour la chaîne de blocs

La fonction de hachage SHA-256 est constituée de telle sorte qu'il existe 2 256 combinaisons possibles (1,16 x 10 77 ), ce qui correspond à l'ordre de grandeur de certaines estimations du nombre d'atomes dans l'univers connu. Le risque de collision, c'est-à-dire de produire deux fois le même hash pour deux ensemble de données différents, revient donc à choisir au hasard deux fois le même atome dans l'ensemble de l'univers connu. On peut ainsi considérer que le hash SHA-256 de chaque ensemble de données est unique , avec une très forte marge de sécurité.

Mais le hash est aussi imprédictible , que ce soit entièrement ou même partiellement, ce qui est alors considéré comme une « collision partielle » (par exemple pour prévoir la valeur d'un certain nombre de premiers bits). Il est impossible de prévoir quelle valeur aura le hash d'un certain ensemble de données même en ayant connaissance des hashs d'ensembles de données extrêmement proches.

Pour illustrer cette caractéristique notable, on a réalisé un second hash du texte complet de la Constitution en remplaçant simplement le mot « France » par « france » dans la première phrase de l'article premier. Le hash obtenu est alors le suivant :

96621d9248e7e2af46b15f8a62b9908a63fc906633cb87aeb966a483e13bba6e

La simple rupture de casse d'une lettre, sur un texte comprenant plusieurs dizaines de milliers de caractères, produit un nouveau hash ne présentant aucune proximité avec le précédent .

Cette caractéristique des fonctions de hachage rend toute modification du contenu d'un bloc immédiatement visible dans les blocs suivants, même si cette modification est minime. En effet, le hash d'un bloc modifié est nécessairement très différent. Étant donné que ce nouveau hash est intégré au bloc suivant, son hash varie lui aussi. Comme l'indique le graphique ci-après, la modification d'une simple transaction au sein d'un bloc suffit à changer les hashs de tous les blocs suivants.

Le rôle du hachage dans l'intégrité de la chaîne de blocs

Source : OPECST

La modification étant visible dans l'ensemble des blocs suivants, les blocs sont tous liés entre eux cryptographiquement, ainsi que l'a formulé Claire Balva, présidente de Blockchain Partner, devant vos rapporteurs. En conséquence, modifier le contenu d'un bloc suppose de recalculer les hashs de tous les blocs qui le suivent .

3. Les difficultés de ces fonctions

Étant donné qu'il demande une réduction notable de la taille de l'échantillon et qu'il est imprédictible , il est pratiquement impossible de reconstituer un ensemble de données à partir de son hash, ce qu'on appelle une attaque pré-image .

La difficulté des fonctions de hachage doit cependant progresser au même rythme que l'évolution des puissances de calcul informatique . Ainsi, la fonction Message digest 5 (MD5) conçue en 1991 n'a plus aujourd'hui qu'une valeur historique, des collisions de ses « courts » hashs de 128 bits étant désormais trop simples à engendrer pour les calculateurs informatiques actuels.

La fonction utilisée pour le bitcoin se trouve parmi les plus répandues : il s'agit de la fonction SHA-256, vue plus haut, ainsi dénommée car elle produit des hashs d'une taille de 256 bits.

En plus de servir à lier les blocs entre eux , ces hashs sont au coeur de la solution proposée par le protocole de Nakamoto pour permettre un consensus sur le nouveau bloc à ajouter à la chaîne, à travers une méthode appelée la « preuve de travail ». Cette méthode présente toutefois des limites et d'autres « méthodes de consensus » sont donc envisagées.


* 19 Les arbres de hachage ont été inventés par Ralph Merkle en 1979, d'où l'expression « arbre de Merkle ». Dans le cas du bitcoin ils permettent de réaliser un hash de l'ensemble des transactions d'un bloc, qui est appelé « racine de Merkle » (Merkle Root). L'empreinte de ce bloc résulte alors du hash de cette racine combinée à l'empreinte du bloc précédent.

Les thèmes associés à ce dossier

Page mise à jour le

Partager cette page