Lightning network - second layer payment protocol that operates on top of a blockchain. Bitcoin, cryptocurrency, internet payment.

Bitcoin et Lightning : deux réseaux pour passer à l’échelle

Dossier : BitcoinMagazine N°792 Février 2024
Par Bastien TEINTURIER (X08)

Le réseau Light­ning consti­tue avec le réseau Bit­coin une alter­na­tive offrant aux uti­li­sa­teurs de cryp­to­mon­naie un choix sécu­ri­sé notam­ment en matière de frais de tran­sac­tion, per­met­tant de contour­ner cer­taines limites du sys­tème Bit­coin. Les deux réseaux sont com­plé­men­taires. Light­ning fonc­tionne de manière satis­fai­sante depuis 2017 et il est en déve­lop­pe­ment col­la­bo­ra­tif continuel.

Lors de la créa­tion du Bit­coin en 2008, Sato­shi Naka­mo­to a inti­tu­lé son livre blanc Bit­coin : A Peer-to-Peer Elec­tro­nic Cash Sys­tem. Quelques années plus tard, force était de consta­ter qu’il serait dif­fi­cile de rem­pla­cer le cash par le Bit­coin pour faire ses courses : les per­for­mances de la blo­ck­chain étaient en effet limi­tées à envi­ron sept tran­sac­tions par seconde (contre plu­sieurs mil­liers de tran­sac­tions par seconde pour le réseau Visa). 

Quelles solutions aux limites du système ? 

De nom­breuses solu­tions naïves ont rapi­de­ment été pro­po­sées, par exemple aug­men­ter la taille des blocs ou leur fré­quence. L’inconvénient majeur de ce type de solu­tions, c’est qu’elles sacri­fient une des carac­téristiques fon­da­men­tales du Bit­coin : sa dé­centralisa­tion. N’importe quel indi­vi­du peut aujourd’hui, avec du maté­riel infor­ma­tique grand public, ins­tal­ler le logi­ciel Bit­coin Core, télé­char­ger la blo­ck­chain et contri­buer au réseau. Cela per­met de véri­fier que toutes les tran­sac­tions du réseau sont valides, ain­si que d’effectuer ses propres tran­sac­tions, sans recou­rir à un tiers de confiance. 

La taille de la blo­ck­chain est aujourd’hui de 500 Go et croît à un rythme d’environ 8 Go par mois. Aug­men­ter la taille des blocs ou leur fré­quence impli­que­rait d’accélérer cette crois­sance, et donc de rendre plus dif­fi­cile l’accès à la blo­ck­chain pour une large par­tie de la popu­la­tion. Plus fonda­mentalement encore, il a vite été recon­nu que ce n’était pas la bonne voie à suivre pour per­mettre au monde entier de payer sa baguette en bitcoin. 

Une tran­sac­tion Bit­coin doit être pro­pa­gée à l’intégralité du réseau Bit­coin (plu­sieurs dizaines de mil­liers d’ordinateurs) et ensuite sto­ckée indé­fi­ni­ment dans la blo­ck­chain. Il est évident que cela n’aurait aucun sens d’effectuer une opé­ra­tion aus­si coû­teuse pour chaque achat de baguette ! La solu­tion était donc à cher­cher ailleurs… Il fal­lait trou­ver un moyen de faire des tran­sac­tions Bit­coin sans les ins­crire dans la blo­ck­chain.

Les canaux de paiement

Cela a don­né nais­sance au concept de canal de paie­ment : deux uti­li­sa­teurs, par exemple Alice et Bob, peuvent effec­tuer une tran­sac­tion Bit­coin pour ouvrir un canal de paie­ment bidi­rec­tion­nel (fun­ding tran­sac­tion). Une fois cette tran­sac­tion confir­mée, Alice et Bob peuvent déci­der de s’échanger des bit­coins à l’intérieur de ce canal de paie­ment. Ils vont pour cela créer une tran­sac­tion qui décrit la répar­ti­tion actuelle des fonds dans ce canal (com­mit­ment tran­sac­tion), mais sans la publier. Ain­si, ils pour­ront la rem­pla­cer par une nou­velle ver­sion à chaque fois qu’ils déci­de­ront de s’échanger des bit­coins, sans avoir besoin de publier quoi que ce soit sur la blo­ck­chain. Ces échanges de bit­coins sont donc pure­ment pair-à-pair et ne sont connus que d’Alice et Bob, ce qui garan­tit leur confidentialité.

Création d’un canal de paiement : la commit tx n’est pas publiée sur la blockchain.
Créa­tion d’un canal de paie­ment : la com­mit tx n’est pas publiée sur la blo­ck­chain.

Une garantie de sécurité

