La technologie “blockchain”

Quand on entend parler de la technologie de “blockchain”, elle est souvent associée aux BitCoins, la “cryptomonnaie” électronique ou encore à Ethereum “le futur BitCoin”. Mais cette technologie est-elle limitée à une écono-geekerie ou à de complexes projets financiers ? Il est possible que vous ne puissiez pas passer à côté dans votre métier, et ceci beaucoup plus vite que ne vous le pensez.

Mais de quoi parle-t-on quand on parle de “blockchain” ?

Définition de la “blockchain”

La meilleure image pour comprendre cette chaîne de blocs est de se représenter une base de données en “peer-to-peer” (P2P). Une des définitions qui émerge est de parler d’un protocole de registre de données ouvertes.

Le peer-to-peer

Le peer-to-peer a pour but de partager des fichiers et ne doit pas être abordée que comme une technologie pour “pirates”: c’est un “mauvais” usage qui en est fait. L’objectif est de partager des fichiers ou calculs découpés en parties. Je propose de simplifier en parlant de fichiers pour l’instant.

Chaque “client” peut demander un fichier, le récupère d’un ou plusieurs “serveurs” et devient lui même “serveur” de partage de fichier quand il le reçoit. Les avantages sont nombreux :

  • multiples sources pour chaque fichier, ce qui accélère le téléchargement
  • permet à une résilience de s’installer si de nombreux utilisateurs partagent le fichier
  • permet de supprimer les fichiers

Enfin, plus il y a d’utilisateurs plus c’est scalable !

Dans le cas du réseau P2P des BitCoins il est également dit “non géographique” c’est à dire que le choix des serveurs de téléchargement n’inclut pas de critères de présence proche.

Application à la blockchain

Si maintenant vous remplacez l’idée de “fichiers” par “données” vous commencez à entrevoir le potentiel de la technologie : une base de donnée scalable, résiliente, partagée et sans aucune infrastructure à mettre en place !

Votre donnée est également complètement décentralisée et donc la blockchain n’appartient à personne ou appartient à tous. Ces “données” qui sont partagées entre les serveurs de ce réseau P2P sont appelées “blocks”.

La chaîne de blocs

La blockchain permet donc de partager des blocs entre différentes personnes sans que ceux-ci n’appartiennent à personne ou à tous. Chacun de ces blocks contient un certain nombre de transactions. Une transaction est un changement au sein d’un référentiel/d’une application. On regroupe les transactions dans des blocks pour limiter la taille de la chaîne.

Comment avoir confiance dans les données que je télécharge ? Et donc confiance dans les transactions qui me sont partagées ?

C’est ici qu’intervient la notion de chaîne. L’idée est de "chaîner" tous ces blocks de manière à pouvoir faire un suivi entre eux. Le premier block pourrait s’appeler GenesisBlock. ;-)

Par exemple, je définis un premier block qui contient 10 pommes, puis j’ajoute des transactions :

  • Aurélie qui prend 7 pommes
  • Bastien qui prend 3 pommes
  • Charles qui demande 3 pommes à Aurélie
  • etc.

Si j’ajoute ce block "A" à mon block Genesis en indiquant dans les données de "A" qu’il est fils de Génésis, je peux alors ajouter "B" en indiquant qu’il est le fils de “A” et j’ai bien une chaîne simplement chaînée que je peux remonter pour voir toutes les transactions.

En utilisant ces propriétés, on peut conclure que la blockchain ne pourrait donc être falsifiée que si plus de la moitié de ces nœuds étaient corrompus simultanément, il s’agit de l’attaque dit "des 51%".
Toute personne expliquant mathématiquement pourquoi dans les commentaires gagne un bon point.

Pour visualiser des transactions, vous pouvez les consulter sur: https://blockchain.info/home
Je vous invite à regarder les données disponibles.

La mutualisation de la confiance

Lors de l’ajout d’un block à la chaîne il ne peut y avoir qu’un seul block de confiance et la blockchain doit rester une liste de blocks. En effet, si un arbre apparaissait dans notre schéma alors il y aurait plusieurs “vérités” parallèles.

Si mon block “A” a deux fils “B-1” et “B-2”, alors de nouveaux blocks pourraient s’ajouter à l’un ou l’autre :

  • “C” rattaché à “B-1” où Bastien prendrait 2 pommes
  • “D” rattaché à “B-2” où Bastien prendrait 3 pommes

En remontant une transaction on pourrait alors trouver une solution différente à mon problème. Au final combien Bastien a t-il de pommes ?

C’est pour cela qu’un seul block de confiance peut être généré à la fois. Si par mégarde la blockchain en produit deux alors le block suivant fera un choix entre les deux fils et l’autre sera écarté. Il ne peut y avoir qu’une seule blockchain.

Mais qui génère ces blocks et comment leur faire confiance ?

Où l’on parle des mineurs

