Considération sur le rien: Un regard sur la vulnérabilité de rien en jeu pour les crypto-monnaies

presstab, Développeur principal, PIVX

Résumé — “Rien en jeu” est un argument souvent utilisé contre les systèmes à preuve d’enjeu. Bien que cet argument comporte des composants intéressants, il doit être vu comme ayant très peu d’incidence sur une crypto-monnaie à preuve d’enjeu. Une grande distribution de pouvoir de stockage ainsi qu’une grande distribution de noeuds fidèles garantiront l’échec d’une attaque dans le cadre du scénario “rien en jeu”.

1 INTRODUCTION

“Rien en jeu” est un argument souvent utilisé contre les systèmes à preuve d’enjeu. Bien que cet argument comporte des composants intéressants, il doit être vu comme ayant très peu d’incidence sur une crypto-monnaie à preuve d’enjeu. L’argument “rien en jeu” est expliqué dans le wiki d’Ethereum [1]:
Cependant, cet algorithme a une faille importante: il n’y a “rien en jeu’. Dans le cas d’un embranchement (fork), indépendamment de si cet embranchement est accidentel ou une tentative malicieuse de réécrire l’histoire et d’inverser une transaction, la stratégie optimale pour tous les mineurs est de continuer à miner sur les 2 chaînes, pour que le mineur ait sa récompense sans se préoccuper de quel embranchement gagnera. Donc, en supposant un large nombre de mineurs intéressés économiquement, un attaquant pourrait envoyer une transaction en échange d’un bien digital (habituellement une autre crypto-monnaie), recevoir le bien, ensuite commencer un embranchement de la blockchain sur le bloc précédent et envoyer l’argent à lui-même à la place, et avec seulement 1% de l’enjeu total l’embranchement de l’attaquant gagnerait parce que tous les autres minent sur les 2 embranchements.
L’essence de cet argument est que de très faibles ressources sont nécessaires pour prouver son enjeu, s’il y existait des embranchements en compétition, c’est dans l’intérêt du stockeur de stocker sur les 2 embranchements. C’est vrai qu’il ne faut que peu de ressources pour prouver l’enjeu et c’est en réalité une des motivations principales qui ont permises de concevoir la preuve d’enjeu[2]. Ce n’est pas vrai de dire que si des ressources minimales sont nécessaires pour créer un enjeu alors “rien n’est en jeu”.

2 CAS 1 EMBRANCHEMENT ACCIDENTEL AVEC LES MEILLEURS BLOCS EN COMPÉTITION

Considérez le cas d’un embranchement accidentel qui apparaît sur le réseau, les problèmes de propagation sur le réseau font qu’un groupe de paires, le groupe 1 (PG1) voit un bloc avant que le groupe de paires 2 (PG2) ne voit le bloc. PG2 reçoit donc un bloc différent et l’accepte comme le prochain bloc, ce qui fait que la blockchain a une incompatibilité d’au moins 1 bloc au dessus de la chaîne (aussi connu comme le meilleur bloc).
L’argument du “rien en jeu” voudrait ici que les intérêts de PG2 soient de prouver l’enjeu des chaînes de PG2 et PG1. PG2 voudra empocher leur enjeu de toute les manières possibles et si la chaîne PG2 serait invalidée après coup, alors ils auraient gaspillé leur temps sur PG2 au lieu de travailler sur PG1.
Le problème avec cette ligne de pensée est que le scénario de ce cas n°1 est qu’il ne vivra qu’un très court instant et est résolu automatiquement par le logiciel de la monnaie en quelques minutes.Le logiciel de chaque monnaie est un peu différent, mais une monnaie typique aura une procédure complète pour établir quelle chaine est la meilleure et rendre orphelins les blocs invalides. Donc du moment que PG1 et PG2 ont un noeud qui communique avec l’autre groupe, les blocs se propageront dans les 2 groupes et la chaine qui a le plus de travail sera sélectionnée comme la chaine principale, la chaine alternative sera orpheline.
La plupart des pièces à preuve d’enjeu utilisent le travail pour déterminer quelle chaine est valide, typiquement c’est une combinaison du niveau de difficulté et le nombre de blocs dans la chaine. Si un prouveur de PG2 décide de passer des heures, si pas des jours pour créer un code altéré pour pouvoir prouver sur les 2 chaînes en parallèle, ce serait par définition une énorme gachi de ressources pour ce prouveur parce que ça ne prendrait que quelques secondes pour le logiciel original de déterminer quelle chaine est la chaine principale. Si le prouveur est connecté sur les 2 chaines alors ce serait une perte pour lui de prouver sur la mauvaise chaine (dans ce cas celle de PG2) au lieu de se concentrer sur le chaine principale.

