Safe Network Entwickler Update 🇩🇪 28. Juli 2022

Dies ist eine maschinelle Ăśbersetzung. Das Original in Englisch ist hier: Update 28 July, 2022

Diese Woche runden wir unseren Blick darauf ab, wie wir die Abschnitte und sogar das Netzwerk selbst validieren können, indem wir BLS-Signaturschlüssel verwenden, um eine Verbindung bis zurück zu „Genesis“ herzustellen, wobei die aktuelle Mitgliedschaft über die „PrefixMap“ an das Abschnittspräfix gebunden ist. ` und wie diese regelmäßig von AntiEntropy (AE) aktualisiert wird.

Allgemeiner Fortschritt

@Joshuef sieht einige gute Fortschritte bei den Speicherproblemen, von denen einige möglicherweise auf Sperren von Traceroute zurückzuführen sind. Zusammen mit einigen DBC-Testverbesserungen von @bochaco sieht CI wieder gesünder aus.

@Bochaco befasst sich auch mit h3 und WASM und wie sie in den Client integriert werden könnten. Hier gibt es ein gutes Video zu h3 (HTTP/3) – netter Fund @19eddiejohn75.

@Roland hat eine PR geschrieben, um SectionChain in die PrefixMap zu verschieben (siehe unten). Es muss zuerst etwas getestet werden.

Und @oetyng hat zwei groĂźe Ă„nderungen im Gange: Datenspeicherextraktion und Vereinfachung des Sendenachrichtenflusses.

Extraktion der Datenspeicherung
Auf dem Weg zu einer einfacheren „node“-Struktur haben wir zuvor das „comms“-Modul extrahiert. Jetzt sind wir im data-Modul. Dies war ursprünglich in dem Bestreben, Sperren innerhalb der Knotenstruktur zu entfernen, aber wir sehen uns weitere Vorteile an. Die Entkopplung ermöglicht es, diese Komponenten isoliert zu betreiben, wodurch sie einfacher und schneller getestet werden können. Außerdem können wir kleinere Versionen eines Netzwerks einrichten, indem wir einige Module kombinieren und andere nicht. Für die node-Struktur verschieben wir die meisten E/A aus ihr heraus, was einer potenziellen „reinen Funktions“-API des node einen Schritt näher kommt. Dies soll es einfacher machen, über den Code und die Auswirkungen von Änderungen nachzudenken, wodurch das Risiko von Fehlern verringert wird.

Vereinfachung des Nachrichtenversands
Dieser Refactor entfernt mehr als 400 Codezeilen und reduziert die Anzahl der Stellen, an denen wir verschiedene Sendefunktionen mit unterschiedlichen Parametern aufrufen. Diese Parameter stellten sich bei etwas Nachbesserung als nicht benötigt heraus und auch die verschiedenen Sendefunktionen wurden nicht benötigt. Außerdem platziert dies das Signieren und Instanziieren der WireMsg-Struktur an einer Stelle.

Wie alles zusammenpasst

Mehr zu BLS

Wir verwenden die verteilte Schlüsselgenerierung (DKG) als effizienten Weg, um eine Einigung zwischen Ältesten zu erzielen. Sobald wir fünf von sieben Anteilen aggregiert haben, erstellen wir einen neuen Abschnittsschlüssel, der ein öffentlicher Schlüssel ist, und auch einen virtuellen privaten Schlüssel, der eigentlich nicht existiert, da es sich um ein eigentümerloses System handelt. Wir wollen nicht, dass jemand die Verantwortung trägt, wenn wir eine Einigung erzielen.

Aber jeder einzelne Älteste – oder tatsächlich jeder Knoten – kann auch seine eigenen BLS-Schlüsselpaare verwenden, um eine beliebige Anzahl von Schlüsselanteilen zu erstellen, und diese können in einem händlerbasierten Mechanismus verwendet werden. In diesem System gibt es einen Eigentümer, der den geheimen Schlüssel kontrolliert, und es steht diesem Eigentümer frei, Anteile in einem n-aus-m-System zu erstellen und zu verteilen. Beispielsweise kann der Eigentümer einer Website Schlüsselfreigaben an drei vertrauenswürdige Mitarbeiter verteilen und von mindestens zwei verlangen, dass sie alle Änderungen an der Website abzeichnen.

Wir würden keinen händlerbasierten Mechanismus für einen dezentralisierten Konsens verwenden, da wir ausdrücklich keinen Besitzer des geheimen Schlüssels haben wollen, aber wir können ihn verwenden, um die gemeinsame Nutzung von Daten zu implementieren.

Mehr zu PrefixMap, SectionChain und SAP

Die „PrefixMap“ ist einfach eine Struktur, die alle Abschnittspräfixe (00, 01 …) auf ihre aktuellen Abschnittsautoritätsanbieter (SAPs) abbildet.

Der SAP ist eine Liste der Ältesten in der Sektion mit ihren IDs, IPs und Ports sowie dem aktuellen BLS-Sektionsschlüssel. Es stellt also alle Informationen bereit, die ein Knoten oder Client benötigt, um dem Netzwerk beizutreten.

PräfixMap

Präfix                   SAFT

00 → {[A(IP, Port), B(IP, Port), ….F(IP, Port)], Sec_key}
01 → {[G(IP, Port), H(IP, Port), ….M(IP, Port)], Sec_key}

….

Jeder Knoten und Client hat eine Kopie der „PrefixMap“ – sie bekommen eine, sobald sie sich verbinden, oder sie können eine von Freunden oder wo auch immer erhalten. Aber nicht jedermanns PrefixMap ist auf dem neuesten Stand, daher muss der Client oder Knoten, der mit einem Abschnitt Kontakt aufnimmt, zuerst seine PrefixMap mit dem aktuellen SAP durch AntiEntropy (AE) aktualisieren. Erst wenn er über ein aktuelles SAP verfügt, kann er mit der Sektion Geschäfte machen.

Aber natĂĽrlich muss es auch wissen, dass die PrefixMap echt ist. Dazu muss ĂĽberprĂĽft werden, ob der SAP mit einem gĂĽltigen AbschnittsschlĂĽssel (dem aktuellen SchlĂĽssel minus 1) signiert ist und ob dieser AbschnittsschlĂĽssel gĂĽltig ist, da er vom vorherigen signiert wurde usw. Den ganzen Weg zurĂĽck nach unten auf die Genesis-Taste.

Der andere Teil der PrefixMap ist also die SectionChain. Dies ist eine binäre Baumstruktur, die alle BLS-Abschnittsschlüssel bis zurück zu „Genesis“ verknüpft. Derzeit ist dies ein separates Element und wir synchronisieren zwischen dem Schlüssel im SAP und der Kette, aber wir planen, sie zusammenzubringen – an diesem Punkt müssen wir uns bessere Namen überlegen!

An diesem Punkt ist die PrefixMap/SectionChain, oder wie auch immer wir es letztendlich nennen, ein DAG mit dem Genesis-Schlüssel an der Wurzel und der Kette von SectionKeys und tDer aktuelle Schlüssel und die Mitgliedschaft bei den Blättern.

Die andere zu erwähnende Sache ist, dass, wenn ein Client oder Knoten sich wieder mit dem Netzwerk verbindet, er nicht die gesamte „SectionChain“ erneut aktualisieren muss, sondern nur den Teil, der neu ist. Der Abschnitt, mit dem er sich verbindet, sendet also dieses neue Bit der Kette – verschiedentlich als ProofChain oder Kettenteil bezeichnet – an den neu verbindenden Knoten, damit er es einfach zu seiner bestehenden „SectionChain“ hinzufügen kann.

Selbst wenn es jemandem gelingen sollte, den „Genesis“-Schlüssel zu stehlen und sich als das Netzwerk auszugeben, würde dies bei diesem Design immer weniger von Bedeutung sein, da das Netzwerk immer größer und größer wird und die DAG immer mehr Zweige hat, weil wir das zurückverfolgen müssen Tasten bis hin zu Genesis wieder immer seltener.


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!