« A vous de travailler ! »
La première fois que j’ai découvert le projet Iota, j’ai immédiatement pensé – nous sommes peu de chose – à la sympathique caissière d’une des boucheries de quartier à laquelle je me rends parfois pour faire mes courses (oui, j’ai la chance d’habiter un quartier où il y a encore quelques commerces dit de « proximité »)… Elle a en effet l’habitude de recevoir ses clients qui souhaitent payer par carte bancaire, en leur présentant un terminal de paiement électronique et de les apostropher ainsi avec un air malicieux : « A vous de travailler ! » – feignant de croire que composer son code secret à quatre chiffres est un exercice qui mérite toute notre attention…
Derrière sa boutade qui la fait rire à chaque fois, sait-elle seulement qu’il y a là ainsi résumé les derniers développements les plus ingénieux concernant les systèmes de paiement modernes ? Développements qui pourraient jouer un rôle considérable dans le fameux internet des objets encore en gestation, les transferts d’ordre et les possibilités de micro-paiements…
Des développeurs, des mineurs, des utilisateurs, une blockchain
Reprenons Bitcoin et tous ses successeurs, Ethereum compris. Une crypto-monnaie, c’est en général : des développeurs, des mineurs et une blockchain. Le tout s’appuie sur une caution scientifique qui peut prendre la forme d’une simple prépublication, ou d’une fondation. (Ouvrons une parenthèse. Ce qui s’est passé le 2 août à l’Université de Stanford est à ce titre significatif. Le génial et modeste Dan Boneh – je signale l’ouverture de son cours en ligne élémentaire de cryptographie I le 5 septembre prochain sur Coursera – s’est adressé à un public averti de développeurs de Bitcoin Core et de mineurs dont certains venaient de très loin, en brossant plusieurs défis futurs à relever. Le texte de son intervention est disponible à cette adresse. A lire pour tous les matheux « bitcoiners »…)
Toutes les cryptomonnaies partagent un même modèle : une distinction claire et nette entre les utilisateurs qui ne sont là que pour donner des ordres et passer de nouvelles transactions et les mineurs qui regroupent toutes ces transactions, vérifient qu’il n’y a pas de fraude, les enregistrent dans des blocs et se portent garant de la sécurité du réseau. En théorie, tout le monde peut être mineur. Mais en pratique, le minage est l’affaire de véritables entreprises essentiellement basées dans des zones géographiques où le coût de l’électricité est (quasiment) nul.
Un mot tout de même ici sur les cryptomonnaies avec preuve d’enjeu (telle est la traduction douteuse ? retenue par Wikipedia pour « Proof of Stake »). Dans ce cas, le minage est un peu particulier car il est complètement virtuel et ne nécessite pas de matériel informatique performant pour mener des calculs. Voir la page 231 du livre de Princeton sur le Bitcoin dans cette édition. La distinction entre utilisateurs réels et mineurs qui sécurisent le réseau est donc moins forte que dans le cas de cryptomonnaies avec preuves de travail car participer à la « loterie » du nouveau bloc est accessible à tous ; tout le monde peut participer sans effort particulier… Il n’en reste pas moins qu’on n’a pas toujours forcément envie de participer à la grande loterie du minage – surtout si on n’est pas très riche car alors on a très peu de chance de gagner… Le modèle reste le même : une blockchain et des mineurs.
Vu sous cet angle, la différence avec le monde traditionnel de la finance n’est pas flagrante puisque dans ce monde qui est le nôtre, la sécurité des transactions est en général apportée par des banques qui se basent sur des réglementations internationales. Et pas plus le client de sa boucherie de quartier qui paye avec sa carte bancaire que le spéculateur qui achète ou vend ses bitcoins sur une plateforme d’échange, nul n’a l’impression, avec son opération, de participer à la sécurité du réseau qu’il utilise. Il a au contraire le vague sentiment de créer un problème qui sera géré par des personnes compétentes (on est en droit de l’espérer !).
Pour en finir avec la blockchain !
Et puis voilà IOTA qui vient tout changer… Au départ, il y a une start-up en 2014 qui cherche à développer de nouveaux types de microprocesseurs afin de donner vie à un certain internet des objets (on reconnaît dans le début d’IOTA, l’acronyme « IOT » pour « Internet of Things »). Les développeurs comprennent vite qu’il manque une technologie faisant le lien entre tous les objets connectés. On voudrait pouvoir les relier autour d’une blockchain d’autant plus que David Sønstebø et Sergey Ivancheglo qui sont à la tête du projet sont de grands connaisseurs des blockchains et des cryptomonnaies. Mais aucune ne peut convenir en pratique. En effet, aucune n’assure la possibilité de micro-transactions sans frais de transaction. De plus, toutes les blockchains connues possèdent des problèmes d’échelle qui peuvent se révéler trop contraignants.
Dans le même temps, sur le forum Nxt que fréquentait régulièrement Serguey à ses débuts sous le pseudonyme « Come-from-Beyond » (certains imaginent même pour cela qu’il est l’énigmatique créateur de cette cryptomonnaie apparue fin 2013), des internautes se mettent à réfléchir à une autre façon d’organiser les transactions que par blocs. Et si, au lieu de regrouper les transactions par paquet, on les laissait libres individuellement tout en les reliant astucieusement les unes aux autres ? Après tout, dès 2013, avec le protocole GHOST, Aviv Zohar et Yonatan Sompolinsky avaient bien ouvert la voie en invitant à prendre en compte toute la structure d’arbre des transactions afin de renforcer le protocole des cryptomonnaies existantes (Vitalik Buterin reprendra du reste cette proposition dans Ethereum).
Mais comment peut-on relier des transactions entre elles s’il n’y a pas de blocs ni de mineurs ? On pourrait obliger chaque nouvelle transaction X, pour pouvoir exister, à approuver des transactions passées. Il faudrait pour cela qu’au moment d’enregistrer X sur le réseau, on soit obligé de sélectionner des transactions déjà existantes. Dans la rédaction de X, il faudrait donc contraindre l’utilisateur à choisir des transactions passées, vérifier qu’il n’y a pas d’incompatibilité entre elles et l’obliger à résoudre un problème du type preuve de travail – dont on peut espérer qu’il serve à sécuriser le réseau. Il n’y aurait plus de bloc mais toute transaction constituerait en quelque sorte un mini-bloc.
Telle était l’idée qui commençait à émerger sur le forum de Nxt et dans les les premiers essais réalisés par David et Serguey. En passant une transaction, l’utilisateur n’agirait donc plus seulement dans son propre intérêt mais aussi dans l’intérêt de tous. Une simple transaction servirait à sécuriser l’ensemble du réseau… Il n’y aurait plus de registre commun consultable par tous et qui augmente d’une page toutes les dix minutes en moyenne comme pour le Bitcoin. Il n’y aurait tout simplement plus de blockchain ! De quoi réjouir tous ceux qui n’en peuvent plus de voir ce mot galvaudé et repris par des gens servant des intérêts tout autre de ce pourquoi il a été crée à l’origine… Il reste bien sûr à imaginer concrètement le protocole et les règles pour éviter les tentatives de doubles dépenses mais d’immenses possibilités nouvelles semblent s’offrir à nous… Au lieu d’une suite linéaire de blocs, on serait ainsi conduit à voir l’ensemble des transactions comme un graphe orienté acyclique. Nous sommes en 2015, le projet IOTA est en train de se former.
Markov est dans la place…
Et puis voici maintenant Sergei Popov qui apporte son expertise mathématiques. Sergei est un grand mathématicien, professeur à l’université Unicamp au Brésil et membre de la communauté Nxt. Grâce à lui, IOTA va gagner une caution scientifique. Il va formaliser les idées de David et Serguey et écrire le papier fondateur d’IOTA.
L’idée ingénieuse qu’il a eue est d’avoir en quelque sorte « probabilisé » le graphe acyclique des transactions cité plus haut, c’est-à-dire de l’avoir transformé en une véritable chaîne de Markov.
Concrètement ici, ce qui permet d’éviter les tentatives d’escroquerie à la double dépense, c’est la possibilité d’explorer cette chaîne de transactions en tant que chaîne de Markov comme le ferait un randonneur par une méthode du type Monte-Carlo. Les résultats de ces randonnées aléatoires permettent de disqualifier les transactions frauduleuses.
Essayons d’expliquer brièvement le fonctionnement d’IOTA. Ce qui permet d’apporter de la confiance au réseau, ce n’est plus le nombre de blocs qui recouvre une transaction donnée (dans le Bitcoin, si une transaction est enfouie sous six ou sept blocs, elle est considérée comme absolument sure). Ici, chaque transaction possède un poids cumulé qui évolue au cours du temps. Il est défini comme le nombre de transactions ultérieures qui l’ont approuvées directement ou indirectement. Plus exactement, c’est la somme de la puissance de travail utilisée par toutes ces transactions.
Une transaction légale va naturellement devenir « lourde » du fait de toutes les transactions qui vont venir après et progressivement pointer vers elle. Et de même que dans le Bitcoin, un vendeur attend qu’une transaction donnée soit recouverte par six ou sept blocs avant de pouvoir donner son bien de consommation au client, de même ici, le vendeur va attendre que la transaction du client ait atteint un certain poids cumulé critique.
Au moment de sa rédaction, une nouvelle transaction va choisir grâce à l’algorithme de Popov deux transactions en attente de validation. Ces deux transactions sont le résultat de deux randonnées aléatoires par une méthode de Monte-Carlo en partant d’un endroit du graphe extrêmement sur (pas besoin de remonter à l’origine). Pour éviter d’approuver des tentatives de fraude, il faut donc trouver une bonne mesure de probabilité qui permet de rester sur la partie du graphe qui ne contient que des transactions honnêtes.
Quelle probabilité choisir ?
Moralement, une transaction honnête a un poids nettement plus important qu’une transaction frauduleuse (il n’y a pas véritablement de transaction illégale mais j’entends par transaction frauduleuse une transaction qui reflète une tentative de double dépense). En effet, dans un fonctionnement normal, une transaction honnête est reprise par l’ensemble du réseau tandis qu’une tentative de double dépense n’est choisie que par un attaquant. On considère ici qu’il n’est pas possible de détenir seul plus de la moitié de la puissance de calcul du réseau.
La mesure de probabilité doit donc être choisie de sorte qu’il soit quasiment improbable de passer d’un site x du graphe possédant un poids cumulé H(x) important à un autre site y qui lui soit relié mais possédant un poids H(y) très faible. Au passage, notons qu’une transaction qui pointe vers y pointe a fortiori vers x, de sorte que H(x) > H(y). Il est alors naturel de prendre pour mesure de probabilité une mesure telle que la probabilité de passer de x à y soit proportionnelle à exp(-(H(x)-H(y)). Et voilà la probabilité sur la chaîne de Markov… Au final, c’est la croissance rapide de l’exponentielle qui rend très improbable la possibilité de sauter d’une partie honnête du graphe à une partie malhonnête…
De plus, si par malheur, les deux transactions choisies étaient incompatibles entre elles (parce que l’une d’elle provient d’une tentative de double dépense par exemple) alors, l’algorithme de Popov ne retient que la transaction la plus susceptible d’être acceptée par les autres. Il faut pour cela répéter plusieurs randonnées aléatoires et obtenir in fine une mesure de probabilité sur l’ensemble des extrémités du graphe.
A-t-on touché le sommet avec IOTA ? On est en droit de le penser…
Notons pour le folklore qu’on peut toujours imaginer la présence de mineurs dans ce réseau mais vu qu’il n’y a pas de bloc, il n’y a pas non plus de récompense. Le seul travail de minage possible consiste à émettre une transaction vide (sans transfert d’argent). Ce travail n’est pas rémunéré mais comme toutes les autres transactions, il sécurise le réseau car il contribue à augmenter le poids cumulé des transactions honnêtes.
Tirons également la conséquence du fait qu’il n’y a plus de blockchain. Plus de blockchain signifie plus de mineurs classiques et donc plus de création monétaire. C’est donc que toute la quantité de monnaie a été émise dès le début…
Ce qu’il y a de fascinant dans l’histoire de l’humanité, c’est que bien souvent, les inventions n’arrivent pas seules à un endroit donné mais bien souvent simultanément à plusieurs endroits différents. Il en est ainsi de l’invention de l’écriture notamment. Si j’écris cela, c’est qu’il se trouve qu’indépendamment des débuts d’IOTA, Sergio Lerner sur son blog imaginait lui aussi mettre fin à la distinction entre mineurs et utilisateurs. Mais trop préoccupé par la réussite de Rootstock, il ne lui a sans doute pas été possible de développer son intuition et d’implémenter ses DAGcoins…
Il y a maintenant une communauté d’utilisateurs d’IOTA : plus de trois cents pages de fils de discussion sur bitcointalk et un forum de plus en plus actif sur le site d’Iotatoken. On imagine sans mal des objets connectés qui passent des ordres sur Iotatoken. Et le tout, évidemment sans frais de transaction…
Que dire de plus ? L’article de Popov contient d’autres petits calculs extrêmement intéressants comme une utilisation totalement naturelle (mais que je n’ai jamais vu ailleurs) de la théorie des grandes déviations pour prouver qu’IOTA résiste à un certain scénario d’attaque. Tout ne peut être dit en un article… Je vous laisse visiter le site d’IOTA.
Bravo à Serguei Popov, David Sønstebø et Sergey Ivancheglo… Chapeau bas messieurs !