Le Proof-of-Stake ou preuve d’enjeu est un mécanisme permettant de maintenir un consensus autour d’un ensemble de transactions dans un réseau distribué. Il s’agit de l’alternative la plus populaire au Proof-of Work - la preuve de travail - souvent décriée pour son coût en énergie.
Ce mécanisme de consensus est notamment utilisé sur Ethereum, Cardano, Cosmos, Avalanche ou encore Polkadot.
Blockchain et mécanismes de consensus
Les cryptomonnaies permettent à un réseau pair-à-pair d'utilisateurs d’échanger de la valeur sans passer par un intermédiaire de confiance. Pour ce faire, ces réseaux sont décentralisés : aucune entité ne peut prendre le contrôle de la comptabilité de référence du réseau.
Afin de s’accorder sur le registre des transactions effectuées sur le réseau (sa blockchain), les participants doivent maintenir un consensus autour de cette comptabilité de référence. Il faut pouvoir déterminer la validité des transactions soumises aux nœuds du réseau :
- S’assurer qu’un utilisateur possède bien les fonds qu’il souhaite dépenser ;
- Choisir entre des transactions conflictuelles ;
- Empêcher les double-dépenses.
Une fois les transactions validées, elles sont inscrites dans la blockchain. On considère ensuite qu'elles sont finalisées lorsqu’il est mathématiquement quasi-impossible de les modifier a posteriori.
Le Proof-of-Work
La preuve de travail (Proof-of-Work) est le mécanisme de consensus le plus éprouvé dans l’univers des blockchains. Il s’agit du consensus de Bitcoin inventé par Satoshi Nakamoto.
Pour inscrire des blocs de transactions dans le registre, les mineurs utilisent leur puissance de calcul. Ils dépensent de l’énergie (et donc des fonds) afin de trouver la solution (le hash du bloc) à un problème mathématique complexe.
Lorsqu’un mineur trouve un hash valide, il inscrit son bloc dans la chaîne, et touche en retour une récompense. Les mineurs génèrent des hashes de manière aléatoire jusqu’à en trouver un qui convient. Cela nécessite d'effectuer de nombreux calculs et donc une dépense d'énergie, d'où la notion de preuve de travail.
La preuve de travail est un mécanisme robuste du point de vue de la sécurité. En effet, il permet de résister à l'éventuelle corruption de la moitié de la puissance de calcul du réseau. Il est cependant très énergivore, ce qui a poussé les chercheurs à trouver de nouveaux mécanismes de consensus.
La méthode alternative la plus connue est la preuve d’enjeu, le Proof-of-Stake.
Proof-of-Stake : concept et fonctionnement
Conception du Proof-of-Stake
L’idée du Proof-of-Stake est d’obtenir un consensus sur les transactions non pas en dépensant de l'énergie (sous forme de puissance de calcul), mais en mettant directement en jeu des fonds sur le réseau. Les fonds que consacrent les participants au mécanisme de consensus sont appelés le stake (l’enjeu). Les producteurs de blocs sont sélectionnés de manière aléatoire par un algorithme, et non pas en générant des solutions à un problème mathématique. À la différence du Proof-of-Work, on parle de forger la blockchain (to mint, battre monnaie) - les nœuds producteurs sont donc aussi appelés minters.
De la même façon que pour la preuve de travail, le nœud validateur qui inscrit un bloc dans la chaîne est récompensé. En cas de mauvais comportement, il est sévèrement puni. Il y a ainsi des incitations économiques à respecter les règles du protocole.
Conceptuellement, le Proof-of-Work est un mécanisme incitatif basé sur la récompense, tandis que le Proof-of-Stake est plutôt basé sur la punition. Cela permet de rompre la symétrie entre les coûts d'attaque et de défense du réseau.
En effet, avec le Proof-of-Work, un attaquant souhaitant falsifier des blocs doit dépenser plus d’énergie que le restant du réseau. La sécurité du réseau dépend donc de la quantité d’énergie déployée par les mineurs honnêtes. Avec le Proof-of-Stake, les pénalités sont très élevées : le coût d’une attaque est ainsi beaucoup plus élevé que le coût de la défense. La sécurité d’un réseau en Proof-of-Stake provient donc des pertes économiques infligées en cas d’attaque.
Fonctionnement du Proof-of-Stake
Il existe de nombreuses variantes du Proof-of-Stake : la première plateforme blockchain utilisant ce mécanisme fut NXT, créée en 2013. Ethereum, qui fonctionnait auparavant grâce au Proof-of-Work, utilise désormais la preuve d’enjeu. C’est également le cas pour Cardano, avec des différences.
Le mécanisme du Proof-of-Stake comporte plusieurs étapes.
Sélection du producteur de bloc
Afin de devenir producteur de blocs, il faut engager des fonds, le stake. Le stake est verrouillé au sein d’un smart contract grâce à une transaction spéciale.
Contrairement au Proof-of-Work, le temps de production des blocs ne dépend pas de la difficulté du réseau. Il est défini par le protocole (par exemple, des slots de 12 secondes pour Ethereum).
Pour chaque intervalle, un producteur de bloc est choisi de manière aléatoire.
Validation des blocs de transactions
Les transactions des utilisateurs, regroupées en blocs, sont propagées de pair à pair entre les nœuds du réseau. Les validateurs doivent bien sûr vérifier si elles sont correctes avant de traiter un bloc. Si c’est le cas, ils vont aussi s’assurer que la signature du bloc est valide.
Vote et quorum
Ces conditions étant réunies, les validateurs votent pour inclure le bloc dans la chaîne. Le poids de leur vote est pondéré par leur stake (plus il est élevé, plus le vote a du poids). Chaque validateur diffuse alors une attestation correspondant au bloc à l’ensemble du réseau. Enfin, lorsqu’un quorum est atteint (généralement les deux tiers du stake cumulé par le réseau), le bloc peut être forgé.
Inscription du bloc, récompenses et punitions
Le bloc est alors ajouté à la blockchain, par le nœud qui a été aléatoirement sélectionné pour l’inclure. Ce dernier touche une légère récompense (dans la cryptomonnaie native du protocole).
En cas de mauvais comportements (non-respect des règles, attaque), les validateurs fautifs sont punis : ils perdent une partie de leur stake.
Finalisation des transactions
La notion de finalisation d'une transaction (ou d'un bloc) a trait à son irréversibilité.
On considère qu’une transaction est finalisée lorsqu’il faut brûler une quantité considérable de fonds pour la modifier. Cette quantité dépend du mécanisme de Proof-of-Stake utilisé, et est déterminante quant à la sécurité du réseau. Sur Ethereum, un bloc est finalisé lorsqu’il faut brûler un tiers du total des ethers mis en jeu par les validateurs.
Les avantages du Proof-of-Stake
Le proof-of-stake est un mécanisme offrant des avantages certains par rapport au Proof-of-Work :
- Une meilleure efficience énergétique : les nœuds validateurs n’ont pas à allouer une puissance de calcul considérable pour maintenir l’intégrité de la blockchain. Le PoS est donc moins énergivore que les PoW.
- Le matériel nécessaire (hardware) pour devenir validateur est abordable. La barrière à l’entrée provient du stake minimum exigé pour opérer un nœud.
- Une inflation réduite : les récompenses n’ont pas besoin d’être aussi élevées que dans le cas du proof-of-Work, puisque les nœuds validateurs consomment moins d'énergie, et donc d'argent.
- L'asymétrie des coûts attaque/défense : en termes de coûts, attaquer un réseau en Proof-of-Stake coûte beaucoup plus cher que de le défendre.
- Une meilleure décentralisation : les coûts minimaux pour opérer un nœud validateur étant moindres qu’avec le Proof-of-Work, il y a plus de nœuds pour sécuriser le réseau.
- Une meilleure résistance aux attaques de type 51% : en cas d’attaque réussie, le réseau peut choisir par consensus “social” la chaîne valide, sans avoir à modifier les règles du protocole de consensus via un hard fork.
Bien évidemment, ces avantages théoriques ont aussi leur contrepartie, et le Proof-of-Stake n’est pas exempt de vecteurs d’attaques.
Les inconvénients du Proof-of-Stake
En sécurité informatique, tout protocole de consensus doit subir l’épreuve du temps. Le Proof-of-Work est un mécanisme qui a été fortement éprouvé, et qui a su prouver sa résilience. En effet, Bitcoin a été maintes fois attaqué sans succès, et le consensus de Nakamoto a su montrer sa robustesse. Ce n’est pas encore le cas du Proof-of-Stake, qui dans la pratique reste très jeune.
Il existe plusieurs vecteurs d’attaques identifiés : le nothing-at-stake, les message delay attacks, l’attaque de l’écran de fumée (smoke bomb attack), les long range attacks... Il faut pouvoir pallier à ces attaques, ce qui rend l’implémentation du Proof-of-Stake très difficile.
Attaques et parades sur un réseau Proof-of-Stake
Le problème du nothing at stake
Il s’agit de l’attaque la plus classique. Elle peut se produire dans le cas d’une scission (fork) de la blockchain. Dans ce cas, les validateurs sont face à un choix. S’ils agissent de façon rationnelle, il vont choisir l’option présentant la meilleure espérance de gain.
Dans le cas du Proof-of-Work, c’est toujours la chaîne la plus longue qui sera considérée comme valide. Si les mineurs décident de miner les deux chaînes à la fois, il devront donc répartir leur puissance de calcul. Leur espérance de gain est ainsi moindre qu'en minant exclusivement la chaîne ayant le plus de chances de réussir. Ils ont donc intérêt à respecter les règles du jeu, et choisir le fork présentant le plus de preuve de travail cumulée.
Dans le cas du Proof-of-Stake, les producteurs de blocs ont intérêt à engager leur stake sur les deux chaînes. En effet, leur espérance de gain est théoriquement supérieure à celle qu'ils obtiendraient en ne forgeant que la chaîne valide.
Heureusement, il y a plusieurs moyens de contrer cette attaque. Le plus classique est appelé le slashing.
Le slashing
Le slashing consiste à pénaliser les producteurs de blocs qui engagent leur stake sur deux chaînes à la fois, ou sur la chaîne invalide. Il s’agit de la punition évoquée plus haut, qui peut s’avérer très coûteuse.
Les long range attacks
Ce type d'attaque (attaques à longue distance ou long range attacks) consiste à créer une chaîne concurrente, en partant du bloc de genèse, comportant des transactions frauduleuses. On parle aussi d'alternative history (historique alternatif) ou encore d'history revision (révision de l'historique).
Une fois le faux historique découlant du bloc de genèse forgé, l'attaquant peut utiliser plusieurs techniques pour convaincre certains validateurs d'adopter sa chaîne frauduleuse. Les nœuds du réseau qui peuvent être dupés sont ceux qui ont été hors-ligne durant une longue période, ou les nouveaux nœuds. En effet, ils devront télécharger la blockchain à partir du bloc de genèse, ainsi que toutes ses branches. S'ils ne sont pas capables de sélectionner correctement la bonne chaîne, et choisissent celle de l'attaquant, danger !
Dans le cas du Proof-of-Work, la règle de la chaîne la plus longue suffit pour contrer l'attaque. Avec le Proof-of-Stake, il faut ajouter des protections supplémentaires. La technique généralement utilisée repose sur l'horodatage des blocs et la création de checkpoints : des blocs à partir desquels il est impossible de réorganiser la chaîne.
Les attaques de finalité
Il s’agit d’empêcher un validateur malicieux de bloquer la finalisation d’un bloc (et donc de la blockchain). Ce cas peut se produire s’il possède plus du tiers du stake total, et vote contre les blocs. La parade se nomme inactivity leak.
Au-delà d’une certaine durée sans bloc finalisé sur le réseau (4*32 intervalles pour Ethereum), les validateurs ayant voté contre la majorité perdent la totalité de leur stake. La majorité regagne ainsi les ⅔ pour finaliser la blockchain.
Les différentes implémentations du proof of stake
Depuis quelques années, une grande variété de cryptomonnaies et de plateformes de smart contracts utilisent le Proof-of-Stake.
Ethereum (ETH)
Le réseau Ethereum est passé au Proof-of-Stake avec l'arrivée de la Beacon Chain. Son mécanisme de consensus, conceptualisé par Vitalik Buterin et Vlad Zamfir, s’appelle Gasper. Ce nom est la contraction de GHOST et Casper :
- Casper FFG (Casper the Friendly Finality Gadget) est l’algorithme déterminant la finalité des blocs de la chaîne. Il permet aux nœuds du réseau de s’assurer que les blocs font bien partie de la chaîne canonique, même en cas d’informations incomplètes.
- LMD-GHOST (Latest Message Driven Greediest Heaviest Observed SubTree) est le protocole déterminant les règles selon lesquelles les validateurs votent et choisissent, en cas de fork, la chaîne valide.
Gasper est une abstraction du mécanisme de Proof-of-Stake d’Ethereum. Il confère à sa blockchain sécurité et vivacité (liveness). La notion de liveness signifie que la blockchain est continuellement agrémentée de blocs finalisés.
Cardano (ADA)
Le mécanisme de Proof-of-Stake de Cardano s’appelle Ouroboros. Il s’agit d’un protocole synchrone, c'est-à-dire que les messages doivent transiter entre les pairs du réseau durant des intervalles temporels fixés. Il présente une meilleure tolérance aux fautes byzantines (50%) que Gasper. Contrairement à ce dernier, le mécanisme de sélection en cas de fork favorise la chaîne la plus longue, comme dans le cas de la preuve de travail.
Tendermint
Tendermint est une adaptation des mécanismes PBFT classiques au Proof-of-Stake. Il est notamment utilisé sur Cosmos. Il favorise la sécurité du réseau au détriment de sa vivacité. En effet, il requiert la présence en ligne de validateurs possédant au moins ⅔ du stake total du réseau. Tous les validateurs en ligne doivent voter à chaque ronde et il est donc impossible d’obtenir un consensus plus rapidement.
Hotstuff
Développé à l’origine pour Libra, la blockchain de Facebook, Hotstuff est très similaire à Casper FFG. Il permet cependant de mieux résister dans des conditions de latence élevée du réseau.
Pour aller plus loin
De nombreuses variantes du Proof-of-Stake existent, et ne sont pas présentées en détails dans cet article. Il est aussi possible d’implémenter des mécanismes de consensus hybrides entre Proof-of-Stake et Proof-of-WorK. Pour aller plus loin, le lecteur peut consulter les articles dédiés à la preuve d'enjeu écrits par Vitalik Buterin, et consulter en détails les whitepapers des plateformes PoS les plus connues :
- Proof of Stake FAQ - Vitalik Buterin
- What Proof of Stake Is And Why It Matters - Vitalik Buterin
- Why Proof of Stake - Vitalik Buterin
- Proof of Stake: How I Learned to Love Weak Subjectivity - Vitalik Buterin
- A Proof of Stake Design Philosophy - Vitalik Buterin
- Combining GHOST and Casper - Vitalik Buterin, Diego Hernandez, Thor Kamphefner, Khiem Pham, Zhi Qiao, Danny Ryan, Juhyeok Sin, Ying Wang, Yan X Zhang
- Ouroboros : A Provably Secure Proof-of-Stake Blockchain Protocol - Aggelos Kiayias, Alexander Russell, Bernardo David, Roman Oliynykov
- Rewriting History : A Brief Introduction to Long Range Attacks - Evangelos Deirmentzoglou