Comprendre le Lightning Network (2)

BitcoinLightningNetwork by BTC Keychain (CC BY 2.0) — BTC Keychain, CC-BY

Le Lightning Network est un protocole informatique destiné à faciliter l’utilisation courante de bitcoins en rendant les transactions plus rapides, plus anonymes et moins coûteuses. Quelles sont ses principales caractéristiques techniques ?

Par Yorick de Mombynes1.

Vous pouvez lire la première partie de cet article ici.

Les éléments qui suivent sont très simplifiés. Des compléments techniques sont disponibles sur les sites de BitConseil et des développeurs Lightning.

Transactions publiables mais non publiées

Lightning est « un protocole qui permet de mettre à jour des transactions qui sont publiables mais qui ne sont pas publiées ». Cette définition, apparemment énigmatique, de Fabrice Drouin (CTO d’Acinq), est en fait très éclairante. Il convient d’abord de comprendre en quoi publier chaque transaction en bitcoins sur la blockchain Bitcoin n’est pas efficient.

Sur Bitcoin, c’est l’étape de la publication de la transaction qui déclenche le processus de vérification par les dizaines de milliers de nœuds du réseau, puis de minage par les acteurs chargés d’enregistrer les blocs sur la blockchain. Pour rappel, une transaction en bitcoins est un message qui est « publié », c’est-à-dire diffusé à l’ensemble du réseau Bitcoin : la transaction est alors vérifiée et validée par l’ensemble des nœuds avant d’être enregistrée dans le registre décentralisé et inviolable qu’est la blockchain.

C’est ce processus de « consensus global » qui organise ce système de transfert de valeur à la fois sans tiers de confiance et sans risque de double dépense. C’est lui qui garantit l’exceptionnel niveau de sécurité de Bitcoin, grâce une combinaison originale entre décentralisation et minage par la preuve de travail.

Mais ce processus est extrêmement lourd. Il peut même paraître titanesque et disproportionné pour des transactions de faible montant. Faire vérifier un menu achat par des dizaines de milliers d’ordinateurs répartis sur toute la planète, puis engager une dépense énergétique colossale permettant de la sceller pour l’éternité dans un registre dupliqué des dizaines de milliers de fois est évidemment excessif. Par ailleurs, ce mécanisme coûte aux utilisateurs des frais de transaction non négligeables, et les transactions ont un délai de confirmation incompressible de plusieurs minutes.

Ce dispositif rend techniquement impossible tout passage à l’échelle (à taille des blocs constante) : il ne permettrait pas, en l’état, à Bitcoin d’atteindre les volumes de transactions des réseaux de paiement traditionnels comme Visa.

Pour surmonter ces difficultés, c’est donc l’étape de la publication de la transaction que cherche à modifier Lightning. C’est une solution différente de celle, promue par certains, consistant à augmenter significativement la taille des blocs.

Avec Lightning, les utilisateurs engagent les bitcoins qu’ils veulent se transmettre, mais ne publient pas toutes leurs transactions : seules sont publiées (et donc vérifiées puis enregistrées dans la blockchain ) celles qui ouvrent la possibilité d’échanges entre eux et celles qui, ponctuellement, assurent le règlement des divers échanges ayant eu lieu entre eux sur une certaine période.

Les paiements effectués sont bien des transactions en bitcoins. Ce sont des messages qui ont exactement la même forme, la même structure et le même type de contenu ; la seule différence est que la plupart d’entre eux ne sont pas publiés : ces paiements ne sont pas diffusés sur le réseau Bitcoin. On réalise donc certaines transactions en bitcoins sans avoir besoin à chaque étape du protocole Bitcoin.

Comment ce paradoxe est-il réalisé techniquement ? En mettant en réseau une fonctionnalité imaginée à l’origine pour relier des détenteurs de bitcoins deux à deux : les « canaux de paiements bidirectionnels ». Il convient d’abord de comprendre ce qu’est un canal de paiement, avant de voir comment plusieurs canaux peuvent être interconnectés.

Canaux de paiement bidirectionnels

