Leçons 1/4 · 20 min
Panne franche ou faute byzantine : ce qu'on observe
La question de départ
Sept caissiers, dans sept villes, tiennent chacun une copie du même registre. Un matin, l'un d'eux ne répond plus. Un autre répond, mais dit « oui » à la caissière de Douala et « non » à celle de Garoua pour la même question. Ces deux incidents se ressemblent-ils ? Les traiter de la même façon serait une erreur grave.
Les types de fautes
| Type | Comportement | Ce que l'on observe |
|---|---|---|
| Panne franche (crash) | le nœud s'arrête et ne fait plus rien | silence ; jamais de message faux |
| Omission | le nœud perd ou ignore certains messages | silences intermittents |
| Faute byzantine | comportement arbitraire : mensonge, silence, messages différents selon le destinataire, collusion avec d'autres nœuds fautifs | des messages qui paraissent corrects mais se contredisent |
Le nom vient du « problème des généraux byzantins » (Lamport, Shostak et Pease, 1982) : des généraux doivent décider ensemble d'attaquer ou non, alors que certains sont traîtres et mentent.
Une faute byzantine n'est pas forcément malveillante : un bit corrompu en mémoire, un bogue logiciel ou une configuration erronée produisent aussi des comportements arbitraires. Mais en sécurité, on suppose le pire : un adversaire qui connaît le protocole.
Pourquoi la seconde coûte plus cher
Face à une panne franche, un nœud fiable peut raisonner : « ce qu'il m'a dit était vrai ». Il peut seulement manquer d'informations. Face à un byzantin, rien de ce qu'il dit n'est digne de confiance, et il peut dire des choses différentes à chacun (on appelle cela de l'équivocation). Il faut donc recouper les témoignages, et il en faut davantage.
Exemple détaillé : trois nœuds, sans signatures
Trois nœuds A, B, C qui s'échangent des messages oraux (sans signatures : chacun relaie ce qu'il a entendu, sans preuve). A veut savoir si C a voté « oui » ou « non ».
- Si C est en panne franche : A n'entend rien de C. A sait qu'il manque une voix.
- Si C est byzantin : C dit « oui » à A, et « non » à B. A interroge B : B répond « C m'a dit non ». A voit deux versions, mais il ne peut pas savoir si c'est C qui ment ou B : de son point de vue, la contradiction est symétrique. Sans signatures, avec trois nœuds et un fautif, impossible de trancher. Avec des signatures, le diagnostic devient possible (voir ci-dessous), mais la leçon 3 montre qu'un protocole à quorum a quand même besoin d'au moins 4 nœuds.
Rôle des signatures (atelier 105)
Si les messages sont signés, B ne peut pas mentir sur ce que C a dit : il ne peut présenter que des messages réellement signés par C. Mais cela n'empêche pas C de signer « oui » pour A et « non » pour B. Une signature prouve qui a dit quoi, pas que ce qui est dit est vrai ni unique. En revanche, deux messages contradictoires signés par C constituent une preuve d'équivocation : tout le monde peut vérifier que C s'est contredit. C'est la base de la punition automatique (slashing) dans certains protocoles. Avec des signatures, A peut donc constater la contradiction de C, mais seulement après coup : la décision a pu être prise entre-temps.
Tolérer des pannes franches : 2f + 1
Si l'on suppose seulement des pannes franches, une majorité suffit : avec n = 2f + 1 nœuds, f peuvent tomber et les f + 1 restants forment encore une majorité. Trois nœuds tolèrent 1 panne ; cinq en tolèrent 2. C'est le modèle des protocoles de réplication comme Paxos ou Raft. Il suppose qu'aucun nœud ne ment.
À vous
Dans quorum-sim, réglez 7 validateurs et passez-en un en « hors ligne », puis un autre en « byzantin ». Comparez le comportement du quorum : le nœud hors ligne retire une voix ; le byzantin peut en fournir une fausse ou contradictoire.
Ce que cela ne garantit pas
Classer un incident comme panne franche est une hypothèse : un nœud silencieux peut être byzantin (il se tait volontairement), et un nœud lent peut passer pour mort (leçon 1 de l'atelier 107).
En bref
- Panne franche : le nœud se tait, ne ment pas. Byzantin : comportement arbitraire, y compris dire des choses différentes à chacun.
- Les signatures attribuent les messages mais n'empêchent pas l'équivocation ; elles la rendent prouvable.
- Pannes franches seules : 2f + 1 nœuds. Fautes byzantines : plus, comme on va le voir.
Outil interactif
Simulateur de quorum BFT
Cliquez sur un validateur pour changer son état : honnête, hors ligne, puis byzantin (malveillant ou défaillant de façon arbitraire).
n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5
7 honnêtes, 0 hors ligne, 0 byzantin.
✓ Décision possible : 7 validateurs honnêtes et en ligne ≥ quorum 5. Le réseau peut réunir un quorum et finaliser des blocs.
✓ Sûreté garantie par le modèle : 0 byzantin ≤ f = 2. Deux quorums se recoupent toujours en au moins un validateur honnête, donc aucune décision contradictoire.
Modèle classique des protocoles BFT : n ≥ 3f + 1 validateurs tolèrent jusqu'à f fautifs (hors ligne ou byzantins). Un quorum est de 2f + 1 votes. Perdre la vivacité = le réseau ne progresse plus, mais rien de faux n'est décidé. Perdre la sûreté = des décisions contradictoires deviennent possibles, ce qui est plus grave. La vivacité suppose en plus un réseau qui finit par délivrer les messages. Ce n'est qu'un modèle : les protocoles réels ont d'autres hypothèses et d'autres seuils.
