Bitcoin et Lightning : deux réseaux pour passer à l’échelle
Le réseau Lightning constitue avec le réseau Bitcoin une alternative offrant aux utilisateurs de cryptomonnaie un choix sécurisé notamment en matière de frais de transaction, permettant de contourner certaines limites du système Bitcoin. Les deux réseaux sont complémentaires. Lightning fonctionne de manière satisfaisante depuis 2017 et il est en développement collaboratif continuel.
Lors de la création du Bitcoin en 2008, Satoshi Nakamoto a intitulé son livre blanc Bitcoin : A Peer-to-Peer Electronic Cash System. Quelques années plus tard, force était de constater qu’il serait difficile de remplacer le cash par le Bitcoin pour faire ses courses : les performances de la blockchain étaient en effet limitées à environ sept transactions par seconde (contre plusieurs milliers de transactions par seconde pour le réseau Visa).
Quelles solutions aux limites du système ?
De nombreuses solutions naïves ont rapidement été proposées, par exemple augmenter la taille des blocs ou leur fréquence. L’inconvénient majeur de ce type de solutions, c’est qu’elles sacrifient une des caractéristiques fondamentales du Bitcoin : sa décentralisation. N’importe quel individu peut aujourd’hui, avec du matériel informatique grand public, installer le logiciel Bitcoin Core, télécharger la blockchain et contribuer au réseau. Cela permet de vérifier que toutes les transactions du réseau sont valides, ainsi que d’effectuer ses propres transactions, sans recourir à un tiers de confiance.
La taille de la blockchain est aujourd’hui de 500 Go et croît à un rythme d’environ 8 Go par mois. Augmenter la taille des blocs ou leur fréquence impliquerait d’accélérer cette croissance, et donc de rendre plus difficile l’accès à la blockchain pour une large partie de la population. Plus fondamentalement encore, il a vite été reconnu que ce n’était pas la bonne voie à suivre pour permettre au monde entier de payer sa baguette en bitcoin.
Une transaction Bitcoin doit être propagée à l’intégralité du réseau Bitcoin (plusieurs dizaines de milliers d’ordinateurs) et ensuite stockée indéfiniment dans la blockchain. Il est évident que cela n’aurait aucun sens d’effectuer une opération aussi coûteuse pour chaque achat de baguette ! La solution était donc à chercher ailleurs… Il fallait trouver un moyen de faire des transactions Bitcoin sans les inscrire dans la blockchain.
Les canaux de paiement
Cela a donné naissance au concept de canal de paiement : deux utilisateurs, par exemple Alice et Bob, peuvent effectuer une transaction Bitcoin pour ouvrir un canal de paiement bidirectionnel (funding transaction). Une fois cette transaction confirmée, Alice et Bob peuvent décider de s’échanger des bitcoins à l’intérieur de ce canal de paiement. Ils vont pour cela créer une transaction qui décrit la répartition actuelle des fonds dans ce canal (commitment transaction), mais sans la publier. Ainsi, ils pourront la remplacer par une nouvelle version à chaque fois qu’ils décideront de s’échanger des bitcoins, sans avoir besoin de publier quoi que ce soit sur la blockchain. Ces échanges de bitcoins sont donc purement pair-à-pair et ne sont connus que d’Alice et Bob, ce qui garantit leur confidentialité.
Une garantie de sécurité
Une des principales difficultés associées à ce type de protocole est de garantir que seul le dernier état du canal (la version la plus récente de la commitment transaction) puisse être publié sur la blockchain. En effet, si ce n’était pas le cas, Alice pourrait effectuer un paiement dans ce canal, mais ensuite publier sur la blockchain la commitment transaction précédente, qui lui permettrait de récupérer (voler) le montant du paiement.
Il est impossible d’empêcher Alice de publier une version précédente de la commitment transaction, mais il est en revanche possible de la révoquer : à chaque nouveau paiement effectué par Alice, un secret cryptographique associé à la version actuelle de sa commitment transaction est révélé, qui permet à Bob de s’approprier l’intégralité des fonds du canal si Alice publie la transaction révoquée.
Cela garantit qu’Alice ne prendra jamais le risque de tricher, car Bob pourrait immédiatement la pénaliser. La blockchain est ainsi utilisée comme une cour de justice : lorsque les acteurs sont honnêtes, ils peuvent effectuer un nombre potentiellement illimité de transferts de bitcoins sans publier de transaction (et donc extrêmement rapidement et efficacement) et, lorsque l’un des acteurs tente de tricher, il suffit de publier des transactions pour pénaliser le tricheur et garantir les paiements.
Un réseau de canaux de paiement
Chaque canal permet d’effectuer un très grand nombre de paiements entre deux individus en ne publiant qu’une seule transaction (la funding transaction). Mais nous pouvons aller encore plus loin : il est possible d’envoyer des paiements à travers plusieurs canaux, ce qui permet de créer un véritable réseau de paiement pair-à-pair, le réseau Lightning.
Si Alice et Bob ont un canal de paiement et que Bob et Carol ont eux aussi un canal de paiement, Alice peut payer Carol en passant par Bob. Cela permet à un grand nombre de personnes de transférer rapidement et efficacement des bitcoins avec un relativement petit nombre de canaux (et donc de transactions publiées sur la blockchain). La confidentialité de ces paiements est garantie par plusieurs mécanismes.
“Construire un réseau de paiement décentralisé et pair-à-pair.”
Principalement, contrairement à une transaction publiée sur la blockchain, aucune information liée au paiement n’est rendue publique : seuls les nœuds directement impliqués dans le paiement en connaissent l’existence. Ces nœuds intermédiaires n’ont qu’une connaissance partielle des détails du paiement, grâce à un mécanisme d’encryption en oignon (similaire à la cryptographie utilisée par le réseau Tor). Il est évidemment crucial de garantir également que les nœuds intermédiaires ne peuvent pas voler tout ou une partie des paiements qu’ils relaient. Le protocole Lightning utilise pour cela un script Bitcoin appelé HTLC (hash time-locked contract), qui repose sur une fonction de hachage cryptographique (SHA-256).
Un fonctionnement éprouvé
Le réseau fonctionne depuis 2017 et compte aujourd’hui plus de 15 000 nœuds et 70 000 canaux de paiement. Les opérateurs de ces nœuds sont motivés par des incitations économiques : ils collectent des frais de transaction pour chaque paiement qu’ils relaient, proportionnels au montant du paiement. Chaque opérateur de nœud fixe les prix associés à ses canaux de paiement, les annonce à l’ensemble du réseau et peut les modifier aussi souvent qu’il le souhaite. Les utilisateurs souhaitant effectuer des paiements connaissent ainsi en temps réel les prix des différentes routes disponibles à travers le réseau et peuvent sélectionner les moins chères. Cela crée une compétition permanente entre les nœuds du réseau, évitant tout effet de monopole.
Les frais de transaction
Il est intéressant de noter le contraste entre les frais de transaction du réseau Lightning et ceux du réseau Bitcoin. Les frais associés à une transaction Bitcoin dépendent uniquement du nombre d’octets que cette transaction occupe dans la blockchain (dont on souhaite limiter la croissance) et non pas du montant du paiement. Il est donc particulièrement avantageux de faire directement des transactions Bitcoin pour des montants élevés, car les frais associés seront alors négligeables.
À l’inverse, les paiements Lightning ne sont pas stockés dans la blockchain et sont uniquement limités par la taille des canaux de paiement utilisés, et donc du montant à relayer : c’est pourquoi leurs frais de transaction dépendent du montant du paiement. Ces deux réseaux sont ainsi parfaitement complémentaires. Le réseau Lightning permet cependant de faire des paiements instantanés, alors qu’une transaction Bitcoin doit attendre d’être inscrite dans la blockchain : cela peut justifier d’utiliser Lightning pour certains paiements, même lorsque les frais de transaction auraient été moins élevés avec une transaction Bitcoin classique.
Les performances du réseau Lightning
Le réseau Lightning permet donc de traiter un grand volume de paiements confidentiels, peu coûteux et instantanés, en évitant de publier les transactions associées sur la blockchain. Il est cependant très difficile d’évaluer le nombre maximum de paiements que pourrait supporter le réseau Lightning. Ce nombre est en théorie presque illimité, mais en pratique le résultat dépend en grande partie de la façon dont les paiements se répartissent dans le graphe : prennent-ils des chemins différents ou bien se cannibalisent-ils en essayant d’emprunter les mêmes canaux ? La topologie du réseau étant par nature très dynamique (n’importe qui peut ouvrir de nouveaux canaux de paiement), il a la capacité de s’adapter rapidement aux flux de paiements. Plusieurs équipes de recherche académique essayent aujourd’hui de répondre à ces questions, qui mêlent théorie des graphes, cryptographie et théorie des jeux.
Un réseau collaboratif
Un des aspects les plus fascinants de ce projet, outre sa dimension technique, est la façon dont il est développé. Le projet est organisé autour d’une spécification open source (https://github.com/lightning/bolts) à laquelle n’importe qui peut contribuer. Toutes les discussions sont publiques et les contributeurs réguliers se retrouvent toutes les deux semaines sur IRC (Internet Relay Chat) pour discuter des avancées du protocole. Les principaux contributeurs sont ACINQ, Blockstream, Lightning Labs et Spiral : chacune de ces équipes, en plus de contribuer à la spécification, développe sa propre implémentation du protocole, toutes ces implémentations étant interopérables. La diversité et l’indépendance des acteurs et de leurs implémentations sont la clef de voûte de la décentralisation du réseau.
De nombreuses étapes ont été franchies depuis la genèse du projet en 2015. Cependant, il reste encore beaucoup à faire : construire un réseau de paiement décentralisé et pair-à-pair est autrement plus compliqué que de construire son équivalent centralisé. La route est longue, et pavée de défis passionnants pour des ingénieurs curieux et motivés !