Safe Network Entwickler Update ­čçę­čç¬ 29. September 2022

Dies ist eine maschinelle ├ťbersetzung. Das Original in Englisch ist hier: Update 29 September, 2022

Wir haben den Code vereinfacht und viele St├Ârungen beseitigt, indem wir alle unn├Âtigen asynchronen Multithread-Prozesse im Knotencode entfernt haben. Gleichzeitig bleiben einige Probleme mit langsamer Kommunikation bestehen, von denen wir glauben, dass sie m├Âglicherweise von Quic selbst verursacht werden, also untersuchen wir das.

Au├čerhalb des Bug-Bashings steht nun der neue synchrone sn_sdkg-Code zur Integration bereit. @anselme zeigt uns das diese Woche.

Allgemeiner Fortschritt

Qi_ma untersucht, wie ├älteste das ÔÇ×node_ageÔÇť eines Knotens ├╝berpr├╝fen, wenn sie entscheiden, welcher in einen neuen Abschnitt verlegt werden soll, da wir dort einiges anomales Verhalten sehen, einschlie├člich ÔÇ×ZombieÔÇť-Knoten, die dem Netzwerk beitreten k├Ânnen.

@ChrisO experimentiert mit Quinn, einer Rust-Implementierung des Quic-Protokolls zum Herstellen und Aufrechterhalten von Verbindungen zwischen Peers. Leider ist Quic so etwas wie eine Black Box, und wir glauben, dass einige der Verbindungsprobleme, die wir erleben, auf die Art und Weise zur├╝ckzuf├╝hren sein k├Ânnten, wie es funktioniert, insbesondere, dass die Kommunikation oft langsam ist, was zu Problemen f├╝hrt, wenn Prozesse ablaufen. Chris hat eine Quinn-Sandbox eingerichtet und beobachtet, was passiert, wenn wir verschiedene Arten von Nachrichten darauf abfeuern. Gleichzeitig untersucht @bzee die Struktur der qp2p-Kommunikation, um zu best├Ątigen, dass wir Quinn so effizient wie m├Âglich nutzen. Das Hauptproblem besteht darin, gleichzeitige Streams asynchron zu empfangen und gleichzeitig Wartezeiten auf Antworten zuzulassen (R├╝ckgabe eines Beobachters, um auf demselben Kanal nach Antwortnachrichten zu suchen).

@roland arbeitet an Fuzz-Tests f├╝r die neue sn_sdkg-Kiste, die @anselme weiter unten ausf├╝hrlich beschreibt.

sn_sdkg-Integration

Distributed Key Generation (auch bekannt als DKG) ist die Art und Weise, wie Sektions├Ąlteste den Sektionsschl├╝ssel auf sichere Weise generieren, die den Sektionsschl├╝ssel geheim h├Ąlt. Am Ende von DKG kennt jeder ├älteste nur seinen eigenen geheimen Schl├╝sselanteil, so dass niemand jemals den gesamten geheimen Schl├╝ssel des Abschnitts sieht. Dies ist ein Mechanismus, um den Handlungsspielraum potenziell schlechter ├ältester zu verringern: So kann Safe Network sicherstellen, dass sie nichts mit Sektionsautorit├Ąt unterzeichnen k├Ânnen, solange wir weniger als 5/7 schlechter ├ältester haben. Die Sektionsautorit├Ąt ist erforderlich, um Daten zu ├Ąndern, Knoten zu f├Ârdern oder zu bezeichnen und Token zu pr├Ągen, daher ist dies sehr wichtig.

K├╝rzlich haben wir an einem neuen DKG gearbeitet, das widerstandsf├Ąhiger gegen Paketverlust ist und keine Timer verwendet, sodass es nicht aufgrund von langsamem Netzwerkverkehr und Zeit├╝berschreitungen fehlschlagen kann. Dieser Beitrag beschreibt, wie dieses neue DKG funktioniert. F├╝r diese Implementierung verwenden wir die synchrone verteilte Schl├╝sselgenerierung sn_sdkg-Kiste, die auf dem Synchronous Key Generation-Algorithmus von poanetwork in ihrer hbbft-Kiste basiert.

