Une chaîne infalsifiable

Chaîner des blocs par le hachage

Une blockchain (ou « chaîne de blocs ») est un registre partagé où les données sont regroupées en blocs, eux-mêmes reliés entre eux par le hachage. Cette simple idée suffit à rendre l'historique quasiment impossible à falsifier sans que personne ne s'en aperçoive.

Rappel : une fonction de hachage

Une fonction de hachage cryptographique (SHA-256 pour Bitcoin) prend une donnée de taille quelconque et renvoie une empreinte de taille fixe, par exemple 256 bits. Elle possède deux propriétés capitales :

  • déterministe : la même donnée donne toujours la même empreinte ;
  • effet d'avalanche : changer un seul bit d'entrée bouleverse complètement l'empreinte de sortie.

Retrouver l'entrée à partir de l'empreinte est infaisable : c'est une fonction à sens unique.

Chaîner les blocs

Chaque bloc contient trois choses essentielles : ses données (des transactions), un numéro, et surtout l'empreinte du bloc précédent. C'est ce dernier champ qui crée la chaîne.

   Bloc 0            Bloc 1            Bloc 2
+-----------+     +-----------+     +-----------+
| prec: 000 |     | prec: H0  |     | prec: H1  |
| données   |     | données   |     | données   |
| ...       |     | ...       |     | ...       |
+-----------+     +-----------+     +-----------+
| emp.: H0  |---->| emp.: H1  |---->| emp.: H2  |
+-----------+     +-----------+     +-----------+

Le premier bloc, sans prédécesseur, s'appelle le bloc de genèse. L'empreinte H1 du bloc 1 est calculée à partir de tout son contenu, y compris le champ prec: H0. Donc H1 dépend de H0, qui dépend du contenu du bloc 0. La dépendance se propage de proche en proche.

Pourquoi c'est infalsifiable

Supposons qu'un attaquant veuille modifier une transaction dans le bloc 0.

Modif. du bloc 0  ->  son empreinte H0 change  ->  devient H0'
Or le bloc 1 contient "prec: H0" (l'ancienne valeur)
   =>  le bloc 1 ne pointe plus correctement : chaîne rompue
Pour réparer, il faut recalculer H1 -> H1'
   =>  mais alors le bloc 2 (qui contient "prec: H1") casse
   =>  et ainsi de suite jusqu'au dernier bloc

Modifier un seul bloc oblige donc à recalculer tous les blocs suivants. C'est l'effet cascade. On dit que le registre est tamper-evident : toute falsification laisse une trace visible.

Ce que cela garantit, et ce que cela ne garantit pas

Le chaînage par hachage garantit l'intégrité de l'historique : personne ne peut modifier discrètement un ancien bloc, car l'empreinte finale ne correspondrait plus. N'importe qui, en recalculant les empreintes de haut en bas, détecte immédiatement l'anomalie.

En revanche, le hachage seul n'empêche pas un attaquant de recalculer patiemment toute la suite. Ce qui rend ce recalcul économiquement impossible est un mécanisme supplémentaire — la preuve de travail — que nous verrons au chapitre 2.

En résumé

  • Une blockchain est une suite de blocs, chacun contenant l'empreinte du bloc précédent.
  • Grâce à l'effet d'avalanche du hachage, modifier un bloc change son empreinte et invalide en cascade tous les blocs suivants.
  • Le registre est donc tamper-evident : toute altération est immédiatement détectable en recalculant les empreintes.
  • Le hachage assure l'intégrité, mais c'est la preuve de travail qui rendra la réécriture réellement infaisable.