Un canal de paiement est une sorte de compte financier bilatéral entre deux détenteurs de bitcoins qui leur permet de s’échanger des bitcoins et de n’enregistrer dans la blockchain que le solde final de leurs échanges, une fois qu’ils décident de fermer ce compte. Le canal est « unidirectionnel » si c’est toujours le même participant qui envoie des fonds à l’autre, et « bidirectionnel » si les transactions sont réciproques.

Trois étapes peuvent être distinguées.

Premièrement : les deux parties ouvrent un canal de paiement en publiant conjointement sur la blockchain Bitcoin une transaction indiquant combien de bitcoins appartienent à chacun au début de l’existence du compte. Une fois validée par le réseau Bitcoin et intégrée dans un bloc, cette transaction se trouve scellée dans la blockchain.

Les fonds sont mis sous séquestre et restent sous le contrôle conjoint des deux participants. Cela se fait grâce à une fonctionnalité permettant de créer des adresses Bitcoin dont le contrôle est partagé par plusieurs clés privées : une signature de chaque partie reste nécessaire pour mouvementer les fonds présents dans le canal.

Deuxième étape : les deux participants s’envoient des transactions pendant la plage de temps de leur choix : ils modifient autant de fois qu’ils le souhaitent la répartition de ces sommes entre eux par consentement mutuel. Ils le font en s’envoyant des transactions libellées en bitcoins mais non publiées sur la blockchain. On pourrait penser qu’il s’agit en fait de « promesses de bitcoins » mais il s’agit bien, techniquement, de bitcoins.

Ces utilisateurs ne sollicitent aucun intermédiaire et ne payent aucun frais de transaction puisqu’ils ne sont que deux. Pour réaliser leurs transactions hors-chaîne, ils ne recourent à aucun service autre que le réseau internet. Et le montant de leurs échanges n’a pour limite que leur apport initial en bitcoins.

Troisièmement : quand ils souhaitent fermer ce compte et récupérer la part qui revient à chacun, ils publient sur le réseau Bitcoin une transaction dite « de fermeture » qui est la dernière mise à jour des transactions réalisées entre eux deux sur ce canal. C’est le dernier état de leur compte mutuel, le solde de leurs échanges successifs. Le fait que ce soit la dernière mise à jour de la transaction en attente qui devienne normalement la transaction de fermeture est important pour le mécanisme anti-triche prévu dans ce dispositif (cf. infra).

Cette fermeture du canal peut être décidée à tout moment par l’une ou l’autre des deux parties. Il s’agit d’une transaction « normale » sur Bitcoin : elle est diffusée sur le réseau, validée par l’ensemble des nœuds, incluse dans un bloc et ainsi définitivement enregistrée dans la blockchain.

En résumé, quel que soit le nombre d’échanges en bitcoins réalisés entre les deux participants, seules deux transactions auront été réalisées on-chain et seront donc inscrites définitivement dans la blockchain : la transaction d’ouverture du canal et celle de fermeture.

De cette manière, comme le dit Elizabeth Stark (CEO de la startup Lightning Labs), Lightning permet un « consensus local » garanti en fin de compte par le consensus mondial (Bitcoin) ». Un accord entre deux personnes sur le solde de leurs échanges est vérifié et scellé par le dispositif global et décentralisé de Bitcoin.

Mise en réseau des canaux de paiements

Il ne serait pas optimal de créer un canal de paiement avec chaque destinataire potentiel, notamment parce que cela nécessiterait autant de transactions on-chain que de destinataires. D’où l’idée de mise en réseau des canaux : Lightning permet des paiements entre deux parties qui n’ont pas de canal de paiement direct entre elles mais qui en ont ouvert avec d’autres acteurs que l’on peut interconnecter.

Les fonds circulent d’un utilisateur à l’autre, en empruntant le réseau formé par les canaux disponibles. La seule condition est qu’il existe au moins un chemin pour qu’ils parviennent à destination : il faut une succession de canaux de paiements ouverts par plusieurs personnes entre le payeur et le receveur.

