ZOOBC / SÉCURITÉ DE LA CHAÎNE
Sécurité de la chaîne
Ce qu'il en coûterait réellement de prendre le contrôle de cette chaîne. Le tirage est uniforme, l'influence est linéaire, et la seule cible qui vaille d'être attaquée est le registre : la file d'attente pour y entrer constitue donc la défense.
À chaque bloc, un nœud est tiré au sort pour le construire. Le tirage est une sélection aléatoire uniforme dans l'ensemble du registre, dérivée de la graine du bloc précédent. Pas le nœud le plus riche. Pas le nœud le plus exemplaire. Chaque nœud enregistré, à égalité, à chaque fois.
L'influence sur la chaîne correspond donc simplement à votre part du registre, et elle est linéaire. Il n'existe aucun seuil de 51 % où tout bascule. Détenez un dixième du registre et vous construisez un dixième des blocs ; c'est tout ce que vous obtenez.
Le registre devient ainsi la seule cible qui vaille d'être attaquée, et la file d'attente pour y entrer, la défense. Impossible d'acheter une place. Vous entrez un nœud à la fois, derrière tous ceux qui veulent aussi entrer, et les chiffres ci-dessous montrent ce que cela coûte.
01 / LE TIRAGE
Comment le constructeur de bloc est choisi
À partir de la graine du bloc précédent, chaque nœud calcule la même séquence infinie de tirages. Le tour 1 désigne un nœud ; s'il ne publie pas dans sa fenêtre de 15 secondes, le tour 2 en désigne un autre, et ainsi de suite. Le premier à publier construit le bloc.
La graine elle-même est sign(node_key, hash(previous seed)), vérifiée par chaque validateur. Les signatures Ed25519 sont déterministes : pour un constructeur donné, il existe donc exactement une graine valide, et un constructeur ne peut pas essayer des graines jusqu'à en trouver une qui l'avantage. La seule liberté dont dispose un attaquant est de publier ou de rester silencieux : un bit, une fois, par bloc pour lequel il est tiré au sort.
Le score de participation n'influe pas sur la sélection. On le suppose souvent, à tort. Le score ne décide que d'une chose : si vous restez ou non dans le registre. Il baisse quand vous manquez des tours, et à zéro vous êtes exclu et votre mise vous est restituée. Un score parfait ne vous donne pas plus de chances d'obtenir le prochain bloc qu'un nœud arrivé hier. La mise n'influe pas non plus sur la sélection ; elle ne fait que vous acheter une place dans la file d'attente pour entrer.
03 / DÉNI DE SERVICE
La seule véritable attaque : faire taire le tirage
Un nœud ne peut inclure des transactions que s'il est tiré au sort parmi les 10 premiers tours (max_priority_blocksmiths). Tiré plus tard, il peut toujours construire, mais son bloc doit être vide. C'est cette règle qui fait avancer la chaîne quand des nœuds sont hors ligne : il faut que chacun de ces premiers tirages soit absent pour qu'un bloc perde son contenu.
C'est aussi le point le plus sensible de la conception. Ces nœuds sont désignés 15 secondes à l'avance, dès l'arrivée du bloc précédent. Un attaquant capable de les mettre tous hors ligne dans ce délai force un bloc vide, censurant tout le monde au lieu de simplement entrer en concurrence. C'est un problème de déni de service, pas de consensus, et c'est pourquoi ce nombre est fixé à 10 plutôt qu'à un chiffre plus petit et plus net.
Nœuds à faire taire
10
désignés, par bloc
Préavis
15 s
avant l'ouverture du tour
Bloc vide par accident
avec 20 % des nœuds hors ligne
Augmenter ce nombre ne coûte presque rien (seulement quelques nœuds de plus construisant des blocs candidats en même temps), et chaque nœud ajouté est une machine de plus qu'un attaquant doit trouver et neutraliser dans les mêmes 15 secondes.
04 / UN PRIX EN ANNÉES
Le coût d'achat d'une part
- Formule
- délai = clamp(base ÷ taille du registre, min, max)
- Admissions
- une à la fois, dans l'ordre des mises
La part des places est un ratio de mise. La file est ordonnée selon le solde bloqué : « remporte 100 % des places » n'est donc pas une question de chance, c'est l'hypothèse que personne ne surenchérit sur lui. Chaque chiffre présenté ici correspond au meilleur scénario pour l'attaquant.
Dès qu'un opérateur honnête mise davantage par nœud, il passe devant. Ne remportez que la moitié des admissions et votre part du registre tend vers la moitié et s'y arrête : les nœuds honnêtes qui prennent l'autre moitié font croître le registre aussi vite que vous faites croître votre part. Un objectif supérieur à votre part des places n'est pas lent à atteindre, il est inaccessible, ce que le tableau ci-dessous affiche comme jamais.
Attente actuelle
par nœud admis
Nœuds pour ⅓
pour construire un tiers des blocs
Durée pour ⅓
de file d'attente continue
Nœuds pour ½
pour construire la moitié des blocs
Durée pour ½
de file d'attente continue
ZBC bloqués
minimum, à 100 ZBC/nœud
05 / CROISSANCE
Comment l'attente évolue à mesure que la chaîne grandit
Selon la taille de la chaîne
| Registre | Attente par nœud | Nœuds pour ⅓ | Heure | Nœuds pour ½ | Heure |
|---|
06 / LE SEUL COMPROMIS
Pourquoi le registre à la genèse est le chiffre qui compte
Les admissions sont séquentielles : le temps nécessaire pour doubler un registre est donc simplement registry size × wait per node. C'est une identité, pas un paramètre, ce qui signifie qu'un petit registre ne peut pas avoir à la fois une attente courte et une prise de contrôle lente. C'est le seul compromis de toute la conception qu'aucune formule ne peut faire disparaître.
| Registre au lancement | Attente de 1 semaine | Attente de 2 semaines | Pour doubler en 2 ans, l'attente doit être de |
|---|
Le levier, c'est donc le lancement, pas la courbe. Démarrez avec une douzaine de nœuds et chaque opérateur honnête attend des mois, car c'est ce qu'il faut pour que douze nœuds soient difficiles à doubler. Démarrez avec une centaine et une attente de deux semaines garantit déjà près de quatre ans, sans que personne ne soit laissé de côté. Un registre plus grand à la genèse vaut mieux que n'importe quel réglage du délai.
07 / QUATRE PROPRIÉTÉS
Pourquoi cela tient
Les admissions sont séquentielles. Le registre admet un nœud à la fois, à l'échelle de tout le réseau. Vouloir cent nœuds ne signifie pas attendre une fois, mais attendre cent fois, l'une après l'autre. Ce seul fait transforme une attaque financée en un projet de plusieurs années.
La part nécessaire grandit avec la chaîne. Un nœud sur dix, c'est un dixième de l'influence. Un sur mille, ce n'est rien. L'attente par nœud diminue à mesure que le registre grandit, mais jamais en dessous du minimum : le temps total augmente donc malgré tout.
La file d'attente a un prix. Les positions sont ordonnées selon le solde bloqué : un attaquant ne se contente donc pas d'attendre, il doit surenchérir sur chaque opérateur honnête qui veut aussi entrer, à chaque fois. Chaque place qu'il perd lui coûte l'attente et offre un nœud à un opérateur honnête.
L'attaquant finance la chaîne pendant qu'il essaie. Chaque nœud bloque des ZBC. Une attaque sur une décennie implique une position importante, illiquide et entièrement publique dans l'actif même qu'elle cherche à casser. Aucune pénalité n'est appliquée sur la mise : partez, ou soyez exclu pour avoir cessé de répondre, et la mise vous revient intégralement. La caution achète une place dans la file, pas un otage.
Et rien ne s'accumule. Chaque bloc est un tirage indépendant. Un nœud irréprochable depuis un an n'a pas plus de droit sur le prochain bloc qu'un nœud admis ce matin, et un attaquant qui a détenu les dix derniers tours n'a pas plus de chances de détenir le onzième. Il n'y a aucune position à consolider : c'est pourquoi la seule manière durable de gagner de l'influence ici est de représenter une part honnête plus importante du réseau.