Une des prin­ci­pales dif­fi­cul­tés asso­ciées à ce type de pro­to­cole est de garan­tir que seul le der­nier état du canal (la ver­sion la plus récente de la com­mit­ment tran­sac­tion) puisse être publié sur la blo­ck­chain. En effet, si ce n’était pas le cas, Alice pour­rait effec­tuer un paie­ment dans ce canal, mais ensuite publier sur la blo­ck­chain la com­mit­ment tran­sac­tion pré­cé­dente, qui lui per­met­trait de récu­pé­rer (voler) le mon­tant du paiement. 

Il est impos­sible d’empêcher Alice de publier une ver­sion pré­cé­dente de la com­mit­ment tran­sac­tion, mais il est en revanche pos­sible de la révo­quer : à chaque nou­veau paie­ment effec­tué par Alice, un secret cryp­to­gra­phique asso­cié à la ver­sion actuelle de sa com­mit­ment tran­sac­tion est révé­lé, qui per­met à Bob de s’approprier l’intégralité des fonds du canal si Alice publie la tran­sac­tion révoquée. 

Cela garan­tit qu’Alice ne pren­dra jamais le risque de tri­cher, car Bob pour­rait immé­dia­te­ment la péna­li­ser. La blo­ck­chain est ain­si uti­li­sée comme une cour de jus­tice : lorsque les acteurs sont hon­nêtes, ils peuvent effec­tuer un nombre poten­tiel­le­ment illi­mi­té de trans­ferts de bit­coins sans publier de tran­sac­tion (et donc extrê­me­ment rapi­de­ment et effi­ca­ce­ment) et, lorsque l’un des acteurs tente de tri­cher, il suf­fit de publier des tran­sac­tions pour péna­li­ser le tri­cheur et garan­tir les paiements.

En envoyant 0.4 BTC à Bob, Alice invalide sa commit tx précédente.
En envoyant 0.4 BTC à Bob, Alice inva­lide sa com­mit tx précédente.

Un réseau de canaux de paiement

Chaque canal per­met d’effectuer un très grand nombre de paie­ments entre deux indi­vi­dus en ne publiant qu’une seule tran­sac­tion (la fun­ding tran­sac­tion). Mais nous pou­vons aller encore plus loin : il est pos­sible d’envoyer des paie­ments à tra­vers plu­sieurs canaux, ce qui per­met de créer un véri­table réseau de paie­ment pair-à-pair, le réseau Lightning. 

Si Alice et Bob ont un canal de paie­ment et que Bob et Carol ont eux aus­si un canal de paie­ment, Alice peut payer Carol en pas­sant par Bob. Cela per­met à un grand nombre de per­sonnes de trans­fé­rer rapi­de­ment et effi­ca­ce­ment des bit­coins avec un rela­ti­ve­ment petit nombre de canaux (et donc de tran­sac­tions publiées sur la blo­ck­chain). La confi­den­tia­li­té de ces paie­ments est garan­tie par plu­sieurs mécanismes.

“Construire un réseau de paiement décentralisé et pair-à-pair.”

Prin­ci­pa­le­ment, contrai­re­ment à une tran­sac­tion publiée sur la blo­ck­chain, aucune infor­ma­tion liée au paie­ment n’est ren­due publique : seuls les nœuds direc­te­ment impli­qués dans le paie­ment en connaissent l’existence. Ces nœuds inter­mé­diaires n’ont qu’une connais­sance par­tielle des détails du paie­ment, grâce à un méca­nisme d’encryp­tion en oignon (simi­laire à la cryp­to­gra­phie uti­li­sée par le réseau Tor). Il est évi­dem­ment cru­cial de garan­tir éga­le­ment que les nœuds inter­mé­diaires ne peuvent pas voler tout ou une par­tie des paie­ments qu’ils relaient. Le pro­to­cole Light­ning uti­lise pour cela un script Bit­coin appe­lé HTLC (hash time-locked contract), qui repose sur une fonc­tion de hachage cryp­to­gra­phique (SHA-256).

Un fonctionnement éprouvé 

Le réseau fonc­tionne depuis 2017 et compte aujourd’hui plus de 15 000 nœuds et 70 000 canaux de paie­ment. Les opé­ra­teurs de ces nœuds sont moti­vés par des inci­ta­tions éco­no­miques : ils col­lectent des frais de tran­sac­tion pour chaque paie­ment qu’ils relaient, pro­por­tion­nels au mon­tant du paie­ment. Chaque opé­ra­teur de nœud fixe les prix asso­ciés à ses canaux de paie­ment, les annonce à l’ensemble du réseau et peut les modi­fier aus­si sou­vent qu’il le sou­haite. Les uti­li­sa­teurs sou­hai­tant effec­tuer des paie­ments connaissent ain­si en temps réel les prix des dif­fé­rentes routes dis­po­nibles à tra­vers le réseau et peuvent sélec­tion­ner les moins chères. Cela crée une com­pé­ti­tion per­ma­nente entre les nœuds du réseau, évi­tant tout effet de monopole. 