Chacun peut décider d’être un nœud Lightning pour pouvoir ouvrir des canaux de paiements. Certains utilisateurs créent plusieurs canaux et se font connaître du réseau (grâce à une fonctionnalité automatique), pour servir d’intermédiaires, de relais : on les appelle « nœuds de routage » (routing nodes). Ils peuvent le faire pour pouvoir être mieux connectés au réseau et réaliser des transactions plus facilement. Ils peuvent aussi, s’ils le souhaitent, prélever des frais sur les transactions qu’ils transmettent (le calcul de ces frais est très différent de Bitcoin et devrait, contrairement à lui, favoriser les micropaiements – cf. infra). Mais, comme pour les nœuds du réseau Bitcoin, cette fonction d’intermédiation ne leur confère aucun pouvoir de contrôle sur les fonds transmis.

Des acteurs comme les commerces recevant beaucoup de paiements pourront avoir intérêt à être bien connectés au réseau en ouvrant des canaux et des nœuds de routage, pour faciliter l’envoi de paiements vers leur adresse.

En revanche, certains nœuds ne peuvent pas relayer des transactions (comme les wallets pour mobiles, qui ne sont pas toujours connectés au réseau) ou ne souhaitent pas le faire. Ces nœuds « périphériques » sont en bordure de la topographie du réseau. Ce sont des nœuds isolés, reliés par un seul canal de paiement à des nœuds plus connectés.

Si les nœuds ouvrant des canaux entre eux sont très nombreux, cela augmente la probabilité de trouver un chemin pour chaque transaction. Et cela augmente aussi les combinaisons possibles de canaux intermédiaires pour constituer cet itinéraire. C’est donc une évolution positive : plus le réseau Lightning abrite de canaux ouverts, plus il peut assurer sa fonction de réseau de paiement de manière efficace.

Un facteur favorise justement l’augmentation du nombre de canaux : les utilisateurs ne sont jamais obligés de fermer leurs canaux. Ils peuvent très bien décider d’en garder certains ouverts indéfiniment. Ils ont même intérêt à ne pas en fermer trop souvent, car chaque transaction de fermeture implique des frais de transaction sur le réseau Bitcoin.

On constate d’ailleurs que l’âge moyen des canaux identifiés augmente, ce qui montre qu’ils tendent à rester ouverts de plus en plus longtemps. C’est une bonne nouvelle. Et c’est très différent d’une situation où chaque utilisateur devrait ouvrir un canal avec chacun des autres, qui, elle, ne serait pas optimale (cf. supra).

Contraintes pratiques

Pour utiliser Lightning, il  faut au préalable posséder un wallet Lightning spécifique et l’avoir alimenté en bitcoins par une transaction on-chain normale. Par la suite, pour effectuer d’autres dépenses, il faut réalimenter régulièrement son wallet, comme on ajoute des pièces dans son porte-monnaie avant d’aller faire des courses. Par ailleurs, des projets sont en cours pour faciliter la réalimentation des canaux par des transferts directs depuis la blockchain Bitcoin. Ces opérations, à l’origine peu aisées pour le néophyte, sont maintenant plus accessibles. L’expérience utilisateur est en amélioration très rapide.

Une contrainte non négligeable est que, contrairement à une transaction on-chain, il est nécessaire d’être connecté au réseau pour recevoir un paiement, en raison du mécanisme de sécurisation des transactions prévu par le protocole (cf. infra). C’est une différence par rapport à Bitcoin, où l’on peut recevoir une transaction sans être connecté. Très commentée lors du lancement de Lightning, cette contrainte ne semble pas si pénalisante dans la pratique.

Par ailleurs, contrairement à Bitcoin, il est nécessaire de produire une nouvelle adresse pour chaque réception de paiement ; elle n’est pas réutilisable et a une durée de validité limitée à quelques heures.

Enfin, l’utilisateur doit aussi sauvegarder les informations contenues dans ses canaux, pour pouvoir récupérer ses fonds en cas de problème, notamment si le canal est fermé sans son accord (cf. infra). Cette opération est automatisée par la plupart des wallets.

