J’ai fait un petit programme de simulation de métastase sybil pour m’en assurer : sybils.js.
Celui-ci tente de créer le maximum de sybils possibles étant donné :
- stepMax = 6
- sigQty = 5
- sigPeriod = 1 semaine
- durée de simulation, sigStock et stepMalveillants variables
Voici les résultats bruts :
stepMalveillants = 5, durée 1 an(s), sigStock = 70, 53 sybils crées
stepMalveillants = 5, durée 1 an(s), sigStock = 100, 53 sybils crées
stepMalveillants = 5, durée 1 an(s), sigStock = 150, 53 sybils crées
stepMalveillants = 5, durée 2 an(s), sigStock = 70, 70 sybils crées
stepMalveillants = 5, durée 2 an(s), sigStock = 100, 100 sybils crées
stepMalveillants = 5, durée 2 an(s), sigStock = 150, 106 sybils crées
stepMalveillants = 5, durée 3 an(s), sigStock = 70, 70 sybils crées
stepMalveillants = 5, durée 3 an(s), sigStock = 100, 100 sybils crées
stepMalveillants = 5, durée 3 an(s), sigStock = 150, 150 sybils crées
stepMalveillants = 4, durée 1 an(s), sigStock = 70, 328 sybils crées
stepMalveillants = 4, durée 1 an(s), sigStock = 100, 328 sybils crées
stepMalveillants = 4, durée 1 an(s), sigStock = 150, 328 sybils crées
stepMalveillants = 4, durée 2 an(s), sigStock = 70, 931 sybils crées
stepMalveillants = 4, durée 2 an(s), sigStock = 100, 1207 sybils crées
stepMalveillants = 4, durée 2 an(s), sigStock = 150, 1219 sybils crées
stepMalveillants = 4, durée 3 an(s), sigStock = 70, 1048 sybils crées
stepMalveillants = 4, durée 3 an(s), sigStock = 100, 1927 sybils crées
stepMalveillants = 4, durée 3 an(s), sigStock = 150, 2647 sybils crées
stepMalveillants = 3, durée 1 an(s), sigStock = 70, 1261 sybils crées
stepMalveillants = 3, durée 1 an(s), sigStock = 100, 1261 sybils crées
stepMalveillants = 3, durée 1 an(s), sigStock = 150, 1261 sybils crées
stepMalveillants = 3, durée 2 an(s), sigStock = 70, 7786 sybils crées
stepMalveillants = 3, durée 2 an(s), sigStock = 100, 8916 sybils crées
stepMalveillants = 3, durée 2 an(s), sigStock = 150, 8930 sybils crées
stepMalveillants = 3, durée 3 an(s), sigStock = 70, 13818 sybils crées
stepMalveillants = 3, durée 3 an(s), sigStock = 100, 24314 sybils crées
stepMalveillants = 3, durée 3 an(s), sigStock = 150, 28925 sybils crées
stepMalveillants = 2, durée 1 an(s), sigStock = 70, 3576 sybils crées
stepMalveillants = 2, durée 1 an(s), sigStock = 100, 3576 sybils crées
stepMalveillants = 2, durée 1 an(s), sigStock = 150, 3576 sybils crées
stepMalveillants = 2, durée 2 an(s), sigStock = 70, 45586 sybils crées
stepMalveillants = 2, durée 2 an(s), sigStock = 100, 48578 sybils crées
stepMalveillants = 2, durée 2 an(s), sigStock = 150, 48592 sybils crées
stepMalveillants = 2, durée 3 an(s), sigStock = 70, 140880 sybils crées
stepMalveillants = 2, durée 3 an(s), sigStock = 100, 214740 sybils crées
stepMalveillants = 2, durée 3 an(s), sigStock = 150, 233865 sybils crées
stepMalveillants = 1, durée 1 an(s), sigStock = 70, 8055 sybils crées
stepMalveillants = 1, durée 1 an(s), sigStock = 100, 8055 sybils crées
stepMalveillants = 1, durée 1 an(s), sigStock = 150, 8055 sybils crées
stepMalveillants = 1, durée 2 an(s), sigStock = 70, 204168 sybils crées
stepMalveillants = 1, durée 2 an(s), sigStock = 100, 210072 sybils crées
stepMalveillants = 1, durée 2 an(s), sigStock = 150, 210086 sybils crées
stepMalveillants = 1, durée 3 an(s), sigStock = 70, 1079712 sybils crées
JavaScript heap out of memory :)
Ce que je vois là, c’est qu’une attaque parfaite sur 3 années glissantes (le temps probable d’expiration d’une certification) est possible, mais ne dépasse pas les 2647 sybils tant que les attaquants ne disposent pas de plus de 2 steps pour créer les sybils.
2647 sybils ne me paraît pas insurmontable si l’on dispose de 10.000 utilisateurs et 3 années d’action, il est possible d’inciter les utilisateurs à protéger leur monnaie en installant un nœud notamment.
Par ailleurs, j’ai oublié qu’il existait aussi la possibilité aux utilisateurs d’agir directement sur la distance aux attaquants en augmentant celle-ci, afin de contenir l’attaque.
Je vais en parler sur l’autre sujet …