En résumé : les règles de consensus désignent le mécanisme régissant le bon fonctionnement d'une blockchain ; ce sont les règles à respecter par les utilisateurs (nœuds) afin de pouvoir prendre part au réseau. Ces règles permettent la sécurisation de la blockchain car elles définissent quel utilisateur pourra inscrire un nouveau bloc de données.
La sécurisation par Delegated Byzantine Fault Tolerance est une méthode de consensus. L'ensemble des utilisateurs élit des nœuds, appelés bookkeepers, dont la responsabilité est d'ajouter de nouveaux blocs au registre. Chacun de ces nœuds propose à tour de rôle un bloc et celui-ci est ajouté au registre lorsqu'au moins 66% des autres bookkeepers le valident.
Principe de fonctionnement
Les étapes permettant de trouver un consensus par Delegated Byzantine Fault Tolerance peuvent se résumer ainsi :
L'ensemble des utilisateurs de la blockchain vote pour désigner individuellement des nœuds dont la fonction est d'ajouter de nouveaux blocs au registre. Ces nœuds délégués sont appelés nœuds de consensus ou bookkeepers. Ce groupe de nœuds élus peut être mis à jour régulièrement. Le vote est pondéré par la quantité de crypto-monnaie détenue ; plus l'utilisateur possède de crypto-monnaie, plus son vote a du poids.
L'un des bookkeepers est aléatoirement sélectionné pour proposer un bloc. Ce nœud est appelé speaker. Les bookkeepers deviennent speaker à tour de rôle par tirage au sort.
Le speaker reçoit en temps réel les transactions et opérations réalisées par les utilisateurs sur le réseau. Ces opérations sont en attentes d'être inscrites sur le registre. Le speaker vérifie leurs signatures électroniques et leur validité puis les rassemble dans un bloc. Les autres bookkeepers peuvent aussi vérifier ces opérations.
Le speaker propose son bloc à tous les autres bookkeepers.
Les bookkeepers vérifient le bloc (transactions invalides, signatures électroniques incorrectes, omissions de transactions ou d'opérations, anomalies...).
Les bookkeepers votent chacun pour ou contre le bloc.
Le consensus est atteint lorsqu'au moins 66% des bookkeepers votent pour le bloc et celui-ci est alors ajouté à la blockchain. Sinon, un nouveau speaker est aléatoirement désigné et le processus recommence à l'étape 1.
Sécurisation du réseau
Tel que vu précédemment, le speaker transmet son bloc nouvellement créé aux bookkeepers pour validation. Chaque bookkeeper transmet par la suite le bloc qu'il a reçu aux autres bookkeepers du réseau. Ainsi, par comparaison du bloc reçu directement par le speaker et des blocs reçus par les autres bookkeepers (blocs qui sont censés être les mêmes), chacun des bookkeepers peut déterminer s'il y a une anomalie (par exemple due à un speaker malhonnête).
Voici deux cas permettant de comprendre visuellement le fonctionnement d'une sécurisation par Delegated Byzantine Fault Tolerance.
Cas où le speaker est malhonnête ou dysfonctionnel
Le speaker envoie un bloc A correct à Paul, et deux blocs B frauduleux à Alice et Bob. Le bloc frauduleux comporte, par exemple, des signatures électroniques incorrectes.
Alice et Bob détectent que le bloc B est corrompu et ne le valident pas : ils votent contre.
Paul reçoit le bloc A, détecte qu'il s'agit d'un bloc non corrompu, et le valide : il vote pour.
Ni le bloc A, ni le bloc B, ne reçoivent au moins 66% des trois votes. Aucun bloc n'est ajouté au registre et un nouveau speaker est aléatoirement désigné.
Pour que le bloc B corrompu soit ajouté au registre, il faudrait qu'au moins deux bookkeepers parmi Paul, Alice et Bob soient alliés à Luc, le speaker malhonnête.
Cas où un autre bookkeeper est malhonnête ou dysfonctionnel
Le speaker envoie un bloc A correct à Paul, Alice et Bob.
Paul et Alice détectent que le bloc A est valide : ils votent pour.
Bob reçoit le bloc A, et communique un bloc B alternatif ou invalide à Paul et Alice : il vote contre.
Le bloc A reçoit 66% des votes et il est donc ajouté au registre.
En comparant les bloc reçus, Alice et Paul peuvent conclure : soit Bob est malhonnête ou dysfonctionnel, soit le speaker a transmis un bloc B invalide à Bob.
La blockchain NEO
NEO est une blockchain conçue pour l'élaboration de smart contracts et la création d'actifs (assets) dérivés en sidechains. L'écosystème utilise une sécurisation par Delegated Byzantine Fault Tolerance. Son protocole prévoit 51 bookkeepers. Ces derniers peuvent se rémunérer en favorisant les transactions et opérations leur offrant une récompense (fees). En pratique, l'identité de ces nœuds est publiquement connue, et les utilisateurs sont incités à donner leur vote aux bookkeepers qui appliquent des frais de transactions les plus faibles.
L'effectif réduit de bookkeepers et une condition nécessaire à l'établissement rapide d'un consensus pour chaque bloc. En effet, le nombre de communications entre les noeuds pour un tel système informatique s'avère notablement élevé. Un trop grand nombre de bookkeepers pourrait créer des latences. Les quelques dizaines de noeuds élus sont ainsi désignés par le vote.
Avantages et utilisation
Etablissement rapide d'un consensus.
Réduction des frais de fonctionnement appliqués à chaque opération grâce à la mise en compétition des bookeepers (les utilisateurs votent pour les nœuds s'octroyant le moins de récompense).
Par opposition à une sécurisation par preuve de travail (Proof of Work) très consommatrice en énergie (tel que pour Bitcoin), la Delegated Byzantine Fault Tolerance ne nécessite que très peu de ressources matérielles. L'argument écologique peut être mis en avant.
Pour aller plus loin : le problème des généraux byzantins (Wikipédia).
Comments