La traduction de l'article a été préparée spécialement pour les étudiants du cours
«High Load Architect» , qui commence ce mois-ci.

La blockchain est un systÚme décentralisé composé de différentes entités qui agissent en fonction de leurs incitations et des informations dont elles disposent.
Chaque fois qu'une nouvelle transaction est diffusĂ©e sur le rĂ©seau, les nĆuds peuvent inclure cette transaction dans une copie de leur registre ou l'ignorer. Lorsque la plupart des participants au rĂ©seau dĂ©cident d'accepter un certain Ă©tat, un consensus est atteint.
Un problĂšme fondamental dans l'
informatique distribuée et
les systÚmes multi-agents est d'obtenir la fiabilité globale du systÚme en présence d'un certain nombre de processus inopérants.
Souvent, cela nécessite que les processus coordonnent entre eux une certaine valeur qui sera nécessaire lors du calcul.Ces processus sont décrits comme un consensus.
- Que se passe-t-il lorsqu'un participant décide de ne pas suivre les rÚgles et d'intervenir dans l'état de son grand livre?
- Que se passe-t-il quand il y a beaucoup de tels participants dans le réseau, mais pas la majorité?
Pour qu'un protocole consensuel soit sĂ©curisĂ©, il doit ĂȘtre tolĂ©rant aux pannes.
Pour commencer, nous parlerons briÚvement du problÚme insoluble de deux généraux. Ensuite, examinez le problÚme des généraux byzantins et discutez de la tolérance aux pannes byzantine dans les systÚmes distribués et décentralisés. Et à la toute fin, parlons de la façon dont tout cela se rapporte à la technologie de la blockchain.
La tùche de deux généraux
Cette
tĂąche, publiĂ©e pour la premiĂšre fois en 1975 et nommĂ©e en 1978, dĂ©crit un scĂ©nario dans lequel deux gĂ©nĂ©raux attaquent un ennemi commun. Le premier gĂ©nĂ©ral est considĂ©rĂ© comme le chef, et le second est le suiveur. L'armĂ©e de chaque gĂ©nĂ©ral ne suffit pas Ă elle seule pour vaincre l'armĂ©e ennemie, ils doivent donc coopĂ©rer et attaquer en mĂȘme temps. Ce scĂ©nario semble simple, mais il y a une mise en garde:
Pour quâils communiquent et sâaccordent sur une heure, le premier gĂ©nĂ©ral doit envoyer un messager Ă travers le camp ennemi, il doit dĂ©livrer un message avec lâheure du dĂ©but de lâattaque au deuxiĂšme gĂ©nĂ©ral. Cependant, il est probable que le messager sera capturĂ© par des adversaires et que le message ne soit pas dĂ©livrĂ©. Cela conduira au fait que l'armĂ©e du premier gĂ©nĂ©ral va attaquer, et la seconde restera en place.
MĂȘme si le premier message est dĂ©livrĂ©, le deuxiĂšme gĂ©nĂ©ral doit confirmer (ACK (accusĂ© de rĂ©ception), noter la similitude avec la nĂ©gociation Ă trois voies dans
TCP ) qu'il a reçu le message, il renvoie donc le messager, reproduisant ainsi le scĂ©nario prĂ©cĂ©dent oĂč le messager peut ĂȘtre capturĂ© . Cela se traduit par des accusĂ©s de rĂ©ception sans fin, et Ă cause de cela, les gĂ©nĂ©raux ne peuvent pas parvenir Ă un accord.
Il n'y a aucun moyen de garantir la deuxiÚme condition, c'est-à -dire que chaque général est pleinement convaincu que l'autre est d'accord avec le plan d'attaque. Les deux généraux ignorent toujours si le messager a atteint son camarade.
Il a été prouvé que la tùche de deux généraux est insoluble.
La tùche des généraux byzantins
DĂ©crite en 1982 par Lamport, Shostak et Piz, la version de ce problĂšme s'est avĂ©rĂ©e ĂȘtre un point culminant. Elle dĂ©crit le mĂȘme scĂ©nario, oĂč au lieu de deux gĂ©nĂ©raux, plus de gĂ©nĂ©raux devraient s'entendre sur le moment de l'attaque. Une complication supplĂ©mentaire est qu'un ou plusieurs gĂ©nĂ©raux peuvent ĂȘtre des traĂźtres, c'est-Ă -dire qu'ils peuvent mentir sur leurs intentions (par exemple, le gĂ©nĂ©ral dit qu'il accepte d'attaquer Ă 09h00, mais ne le fait pas).
Le paradigme du leader-suiveur dĂ©crit dans la tĂąche de deux gĂ©nĂ©raux se transforme en une installation de commandant subordonnĂ©. Pour parvenir Ă un consensus ici, le commandant et chaque subordonnĂ© doivent s'entendre sur la mĂȘme solution (attaque ou retraite).