Les frais de transaction

Il est inté­res­sant de noter le contraste entre les frais de tran­sac­tion du réseau Light­ning et ceux du réseau Bit­coin. Les frais asso­ciés à une tran­sac­tion Bit­coin dépendent uni­que­ment du nombre d’octets que cette tran­sac­tion occupe dans la blo­ck­chain (dont on sou­haite limi­ter la crois­sance) et non pas du mon­tant du paie­ment. Il est donc par­ti­cu­liè­re­ment avan­ta­geux de faire direc­te­ment des tran­sac­tions Bit­coin pour des mon­tants éle­vés, car les frais asso­ciés seront alors négligeables. 

À l’inverse, les paie­ments Light­ning ne sont pas sto­ckés dans la blo­ck­chain et sont uni­que­ment limi­tés par la taille des canaux de paie­ment uti­li­sés, et donc du mon­tant à relayer : c’est pour­quoi leurs frais de tran­sac­tion dépendent du mon­tant du paie­ment. Ces deux réseaux sont ain­si par­fai­te­ment com­plé­men­taires. Le réseau Light­ning per­met cepen­dant de faire des paie­ments ins­tan­ta­nés, alors qu’une tran­sac­tion Bit­coin doit attendre d’être ins­crite dans la blo­ck­chain : cela peut jus­ti­fier d’utiliser Light­ning pour cer­tains paie­ments, même lorsque les frais de tran­sac­tion auraient été moins éle­vés avec une tran­sac­tion Bit­coin classique.

Visualisation du réseau Lightning.
Visua­li­sa­tion du réseau Lightning.

Les performances du réseau Lightning

Le réseau Light­ning per­met donc de trai­ter un grand volume de paie­ments confi­den­tiels, peu coû­teux et ins­tan­ta­nés, en évi­tant de publier les tran­sac­tions asso­ciées sur la blo­ck­chain. Il est cepen­dant très dif­fi­cile d’évaluer le nombre maxi­mum de paie­ments que pour­rait sup­por­ter le réseau Light­ning. Ce nombre est en théo­rie presque illi­mi­té, mais en pra­tique le résul­tat dépend en grande par­tie de la façon dont les paie­ments se répar­tissent dans le graphe : prennent-ils des che­mins dif­fé­rents ou bien se can­ni­ba­lisent-ils en essayant d’emprunter les mêmes canaux ? La topo­lo­gie du réseau étant par nature très dyna­mique (n’importe qui peut ouvrir de nou­veaux canaux de paie­ment), il a la capa­ci­té de s’adapter rapi­de­ment aux flux de paie­ments. Plu­sieurs équipes de recherche aca­dé­mique essayent aujourd’hui de répondre à ces ques­tions, qui mêlent théo­rie des graphes, cryp­to­gra­phie et théo­rie des jeux. 

Un réseau collaboratif 

Un des aspects les plus fas­ci­nants de ce pro­jet, outre sa dimen­sion tech­nique, est la façon dont il est déve­lop­pé. Le pro­jet est orga­ni­sé autour d’une spé­cification open source (https://github.com/lightning/bolts) à laquelle n’importe qui peut contri­buer. Toutes les dis­cus­sions sont publiques et les contri­bu­teurs régu­liers se retrouvent toutes les deux semaines sur IRC (Inter­net Relay Chat) pour dis­cu­ter des avan­cées du pro­to­cole. Les prin­ci­paux contri­bu­teurs sont ACINQ, Blocks­tream, Light­ning Labs et Spi­ral : cha­cune de ces équipes, en plus de contri­buer à la spé­ci­fi­ca­tion, déve­loppe sa propre implé­men­ta­tion du pro­to­cole, toutes ces implé­men­ta­tions étant inter­opé­rables. La diver­si­té et l’indépendance des acteurs et de leurs implémen­tations sont la clef de voûte de la décen­tra­li­sa­tion du réseau.

De nom­breuses étapes ont été fran­chies depuis la genèse du pro­jet en 2015. Cepen­dant, il reste encore beau­coup à faire : construire un réseau de paie­ment décen­tra­li­sé et pair-à-pair est autre­ment plus com­pli­qué que de construire son équi­valent cen­tra­li­sé. La route est longue, et pavée de défis pas­sion­nants pour des ingé­nieurs curieux et motivés ! 

Poster un commentaire