Il est assez difficile de comprendre comment marche vraiment la chaîne des blocs, et j'avoue, au moment où je commence cette explication, ne pas y être encore arrivé.
On passera rapidement sur le mot clé ("bit coin") qui fait comprendre en deux mots la chose (ah oui!). Une monnaie artificielle, inventée par un japonais anonyme. Il parait qu'on pourrait s'en servir pour ubériser uber. Bref le brouillard complet. Comment diable cela peut il marcher ?
On va donc commencer par introduire des "blocs de compréhension" et après les avoir compris, on les chainera entre eux, pour arriver à l'illumination.
Une référence: l'article original, assez court et finalement très lisible:
https://bitcoin.org/bitcoin.pdf
Introduction
La chaîne des blocs est décentralisée: c'est sa fonction. Elle est un objet produit par une collectivité mue par ses intérêts et globalement digne de confiance, globale et mutuelle, du fait de la mise en oeuvre d'un protocole précis.
Idéologiquement elle est l'exemple parfait de la validité de l'idée libérale, qui énonce la possibilité d'un contrôle collectif sans autorité. Le monde peut vivre sans Dieu, prophète ou soviet suprême, simplement en échangeant de l'information suivant certaines règles. Ces règles sont à la fois globales et locales.
Globales car, universelles et connues de tous, à accepter suivant un principe de confiance mais aussi de respect de l'existant connu de tous, c'est à dire de ce qu'on appelle l'autorité au sens strict.
Locales car appliquées par chaque individu sans concertation ni obéissance à une synchronisation venue d'ailleurs. Un texte formel appliqué qui suffit à générer sans intention bonne ni intervention d'un pouvoir magique, le souhaitable et donc le bien.
Cette décentralisation absolue de la confiance est la mort du "tiers de confiance" ultime justification de la nécessité d'une centralité agissante dans l'ordre du monde. Nous étions sans Dieu, nous voilà sans notaire. Alors que le fonctionnement même de l'Internet, réseau d'acteurs anonymes sans savoir ni responsabilité qui permet et d'ailleurs rend possible la communication universelle, était déjà une exemple du concept, nous avons ici la couche d'après, celle qui instaure non pas seulement la liaison, mais la confiance entre les hommes. Je te crois parce que c'est prouvé mathématiquement. Merci Satoshi Nakamoto.
La hache
D'abord une technique classique, consubstantielle à la pratique de la belle pensée nommée informatique: le hachage. Le mot français pour exprimer la signification anglaise (ou anglo-saxonne) est parfaitement adapté: l'algorithme en question consiste effectivement à couper des cheveux en quatre puis de les mélanger et de recommencer un certain nombre de fois. Le caractère "dièze" (#) pourrait être appelé "hachis" tant il exprime l'opération fondamentale de découpage systématique qui consiste à transformer une chose en un magma d'apparence hasardeux et dont personne ne peut rien faire. Car il faut le dire, et cela n'est pas évident, on ne peut inverser l'algorithme: à partir d'un hachis donné, le nombre d'objets susceptibles d'être hachés en ce hachis de la manière dont on hache est bien trop grand... Par contre, l'application du hachage à un objet est fait assez vite et on peut donc vérifier la validité d'un hachis. Un calcul peut ainsi être unidirectionnel. Non pas NOWAY, mais ONE WAY.
Hacher pour travailler
Ensuite une autre technique classique pour éviter les attaques par saturation d'un service donné: on fait faire au client du service une opération protocolaire assez courte, d'une durée équivalente à celle mise en oeuvre par le serveur lors de la consommation du service. Ce travail supplémentaire, qui passe inaperçu, permet d'éviter que le client ne demande trop souvent le service en question: il se retrouverait alors en charge d'un travail équivalent à celui du serveur. Une attaque par saturation, ainsi, se saturerait elle même.
Le travail à faire, assez basique, consiste à consommer bêtement de la puissance de calcul en calculant des hachages de nombres successifs jusqu'à ce que le résultat commence par un certain nombre de zéros. Cela arrive fatalement au bout d'un certain temps, merci à l'ensemble des entiers naturels (mais qui a donc pu inventer un truc pareil?).
En fait on hache la concaténation de la date, de son nom et de l'entier à incrémenter. Le nombre de zéros qui décide de la fin du travail est choisi suivant la charge du serveur, qui peut ainsi décider à loisir de charger son client, voire de le saturer, un nombre de zéros requis trop important pouvant plonger l'attaquant dans des réflexions qui peuvent devenir éternelles (ou assez proche de) et ça se calcule.
Toute les théories des nombres disponibles actuellement garantissent (et sinon, soyez en sur, cela se saurait) qu'il est absolument impossible de faire mieux que des essais successifs pour réaliser la tâche en question. Un tel système est nommé une "preuve de travail": lorsqu'à partir d'une donnée donnée un impétrant exhibe le nombre de zéros, ce qui se vérifie instantanément, on peut être sur qu'il a fait un effort statistiquement proportionnel (enfin presque, en relation exponentielle plutôt) au nombre de zéros demandé.
On notera au passage la merveilleuse caractéristique, propre à toutes les théories de la complexité, et qui est la différence entre réalisation et vérification d'un travail: l'une peut être effroyablement difficile, c'est à dire fastidieuse et surtout longue, l'autre est instantanée. Quelle injustice ! Alors qu'il suffirait de "deviner" puis de vérifier pour résoudre tous les problèmes du monde...
Les clés publiques et privées
On rappellera que "crypter" ne veut RIEN dire que "décrypter" signifie décoder un message secret sans connaitre la clé de chiffrement. "encrypt" and "decrypt" sont les mots anglais. On dit "chiffrer" et "déchiffrer" en utilisant une clé pour les codes dit "secrets" et le "encrypt" anglais se traduit par "chiffrer"... On ne dit pas "cryptage" mais "chiffrement" traduit par "encryption".
On passera rapidement sur les couples indissolubles des clés publiques et privées générées simultanément de manière à ce que symétriquement (alors que ce chiffrement là est qualifié de d'asymétrique) tout ce qui encodé par l'une soit décodé par l'autre. Imparable mais relativement lent à coder et à décoder, ce système merveilleux maintient nécessaire toutefois les encodages dit symétriques, eux même hélas régulièrement défoncés par la guerre continuelle du glaive et du bouclier, la dernière victoire du glaive datant de Janvier 2016, et elle s'appelle SLOTH.
Au passage, combien de gens ont réalisé que le petit cadenas qui nous protège si souvent sur le web est affiché après consultation d'un certificat qui contient une clé publique, utilisée pour chiffrer dissymétriquement un code secret tiré au hasard utilisé pour chiffrer cette fois symétriquement toutes les photos qu'on reçoit ?
Au passage on notera que les systèmes de chiffrement "symétriques" (on décode avec la clé d'encodage) sont toujours fragiles, attaqués et remplacés en permanence. Un exemple extraordinaire de cette fragilité est celui qui conduisit à réétudier spécifiquement la spec de HTTP/2: la compression des données rendait le chiffrement de l'ensemble attaquable par le célèbre CRIME, ce qui imposa l'introduction de HPACK qui s'en défend... En effet, le chiffrement d'un texte compressé le rendait prévisible...
Une pièce
La plus belle définition d'un "objet" qui soit est qu'il est la suite ordonnée de ses possesseurs, chaque maillon de la chaîne pouvant être qualifié de transaction, car identifiant les deux propriétaires, l'ancien et le nouveau. Ce qui qualifie l'existence (objective) se trouve ainsi une suite de possessions.
L'encodage de cela est relativement simple, il suffit que chaque maillon soit le hachage du maillon précédent, de son addition avec la clé publique du destinataire, le tout chiffré par la clé privée du donateur, et signé par la clé publique de celui ci.
On rappellera brièvement la notion de signature d'un texte, qui prouve l'identité de son auteur: elle est formée de la concaténation de 3 entités: le texte en clair, le texte hashé sur une taille raisonnable encodé par la clé privée de son auteur, et la clé publique de l'auteur, qui sert à l'identifier lui. Qui sert aussi à décoder le hash encodé, dont on vérife qu'il hashe bien le texte: seul le possesseur de la clé privée a pu produire ce truc. A vous de faire confiance à celui qui possède la clé publique, un voleur peut être, c'est à vous d'évaluer la chose.
L'objet ainsi constitué peut être décodé par la clé publique du donateur, ce qui lui attribue le don, et vérifié par le récepteur ce qui lui attribue le don, mais cette fois dans l'autre sens donné du mot et dans l'autre direction de l'échange. L'accrochage à la transaction précédente suffit à identifier l'objet, lui même seul à encoder son passé.
Chacun de ces mystérieux objets s'appelle une pièce, ou une unité monétaire, une sorte de "sou", quelque chose d'unique qui se transmet, et qui n'est QUE ce qui s'est transmis dans la durée, de l'"argent" donc, car seul le rond de métal marqué a aussi cette propriété.
On a donc les deux "faces" de l'argent, l'objet dur reconnaissable comme tel par les marques qu'il porte, et l'ensemble abstrait de tous ses passages de main en main représenté dans une mémoire électronique. Le plus extrême du spatial et le plus extrême du temporel et en même temps le plus pur de l'éternel et le plus fragile de l'instantané (je rêvasse).
La chaîne
C'est alors qu'arrive la deuxième chaîne, et oui il y en a deux, c'est pour cela qu'on nomme la vraie, la seule la "chaîne des BLOCS", un bloc étant un ensemble de transactions, c'est à dire un ensemble de maillons décrivant les différentes "pièces" en circulation. Ces blocs sont chainés, comme de juste, et de manière unique bien sur.
Cette chaîne est ainsi une donnée, un bloc formé de blocs chainés donc, et qui constitue toute la base de données de stockage de toutes les transactions, c'est à dire tout l'historique de toute la monnaie qu'on s'échange ainsi. Etant entièrement formée de hachages, elle est la trace unique de cette historique et donc se trouve être une représentation de la vérité de tous ces échanges. Et il ne s'agit pas de faire confiance, ici: on peut et on doit vérifier.
Le volume total de données dont il est question est relativement réduit: quelques dizaines de giga octets, parfaitement stockables sur une clé USB, facilement duplicables et surtout vérifiables. Du concret, du réel, du touchable. Ce qui fait que la meilleure représentation que l'on puisse se faire d'une "chaine de blocs" est celle d'un gros bloc de données répliqué à l'identique de manière sure un grand nombre de fois. Une base de données répliquée.
Ce bloc de données est partagé par un nombre indéfinis d'individus, les "noeuds", les calculateurs, les vérifieurs, les donateurs, les récepteurs bref tous ceux qui ont un intérêt quelconque à son unicité et qui se sont mis d'accord, par le biais d'un protocole, pour décider collectivement de l'unicité de chose, surtout et c'est le fond de l'affaire, que cette chose évolue en permanence avec les blocs de transactions qu'on lui rajoute.
On va là se poser deux questions avant de continuer, et essayer d'y répondre.
D'abord qu'est ce qui décide de la véracité de l'acceptation d'une évolution de la chose (typiquement de l'ajout d'un bloc à la chaîne) ? Ensuite qu'est ce qui décide de l'unicité de la chose constituée à un moment donné ?
Les blocs
On va commencer par l'ajout de blocs. Il faut résoudre deux problèmes. D'abord, on doit décider de qui parmi une collectivité donnée peut avoir la responsabilité d'ajouter le prochain bloc à la chaîne. Ensuite, on doit informer tout le monde du résultat de la décision.
On passera sur qui détermine le contenu de chaque bloc. Il y a de multiples manières d'en décider et puis je n'ai pas le temps de vérifier. Disons que c'est le gagnant de l'élection organisée pour ajouter le prochain bloc.
Election: il faut décider de un parmi beaucoup. La technique est celle de la "preuve de travail". Pour garantir l'absolue neutralité du choix qui ne doit être basé sur aucune caractéristique d'autorité ou de préférence, on va choisir le plus chanceux d'un tirage au sort qui ne sera pas centralisé : celui qui aura trouvé le premier la réponse à une question difficile connue de tous qu'on ne peut résoudre que par hasard...
Chaque intervenant (qui veut) va donc chercher à ajouter un bloc à la chaîne et se tenir informé du succès des autres. Pour cela il cherche un hash qui commence par un nombre de zéro donnés. Si un pair réussit, on met de coté son propre calcul et on en recommence un autre, à partir du dernier succès. Naturellement, on vérifie (et on en a les moyens) toutes les tentatives que les calculateurs s'envoient les uns aux autres.
Pas besoin que tous soient connectés: un réseau "suffisant" (quelques centaines suffisent) de groupes connectés partiellement suffit à propager une chaine de blocs. A tout moment, la plus longue chaine commune est la vraie, c'est l'objet partagé, qu'on peut vérifier correct et unique. Les deux questions sont résolues, ça marche.
Notons ici que les différents protocoles de chaines de blocs (il y en a des centaines ) se différencient suivant les méthodes de vérification protocolaires de ces questions. Combien de chaines "parallèles" peuvent évoluer avant une réconciliation, comment en décider ? Avec quel nombre de pairs doit on correspondre, certains sont ils plus respectables que d'autres, plus crédibles que d'autres ? Disons qu'il y a des techniques variées de connexion des uns aux autres, et que ces variations ont pour objet de réduire le temps de convergence de l'accord entre les pairs.
Les variations de ces protocoles se prouvent: elles sont de la classe des protocoles de "dissémination" dont on peut montrer statistiquement qu'elles convergent vers le "bon" état. Ainsi, on montre qu'asymptotiquement, un attaquant ne peut réussir à insérer ses propres transactions dans une chaine qu'avec des probabilités qui tombent très vite (au bout de quelques blocs) à des valeurs trop faibles pour être représentées: cela se comprend, il faudrait pouvoir générer des "faux" blocs et pour cela miner comme un malade à une vitesse que justement le système rend bien trop élevée pour cela. A l'impossible nul n'est tenu: une fois initiée, la chaîne devient trop grande pour être changée dans un temps raisonnable et c'est sa croissance difficile qui la rend unique.
Le minage
On ne peut éviter de décrire l'origine exacte de la monnaie ainsi utilisée. Et bien elle est crée à partir du néant de la création des blocs. Car la preuve de travail est l'origine de la création monétaire. Chaque nouveau bloc créé contient en effet une transaction (par convention la première dans le bloc), attribuant une unité monétaire nouvelle (et donc par cela même créé sous vos yeux ébahis) au créateur du bloc, libre à lui de la donner à qui il veut suivant les processus décrits et cela, toujours s'il le veut en échange de quelque chose d'autre à déterminer avec le bénéficiaire. Une faveur sexuelle par exemple, ou un joint (je rigole).
Le processus de découverte des blocs est donc une activité à part entière, génératrice de richesses et sujet à concurrence. Il s'appelle le "minage", les créateurs de blocs étant des mineurs, dotés de pioches, casques et muscles nécessaire au piochage frénétique dans la chair du monde.
Les protocoles de minage font varier comme indiqué la difficulté du travail. En gros, les protocoles asservissent cette difficulté à la vitesse, mesurée collectivement, de création des blocs. Dix minutes par bloc ou dix secondes suffisent à exiger un nombre de zéros plus grand à trouver. L'effet en est immédiat et exponentiel...
Pour expliciter la chose on a vu 3 étapes dans la difficulté imposée aux mineurs de la principale chaine de blocs en activité (cela a commencé en 2008). La première fut celle des ordinateurs individuels, la seconde celle des cartes graphiques et autres FPGA spécialisés connectés dans ces mêmes ordinateurs. Nous en sommes a des ASYC montés en chassis, opérés dans des centres de calcul gigantesques.
Un article du monde récent (Mai 2016) parle de locaux en Suède, rafraichis par le vent polaire, où 65000 machines à circuits électroniques spécialisés (les asyc) trouvent 180 bit coins par jour à 470 euros pièce. En Juillet 2016, le protocole va doubler la difficulté de la chose...
Les preuves
Il y a en fait de multiples autres problèmes de compréhension à résoudre, et qui tournent autour de la justification du fait que cela marche effectivement, et que nul ne peut détourner le système. On peut effectivement se contenter de l'affirmer, mais cela ne suffit pas, il faudrait s'en convaincre avec des "vrais" arguments et j'ai autre chose à faire.
Qui plus est, ll y a le problème de l'efficacité de la constitution des preuves. On se doit de mentionner les fameux arbres de Merkel (inventés par la chancelière, elle mine le coin à ses moments perdus, au lieu de tricoter comme on l'imagine; dire qu'il s'agit en fait d'un nègre nommé Merkel qui a inventé ça en 1979 est un blasphème). Pour obtenir le hash d'un ensemble d'objets par exemple 2048 objets, on veut éviter d'abord de hacher la concaténation de tous les blocs. Vérifier une assertion dans le bloc supposerait de TOUT vérifier. On préfèrera donc hacher chaque objet individuellement et constituer un arbre des valeurs de hash en hachant à chaque niveau. On peut alors signer le root hash qui authentifie tous les blocs d'un coup, devenus immutables, en tout cas, prouvés mutés si c'est le cas.
Mieux! La navigation dans un arbre de Merkel permet de vérifier UN objet à bas cout. Vérifier signifie ici s'assurer qu'un bloc contient bien la valeur 666: on hache le bon bloc et les hachages stockés dans l'arbre permettent alors de vérifier qu'on a bien la bonne information dans tout l'arbre.
L'intérêt
Mais il y a aussi (et surtout) les aspects concernant l'intérêt des uns et des autres à maintenir intact le système global. En effet, on pourrait imaginer qu'un tel collectif se défasse, par manque d'intérêt, justement ou même par lassitude. Les tenants de fortunes en cette monnaie là pourraient ainsi se trouver lésés, justifiant les qualificatifs insultants de "chaine de Ponzi" adressés à ce principe. Il faut comprendre que la réponse à cette question, en fait fondamentale pour la cohérence et la validité globale du système, introduit précisément la notion d'intérêt: les acteurs qui font fonctionner le réseau sont rétribués (de manière décentralisée) pour cela.
Cela signifie, que comme indiqué au tout début, il y a existence, au coeur de la définition du système, d'une fonction d'intéressement basée sur une transmission de valeur, seule manière de solidifier ce qui justifie d'ailleurs son utilisation: la possession de cette valeur. La boucle est bouclée, et l'objet entièrement cohérent, on pourrait dire "vivant", cette chose là étant et ce sera la conclusion, la plus proche imitation de la vie elle même que la formalisation informatique du monde ait pu produire.
Deux caractéristiques de la vie sont ainsi présentes dans cette merveille conceptuelle et technique qu'est la chaîne de blocs: l'éternité de la difficulté à se construire, garant de la confiance; et aussi la notion de désir de vivre, garant de la poursuite du processus. On glose à loisir sur l'imitation de l'intelligence humaine alors que l'imitation des processus vitaux sont bien plus importants: nous en avons un là même. Et cela est parfaitement fascinant.
P.S: à quelque jours d'un doublement de la difficulté de minage, la valeur du Bitcoin est en très forte hausse (mi juin 2016).
P.S: fin juin 2016 un hacker a réussit à tromper Ethereum et à voler 4M ethers soit 40 ME. Fin Juillet Ethereum a procédé à un "hard fork" de la chaine de blocs pour annuler ces transactions. Mais certains le refusèrent: il existe donc toujours un Ethereum "classic" qui continue, après avoir entériné les transactions frauduleuses.
https://www.ethereum-france.com/the-dao-retour-sur-12-tres-longues-heures/
P.S: Novembre 2017. Le bit coin passe les 10 000 dollars.
Au fait, il ne peut y avoir plus de 21 M de Bitcoin (le prix d'un bloc diminue de moitié tous les 510 000). Ce nombre devrait être atteint en 2033. Après moi le déluge. En fait, une fois la limite dépassée, les mineurs et donc les créateurs de blocs seront uniquement rémunérés à la transaction.
P.S.: Quelques données supplémentaires. Un bloc miné de Bitcoin fait un 1MB, et est produit au bout de 10 minutes.