Blockchain : comment ça marche ?

Publié Par Gerard Drean, le dans Technologies

Par Gérard Dréan.

On parle beaucoup de « LA blockchain » et de ses nombreuses applications, qui promettent (ou menacent, suivant les opinions) de révolutionner la société au moins aussi profondément qu’Internet lui-même. En même temps, ce concept est présenté de façon très vague. Même si on la dit « distribuée », ce qui est d’ailleurs impropre comme nous le verrons, il manque le plus souvent une expression claire des implications de son implantation sur un réseau pair à pair ouvert. De ce fait, parler de « LA blockchain » est trompeur et passe largement à côté de l’essentiel.

L’idée est née en 2008 avec Bitcoin, qui en est à ce jour la réalisation emblématique, mais aussi la base de nombreuses variantes et extensions. Nous utiliserons donc cet exemple pour en analyser les composantes et les implications, tout en nous efforçant d’en tirer des enseignements valables pour d’autres systèmes où le principe de la chaîne de blocs est utilisé pour des écritures autres que des transactions monétaires.

Conformément à l’usage, j’utilise le terme « Bitcoin » avec majuscule et sans article pour désigner le système de paiement, et « le bitcoin » pour l’unité de compte utilisée par ce système.

Blockchain : comment ça marche ?

Partons des définitions de Wikipedia, qui dans ce domaine est plus à jour que les autres dictionnaires généralistes, surtout dans sa version anglaise : « A blockchain is a distributed database that maintains a continuously-growing list of data records hardened against tampering and revision. », et plus loin :« The blockchain consists of blocks that hold timestamped batches of valid transactions. Each block includes the hash of the prior block, linking the blocks together. The linked blocks form a chain, with each additional block reinforcing those before it »,

Rappelons qu’une somme de contrôle (hash ou empreinte) est un nombre, calculé à partir du contenu du bloc, tel qu’il est impossible de reconstituer le bloc à partir de sa somme de contrôle (fonction « à sens unique ») et que la moindre modification du bloc modifie la somme de contrôle de façon totalement imprévisible. Dans le cas de Bitcoin, c’est un nombre de 256 bits, dont le nombre de valeurs distinctes s’exprime par un nombre de 78 chiffres. Deux blocs dont les contenus sont différents ont toujours des sommes de contrôle différentes. La somme de contrôle d’un bloc peut donc lui servir d’identifiant unique.

Un  bloc est le regroupement d’un certain nombre d’écritures élémentaires (data records), dont la forme et la signification dépendent de l’application. Dans le cas de Bitcoin et des autres systèmes de paiement, ces écritures sont des transactions monétaires, et chaque bloc en contient typiquement entre 1000 et 3000. Le bloc est complété par un en-tête qui, en plus de sa somme de contrôle, contient entre autres choses l’identifiant du bloc précédent, donc sa propre somme de contrôle. A partir d’un bloc quelconque, on peut ainsi remonter jusqu’au bloc initial de la chaîne en vérifiant à chaque pas sa validité.

La somme de contrôle d’un bloc est systématiquement vérifiée à chaque accès, afin de déceler toute modification apportée à son contenu postérieurement à sa construction. Si l’auteur de la modification a aussi modifié l’en-tête du bloc en y incluant sa nouvelle somme de contrôle, il a modifié en même temps son identifiant. Les blocs qui lui faisaient référence n’ont donc plus de prédécesseur et la chaîne de blocs est rompue. Introduire dans la chaîne un bloc modifié forcerait donc à modifier les en-têtes de tous les blocs suivants, une opération d’autant plus coûteuse que le bloc est plus ancien, et que le calcul des sommes de contrôle est lui-même rendu plus consommateur de ressources par l’imposition de contraintes très sévères.

Cette structure de fichier est bien adaptée à l’enregistrement sécurisé d’écritures critiques produites en continu et ayant valeur juridique, comme les transactions de paiement, mais également de nombreux autres types d’écritures comme des titres de propriété, des brevets, des diplômes, etc…

La construction d’une chaîne de blocs

La construction d’une chaîne de blocs se fait en un cycle de deux étapes répétées indéfiniment. La première, la construction d’un bloc, équivaut à reporter sur une page les nouvelles écritures qui arrivent, puis à sceller définitivement cette page en construisant son en-tête. La deuxième consiste à ajouter cette nouvelle page au registre de façon irréversible.

