Chaîne de blocs, mythes et réalités
Introduction
Le mot anglais Blockchain, qui peut être traduit par chaîne de blocs, est souvent utilisé en tant que bitcoin. Il est alors immédiatement chargé du côté sulfureux de la cryptomonnaie. Si le bitcoin a été la première implémentation d’une chaîne de blocs, les deux termes ne sont pas pour autant synonymes. Qui dit chaîne de blocs ne dit pas cryptomonnaie, comme nous allons le voir dans ce chapitre.
Une fois le concept de la chaîne de blocs clarifié, la question la plus fréquente est : comment fait-on pour créer une chaîne de blocs ? On entre alors souvent dans les arcanes de la programmation et aucun détour n’est réellement possible. S’il est relativement simple de participer à une chaîne de blocs, ne serait-ce qu’en achetant des cryptomonnaies ou en signant un contrat intelligent (smart contract) dans le cadre d’une application de contrats numériques, il n’est pas aussi simple d’en créer une nouvelle. D’autant que beaucoup de questions doivent être résolues avant de se lancer dans une telle création.
Cependant, et c’est tout l’intérêt de ce livre et des offres des grands éditeurs de logiciels et services informatiques, la création, la sécurisation et la gestion de chaînes de blocs...
Bitcoin et chaîne de blocs, confusion et clarification
Si vous avez déjà signé un acte de vente chez un notaire, vous comprenez qu’il y a au moins trois parties qui sont impliquées : le vendeur, l’acheteur et le notaire. Ce dernier jouant ce que l’on appelle le rôle de tiers de confiance. Il joue un rôle essentiel qui est de garantir que la transaction a bien eu lieu entre le vendeur et l’acheteur, et que de ce fait, le vendeur ne peut pas vendre de nouveau le même bien à un autre acheteur. Vous pensez peut-être qu’il semble difficile de vendre le même bien à deux acheteurs différents. En fait, rien n’empêche, a priori, un vendeur d’être un escroc, à part l’existence du fameux tiers de confiance. La question étant : peut-on se passer d’un tiers de confiance ?
1. Le problème de la double dépense
Ne considérons pas la vente d’un bien physique, comme une maison, mais plutôt un échange d’argent par voie numérique. Si Jean envoie cent euros à Sylvie, le compte de Jean doit être débité de cent euros alors que celui de Sylvie doit être crédité de la même somme. Cependant, il est important que les cent euros ne disparaissent du compte de Jean que si et seulement si le compte de Sylvie les voit apparaître.
Nous sommes face à ce que l’on appelle une transaction. Une telle opération a quatre caractéristiques bien définies sous l’acronyme ACID :
-
Atomicité. Toutes les opérations formant la transaction sont effectuées. Si une ne peut pas aboutir, toutes les opérations sont annulées. Dans notre cas d’échange d’argent, si Jean n’a pas cent euros sur son compte, celui de Sylvie ne pourra pas être crédité. À l’inverse, si le compte de Sylvie ne pouvait pas être crédité, celui de Jean ne devrait pas être débité. La propriété d’atomicité d’une transaction garantit que les opérations contenues dans une transaction aboutissent toutes ou échouent toutes.
-
Cohérence. La propriété de cohérence garantit que tous les systèmes impactés par...
Registres et chaînes de blocs
Nous avons a vu jusqu’à maintenant les principes techniques et opérationnels d’une chaîne de blocs. Un de ces principes est organisé autour de la notion de registre. Nous avons tous entendu parler de registres, par exemple le registre de l’état civil qui consigne les naissances, les unions, les divorces et les décès, ou le registre du commerce et des sociétés auquel doivent être inscrites toutes les personnes physiques et morales qui souhaitent faire du commerce.
Le dictionnaire Larousse nous dit qu’un registre est un « livre où l’on inscrit les faits, les choses dont on veut garder le souvenir. » Implicitement, on imagine un grand livre dans lequel sont consignées diverses informations.
1. Caractéristiques des registres et des chaînes de blocs
On se rend compte que ces registres possèdent un certain nombre de caractéristiques :
-
On y ajoute des informations.
-
Toute modification est en fait un ajout d’une nouvelle information liée à l’information précédente.
-
Le contenu du registre est garanti par un tiers qui détient le pouvoir d’y inscrire des informations.
-
N’importe qui peut consulter ce registre.
-
En cas de contestation, le registre fait foi.
Nous avons ici certaines des caractéristiques d’une chaîne de blocs telles qu’elles sont acceptées par l’ensemble de la communauté :
-
Transparence. Toute personne peut consulter les transactions d’une chaîne de blocs (à moins que celle-ci soit privée, ce sur quoi nous reviendrons plus tard).
-
En ajout uniquement. On ne supprime ni ne modifie aucune écriture d’une chaîne de blocs, on ne fait qu’ajouter de nouvelles transactions. Si on souhaite invalider une transaction, il faudra ajouter une nouvelle transaction pour...
Participer à une chaîne de blocs
Pourquoi réinventer la roue quand on est face à un garage qui en a de toutes les tailles et de tous les types en rayon ? C’est la première question à se poser une fois que l’on a identifié qu’on a besoin de stocker nos informations sous la forme d’un registre décentralisé.
1. Identification et authentification
Commençons par éviter une confusion. Un des scénarios d’usage des chaînes de blocs est celui de la vérification d’identité et en particulier du KYC (Know Your Customer). Nous aurons l’occasion d’y revenir, mais pour le moment, ce n’est pas de cette identité dont nous parlons, mais bien de celle qui vous permet de vous identifier en tant que participant à une transaction enregistrée dans une chaîne de blocs.
Comme nous l’avons vu précédemment, la clé privée va permettre l’identification des acteurs d’une transaction. Ces clés permettent d’identifier potentiellement des milliards d’individus, d’objets ou d’organisations. En effet, si la question de l’identité d’un individu ne pose pas d’interrogation primaire en soi, celle d’un objet est tout aussi importante dans un monde de contrat intelligent où une transaction peut être initiée par un tel objet.
Si un jeu de clés (privée et publique) va permettre de valider les participants à une transaction, il n’est généralement pas du ressort de la chaîne de blocs de valider que tel utilisateur est bien le propriétaire de la paire de clés.
Figure 11 - De l’authentification d’un utilisateur à la signature d’une transaction
La figure 11 indique de manière simplifiée les relations qui existent entre les différents éléments d’une chaîne d’authentification :
1. L’utilisateur est authentifié auprès d’un annuaire qui tient à jour ses éléments d’authentification, comme son nom et son mot de passe. Cette authentification peut aussi être renforcée par des mécanismes à plusieurs niveaux.
2. Une fois l’utilisateur authentifié, l’autorité...
Créer une chaîne de blocs
Maintenant que nous avons expliqué les éléments fondateurs des chaînes de blocs, la question qui se pose naturellement est la suivante : comment créer une chaîne de blocs ? La réponse se trouve dans les pages suivantes, sachant qu’elle n’est pas forcément simple et que tout va dépendre du cas d’usage. Cependant, on peut distinguer trois cas principaux :
-
La création ex nihilo. Cela revient un peu à programmer votre propre système de base de données. À moins de vouloir éditer votre propre architecture, il y a peu de chances que vous empruntiez cette voie.
-
La création à partir d’une chaîne existante, soit sous forme de clonage, soit de « fork ». C’est la voie à choisir quand on veut utiliser les fonctionnalités d’un système existant tout en se réservant le choix de pouvoir faire des modifications structurelles.
-
L’utilisation de frameworks ou de services existants. C’est aujourd’hui le choix le plus logique pour une entreprise ou un développeur qui voudrait proposer des services de chaînes de blocs sans recréer les fondamentaux sous-jacents. C’est celui que nous développons dans ce livre autour des Managed Blockchain Services d’Amazon Web Services.
Regardons chacun de ces cas dans le détail afin de nous donner une idée du travail qu’ils représentent.
1. Création ex nihilo
Décrire en détail la création d’une chaîne de blocs avec l’ensemble de ses fonctionnalités nécessite plus que quelques paragraphes. L’objectif n’est ici que de vous fournir un aperçu des opérations nécessaires en l’illustrant par une application de type Console .Net Core en C#.
Cette application, simplissime, simule le fonctionnement générique d’une monnaie virtuelle comme le bitcoin, qui permet l’échange de « coins », c’est-à-dire de pièces de monnaie, entre les acteurs ayant accès à la chaîne. L’objectif est ici d’illustrer le fonctionnement d’une chaîne de blocs pour mieux le comprendre, sans rentrer dans...