Traduction d'images:
La tùche des généraux byzantins. Le commandant général doit envoyer un ordre à ses n-1 subordonnés, tel que:
- Tous les généraux subalternes fidÚles obéissent à un seul commandement.
- Si le commandant général est loyal, alors tous ses fidÚles subordonnés obéissent à ses ordres.
Outre le deuxiĂšme point, un fait intĂ©ressant doit ĂȘtre soulignĂ©: si le commandant est un traĂźtre, il faut quand mĂȘme parvenir Ă un consensus. En consĂ©quence, tous les lieutenants ont un vote majoritaire.
L'algorithme de consensus dans ce cas est basé sur la signification de la plupart des décisions que les subordonnés voient.
ThéorÚme: pour tout
m , l'algorithme
OM (m) atteint un consensus avec plus de
3 m de généraux et un maximum de
m traĂźtres.
Cela signifie que l'algorithme peut atteindre un consensus alors que 2/3 des participants sont honnĂȘtes. Si les traĂźtres sont supĂ©rieurs Ă 1/3, le consensus n'est pas atteint, les armĂ©es ne peuvent pas coordonner leurs attaques et l'ennemi gagne.
Algorithme OM (0)
- Le commandant envoie sa valeur à chacun de ses subordonnés.
- Chaque subordonné utilise la valeur qu'il reçoit du commandant ou utilise la valeur DELAY s'il ne reçoit aucune valeur.
Algorithme OM (m), m> 0
- Le commandant envoie avec son importance à chacun des subordonnés.
- Pour chaque i, soit vi la valeur que le iÚme subordonné reçoit du commandant, ou la valeur RESET sera utilisée si le subordonné ne reçoit aucune valeur. Le i-Úme subordonné agit en tant que commandant dans l'algorithme OM (m-1) et envoie une valeur à chacun des n-2 subordonnés restants.
- Pour chaque i, Ă condition que jïči, soit vj la valeur que le i-Ăšme subordonnĂ© a reçue du j-th subordonnĂ© Ă l'Ă©tape (2) (en utilisant l'algorithme OM (m-1)), ou utilise la valeur DELAY si n'a pas de sens. Le iĂšme esclave utilise la valeur majoritaire (v1, ..., vn-1).
Lorsque m = 0, il n'y a pas de traßtres, chaque subordonné suit l'ordre. Pour m> 0, chaque choix final d'un subordonné provient de la partie prédominante de l'élection de tous les subordonnés.Ce sera plus clair si vous regardez la situation du point de vue du second subordonné - que C soit le commandant, et L {i} est le i-Úme subordonné.
OM (1): le subordonnĂ© 3 est un traĂźtre. La situation du point de vue du second subordonnĂ©.Ătapes:
- Le commandant envoie v à tous ses subordonnés.
- L1 envoie Ă L2 la valeur de v ou L3 envoie Ă L2 la valeur de x.
- L2 â majoritĂ© (v, v, x) == v
La décision finale est prise à la majorité des voix de L1, L2 et L3 et, par conséquent, un consensus est atteint.
Il est important de se rappeler que l'objectif est que la plupart des subordonnĂ©s choisissent la mĂȘme solution, plutĂŽt qu'une solution spĂ©cifique.
Regardons le cas oĂč le commandant est un traĂźtre.
OM (1): Le commandant est un traĂźtre.Ătapes:
- Le commandant envoie Ă L1, L2, L3 les valeurs de x, y, z, respectivement;
- L1 envoie la valeur de x aux esclaves L2, L3 | L2 envoie Ă L1, L3 la valeur de y | L3 envoie Ă L1, L2 la valeur de z;
- L1 â majoritĂ© (x, y, z) | L2 â plus (x, y, z) | L3 â majoritĂ© (x, y, z)
Ils ont tous la mĂȘme valeur, donc un consensus est atteint. Notez que mĂȘme si les valeurs de x, y, z sont toutes diffĂ©rentes, la valeur
majoritaire (x, y, z) est la mĂȘme pour les trois subordonnĂ©s. Si x, y, z sont des ordres complĂštement diffĂ©rents, nous pouvons supposer qu'ils agiront selon le plan par dĂ©faut - RESET.
Pour regarder une approche pratique d'un exemple plus complexe avec 7 généraux et 3 traßtres, je vous suggÚre de lire cet
article .
Tolérance aux pannes byzantine
La tolérance aux pannes byzantine est une caractéristique qui définit un systÚme qui autorise une classe de défaillances qui appartient à la tùche des généraux byzantins. L'échec byzantin est la classe de
types d'Ă©chec la plus complexe. Il n'implique aucune restriction et ne fait aucune hypothĂšse sur le type de comportement qu'un nĆud peut avoir (par exemple, un nĆud peut gĂ©nĂ©rer des donnĂ©es arbitraires, se prĂ©sentant comme un participant honnĂȘte).
Les erreurs byzantines sont les plus difficiles Ă corriger. La tolĂ©rance aux pannes byzantine Ă©tait nĂ©cessaire dans les systĂšmes de moteurs d'avion, dans les centrales nuclĂ©aires et dans pratiquement tous les systĂšmes dont les actions dĂ©pendent des rĂ©sultats d'un grand nombre de capteurs. MĂȘme SpaceX le considĂšre comme une
exigence potentielle pour ses systĂšmes.
L'algorithme mentionné dans la section précédente correspond à la tolérance aux pannes byzantine jusqu'à ce que le nombre de traßtres dépasse un tiers de tous les généraux. Il existe d'autres options pour faciliter cette tùche, notamment l'utilisation de signatures numériques ou l'introduction de restrictions sur la communication entre pairs.
Comment tout cela est-il lié à la blockchain?
La blockchain sont des registres décentralisés qui, par définition, ne sont pas contrÎlés par l'autorité centrale. En raison des valeurs qui y sont stockées, les attaquants ont une bonne incitation économique à tenter de commettre une erreur. Néanmoins, la tolérance aux pannes byzantine et, par conséquent, la solution du problÚme général byzantin pour la blockchain sont simplement nécessaires.
En l'absence de tolérance de panne byzantine, un pair peut transmettre et publier de fausses transactions, annulant complÚtement la fiabilité de la blockchain. Pour aggraver les choses, aucune autorité centrale ne peut assumer la responsabilité et réparer les dommages.
Lorsque le
Bitcoin a été inventé, une avancée majeure a été l'utilisation de preuves
de la solution probabiliste du problÚme des généraux byzantins. Il a été décrit en détail par Satoshi Nakamoto dans ce
courriel .
Conclusion
Dans cet article, nous avons examiné quelques concepts de base du consensus dans les systÚmes distribués.