Ces opérations peuvent très bien être réalisées par un seul et même ordinateur. La véritable originalité de Bitcoin et des systèmes qui en dérivent, qui leur donnent leurs qualités uniques mais aussi leur complexité, est d’être implantés sur un réseau « pair à pair » ouvert. Ouvert parce que tout possesseur d’un ordinateur peut à tout moment se joindre au réseau sans avoir à demander d’autorisation à quiconque. Pair à pair parce que chacun peut choisir librement la ou les fonctions qu’il veut y assumer, y compris les plus centrales. Dans un tel réseau, il n’existe pas de point de contrôle central ni même de nœuds privilégiés.

Cette architecture repose sur des protocoles de communication qui permettent aux machines situées aux nœuds du réseau d’échanger des informations, notamment de se communiquer des écritures et des blocs. Elle s’accompagne d’une séparation des rôles que chaque utilisateur peut choisir d’exercer ou non :

  • créer de nouvelles transactions, au moyen de « wallets» (porte-monnaie ou mieux porte-clés puisqu’ils ne contiennent pas les bitcoins, mais seulement les clés informatiques qui donnent accès aux transactions enregistrées dans la chaîne de blocs),
  • vérifier et relayer les transactions à travers le réseau, mais sans tenir un exemplaire local de la chaîne de blocs (les « nœuds simples »),
  • construire les blocs (les « mineurs »),
  • tenir à jour un exemplaire local de la chaîne de blocs (les « nœuds complets »),
  • accéder aux transactions, sans pouvoir les modifier (les observateurs)

Tous les logiciels utilisés dans le système sont disponibles librement, et chaque utilisateur peut télécharger, installer et faire tourner sur son ordinateur les logiciels de son choix, sans avoir à solliciter d’autorisation. Il existe une plate-forme de distribution privilégiée (Github) et des logiciels recommandés par différentes instances, mais rien n’interdit à quiconque de proposer un nouveau logiciel ou d’utiliser une plate-forme différente.

Ces principes d’ouverture et de décentralisation rendent impossible de connaître le nombre d’acteurs dans chaque rôle. On estime couramment le nombre de détenteurs de bitcoins, donc de porte-clés, à plusieurs millions dont quelques centaines de milliers réellement actifs. Les nœuds du réseau se comptent en dizaines de milliers, le seul nombre mesuré en continu par des sites spécialisés étant celui des nœuds « à l’écoute » (listening nodes), c’est à dire qui sont actuellement en état de recevoir et de retransmettre de nouvelles transactions ; ce nombre oscille entre 5000 et 7000.

Les mineurs peuvent se regrouper en coopératives (pools) afin de mutualiser les ressources de calcul et les gains tout en partageant un seul nœud complet, ce qui fait apparaître le pool comme un seul mineur. Une dizaine de ces coopératives, regroupant un nombre indéterminé de mineurs, fournit 95 % des blocs admis dans la chaîne. Pour les nœuds complets et donc le nombre d’exemplaires de la chaîne de blocs, qui peuvent ne pas être tous identiques comme nous le verrons, les estimations vont de 5000 à 30000, localisés dans 85 pays sur tous les continents.

Une chaîne de blocs en fonctionnement – 1. la diffusion des écritures

Chaque écriture nouvellement créée entre dans le système par un nœud du réseau, qui vérifie que sa structure est correcte et qu’elle est légitime au regard des écritures déjà enregistrées. Par exemple, dans le cas d’un système de paiement comme Bitcoin, on vérifiera notamment qu’il existe des transactions antérieures qui alimentent le compte d’une somme au moins égale à la somme à régler, et que l’auteur de la transaction est bien autorisé à les utiliser. Si ces tests sont satisfaits, l’écriture est mise en attente dans une liste locale et diffusée de proche en proche à tout le réseau. Sinon, elle est rejetée.

À chaque type d’écriture correspond un protocole de validation, qui définit de façon opérationnelle quelles écritures sont valides dans le système. Ce protocole est ré-exécuté à de nombreuses reprises lors des étapes suivantes de construction et de validation des blocs. Un même système peut contenir un répertoire de protocoles de validation, chacun étant associé à un code en tête de chaque écriture, ce qui permet d’inscrire dans une même chaîne de blocs des écritures de natures différentes.

