Qu'est ce que le Trilemme des Blockchains ?

Inventé pour la première fois par Vitalik Buterin, l'inventeur d'Ethereum, le trilemme des blockchains est un terme évoquant la difficulté que rencontrent les différentes cryptomonnaies à acquérir à la fois la sécurité, la scalabilité et la décentralisation de leur réseau. Pourquoi cela ? Comment le résoudre ?

Selon Vitalik Buterin, les blockchains rencontrent toutes un problème de taille : il serait techniquement impossible d'avoir un protocole racine qui soit à la fois sécurisé, scalable et décentralisé à l'idéal. Pour améliorer l'un de ces attributs, vous devez sacrifer l'un des deux autres. La blockchain parfaite devra résoudre ce trilemme, pour maximiser à la fois ces trois facteurs.

Les trilemmes ne sont pas spécifique au blockchains: ils s'appliquent tout aussi bien à la vie courante. Vous avez déjà eu un client face à vous qui veut un projet bien fait, rapide et peu coûteux ? Pour ma part, j'ai régulièrement eu à expliquer qu'il pouvait choisir 2 attributs parmi les 3. Autre trilemme bien connu dans les systèmes distribués, le Théorème CAP, prouvé en 2002 par deux chercheurs du MIT, stipule qu'un système de calcul distribué ne peut pas garantir au même moment la cohérence (tous les noeuds voient les mêmes données), la disponibilité (garantie que toutes les requètes recoivent une réponse) et la tolérance au partitionnement (une panne d'un sous-groupe de noeuds ne doit pas empêcher le système de répondre correctement).

Les paramètres du Trilemme des blockchains

Avant d'entrer dans les détails de l'explication, nous devons veiller à définir les termes de la conjecture du trilemme des blockchains.

Sécurité

Pour pouvoir être considérée comme sécurisée, une blockchain doit être résiliente sur le court-terme, et immutable sur le long terme. Par résilience, on se réfère au niveau de défense que le réseau peut avoir face aux attaques externes. Celles-ci sont nombreuses:

Plus une blockchain est adoptée, plus elle gère de fonds. Et plus une blockchain gère de fonds, plus elle suscitera l'intérêt d'éventuels attaquants, et d'investissements (en temps et en moyens) dans la mise en place d'attaques sophistiquées. Pour que la blockchain puisse poursuivre son développement, il est critique que les transactions courantes et passées ne soient pas falsifiables, et que le système continue de fonctionner à tout instant, et ce malgré la possible corruption d'un ou de plusieurs de ses noeuds.

Scalabilité

La scalabilité d'un système désigne sa capacité maximale : à quel point le réseau peut grandir.

Un misconception commune est de croire qu'il suffit d'augmenter le nombre de noeuds pour que le réseau soit en mesure de supporter plus de transactions.

Lorsque vous misez sur une cryptomonnaie, vous misez sur une augmentation de sa valeur, en d'autres termes, sur une augmentation de son adoption. Vous avez alors besoin que le système de validation de transaction (autrement dit : le protocole de consensus) puisse fonctionner à plus grande échelle: avec 10, 100 ou 1000 fois plus d'utilisateurs.

La scalabilité va donc désigner la résilience des différentes caractéristiques (chiffrées) de la blockchain à la croissance. La vitesse de transaction doit être maintenue à un palier qui laisse le système utilisable (par rapport à ce pourquoi il est utilisé). Les frais de transactions doivent être également maintenus pertinents.

Décentralisation

La décentralisation désigne le degré de diversité dans des acteurs d'une blockchain et dans l'autorité sur celle-ci. La décentralisation apporte de la tolérance aux fautes et de la résistance à la corruption. Plus une blockchain est centralisée, plus il est facile pour une entité d'en prendre le contrôle.

Représentez vous les choses comme ceci : préférez vous voir plutôt 4 députés à l'assemblée nationale, ou plutôt 500 ? Si vous confiez le pouvoir d'écrire et de faire passer les lois à 4 hommes, alors ce même pouvoir sera d'autant plus facilement accessible aux divers lobbys ou organisations : il est nettement plus facile de corrompre 2 hommes que d'en corrompre 250.

Pour une blockchain, c'est identique. Les transactions sont validées par un réseau P2P (pair-à-pair) de noeuds, qui se voient collectivement confier le pouvoir de valider les transactions. Si une entité venait à prendre le contrôle sur ce pouvoir, elle pourrait créer des transactions frauduleuses, comme par exemple dépenser plusieurs fois son capital de cryptomonnaie. Evidemment, la valeur du jeton s'effondrerait par la suite.

Dans une blockchain, chaque noeud ne dispose pas du même "pouvoir" de validation. La répartition de celui-ci dépendra du protocole de consensus de celle-ci, ainsi que des moyens mis à disposition par le noeud. Dans un protocole de type Proof of Work, le pouvoir d'un noeud est défini par sa puissance de calcul; dans un protocole de type Proof of Stake, il est défini par la quantité de cryptomonnaie engagée par celui-ci dans le protocole. Comme pour les députés, il est dans l'intérêt collectif des utilisateurs que ce pouvoir soit le plus réparti possible entre les différents noeuds.

Pourquoi ces paramètres sont corrélés

Ces 3 paramètres sont corrélés entre eux de différentes façons, et c'est un beau méli-mélo.

Plus de décentralisation implique moins du débit

Plus un réseau est décentralisé, plus il y a de noeuds qui valident les transactions. Comme les blocs sont transmis de noeud à noeud sans autorité centrale, il faut alors plus de temps pour propager un bloc à la moitié du réseau (socle à partir duquel le bloc sera considéré comme définitivement validé) : le délai de propagation augmente. Comme le prochain bloc doit être écrit au dessus de la validation du premier bloc, le débit (nombre de transactions par seconde) du réseau diminue.

Moins de débit implique moins de sécurité

Si le débit d'un réseau diminue, il est plus sensibles aux différentes attaques, comme par exemple celles du Penny spent ou de type DDoS, qui s'attaquent directement au débit de celui-ci.

Moins de débit implique moins de scalabilité

Un réseau qui voit son débit diminuer aura du mal à supporter l'arrivée de nouveaux utilisateurs. Le débit doit être maintenu dans des limites acceptables pour l'utilisation qui en est faîte. S'il s'agit de transférer de l'argent à quelqu'un d'autre, 5 ou 10 minutes peuvent être considérées comme acceptables (un virement bancaire met 3 jours). En revanche, s'il s'agit d'aller acheter une baguette de pain, difficile de poireauter devant la boulangère pendant tout ce temps.

Plus de décentralisation implique des frais de transaction plus élevés

Les noeuds qui valident les transactions doivent être rentables pour subsister. Dans un réseau décentralisé, il y a un grand nombre de noeuds, dont la rentabilité doit être assurée. S'ils sont rémunérés via des frais de transactions, alors plus de décentralisation (pour un même nombre d'utilisateurs du réseau) implique plus de noeuds qui doivent être payés de la sorte, donc des frais de transactions plus élevés pour les utilisateurs.