So funktioniert DKG

DKG wird von den ├ältesten ausgel├Âst, wenn sie bemerken, dass die ├Ąltesten Mitglieder nicht die ├ältesten sind, oder wenn sich eine Sektion aufspaltet und sie ├Ąltere Kandidaten ausw├Ąhlen m├╝ssen. Als sie dies bemerken, bitten die aktuellen ├ältesten die Kandidaten, eine neue DKG-Sitzung mit einer ÔÇ×DkgStartÔÇť-Nachricht zu beginnen, damit sie den n├Ąchsten Abschnittsschl├╝ssel generieren k├Ânnen.

Der erste Schritt in unserem DKG ist die Generierung tempor├Ąrer BLS-Schl├╝ssel, die zur Verschl├╝sselung im DKG-Verfahren verwendet werden. Jeder Knoten im sicheren Netzwerk hat einen ed25519-Schl├╝ssel, aber obwohl diese Schl├╝ssel gro├čartig f├╝r Signaturen sind, k├Ânnen wir sie nicht sicher verschl├╝sseln. Wir brauchen einen anderen Weg.

Da unsere Knoten keine BLS-Schl├╝ssel haben (├älteste haben einen BLS-Keyshare, aber keinen einfachen BLS-Schl├╝ssel), generieren wir nur f├╝r diese DKG-Sitzung einen einmaligen Schl├╝ssel und verwerfen ihn nach der Verwendung. Allerdings m├╝ssen die anderen Knoten diesem BLS-Schl├╝ssel vertrauen, da er brandneu ist. Bevor also etwas anderes passiert, sendet jeder Kandidat seinen neu generierten ├Âffentlichen BLS-Schl├╝ssel in einer Nachricht, die seine Signatur (erstellt mit seinem vertrauensw├╝rdigen ed25519-Schl├╝ssel) ├╝ber den neuen enth├Ąlt Einmaliger ├Âffentlicher BLS-Schl├╝ssel, den sie f├╝r diese DKG-Sitzung verwenden werden.

Sobald die Kandidaten alle ├Âffentlichen BLS-Schl├╝ssel f├╝r diese DKG-Sitzung haben, k├Ânnen sie mit der Abstimmung beginnen. Die Abstimmung erfolgt in 3 Phasen:

  • ÔÇ×TeileÔÇť: Jeder Knoten ├╝bermittelt einen ÔÇ×TeilÔÇť, der f├╝r die endg├╝ltige Schl├╝sselgenerierung verwendet wird. Er enth├Ąlt verschl├╝sselte Daten, die zur Generierung ihres Schl├╝sselanteils verwendet werden.
  • Acks: Knoten pr├╝fen die Parts und senden ihre Acks (Best├Ątigungen) ├╝ber die Parts. Diese Acks werden auch f├╝r die Schl├╝sselgenerierung verwendet.
  • AllAcks: Jeder stellt sicher, dass er alle die gleichen Acks und Parts hat, indem er seine Version der Sets schickt. Dieser letzte Teil soll sicherstellen, dass die Kandidaten am Ende denselben Abschnittsschl├╝ssel generieren!

Sobald die Abstimmung abgeschlossen ist, k├Ânnen die Kandidaten ihre geheimen Schl├╝sselanteile zusammen mit dem neuen ├Âffentlichen Schl├╝ssel des Abschnitts aus den ÔÇ×PartsÔÇť und ÔÇ×AcksÔÇť generieren.

Klatsch und eventuelle K├╝ndigung