Routage

Chaque émetteur de paiement décide des intermédiaires par lesquels il veut faire transiter ses fonds. À lui de trouver un chemin pour sa transaction. Cette opération, que l’on appelle « routage » est effectuée automatiquement. C’est l’une des fonctions des wallets.

Trouver un parcours qui optimise les frais payés aux intermédiaires est un enjeu important dans le fonctionnement du Lightning. Pour assurer cette tâche efficacement, l’algorithme de routage de chaque utilisateur doit être capable de recevoir et de traiter rapidement une masse d’informations considérable : topographie du réseau, capacité des canaux, niveau des frais de routage, etc.

D’intenses efforts scientifiques sont consacrés au maintien d’un routage efficace à long terme. Il s’agit d’un défi mathématique et informatique notable. Alors que Bitcoin agençait (d’une manière certes exceptionnellement novatrice) des technologies éprouvées depuis des années (cryptographie asymétrique, registres distribués, preuve de travail, peer-to-peer, etc.), le développement de Lightning nécessite parfois de résoudre des problèmes nouveaux, surtout en matière de routage.

Plusieurs chercheurs de haut niveau s’y sont attelés avec succès. De nombreuses pistes d’amélioration sont à l’étude ou en cours de développement. Par exemple, un projet d’optimisation appelé « Trampoline » permet de déléguer une partie des calculs de routage à un tiers sans sacrifier le niveau de confidentialité. On peut aussi citer la proposition d’algorithme d’ant routing  (en référence aux méthodes sophistiquées de recherche de nourriture des fourmis) des mathématiciens Ricardo Pérez-Marco (CNRS, Université Paris XIII) et Cyril Grunspan (Ecole supérieure d’ingénieurs Léonard de Vinci – Esilv).

Centralisation

Un des premiers risques soulignés lors du lancement du Réseau Lightning a été celui d’une centralisation du réseau autour de quelques nœuds de routage importants. Dans ce scenario, quelques nœuds de routage, capables d’ouvrir énormément de canaux de paiements et d’y maintenir beaucoup de liquidité (cf. infra), deviendraient incontournables dans les chemins utilisés pour les transactions. Cette situation irait à l’encontre de l’objectif de décentralisation du réseau. Elle conférerait à ces nœuds un pouvoir de surveillance et de censure (cf. infra). Elle leur donnerait la possibilité d’imposer des frais excessifs. Et elle pourrait également fragiliser techniquement le réseau à travers des défaillances éventuelles de canaux de paiement massifs.

Une telle évolution constituerait un retour en arrière quelque peu ironique puisque l’intérêt principal de Lightning est d’assurer la scalabilité de Bitcoin sans prendre le risque de centralisation du réseau qu’aurait impliqué l’autre option envisagée, celle de l’augmentation rapide de la taille des blocs.

Pour rappel, sur Bitcoin, des blocs beaucoup plus gros nécessiteraient davantage de moyens pour les full-nodes (qui sont bénévoles s’ils ne font pas de minage) comme pour les mineurs : cela réduirait  leur nombre et compliquerait aussi le processus de propagation à tout instant du dernier bloc à l’ensemble du réseau, remettant ainsi en question l’un des principaux mécanismes de sécurisation de Bitcoin. Cet aspect est crucial : Lightning est un dispositif certes beaucoup plus complexe qu’une simple augmentation de la taille des blocs, mais qui permet de ne pas compromettre la sécurité du système (par ailleurs, notons que la taille des blocs pourrait augmenter à l’avenir, avec des effets de scalabilité démultipliés par la présence préalable du layer 2).

S’agissant du réseau Lightning, si des nœuds de routage acquièrent un poids majeur, il faut qu’il puissent être contournés facilement, pour réduire les inconvénients de la centralisation. La priorité est donc qu’il reste techniquement possible de faire tourner des nœuds permettant ce contournement si nécessaire.