Chaque nœud qui reçoit ce message en vérifie à son tour la validité formelle et la légitimité au regard des informations qu’il possède. En effet, le caractère ouvert du réseau impose un principe de sécurité fondamental : chaque nœud doit faire l’hypothèse que tout le reste du système peut être défectueux ou frauduleux, et donc considérer tout ce qu’il reçoit comme suspect, en déterminer lui-même la nature et le valider de façon indépendante avant de l’utiliser. Tout le système est conçu en intégrant l’hypothèse qu’il est en permanence la cible d’un grand nombre de fraudeurs extrêmement compétents.

À l’issue de cette première étape, les écritures invalides ont été éliminées, et chaque écriture valide et légitime a été recopiée de proche en proche en plusieurs dizaines de milliers d’exemplaires, un sur chaque ordinateur du réseau, chaque exemplaire ayant été dûment validé et revalidé à chaque étape de son trajet depuis son point d’entrée.

Une chaîne de blocs en fonctionnement – 2. la construction des blocs (le « minage »)

Dans la deuxième étape, les utilisateurs qui ont choisi de construire des blocs (les mineurs) puisent des écritures dans leur liste d’attente locale et les organisent en arborescence de façon à faciliter l’accès aux écritures individuelles. Tous les mineurs travaillent simultanément et choisissent librement quelles écritures ils incorporent dans leur bloc en construction. Ils complètent le bloc en lui ajoutant un en-tête, qui contient en particulier sa somme de contrôle et l’identifiant du bloc précédent.

Le coût de cette opération est volontairement rendu très élevé en imposant à la somme de contrôle de respecter des normes très sévères qui exigent une consommation considérable de ressources informatiques, mais dont le respect peut être facilement vérifié par tous les nœuds, formant ce qu’on appelle une « preuve de travail ». Cette exigence limite le nombre des mineurs à quelques centaines pour Bitcoin, la plupart regroupés en coopératives, seuls ceux qui peuvent mettre en œuvre une puissance de calcul considérable ayant une chance que leurs blocs soient acceptés à l’étape suivante, comme nous le verrons.

Dans les systèmes utilisant le même principe, cette opération est rémunérée afin de motiver un nombre suffisant d’opérateurs. Dans Bitcoin, cette rémunération s’effectue en insérant dans le bloc une transaction spéciale créditant le mineur d’un certain nombre de bitcoins créés à cet effet, qui sera exécutée si le bloc est effectivement ajouté à la chaîne à l’étape suivante. C’est cette opération, seule façon de créer de nouveaux bitcoins, qui est à l’origine du terme de « mineur ».

Quand un mineur a construit un bloc valide, c’est à dire correctement formé, accompagné d’une somme de contrôle conforme aux exigences de « preuve de travail », et dont chacune des transactions est valide, il le diffuse à ses voisins, qui à leur tour le diffuseront de proche en proche à tous les nœuds du réseau, après en avoir vérifié la validité ainsi que celle de toutes les écritures qu’il contient. Dès qu’un mineur reçoit un bloc d’un autre mineur, il arrête de construire le bloc en cours, qui n’a pratiquement plus aucune chance d’être accepté, élimine de sa liste d’attente locale toutes les transactions que contenait le bloc qu’il vient de recevoir, et commence à construire un nouveau bloc.

De nouveaux blocs sont ainsi produits et diffusés en continu à travers le réseau. Mais à ce stade, aucun exemplaire de la chaîne de blocs n’a encore été modifié, les seuls à pouvoir le faire étant les « nœuds complets », qui hébergent chacun un de ces exemplaires.

Une chaîne de blocs en fonctionnement – 3. la construction de la chaîne

Pour chaque nouveau bloc qu’il reçoit, chaque ordinateur d’un nœud complet exécute un protocole qui aboutit soit à rejeter ce bloc s’il a déjà été reçu, s’il est invalide ou s’il contient une écriture déjà présente dans la chaîne locale, soit à l’ajouter à l’extrémité de la chaîne locale après une ultime vérification de toutes les écritures qu’il contient, soit à le mettre en attente.

Rappelons que chaque bloc contient l’identifiant de son prédécesseur dans la chaîne de blocs du mineur qui l’a construit. Dans le cas le plus courant, ce prédécesseur est également le bloc terminal de la chaîne locale, à laquelle il viendra donc s’ajouter après une ultime vérification de sa validité. Sinon, il sera conservé en attente, en devenant l’extrémité d’une branche secondaire de la chaîne de blocs.