Certaines blockchains ne rémunèrent pas les noeuds via les frais de transactions mais via la trésorerie (une réserve de jetons non distribuée). Cela ne change pas le problème : les utilisateurs ne payent pas de frais de transactions (élevés) mais subissent en contrepartie l'inflation. S'il y a une limite au nombre maximum de jetons, alors une fois la réserve (finie) de jeton dépensée, la trésorerie est généralement reconstituée par l'installation de frais de transactions (et oui !). S'il n'y a pas de limite, de nouveaux jetons sont générés (déclenchant plus d'inflation pour les utilisateurs). D'une manière ou d'une autre, c'est les utilisateurs (ceux qui échangent ou conservent le jeton) qui supportent les noeuds, poids qui est, notons le, moins important dans les systèmes de type Proof of Stake (ou similaires) que dans les systèmes Proof of Work, où l'énergie dépensée est considérable.

Trop peu de décentralisation implique une compromission de la sécurité

Une blockchain trop centralisée serait vulnérables aux attaques de 51% ou au attaques Sybil (voir plus haut). La décentralisation joue donc un rôle nécessaire dans la sécurité de la blockchain.

Des frais de transaction élevés sont un frein à l'adoption

Il ne s'agit pas d'un problème technique à strictement parler, mais d'un problème fonctionnel. Une blockchain qui se retrouve (suite à une décentralisation trop poussée) à subir des frais de transaction élevés freine mécaniquement son adoption, rendant la scalabilité inutile. La bonne vieille loi de l'offre et de la demande poussera alors les utilisateurs vers des alternatives économiquement plus intéressantes (probablement plus centralisées aussi).