Les mineurs sont des serveurs du réseau ayant pour tâches:

  • d’écouter l’ensemble des transactions du réseau
  • de maintenir leur liste de blocks à jour et les partager - cf le chapitre “peer-to-peer”
  • de tenter de construire le block suivant en jouant à une compétition

Lors de la génération d’un nouveau block, chaque “mineur” va travailler sur un problème cryptographique : trouver un nombre tel que le “hash” lié à une propriété définie dans le block précédent soit inférieur à un niveau de complexité qui change toutes les deux semaines.

Le challenge utilise forcément du temps de calcul, en moyenne il faut 10^21 essais. Lorsqu’un client/serveur est utilisé pour cela on parle d’un “mineur”. Lorsque vous entendrez parler de “mineur de BitCoin”, votre interlocuteur fait référence aux serveurs en charge de résoudre ces problématiques.

La personne qui a mis en place le réseau BitCoin, connue sous le pseudonyme “Satoshi Nakamoto”, a inventé un protocole de consensus pour désigner ces blocks de confiance. C’est également une solution connue au problème dit “des généraux byzantins”.

Le challenge est très facilement et rapidement vérifiable par le système distribué qui garantit aussi la véracité des transactions à l’intérieur du block. C’est grâce à ce consensus que le block généré par un mineur est choisi comme étant le block de confiance.

Où l’on parle (enfin ?) de BitCoin…

Un des problèmes à résoudre quand on veut faire une blockchain “publique” et “distribuée” est de trouver des mineurs prêt à dépenser du temps CPU et donc de l’électricité dans le minage.

L’idée du BitCoin pour motiver des utilisateurs est :

  • de rémunérer chaque “block de confiance”, donc un block accepté par le consensus par un certain nombre de “BitCoin”, on parle de “block reward”
  • de prendre à chaque transaction à l’intérieur d’un block une commission, on parle de “transaction fee”

Comme le BitCoin est une monnaie, c’est une vraie incitation financière à fournir des blocks valides, et cela décourage le minage de blocks invalides : ça serait une perte de temps CPU pour un gain faible et serait détecté par le protocole de consensus.

Chaque utilisateur a une adresse BitCoin qui est un hash de sa clef publique et qui l’identifie dans le système.

Voilà une solution pour financer le minage de vos blocks.

La transaction BitCoin

Dans un block bitcoin on retrouve :

  • des meta-données

    • qui identifient le block précédent (construction de la blockchain)
    • qui identifient le mineur du block
    • qui incluent la preuve du travail qui sera vérifié selon l’algorithme de consensus
    • qui définissent le challenge suivant
  • une partie “input” qui sont les liens avec les transactions précédentes qui “prouvent” qu’on a accès aux ressources échangées :

    • dans la transaction A j’ai reçu 2 pommes de Pierre
    • dans la transaction B j’ai reçu 3 pommes d’Aurélie donc je peux échanger mes 4 pommes
  • une partie “output” qui indique le changement à faire et comment il devra être fait via l’utilisation de Script bitcoin

Le Script bitcoin

C’est un langage de type “pile” basé sur du Forth. L’objectif est de pouvoir scripter comment la transaction peut être exécutée. Par exemple par un utilisateur unique (le cas le plus fréquent) ou encore par un groupe d’utilisateurs.

Quelles sont les applications de la blockchain ?

L’application la plus répandue est très certainement la suppression des tiers de confiance dans les échanges financiers, dans ce mode la blockchain est considéré comme une unité de compte. Chaque échange entre particuliers serait dépendant d’une blockchain.

Un principe pouvant être mis en application est la notion de “SmartContract” poussée par Ethereum. Par exemple, entre un VTC et un client devant se rendre à un endroit donné, il pourrait être fait une transaction qui ne serait applicable que lorsque le client serait au “bon endroit” ou sur validation de celui-ci. La transaction étant décidée par avance et l’intégrité et l’application garanties par la blockchain. Cet exemple est très repris dans les conférences sur la blockchain comme étant une uberisation… d’Uber.

Dans la pratique, en entreprise on peut imaginer une application orchestrant les transactions internes entre filiales mais qui n’appartiendrait à aucune, ou une gestion collaborative des échanges entre plusieurs sociétés par exemple.

Une des craintes de l’utilisation de cette technologie est le manque total de contrôle possible sur un flux financier. Comment mettre un droit de douane par exemple ? Ou faire respecter un embargo ?

Conclusion

La blockchain est une nouvelle façon de percevoir les applications traitant des transactions ainsi que la relation de confiance au sein du réseau.
Elle pose également de nouveaux problèmes sociaux et politiques au sein de l’entreprise comme de la société.
Le sujet est en tout cas posé et j’espère que cet article vous a permis de comprendre ce qui était techniquement en jeu. Le reste vous appartient.

Enjoy :-)