Actualités du développement Safe 🇫🇷 12 mai 2022

Ceci est une traduction automatique. L’original en anglais est ici: Update 12 May 2022

Un grand merci à @stout77 pour une autre image de couverture :bowing_man:


Mise à jour du 12 mai 2022

L’une des fonctionnalités les plus simples mais aussi les plus fondamentales et les plus importantes de la conception d’un réseau sûr est « Node Age ». Essentiellement, Node Age remplace des systèmes comme Proof Of Work en récompensant les bons comportements, en punissant les mauvais et en rendant la vie très difficile à un attaquant Sybil. Il fournit une mesure importante de la qualité et de la fiabilité continue de chaque nœud, et c’est notre sujet vedette cette fois-ci.

Progrès général

À la suite de notre travail révolutionnaire avec les DBC, dans lequel @davidrusu et d’autres ont pris le concept de «l’argent numérique» dans une toute nouvelle direction, le rendant tolérant aux pannes byzantines et donc adapté à un réseau décentralisé, nous sommes heureux d’annoncer que David Rusu dirigera une nouvelle division Safe Labs. Ce sera notre parapluie R&D pour la cryptographie de pointe, la mise en réseau et plus encore. La recherche sera principalement axée sur la sécurité plutôt que sur le ciel bleu, mais nous voulons attirer l’expertise de partout où elle peut exister d’une manière plus formelle et structurée.

@Anselme a finalisé un PR pour vérifier le SAP lors du transfert et a commencé à examiner les comportements byzantins lors du transfert (le processus de redistribution des données lors d’un événement de désabonnement).

David Rusu a fait une présentation sur les types de données répliquées sans conflit (CRDT) lors d’une rencontre CompSci à Toronto, mentionnant ce qu’il a fait chez MaidSafe (naturellement !). Beaucoup d’intérêt pour le sujet et beaucoup de contacts à établir. Il repart pour un autre sur les arbres CRDT.

@Bochaco a terminé un PR pour vérifier l’autorisation côté client lors de l’exécution d’opérations sur les registres (données modifiables) et travaille également sur l’API client du livre dépensé.

Et @Chriso a examiné les échecs de testnet causés par la suppression temporaire de fonctionnalités telles que « max-capacity ».

En testant en interne, Metricbeat nous a montré que certains nœuds progressaient jusqu’à une utilisation * très élevée * de la mémoire sur une journée ou deux. En plongeant, nous nous sommes rendu compte qu’il semblait y avoir une impasse assez importante (centrée sur le nettoyage des connexions). Nous avons quelques options de correctifs ici et nous cherchons et testons donc simplement ce qui a le plus de sens là-bas.

Pendant ce temps, @Qi_ma a donné une conférence à l’équipe sur « Node Age ».

Âge du nœud

Chaque nœud du réseau a une adresse qui est décidée par son ID, qui est en fait une clé générée lorsqu’il rejoint le réseau. Cet « ID de nœud » est essentiellement un très grand nombre aléatoire. Ses premiers bits (par exemple, 0101101 …) déterminent dans quelle section le nœud se trouvera et donc quelles données il s’occupera, tandis que les huit derniers bits (par exemple, 00000101) signifient son Node Age - dans ce cas 5.

Lorsqu’un nœud est accepté pour la première fois dans le réseau, il reçoit un Node Age de 5, donc son ID se termine …00000101 (le nœud qui se joint doit continuer à générer des clés ED25519 jusqu’à ce qu’il en obtienne une avec la bonne fin et le bon préfixe, généralement un processus inférieur à la seconde).

Plus le nœud reste un participant actif sur le réseau, plus l’« âge du nœud » augmentera, jusqu’à un maximum hautement improbable de 255. Mais il y a quelques pièges : (1) son « âge du nœud » ne fera que croître s’il s’avère fiable pour stocker des blocs de données et les abandonner à la demande sur une certaine période de temps. (2) Chaque fois que son Node Age est incrémenté, il doit passer à une autre section.

Mais Safe Network n’a pas de notion de temps, alors comment pouvons-nous savoir depuis combien de temps le nœud se comporte ? La réponse est que nous utilisons les événements de désabonnement (changements d’adhésion à la section) comme approximation du temps.

ID de désabonnement - Le décideur

Chaque section contiendra 7 aînés (nœuds de prise de décision) et 60+ adultes (nœuds de stockage). Chaque fois qu’un nœud se déconnecte ou rejoint la section, ce qui arrive fréquemment chez les adultes, les anciens votent sur ce qui s’est passé. Chaque événement de désabonnement a un ID de 256 bits, qui est la signature BLS combinée de 5 des 7 anciens. Cet « identifiant de désabonnement » est également un nombre aléatoire et ne peut pas être prédit à l’avance.

Si le nouveau nœud s’avère dysfonctionnel dans les premiers événements de désabonnement, il sera éjecté et devra demander à se joindre à nouveau. Inutile de gaspiller des ressources sur un poids mort.