A titre d'exemple, en juin 2017, les frais de transactions de Bitcoin approximaient 5$, alors que la moitié de la population mondiale vivait avec 5.5$ par jour.

Sacrifier un paramètre au profit des deux autres

Comme l'indique le trilemme, il est possible de sacrifier un paramètre pour maximiser les deux autres.

Diminuer la décentralisation au profit de la sécurité et de la scalabilité

L'exemple est facile: Visa, système totalement centralisé, assure la sécurité des transactions, et est suffisamment scalable pour supporter l'ensemble des transactions de la planète.

On n'est pas nécessairement obligé de ramener la décentralisation à 0 pour obtenir une sécurité et une scalabilité suffisante. EOS ou Tezos assurent une scalabilité et une sécurité considérés comme suffisantes, mais fonctionnent sur respectivement 7 et 21 noeuds pour assurer les transactions.

Cardano est plus flexible, la décentralisation est paramétrable, afin de pouvoir la réguler en fonction des besoins du réseau. Initialement fixé à 250 noeuds, le nombre de noeuds est actuellement fixé à 1000.

Diminuer la sécurité au profit de la scalabilité et de la décentralisation

Dans les systèmes ou la preuve prend du temps, il est possible de faire cette manoeuvre. Par exemple, dans les blockchains Proof of Work, il suffit de soumettre un problème plus facile à résoudre aux différents noeuds pour accélérer le processus.

Mais diminuer la sécurité du processus ne représenterait pas un gain si important en terme de vitesse, car cela ne résoudrait pas le problème du délai de propagation.

La sécurité représente le socle sur lequel la blockchain est bâtie, elle doit donc être prise au sérieux. Sans elle, la cryptomonnaie ne représente que peu d'intérêt. La scalabilité et la décentralisation ne serviront alors à rien.

Diminuer la scalabilité au profit de la sécurité et de la décentralisation

C'est au final le choix qui est fait le plus souvent. Les blockchains Proof of Work tentent de maximiser les deux autres paramètres, mais en conséquence, le réseau est lent et peut se retrouver congestionné (comme pour Ethereum).

Les frais de transactions deviennent alors parfois la solution de traitement : les files d'attentes sont gérées avec une priorité qui dépend de ces frais. Mais lorsque ceux-ci deviennent trop important (allez-vous payer 2€ de frais pour envoyer 8€ ?), d'autres solutions doivent émerger, comme par exemple, l'intégration de plusieurs transactions en une seule.

Conclusion

Il semble aujourd'hui qu'aucune blockchain n'ait été, jusqu'ici, en mesure de résoudre le trilemme, et peut-être qu'il n'existe aucune solution à celui-ci.

Mais est-ce un si gros problème que ça ? Les blockchains se paramètrent par rapport à leur utilisation. Aucun système ne pourra bénéficier d'une décentralisation totale, d'une sécurité absolue, ou d'une scalabilité infinie.

A chaque blockchain incombe la tâche de régler finement le curseur entre ces 3 paramètres: une décentralisation, une sécurité et une scalabilité pertinentes pour atteindre ses objectifs et convaincre.