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!