Bitcoin et le consensus de Nakamoto : consistance, vivacité, synchronie et sécurité
Le mécanisme de consensus de Bitcoin, communément appelé consensus de Nakamoto, permet de sécuriser sa blockchain, le registre des transactions effectuées sur le réseau.
Il appartient à la grande famille des protocoles de consensus distribués. Cependant, le classifier plus finement relève du challenge. En effet, il comporte de nombreuses briques techniques et mathématiques qui en font un système complexe et, pour certains, révolutionnaire.
Dans cet article, nous allons explorer un peu plus en profondeur les notions de consistance, de vivacité, de synchronie et de sécurité. Cela nous permettra de comprendre la sécurité du réseau Bitcoin, la notion de finalisation d’une transaction et le caractère immuable de la blockchain.
Bitcoin : un système synchrone ?
Tout d’abord, nous allons nous pencher sur la question suivante. Bitcoin est-il un système synchrone ou asynchrone ? Il est bien difficile d’affirmer l’un ou l’autre avec certitude. Ce que l’on sait déjà, c’est que Bitcoin est un réseau pair-à-pair et sans permission. Le terme « permissionless » renvoie au fait que le réseau est ouvert, et que de nouveaux nœuds peuvent librement le rejoindre à tout instant.
La synchronie d’un réseau distribué
Comment peut-on définir le caractère synchrone d’un système distribué ? On peut affirmer qu’un réseau distribué est synchrone lorsque :
- Tous ses éléments (ses nœuds dans le cas de Bitcoin) sont coordonnés par une horloge globale ;
- Il existe un plafond connu quant au délai des messages qui sont transmis entre les différents nœuds du système. Il s’agit pour Bitcoin des transactions diffusées sur le réseau.
- Les canaux de communication entre les différents nœuds délivrent les messages de façon ordonnancée, selon la règle du FIFO (first in, first out). On peut identifier de façon précise le moment où un message a été transmis.
- Les processus du système sont exécutés de manière séquentielle.
Dans un système distribué synchrone, il est toujours possible de connaître l’ordre des opérations effectuées en son sein.
À l’inverse, au sein d’un système asynchrone :
- Les horloges des nœuds ne sont pas toutes coordonnées ou précises ;
- L’état du système est défini par les événements s’y déroulant. Ils ne suivent pas forcément une séquence ou un ordre précis. Par exemple, ils peuvent aussi survenir en parallèle.
- Les événements peuvent survenir sur décision arbitraire, et indépendamment du programme gérant les nœuds ;
- Le délai entre les messages transitant au sein du réseau est variable.
Ainsi, dans un système asynchrone, les nœuds n’ont pas toujours de retour sur le statut des informations transitant sur le reste du réseau. Ils peuvent donc avoir une vue différente de l’état du système.
Le cas litigieux de Bitcoin
Il est donc plus difficile qu’il n’y paraît de qualifier d’emblée le réseau Bitcoin de système « synchrone » ou « asynchrone » :
- L’horloge système des nœuds est censée être identique ;
- Le délai des messages est plafonné par la bande passante des nœuds, leur connectivité et la méthode de propagation des messages ;
- Les canaux de communication entre les nœuds légers délivrent les messages de façon aléatoire, c’est-à-dire lorsqu’une transaction est soumise à l’un deux ;
- Les blocs sont émis de façon asynchrone : chaque mineur fournit un bloc dès qu’il a trouvé un hash supposé valide. Ces blocs sont ensuite soumis aux autres nœuds pour vérification.
- Une fois les blocs validés par l’ensemble du réseau, les nœuds complets délivrent des messages ordonnancés, afin que chacun puisse avoir le même registre (la blockchain) et qu’il n’y ait pas de conflit entre les transactions. C’est le processus de finalisation des blocs, leur inscription dans la blockchain.
Ces observations sont donc contradictoires. Tentons de prendre un point de vue plus global, et considérons le fonctionnement de Bitcoin à travers la finalisation de ses blocs.
La blockchain : un serveur d’horodatage
Dans son livre blanc, Satoshi Nakamoto ne parlait pas de blockchain, mais de timestamp server – serveur d’horodatage. En effet, chaque bloc est tout d’abord horodaté, puis un hash de cet horodatage est publié à l’ensemble du réseau. Cela permet de prouver que les informations contenues dans le bloc (les transactions) ont existé dans le temps. Chaque horodatage inclut également l’horodatage précédent dans son hash, ce qui forme une chaîne. L’ordonnancement des événements est ainsi renforcé dans le temps.
En ce sens, du point de vue global, le réseau Bitcoin paraît synchrone, car chaque nœud complet doit avoir la même version du registre distribué à intervalles réguliers (toutes les dix minutes). De plus, les transactions sont traitées de manières séquentielles, et l’ordre des blocs est défini par une stricte relation mathématique.
En pratique cependant, ce n’est pas toujours le cas. Par exemple, si deux nœuds mineurs valides trouvent un bloc en même temps, le réseau va se retrouver partitionné. Il en va de même pour la blockchain : on parle de fork. La probabilité que cela se produise sur plusieurs blocs est faible, mais non-nulle.
Les nœuds doivent alors trouver une méthode pour choisir la branche du registre sur laquelle s’accorder et se synchroniser à nouveau. Le protocole Bitcoin définit la règle suivante : en cas de fork, c’est la branche possédant la preuve de travail cumulée la plus importante qui est considérée comme valide. Les autres branches sont abandonnées, et les blocs correspondants deviennent orphelins.
>> Mettez vos cryptomonnaies au vert. Choisissez un portefeuille Ledger (lien commercial) <<
La sécurité de la blockchain
On s’aperçoit donc que la sécurité du réseau Bitcoin repose fortement sur son caractère synchrone. C’est de là que vient le délai de finalisation des blocs, estimé à 6. En effet, à ce stade, la probabilité d’avoir deux chaînes concurrentes devient quasi-nulle. Il est mathématiquement raisonnable de considérer qu’après ce délai, le réseau est synchrone et qu’il est impossible d’effectuer une double dépense.
En pratique, Bitcoin peut donc devenir asynchrone, dans plusieurs cas :
- Fork de la blockchain ;
- Mauvaise connectivité entre les nœuds ;
- Propagation des blocs non-uniforme.
On pourrait donc finalement affirmer sans se mouiller que Bitcoin est un système distribué semi-synchrone (ou partiellement synchrone) fonctionnant sans permission (n’importe qui peut rejoindre le réseau à tout moment). Synchrone dans un cadre idéal, asynchrone de temps à autre en pratique.
Cette propension à devenir asynchrone rend possible une variété d’attaques. La question devient donc de savoir ce qu’il en est au niveau de la sécurité du réseau le cas échéant.
Formulé autrement : le protocole de consensus de Nakamoto reste-t-il cohérent lorsqu’il est exécuté de manière asynchrone, avec des délais de transmission des messages bornés par ∆ ?
C’est une question qui aura taraudé tant les chercheurs en mathématiques et en informatique que les pirates, qui donneraient cher pour profiter d’un éventuel manque de cohérence. Des attaquants pourraient souhaiter forger de fausses transactions, ou effectuer des doubles dépenses.
Consistance du système
Malheureusement pour eux, et heureusement pour les utilisateurs, le protocole de Nakamoto reste cohérent même en conditions asynchrones. C’est notamment prouvé par l’étude « Analysis of the Blockchain Protocol in Asynchronous Networks » (Rafael Pass, Lior Seeman, Abhi Shelat) publiée le 13 septembre 2016.
Elle fournit une abstraction d’un protocole blockchain, permettant d’identifier les propriétés de sécurité désirables pour de tels protocoles. Dans ce modèle formel, les attaquants peuvent être des nœuds corrompus ou de nouveaux nœuds.
L’étude prouve que le protocole Bitcoin satisfait de manière forte les propriétés de consistance et de vivacité au sein d’un réseau asynchrone, avec des délais bornés, en présence d’attaquants.
Si cela vous intéresse, elle est disponible ici.
Pour conclure, à la question « le réseau Bitcoin est-il synchrone ? », on peut répondre : « on s’en fiche, tant qu’il reste sécurisé et que mes bitcoins ne sont pas volés ! »
C’est la consistance du protocole de consensus de Satoshi Nakamoto qui permet d’affirmer avec certitude mathématique qu’au-delà d’un certain délai, en blocs, la blockchain est immuable. La relation mathématique qui relie les blocs, grâce à l’algorithme de hachage, rend impossible sa modification a posteriori.
Ce n’est théoriquement pas tout à fait le cas, car il existe la fameuse attaque goldfinger, l’attaque des 51 %. Un mineur possédant plus de la moitié de la puissance de hachage du réseau pourrait former une chaîne concurrente, qui serait acceptée par le réseau si elle présente plus de preuve de travail que la chaîne de référence.
Nous discuterons de cette attaque, et de son impossibilité, dans un article à part entière.
Vires in numeris !
En crypto, ne faites pas l’économie de la prudence ! Ainsi, pour conserver vos avoirs cryptographiques à l’abri, la meilleure solution est encore un wallet hardware personnel. Chez Ledger, il y en a pour tous les profils et toutes les cryptos. N’attendez pas pour mettre vos capitaux en sécurité (lien commercial) !