Afin que tous les exemplaires de la chaîne de blocs soient identiques, bien que construits indépendamment, ce protocole incorpore un mécanisme « de consensus », qui est un élément vital du système. La règle utilisée par Bitcoin est de retenir la chaîne qui a demandé le plus grand travail de construction des blocs qui la composent. À cette fin, l’en-tête de chaque bloc contient une mesure du travail effectué pour le construire, ce qui permet de calculer la quantité totale de travail dépensée pour construire la chaîne qui aboutit à ce bloc.

Si une chaîne secondaire a demandé plus de travail que la chaîne principale actuelle, cette chaîne secondaire doit devenir la branche principale. Pour cela, le programme remonte à l’endroit où elle s’est détachée de la branche principale, revalide un par un chaque bloc laissé en attente et les écritures qu’il contient, ajoute ce bloc à l’extrémité de la nouvelle chaîne en cours de construction si ces contrôles sont satisfaits, en abandonnant ce processus dès la première erreur.

Ce protocole critique et complexe constitue le véritable cœur du système. Il fournit également quelques services annexes, dont la reconstitution automatique de la chaîne locale après un arrêt de l’ordinateur ou du réseau.

A l’issue de cette deuxième phase, chacun des milliers d’exemplaires de la chaîne de blocs qui existent sur les nœuds complets a été prolongé par un bloc choisi par chaque nœud parmi les propositions des mineurs en appliquant la règle de consensus programmée. Si tous les nœuds complets mettent en œuvre les mêmes règles de validation des écritures et des blocs, ce bloc additionnel est le même pour tous les nœuds, et donc tous ces exemplaires de la chaîne de blocs restent identiques.

Une chaîne de blocs en fonctionnement – vue d’ensemble

En résumé, la séquence des opérations de construction de la chaîne de blocs est décomposée en étapes pouvant être exécutées par des opérateurs différents. Les mineurs construisent les blocs, mais ne les ajoutent qu’à leur propre exemplaire de la chaîne. Les nœuds complets ajoutent ou non les blocs à leur exemplaire de la chaîne, mais sans pouvoir les modifier, et tout le monde revérifie ce qu’ont fait les autres. Ces opérations sont exécutées en parallèle par des milliers de sites gérés par des opérateurs indépendants et situés partout dans le monde, n’importe qui étant libre de jouer n’importe quel rôle dans le système, y compris les plus centraux.

In fine, les écritures créées par des millions d’utilisateurs se retrouvent enregistrées dans des milliers de fichiers identiques sur autant de sites différents, sous la forme de chaînes de blocs inaltérables et librement consultables. Insistons sur le fait que ces fichiers sont construits indépendamment. Donc, contrairement à ce qu’on lit souvent, il est impropre de qualifier la chaîne de blocs de « distribuée », ce qui implique que différents nœuds en porteraient des parties différentes, ou de dire qu’elle est « répliquée », ce qui implique qu’elle serait construite en un point central puis recopiée sur les différents nœuds.

Tout en offrant une grande sécurité à ses utilisateurs, la multiplicité des exemplaires de la chaîne de blocs leur pose un problème : puisque, en application du « principe de précaution », on ne peut pas faire l’hypothèse que tous les exemplaires sont identiques, lequel prendre comme référence en cas de désaccord ?

C’est à chaque utilisateur de définir le protocole de consultation de son choix selon l’usage qu’il veut faire des résultats. Un exemple type est d’interroger des nœuds au hasard jusqu’à ce qu’un certain nombre, défini d’avance, donnent le même résultat. L’utilisateur peut aussi utiliser des nœuds en lesquels il a confiance, ou toute autre combinaison de ces deux approches. C’est à lui qu’il appartient de choisir sa méthode, qui peut-être critique pour lui, mais ne l’est pas pour le système.

Dans une deuxième partie, nous examinerons les implications de cette architecture de réseau pair à pair ouvert en termes de fiabilité, de sécurité et de résistance aux attaques des tous ordres et de toutes provenances.