D’un autre côté, si notre nouveau nœud remplit correctement ses fonctions pour quelques événements de désabonnement, nous voulons le récompenser et augmenter son âge de 1, mais nous ne voulons pas avoir à le suivre et à enregistrer quand il s’est joint, etc. utiliser le « churn ID » comme une sorte de ticket de loterie.

L’ID de désabonnement (un nombre aléatoire, rappelez-vous) fournit deux fonctions en ce qui concerne les nœuds. Tout d’abord, il fournit un moyen pour les nœuds d’augmenter leur Node Age, et deuxièmement, puisque nous ne voulons pas que les nœuds construisent leur réputation dans une seule section en raison du risque de comportement malveillant, le churn ID décide également quel section aléatoire que le nœud nouvellement promu rejoindra.

Possibilité de promotion

Si le churn ID est modulo divisible par 2 exp Node Age (churn ID % 2^age == 0) nous allons Je suis promu. Ainsi, pour notre nouvel âge de nœud 5, si l’« identifiant de désabonnement » est divisible par 32 - ce qui se produira en moyenne une fois tous les 32 désabonnements - son « âge de nœud » est augmenté à 6 et déplacé vers une nouvelle section. Il devra alors probablement attendre encore 64 barattes dans sa nouvelle section avant d’être promu à nouveau - la promotion devient exponentiellement plus difficile plus elle reste longtemps. Cela signifie que les aînés, les 7 nœuds les plus anciens de la section, existent depuis longtemps et ont fait leurs preuves dans de nombreuses sections différentes avant d’obtenir leur statut de votant.

Comment ça marche? À chaque événement de désabonnement, les anciens divisent l’« identifiant de désabonnement » par âge, en commençant par le plus âgé (255) et en descendant jusqu’au plus jeune (5). Lorsque un de ces âges correspond à un ensemble de nœuds dans notre section, nous déplaçons jusqu’à elder_count/2 nœuds qui ont cet Node Age. Il n’y en aura généralement qu’un dans cette tranche d’âge, mais en cas d’excès, nous sélectionnons les nœuds avec un node ID le plus proche du churn ID .

Les nœuds peuvent également être rétrogradés pour un comportement dysfonctionnel (mauvaises performances par rapport à leurs pairs). Dans ce cas, « Node Age » est réduit de moitié avant qu’ils ne soient déplacés.

Avantages de l’âge des nœuds

Ce régime présente trois principaux avantages. Le premier est la résistance Sybil. Afin de contrôler une section, un attaquant devra contrôler au moins trois anciens. Le processus pour devenir un ancien est long et difficile, et il est impossible de savoir dans quelle section vous vous retrouverez. Lorsque le réseau est important, un ratio de 7 anciens pour plus de 60 adultes rendra ces attaques Sybil extrêmement difficiles. De plus, les nouveaux nœuds ne sont autorisés à rejoindre une section que lorsque davantage de stockage est nécessaire, de sorte que les attaquants ne peuvent pas inonder le réseau de nouveaux membres.

Le deuxième objectif est d’éviter le travail inutile. Si un nœud tombe en panne, il le fera probablement plus tôt, nous l’expulsons donc avant qu’il ne puisse progresser davantage.

La troisième est la randomisation générale. Forcer les nœuds à sauter d’une section à l’autre pour gagner la confiance a également l’avantage de répartir uniformément les capacités.

Flux de relocalisation

@Qi_ma a travaillé sur la mise en œuvre de Node Age, y compris les flux de messagerie entre les anciens de la section, le candidat à la promotion et les anciens de la section cible. Il a donné une conférence à l’équipe cette semaine. Voici une de ses diapositives.

Anciens dans la section source

  • Convenez d’un événement de désabonnement (changement d’adhésion) et signez-le (ID de désabonnement)
  • Vérifiez s’il y a des candidats à la relocalisation
  • Choisissez le(s) candidat(s) le(s) plus âgé(s)
  • Calculez leurs sections de destination à partir de leur ID de nœud combiné avec l’ID de désabonnement
  • Augmentez leur âge de 1
  • Votez pour chacun d’entre eux à déplacer
  • Lorsque suffisamment de votes ont été recueillis, informez chaque nœud candidat

Nœud candidat

  • Reçoit le message des aînés
  • Reconnaît le démarrage du processus de réinstallation
  • Génère un nouvel ID avec les bits initiaux corrects (section) et les bits de fin (son nouvel âge)
  • Bootstraps à la nouvelle section [il a le pouvoir de le faire à partir de sa section d’origine]

Aînés de la section de destination

  • Vérifiez que les connaissances de la section source sont à jour (le SAP)
  • Mettez-les à jour si ce n’est pas le cas et dites-leur de renvoyer
  • Vérifiez que les signatures de déménagement et les détails sont en règle
  • Votez sur l’adhésion du candidat
  • Si tout se passe bien, le candidat rejoint la nouvelle section

Liens utiles

N’hésitez pas à répondre ci-dessous avec des liens vers les traductions de cette mise à jour de développement et les modérateurs les ajouteront ici.

En tant que projet open source, nous sommes toujours à la recherche de commentaires, de commentaires et de contributions de la communauté. Ne soyez donc pas timide, rejoignez-nous et créons ensemble le réseau sécurisé!