In einem Netzwerk k├Ânnen Nachrichten verloren gehen, was zu Situationen f├╝hren kann, in denen einigen Kandidaten Stimmen fehlen und andere auf eine Antwort auf Stimmen warten, die nie angekommen sind. Um diesem Problem entgegenzuwirken, haben wir Klatsch! Wenn ein Knoten hin und wieder keine neuen DKG-Nachrichten erhalten hat, wenn er welche erwartet, sendet er alle seine Stimmen an die anderen. Dies hat zwei Zwecke:

  • man soll die anderen ├╝ber die Stimmen informieren und sie einholen up, um mit Stimmen zu beschleunigen, die sie m├Âglicherweise verpasst haben
  • Der andere soll den anderen Teilnehmern zeigen, dass unserem Knoten Stimmen fehlen, damit andere wiederum mit ihren Stimmen antworten und uns helfen k├Ânnen, sie einzuholen

Wenn ein Knoten tats├Ąchlich eine Klatschnachricht erh├Ąlt, der Informationen fehlen, antwortet er mit seinem Wissen. Dies geschieht auch nach Beendigung (Abschluss der Abstimmungsrunde), denn manchmal, wenn ein Knoten beendet wird (und damit aufh├Ârt zu klatschen, weil er keine Stimmen mehr erwartet), erh├Ąlt er immer noch Klatsch von anderen Knoten, die es nicht dorthin geschafft haben noch. In diesem Fall wird der sachkundige Knoten auf diesen Klatsch mit seinem Wissen antworten, damit die anderen Knoten ebenfalls die Beendigung erreichen k├Ânnen. Schlie├člich erreicht jeder Kandidat durch diesen Prozess die K├╝ndigung.

Gleichzeitige DKGs

In dieser Implementierung umfassen wir gleichzeitige DKGs. Manchmal tritt direkt nach dem Ausl├Âsen von DKG ein neuer Knoten dem Abschnitt bei und scheint ein besserer ├Ąlterer Kandidat zu sein, da sein Knotenalter sehr hoch ist. In diesem Fall ├Ąndert sich der aktuelle Satz der besten ├ältesten-Kandidaten, und die aktuellen ├ältesten geben eine weitere ÔÇ×DkgStartÔÇť-Nachricht an die neuen Kandidaten aus.

Die bisherige DKG-Session wird nicht abgebrochen, stattdessen kommt es jetzt zu einem Rennen zwischen den beiden! Wir m├Âchten, dass ├älteste sehr zuverl├Ąssige Knoten sind. Das intensive DKG-Verfahren ist in gewisser Weise ein Test, um zu ├╝berpr├╝fen, ob diese Kandidaten tats├Ąchlich f├╝r das Alter geeignet sind. Wenn mehrere DKGs gleichzeitig enden, ist das in Ordnung, ÔÇ×├ťbergabekonsensÔÇť stellt sicher, dass die aktuellen ├ältesten nur einen Gewinner ausw├Ąhlen. DKG-Sitzungen, die das Rennen nicht gewonnen haben, k├Ânnen beendet werden oder auch nicht, aber es spielt keine Rolle, sie werden schlie├člich entfernt, wenn die Knoten erkennen, dass sie verloren haben.

Fazit

Kurz gesagt, das neue DKG konzentriert sich darauf, sehr widerstandsf├Ąhig gegen├╝ber Nachrichtenverlust zu sein, die Notwendigkeit von Timern zu beseitigen und sicherzustellen, dass jeder die Beendigung schlie├člich ohne m├Âgliche Zeit├╝berschreitungen erreicht. Es macht auch gleichzeitige DKGs zu einem Merkmal, um die besten Kandidaten in einem Wettlauf um die Terminierung zwischen DKGs auszuw├Ąhlen


N├╝tzliche Links

F├╝hlen Sie sich frei, unten mit Links zu ├ťbersetzungen dieses Entwicklungsupdates zu antworten, und die Moderatoren werden sie hier hinzuf├╝gen.

Als Open Source-Projekt sind wir immer auf der Suche nach Feedback, Kommentaren und Community-Beitr├Ągen. Seien Sie also nicht sch├╝chtern, machen Sie mit und lassen Sie uns gemeinsam das sichere Netzwerk erstellen!