Mimblewimble, un sortilège de confidentialité
Le 2 août 2016 à 4 heures 30 du matin (UTC), un inconnu utilisant le pseudonyme Tom Elvis Jedusor poste un lien sur IRC menant vers un fichier texte hébergé sur le dark web. Ce fichier, intitulé Mimblewimble, présente les principes de base d'une structure transactionnelle novatrice axée sur la confidentialité. Son inventeur disparaît ensuite sans laisser de trace, mais Mimblewimble attire l'attention de certains développeurs de la sphère Bitcoin, dont le mathématicien Andrew Poelstra qui publiera une version du livre blanc plus détaillée le 6 octobre 2016.
Les noms utilisés sont des références directes à l'univers de Harry Potter. Tom Elvis Jedusor est le vrai nom de Voldemort, l'ennemi mortel de Harry, dans la version française de l'œuvre : ce qui fait penser que le créateur est francophone. Mimblewimble tire son nom du sortilège à la langue de Plomb qui interdit à l'adversaire de parler en faisant des nœuds avec sa langue, car Mimblewimble est censé « empêcher la chaîne de blocs de parler des informations personnelles de ses utilisateurs » d'après le créateur.
Le 20 octobre 2016 à 23 heures 47 (UTC), un inconnu se faisant appeler Ignotus Peverell apparaît sur la scène pour annoncer un projet open-source d'implémentation de Mimblewimble appelée Grin. Là encore il y a des références à l'univers de Harry Potter puisque Ignotus Peverell est le nom du créateur de la cape d'invisibilité et Grin tire son nom de Gellert Grindelwald, un puissant mage noir. Le projet grandit par la suite grâce à la contribution de développeurs divers dont beaucoup ont fait le choix de rester anonymes. Son lancement a eu lieu le 15 janvier 2019.
Qu'est-ce que Mimblewimble ?
Mimblewimble est un concept de registre distribué axé sur l'anonymat et sur la scalabilité plutôt que sur la programmabilité. Même s'il se base sur les mêmes principes que Bitcoin, il est sensiblement différent sous quelques aspects.
Tout comme Bitcoin, Mimblewimble repose sur la notion de sortie transactionnelle. Chaque transaction est en effet constituée d'entrées (inputs) et de sorties (outputs). La particularité du système est que chaque entrée représente la sortie d'une transaction précédente. C'est pour cela qu'on porte attention aux sorties transactionnelles, et en particulier aux sorties transactionnelles non dépensées (appelées couramment UTXO pour Unspent Transaction Output) qui représentent les jetons en circulation.
Cependant, Mimblewimble vient chambouler la structure de ces transactions. Pour cela, son inventeur a repris trois idées de Gregory Maxwell, développeur de Bitcoin Core et co-fondateur de Blockstream : les transactions confidentielles, le mélange des transactions (Coinjoin) et le sectionnage des transactions.
Les transactions confidentielles cachent les informations privées des utilisateurs tout en permettant aux acteurs extérieurs de vérifier leur validité. Elles reposent pour cela sur des méthodes de cryptographie asymétrique sur courbes elliptiques. Dans une transaction confidentielle, chaque sortie transactionnelle est constituée d'un « engagement de Pedersen » (Pedersen commitment) et d'une « preuve de portée » (rangeproof) qui permettent de prouver qu'elle est valide tout en gardant secret son montant et son destinataire. De plus, la transaction contient un noyau (kernel) contenant un excédant garantissant que personne ne puisse deviner la clé du destinataire, une signature provenant du destinataire et le montant correspondant aux frais de transactions.
Ce type de transaction pourrait être implémenté dans Bitcoin ; néanmoins il est très gourmand en mémoire à cause de la taille des preuves cryptographiques, ce qui dans le cas de Bitcoin se révèle assez problématique. Mimblewimble, quant à lui, impose ces transactions confidentielles par défaut dans le protocole.
Mimblewimble implémente aussi le mélange des transactions, aussi appelé Coinjoin, qui consiste à combiner plusieurs transactions en une seule pour brouiller les pistes. Et, puisque cette technique est appliquée pour toutes les transactions au sein du bloc, il s'ensuit qu'un bloc de Mimblewimble ne contient en réalité qu'une seule super-transaction ! Si le bloc est assez rempli, il devient ainsi encore plus difficile pour une personne extérieure de savoir quelle sortie correspond à quelle entrée.
La troisième méthode utilisée par Mimblewimble est le sectionnage des transactions (transaction cut-through). Celui-ci permet de combiner toutes les super-transactions suffisamment âgées et de supprimer les sorties transactionnelles dépensées (STXO) pour ne garder que les sorties transactionnelles non dépensées (UTXO). Cela permet de libérer une place conséquente sur la chaîne de blocs. Cependant, il faut garder à l'esprit que les transactions individuelles laissent derrière elles des noyaux qui eux ne peuvent pas être supprimés.
Qu'apporte Mimblewimble et à quel prix ?
Mimblewimble est ainsi un condensé de techniques de confidentialité permettant d'obtenir une chaîne de blocs opaque. La confidentialité étant le but principal de ce concept de chaîne de blocs, on peut dire que le pari est réussi.
De plus, en permettant de supprimer les sorties transactionnelles dépensées, Mimblewimble s'avère plutôt scalable si on le compare à Monero et à Zcash, dont les transactions confidentielles occupent une place conséquente. Du fait de sa preuve de portée (rangeproof), chaque sortie transactionnelle non dépensée pèse environ 5 ko et chaque transaction réalisée ajoute 100 octets au fardeau général à cause de son noyau. Si l'on se réfère au niveau d'usage actuel de Bitcoin (60 millions d'UTXO, 370 millions de transactions), cela revient à une taille totale de 337 Go de données, ce qui est raisonnable. Cette réduction massive de la taille de la chaîne de blocs est particulièrement utile pour les nouveaux arrivants qui se synchronisent au réseau.
Pour arriver à ce résultat d'une chaîne de blocs à la fois confidentielle et scalable, Mimblewimble renonce à quelques capacités utiles de Bitcoin. Tout d'abord, Mimblewimble sacrifie la programmabilité des transactions. En effet, Bitcoin utilise un système de script pour valider la dépense des sorties transactionnelles, ce qui permet la programmation de smart contracts. Mimblewimble n'offre pas cette possibilité : aucun script n'intervient à aucun moment. Cependant, d'après Andrew Poelstra, on peut mettre en place des « scriptless scripts » grâce à des procédés ingénieux de multisignatures : les scripts ne seraient alors pas exécutés sur les machines des nœuds du réseau mais sur celles des acteurs concernés.
La seconde caractéristique sacrifiée par Mimblewimble est le paiement hors-ligne. Dans le protocole, il n'y pas d'adresse et la construction des transactions doit se faire par l'interaction des deux parties. Cela impacte l'expérience de l'utilisateur mais aussi sa confidentialité car ce dernier doit révéler son adresse IP dans le processus. Cependant, il est possible de mitiger ce dernier problème en implémentant des solutions comme Dandelion.
Grin et Beam, les deux implémentations de Mimblewimble
Il existe à ce jour deux implémentations protocolaires de Mimblewimble. La première, Grin, est l'implémentation « originelle » et son lancement a eu lieu le 15 janvier 2019. Il s'agit d'une implémentation légère de Mimblewimble dans le sens où elle offre le minimum de fonctionnalités.
La seconde implémentation de Mimblewimble, appelée Beam, est beaucoup plus récente dans son développement (mi-2018). Le lancement de sa chaîne de blocs a eu lieu le 3 janvier 2019. Contrairement à Grin, Beam dispose de fonctionnalités supplémentaires comme les verrouillages temporels ou les portefeuilles auditables.
La principale différence entre ces deux projets est leur philosophie.
Grin se fonde sur une composante cypherpunk très prononcée : le projet a été développé en source ouverte (open source) pendant plusieurs années, par des développeurs divers dont beaucoup conservent leur anonymat.
Beam a lui une base plus commerciale : le projet est beaucoup plus récent, il est développé par une équipe bien identifiée et dispose d'un site internet très propre faisant sa promotion.
Côté politique monétaire, les deux protocoles ont deux stratégies différentes. Grin adopte une politique inflationniste : le nombre de jetons est infini et il s'en crée 60 à chaque bloc. Cela fait qu'il faudra attendre 100 ans pour avoir un taux d'émission monétaire inférieur à 1 %. C'est pour cela que Grin n'aura pas vocation à devenir une réserve de valeur, mais plutôt un outil d'échange confidentiel.
Beam, quant à lui, reprend la politique déflationniste de Bitcoin en réduisant de moitié l'émission de nouveaux jetons tous les 4 ans : après une année à 100 BEAM par bloc, celle-ci passera à 50 BEAM par bloc en 2020, puis à 25 BEAM par bloc en 2024, etc. Cela fait que l'offre totale de jetons est limitée à 262 800 000 BEAM. Cependant, contrairement à Bitcoin, un système de trésorerie est mis en place pour capter 20 % de l'émission monétaire lors des 5 premières années : celui-ci a pour but de financer la fondation, les premiers investisseurs et l'équipe de développement du projet.
En définitive, bien qu'ils soient tous les deux des implémentations de Mimblewimble, les projets Grin et Beam diffèrent en de nombreux points, notamment par leur philosophie. Voici un tableau récapitulatif des propriétés techniques de ces projets.
Grin | Beam | |
Date de lancement | 15/01/2019 | 03/01/2019 |
Langage | Rust | C++ |
Méthode de consensus | Preuve de travail : cycles de Cuckoo (Cuckatoo31+, Cuckaroo29) | Preuve de travail : Equihash modifié |
Temps de bloc | 1 minute | 1 minute |
Émission monétaire | Infinie : 60 GRIN / bloc | Limitée à 262 800 000 BEAM |
Distribution des nouveaux jetons | 100 % aux mineurs | Les 5 premières années : 80 % aux mineurs, 20 % à la trésorerie (fondation, développeurs, investisseurs) ; puis 100 % aux mineurs |