3 CAS N°2 UN ACTEUR MALICIEUX ENVOIE DES PIÈCES À UN TIERCE ET ENSUITE INVERSE LA CHAINE
Un acteur malicieux appelé hacker1337 envoie 1000 FunStake Coins (FSC) dans une transaction (tx1) à une bource d’échange ezex.  Une fois que ezex a confirmé que le compte de hacker1337 contient 1000 pièces (typiquement cela requiert une certaine quantité de blocs qui doivent être ajoutés à la blockchain après que la transaction ait été ajoutée), hacker1337 utilise sa grande quantité de FSC et donc sa puissance de staking, pour créer un embranchement alternatif qui démarre avant que tx1 soit ajouté à la chaine. Hacker1337 ajoute une transaction différente (tx2) à l’embranchement qui envoie les pièces à lui même plutôt qu’à ezex. Si Hacker1337 réussi ce que l’embranchement de la chaine soit considéré comme la chaine principale, alors ezex a donné à hacker1337 des pièces qu’il ne possède pas.
Pour que cette attaque soit réussie, les conditions suivantes doivent être remplies:

  1. hacker1337 possède une grande quantité de FSC
  2. hacker1337 a l’une des plus grandes capacités de staking parmi les possesseurs de FSC
  3. hacker1337 va gagner plus en lançant cette attaque que la baisse de valeur qui sera probablement provoquée lorsqu’il sera connu que FSC est vulnérable aux attaques.

La condition 1 est plutôt triviale. Le staking n’est possible que si on possède des FSC.Pour être capable de staker successivement d’une manière qui permettrait de créer un embranchement comme mentionnée ci-dessus, hacker1337 doit avoir un grand nombre de FSC.

La condition 2 est peut être la plus importante qui doit être remplie. Hacker1337 ne doit pas seulement avoir un grand nombre de FSC, mais il doit aussi avoir une des plus grande capacité de staking parmi tous les détenteurs de FSC. Comme mentionné dans le cas n°1, la chaine principale est déterminée par la chaine qui a le plus de travail. hacker1337 doit avoir tellement de pouvoir de staking qu’il pourrait revenir dans le temps et staker beaucoup plus vite que ce qui s’est passé sur la chaine valide (Plus les blocs sont rapides, plus le travail nécessaire sera important). hacker1337 doit donc avoir la capacité de dépasser le reste des possesseurs de FSC pendant une période de temps qui permettra à l’embranchement de surpasser la chaine principale en quantité de travail.
La condition 3 est également très importante à prendre en compte. Si hacker1337 trompe ezex et garde les FSC après, alors hacker1337 a en fait vendu ses parts de FSC au taux du marché, et ensuite il lui restera des parts de FSC qui ont vu leur valeur diminuer par rapport à la réaction du marché qui aura la perception que FSC est vulnérable aux attaques de doubles dépenses. Cela résultera sans doute également où l’adresse de hacker1337 sera blacklisté dans le future ce qu’il l’empêchera de récupérer le reste de la valeur des fonds de FSC détenu par hacker1337.
Pour que l’attaque fonctionne vraiment, hacker1337 devrait envoyer tx2 à une autre bourse d’échange pour créer une situation dans laquelle hacker1337 a en fait reçu deux fois la valeur de ses avoirs en FSC. En réalité, pourquoi ne pas faire cette attaque de manière récursive sur tous les marchands, bourses d’échanges et membres de la communauté ? Cela créerait un résultat qui génère des milliers d’embranchements et de double dépenses et une grande quantité de revenus frauduleux pour hacker1337.
Pour le moment, le cas n°2 n’a absolument rien à faire avec le problème du “rien en jeu”. En fait, il n’y a rien à faire avec la preuve d’enjeu du tout, et c’est en fait un problème qui affecte tous les types de systèmes de preuve. Par exemple, dans le scénario du cas n°2, remplaçons les hypothèses que FSC est une monnaie à preuve d’enjeu et supposons qu’elle est à preuve de travail. Il y a 3 conditions qui doivent être remplies pour l’attaque sur la preuve d’enjeu, cependant pour que la même attaque réussisse sur une preuve de travail, il ne faut que 2 conditions. La seule chose que hacker1337 doit posséder c’est la plus grosse puissance de minage parmi les mineurs de FSC.
Même si hacker1337 était capable de remplir la condition 2 (pour la preuve d’enjeu ou la preuve de travail) il serait quand même très peu probable que de simplement avoir la plus grande capacité dans le système donné ait pour résultats de pouvoir créer une chaine qui deviendrait la principale. Il faudrait très certainement qu’une de ces sous-conditions soit également rempli:
hacker1337 arrive avec succès à empêcher d’autres participants majeurs du système de preuve de FSC de participer dans le chaine de preuve durant la période de l’attaque.
Il est tellement peu probable que hacker1337 soit capable de créer une chaine qui pourrait rattraper et dépasser la chaine principale que la condition 2 devrait être remplie en conjonction avec le fait d’empêcher les noeuds honnêtes de continuer sur la chaine principale et de la rendre hors d’atteinte. Donc, une attaque par déni de service doit également être lancée pour donner la possibilité à hacker1337 de construire une chaine qui dépassera la chaine principale. C’est ce point précis du cas n°2 qui fait que “rien en jeu” pourrait faire une différence nette entre preuve de travail et preuve d’enjeu.