Or, les barrières à l’entrée techniques et financières pour constituer un nœud relai Lightning sont faibles, notamment si on les compare aux investissements nécessaires pour miner sur Bitcoin. N’importe qui peut le faire pour un coût négligeable. Il convient juste de posséder un nœud complet Bitcoin, ce qui n’est pas encore très répandu mais devient de plus en plus facile. Cela reste à confirmer, et des débats demeurent sur ce sujet, mais on peut imaginer que cette caractéristique permette à l’avenir de maintenir naturellement un niveau de décentralisation satisfaisant sur le réseau Lightning.

Liquidité

Un autre défi du réseau Lightning est la question de la disponibilité des fonds sur chaque canal. Pour faire transiter des fonds entre divers canaux de paiements, il faut qu’une somme équivalente soit déjà contenue dans chacun d’eux.

C’est l’un des aspects les moins intuitifs de Lightning. Les canaux ne sont pas une sorte de « tuyaux » vides dans lesquels on fait passer de l’argent : ils représentent plutôt des segments contractuels entre plusieurs acteurs, dans lesquels la répartition de la propriété des bitcoins est modifiée à chaque transaction, pour faire circuler des fonds d’un point à un autre. Dans un canal de paiement Lightning, la somme totale de bitcoins ne varie pas : c’est uniquement leur répartition entre les deux parties qui est modifiée successivement entre eux, même quand ce canal est utilisé par un nœud de routage pour transmettre une transaction.

La nécessité de maintenir une liquidité suffisante pour que les fonds puissent circuler d’un canal à l’autre peut d’ailleurs fournir une incitation financière pour les nœuds de routage ou d’autres acteurs à offrir de la liquidité pour attirer les transactions et percevoir des frais (cf. infra).

Par ailleurs, de nouvelles fonctionnalités sont à l’étude, par exemple celle consistant à fractionner entre plusieurs itinéraires une transaction de montant élevé qui ne pourrait pas trouver de canaux disposant de suffisamment de liquidités par lesquels transiter : les Atomic Multipath Payments (AMP).

Mécanisme anti-triche

Faire fonctionner un dispositif comme Lightning en limitant les risques de fraude, de détournement et de vol est un défi technique d’une grande complexité, et les nombreux niveaux de cryptographie déployés pour y répondre sont impossibles à résumer ici.

Le cas le plus emblématique est celui d’une tentative de vol par un des deux titulaires d’un canal (ce peut être un nœud de routage censé relayer la transaction). Par définition, les bitcoins placés dans un canal de paiement sont bloqués en dehors de la blockchain. Cela signifie que, tant que leur répartition entre les deux utilisateurs n’a pas été « scellée » définitivement par une transaction consensuelle on-chain, chacun peut tenter de spolier l’autre en effectuant une fermeture unilatérale du canal qui ne publierait pas sur la blockchain le solde final de leurs échanges mais un état antérieur qui lui serait plus favorable. Autrement dit, pour voler des bitcoins sur Lightning, il est possible d’essayer de publier une transaction de son canal qui n’est pas la dernière en vigueur.

Ce risque aurait bien sûr rendu impossible tout essor du réseau Lightning si un mécanisme ingénieux n’avait été imaginé pour le surmonter : la partie spoliée qui repère la transaction on-chain frauduleuse dispose d’un délai (de quelques jours, et pouvant être paramétré) pour l’annuler et récupérer l’ensemble des fonds du canal. Pour pouvoir détecter ce type de tentative, les utilisateurs du réseau Lightning doivent surveiller la blockchain régulièrement ; dans la pratique, cette tâche est automatisée ou externalisée à peu de frais à des prestataires spécialisés.

L’utilisateur spolié récupère non seulement sa part légitime mais aussi celle du tricheur. Ce mécanisme est donc particulièrement dissuasif : d’une part, le voleur a très peu de chances de réussir son coup ; d’autre part, s’il échoue il est certain de perde ses propres fonds.