Partie 2 (en ligne dès le 10 septembre)

  1. La blockchain, c’est la liste des propriétaires successifs d’un bien. Les propriétaires sont identifiés par un pseudonyme et non pas par leur vrai nom. Et cette liste est publiée sur internet en sorte qu’il soit quasiment impossible de la frauder.

    1. Ce que vous décrivez, c’est UNE des applications possibles de la technologie, pas sa définition.
      Et l’important, ce n’est pas seulement qu’elle soit publiée sur Internet, c’est qu’elle soit construite et publiée en parallèle par un grand nombre de sites indépendants

      1. Ma définition de la blockchain omet volontairement la description de la complexité technique du procédé visant à éviter la fraude. En quoi les diverses applications de la blockchain s’éloignent-elles de ma définition?

        1. Ce que vous dites est en partie vrai dans le contexte de Bitcoin, mais j’essaie de traiter indépendamment les notions qui sont indépendantes.
          Un fichier au format blockchain peut très bien contenir tout autre chose que « la liste des propriétaires successifs d’un bien ». Même dans Bitcoin, elle contient en réalité des transactions qui sont beaucoup plus complexes que la simple mention des propriétaires successifs d’un bien (ellles contiennent en particulier des bouts de programmes appelés « scripts »). Dans Ethereum, elle contient des même des programmes complets.
          De plus, dans d’autres applications que les systèmes de paiement, les utilisateurs peuvent être identifiés par leur vrai nom.
          Et mon article a justement pour sujet les procédés visant à empêcher la fraude, quel que soit le contenu de la blockchain.

          1. Si vous deviez donner une courte définition fonctionnelle de la blockchain sans mentionner le processus pour éviter la fraude, quelle définition donneriez vous?

  2. Pas sur que le troupeau de lobotomisés (TF1 + GAFA + console, tablettes et consorts) aient les moyens intellectuels (et l’envie) de lire et comprendre cet article.
    Parler de fonction de hachage à nos adorables lapins crétins ????
    Une bonne video sur internet parait plus d’actualité dans ce monde de fous

    1. honnêtement, je n’ai pas encore réussi à trouver le temps de bien comprendre la fonction de hachage, et pourtant, j’ai fait la sup, la sapé et la suite, et je n’ai pas été lobotomisé. ce qui ne m’empêche pas d’utiliser le bitcoin. et tous ceux que je connais pour utiliser régulièrement le bitcoin, il n’y en a aucun qui ait dépassé le cfc au niveau des études.
      ceux qui y verront un intérêt s’y mettront tout naturellement, sans connaître les arbres de merkle ou les fonctions de hachage

      1. jabo a raison. On peut très bien conduire une voiture sans connaître la chimie du pétrole et téléphoner sans connaître la physique quantique

        1. La video ou les MOOC paraissent de loin un meilleur support d’enseignement dans ce monde illettrés féru de High Tech.

          Le fond du message est que, Gérard, votre article est trop complexe pour le quidam moyen et ne s’adresse qu’a des gens qui s’intéressent déjà au sujet.
          Rapellez vous que le vocabulaire moyen du français est plutôt du niveau de la presse régionale et que son niveau moyen de réflexion ne dépasse pas le JT de 20 heure. Sans compter que les gens utilisent des écrans, le livre, sans parler de l’écris, restant pour certains un concept théorique
          Donc évitons l’écrit pour transmettre le savoir CQFD.

          Maintenant, on peut vivre sans avoir d’idée sur une fonction de hachage, pourquoi pas?
          On peut vivre sans comprendre les principes de cryptologie dans un monde numérique, pourquoi pas?
          Mais l’utilisation des crypto monnaies, si vous voulez en tirer le maximum sans incidents notables concernant votre anonymat ou la sécurité de vos fonds, je vous le dit, mieux vaut vous tirer les doigts du Q intellectuellement parlant, au risque d’y perdre vos billes.

          Enfin, c’est votre argent, pas le mien qui est en jeu.

          1. Vous avez sans doute raison, mais écrire, je sais faire (du moins je crois), une bonne video non.
            En effet, ces articles ne s’adressent pas au quidam moyen, qui d’ailleurs n’en a rien à f …, même en video. Et je maintiens qu’on peut non seulement vivre, mais même utiliser Bitcoin sans avoir d’idée sur une fonction de hachage et sans comprendre les principes de cryptologie
            Pour « mon argent », ne craignez rien, je n’ai pas le moindre satoshi.

  3. Un ensemble de serveurs donnant l’heure d’un événement avec fiabilité suffirait à obtenir une sécurité quasi totale des transactions. Chacun pourrait alors implémenter sa propre publication des propriétaires successifs d’un bien quelconque en sorte que cette publication ne soit pas falsifiable. Un tel système serait différent de la blockchain du bitcoin.

Les commentaires sont fermés.