2. Puisque FSC est une pièce à preuve d’enjeu, tous les participants majeurs ont modifié le logiciel de leur portefeuille pour miner sur tous les embranchements qui apparaissent.
Si la sous-condition 2 est remplie, alors la sous-condition 1 n’a pas besoin d’être remplie. Dans ce cas, oui ce serait très problèmatique. La chaine alternative de hacker1337 aurait immédiatement le support de tous les noeuds parce que ces noeuds supportent tous les embranchements, parce que comme l’embranchement se crée, ils n’ont rien en jeu (excepté l’entièreté de leurs avoirs évidemment mais pour une raison inconnue c’est considéré comme “rien”). Puisque la chaine alternative aurait le support de la capacité de staking robuste de hacker1337 et le support de tous les noeuds qui stake sur les 2 chaines, il est possible que la chaine que hacker1337 a créée devienne la chaine principale.
Pour que la sous-condition 2 soit remplie, il est nécessaire qu’il y ait un bénéfice pour la majorité des détenteurs de FSC d’automatiquement publier leurs stakes pour chaque embranchement qui arrive. Le cas n°1 montre qu’il n’y a aucune raison pour un noeud honnête de staker sur d’autres embranchements qui ont moins de travail. Puisqu’il n’y a aucune raison pour que les noeuds honnêtes stake sur tous les embranchements, l’argument du “rien en jeu” pour le cas n°2 se termine ici.
Quelqu’un pourrait contester que l’argument se termine ici, qu’est ce qui se passerait si quelques contributeurs importants avaient un logiciel modifié pour staker sur chaque fork ? Dans ce cas, l’argument n’est pas spécifique à la preuve d’enjeu, c’est le mêm argument fondamental que pour chaque système de preuve qu’un acteur malicieux (ou groupe dans ce cas) a assez de puissance pour écrire une chaine différente qui a plus de travail. Et encore une fois, pour cet argument, seule la condition 2 doit être remplie pour la preuve de travail, mais la preuve d’enjeu possède 2 conditions supplémentaires qui doivent être remplies.
Avec tout système de preuve, le cas n°2 peut être complètement évité en ayant des moyens diversifiés de créer la preuve. Pour la preuve de travail, il est conseillé d’avoir des groupes de minage différents qui se vérifient les uns les autres et rendent le cas n°2 infaisable.
Pour la preuve d’enjeu, il est préférable pour les pièces et donc la puissance de staking d’être distribuée parmi plusieurs noeuds qui se vérifient mutuellement et rendent le cas n°2 improbable.
Conclusion

Pour les deux cas d’embranchement avec des noeuds honnêtes et cas d’embranchements avec des acteurs malicieux, il y a en fait toujours “quelque chose en jeu”. Pour l’argument spécifique développé contre la preuve d’enjeu, il peut être dit que la preuve d’enjeu a en fait des incitations plus robustes pour les possesseurs de la monnaie de rester sur la chaine principale que le système de preuve de travail. Qu’est ce qui a le plus de valeur, les avoirs totaux d’une personne pour les mineurs de preuve d’enjeu ou quelques minutes d’électricité pour les mineurs de preuve de travail ?

Références
[1] Etherium Wiki, https://github.com/ethereum/wiki/wiki/Problems
[2] S. King, S. Nadal, “PPCoin: Peer­toPeer Crypto­Currency with Proof­of­Stake,” 2012. https://peercoin.net/assets/paper/peer­ coin­paper.pdf