Notons que ce mécanisme ne remet pas pour autant en question le principe d’irréversibilité de la transaction, l’un des piliers de Bitcoin. Il ne peut normalement être actionné que si l’un des utilisateurs a vraiment tenté de voler l’autre (des recherches sont toutefois en cours pour l’affiner en cas de fermeture accidentelle de canal sans intention frauduleuse).

À l’instar de Bitcoin et de son dispositif de minage, ce protocole peut ainsi s’analyser en théorie des jeux comme un ensemble d’incitations qui rendent plus rationnel économiquement de contribuer à sécuriser le réseau plutôt que d’essayer de le pirater. Comme Bitcoin, Lightning permet des paiements entre des interlocuteurs qui n’ont aucune raison de se faire confiance, en utilisant un réseau pair-à-pair composé d’acteurs à qui il n’est nul besoin de faire confiance.

Confidentialité

Lightning offre un niveau de confidentialité supérieur à Bitcoin, essentiellement parce qu’il ne repose pas sur un registre public : seules les transactions d’ouverture et de fermeture de canaux sont publiques, enregistrées et traçables.

Il convient d’ailleurs de remarquer que cette confidentialité supérieure est obtenue au prix d’un niveau de sécurité un peu inférieur à celui du réseau on-chain. L’arbitrage confidentialité/sécurité n’est pas le même entre Lightning et Bitcoin. Il est impossible de maximiser tous les paramètres en même temps. Ce qui compte, c’est que les arbitrages soient explicités et assumés, ce qui est loin d’être toujours le cas dans l’univers des cryptomonnaies.

Comme le registre n’est pas public, les transactions off-chain pourraient, en revanche, être observées par les nœuds intermédiaires. Ce risque serait d’autant plus préoccupant si la centralisation du réseau augmentait (cf. supra) : si quelques nœuds de routage importants centralisaient l’essentiel des flux, cela augmenterait leurs possibilités de surveillance ou de censure. Comme pour Bitcoin, il est donc préférable que le réseau soit aussi décentralisé que possible, avec un maximum de nœuds et de canaux.

Afin de limiter tout risque de surveillance, les entreprises développant le réseau se sont mises d’accord pour utiliser la technique de l’onion routing (comme le réseau Tor). Le chiffrement cryptographique du paiement est effectué d’une manière telle que chaque intermédiaire n’a accès qu’à l’information qui le concerne : d’où vient le paiement, quel montant il doit transmettre, et à quelle adresse. Les couches de chiffrement s’épluchent comme les feuilles d’un oignon. Impossible pour un nœud de routage de savoir par combien d’autres intermédiaires passera le paiement, ni à quel stade il se trouve lui-même dans son parcours.

Enfin, comme pour les nœuds Bitcoin, l’utilisation de Tor pour éviter de révéler son adresse IP est conseillée. Certes, de nouvelles techniques de surveillance seront sans doute déployées mais on peut imaginer que les techniques de protection se développeront en parallèle, comme c’est déjà le cas pour Bitcoin. Pour l’heure, le réseau Lightning  semble robuste.

Finalement, sur Lightning comme sur Bitcoin, les paiements circulent par des intermédiaires mais ceux-ci ne sont pas des tiers de confiance : le système ne leur concède ni l’information pertinente ni l’incitation économique, ni la possibilité technique pour tenter de censurer ces paiements.

Cette caractéristique est totalement nouvelle par rapport aux systèmes de paiements traditionnels reposant notamment sur les réseaux bancaires. Sur ces derniers, les « tiers de confiance » agréés ont la possibilité de tout connaître de chaque transaction et d’interrompre celles de leur choix pour tout motif (réglementations, pressions politiques, corruption, etc.).

Par ailleurs, étant centralisés, ils sont techniquement vulnérables et représentent des cibles contre lesquelles il est rationnel économiquement pour certains acteurs d’investir de forts moyens de piratage. Comme le résume Nick Szabo (l’un des principaux inspirateurs de Bitcoin) “trusted third parties are security holes”.

 

  1. Cet article est le deuxième chapitre de la note publiée le 23 juin 2020 par l’Institut Sapiens.
Vous souhaitez nous signaler une erreur ? Contactez la rédaction.