Safe Network Entwickler Update 🇩🇪 12. Mai 2022

Dies ist eine maschinelle Ăśbersetzung. Das Original in Englisch ist hier: 12 May 2022

Vielen Dank an @stout77 fĂĽr ein weiteres Titelbild :bowing_man:


Aktualisierung 12. Mai 2022

Eines der einfachsten, aber auch grundlegendsten und wichtigsten Merkmale im Design sicherer Netzwerke ist „Node Age“. Im Wesentlichen ersetzt „Node Age“ Systeme wie Proof Of Work, indem es gutes Verhalten belohnt, schlechtes bestraft und einem Sybil-Angreifer das Leben sehr schwer macht. Es bietet ein wichtiges Maß für die Qualität und die anhaltende Vertrauenswürdigkeit jedes Knotens und ist dieses Mal unser Hauptthema.

Allgemeiner Fortschritt

Auf der Grundlage unserer bahnbrechenden Arbeit mit DBCs, bei der @davidrusu und andere das Konzept des „digitalen Bargelds“ in eine ganz neue Richtung gelenkt haben, wodurch es byzantinisch fehlertolerant und somit für ein dezentrales Netzwerk geeignet ist, freuen wir uns, bekannt zu geben, dass David Rusu wird eine neue Abteilung Safe Labs leiten. Dies wird unser F&E-Dach für hochmoderne Kryptografie, Netzwerke und mehr sein. Die Forschung wird in erster Linie auf Sicherheit und nicht auf den blauen Himmel ausgerichtet sein, aber wir wollen Fachwissen von überall her auf formellere und strukturiertere Weise einholen.

@Anselme hat eine PR zur ĂśberprĂĽfung des SAP bei der Ăśbergabe fertiggestellt und begonnen, sich mit byzantinischen Verhaltensweisen bei der Ăśbergabe (dem Prozess der Neuverteilung von Daten bei einem Abwanderungsereignis) zu befassen.

David Rusu hielt bei einem CompSci-Treffen in Toronto eine Präsentation über konfliktfrei replizierte Datentypen (CRDTs) und erwähnte, was er (natürlich!) bei MaidSafe gemacht hat. Großes Interesse am Thema und viele Kontakte zu knüpfen. Er geht zurück für einen weiteren über CRDT-Bäume.

@Bochaco hat einen PR abgeschlossen, um die Berechtigung auf der Clientseite zu überprüfen, wenn Operationen an Registern (änderbare Daten) durchgeführt werden, und arbeitet auch an der Client-API für verbrauchte Bücher.

Und @Chriso hat sich Testnet-Ausfälle angesehen, die durch das vorübergehende Entfernen von Funktionen wie „max-capacity“ verursacht wurden.

Bei internen Tests hat Metricbeat uns gezeigt, dass einige Knoten ĂĽber einen Tag oder so zu einer verrry hohen Speichernutzung schleichen. Als wir eintauchten, stellten wir fest, dass dort anscheinend ein ziemlicher Edge-Casey-Deadlock auftrat (der sich auf die Bereinigung von Verbindungen konzentrierte). Wir haben hier ein paar Fix-Optionen und schauen und testen nur, was dort am sinnvollsten ist.

Unterdessen hielt @Qi_ma vor dem Team einen Vortrag ĂĽber Node Age.

Knotenalter

Jeder Knoten im Netzwerk hat eine Adresse, die als ID festgelegt wird, die eigentlich ein Schlüssel ist, der generiert wird, wenn er dem Netzwerk beitritt. Diese „Knoten-ID“ ist im Wesentlichen eine sehr große Zufallszahl. Seine ersten paar Bits (z. B. 0101101…) bestimmen, in welchem ​​Abschnitt sich der Knoten befindet und nach welchen Daten er sucht, während die letzten acht Bits (z. B. 00000101) sein „Knotenalter“ angeben - in diesem Fall 5.

Wenn ein Knoten zum ersten Mal in das Netzwerk aufgenommen wird, erhält er ein „Knotenalter“ von 5, sodass seine ID auf …00000101 endet (der beitretende Knoten muss im Allgemeinen ED25519-Schlüssel generieren, bis er einen mit der richtigen Endung und dem richtigen Präfix erhält ein Vorgang in Sekundenbruchteilen).

Je länger der Knoten ein aktiver Teilnehmer im Netzwerk bleibt, desto größer wird sein „Knotenalter“ bis zu einem höchst unwahrscheinlichen Maximum von 255. Aber es gibt ein paar Haken: (1) sein „Knotenalter“ wird nur wachsen wenn es sich als zuverlässig darin erweist, Datenblöcke zu speichern und sie auf Anfrage über einen bestimmten Zeitraum herauszugeben. (2) Jedes Mal, wenn sein „Knotenalter“ erhöht wird, muss er sich zu einem anderen Abschnitt bewegen.

Aber Safe Network hat kein Zeitkonzept, wie können wir also nachverfolgen, wie lange sich der Knoten verhält? Die Antwort ist, dass wir Abwanderungsereignisse (Änderungen der Abschnittsmitgliedschaft) als Stellvertreter für die Zeit verwenden.

Abwanderungs-ID - Der Entscheider

Jeder Abschnitt wird 7 Älteste (Entscheidungsknoten) und über 60 Erwachsene (Speicherknoten) enthalten. Jedes Mal, wenn ein Knoten offline geht oder der Sektion beitritt, was bei Erwachsenen häufig vorkommt, stimmen die Ältesten darüber ab, was passiert ist. Jedes Abwanderungsereignis hat eine 256-Bit-ID, die die kombinierte BLS-Signatur von 5 der 7 Ältesten darstellt. Auch diese „Churn ID“ ist quasi eine Zufallszahl und kann nicht vorhergesagt werden.

Wenn sich der neue Knoten innerhalb der ersten Abwanderungsereignisse als funktionsgestört herausstellt, wird er ausgeworfen und muss um erneuten Beitritt bitten. Es hat keinen Sinn, Ressourcen für ein totes Gewicht zu verschwenden.

Wenn unser neuer Knoten andererseits seine Aufgaben für einige Abwanderungsereignisse ordnungsgemäß erfüllt, möchten wir ihn belohnen und sein Alter um 1 erhöhen, aber wir möchten ihn nicht nachverfolgen und aufzeichnen müssen, wann er beigetreten ist usw. Also wir Verwenden Sie die Churn ID als eine Art Lottoschein.

Die Churn-ID (eine Zufallszahl, denken Sie daran) bietet zwei Funktionen, soweit es die Nodes betrifft. Erstens bietet es eine Möglichkeit für Knoten, ihr „Knotenalter“ zu erhöhen, und zweitens, da wir nicht wollen, dass Knoten ihre Reputation in nur einem Abschnitt aufbauen, wegen des Risikos böswilligen Verhaltens, entscheidet die „Abwanderungs-ID“ auch, welche Zufälliger Abschnitt, dem der neu beförderte Knoten beitritt.

Aufstiegschance

Wenn die „Abwanderungs-ID“ modulo teilbar durch 2 exp „Knotenalter“ ist (Abwanderungs-ID % 2^Alter == 0), werden wirIch werde befördert. Wenn also für unser neues Knotenalter 5 die „Abwanderungs-ID“ durch 32 teilbar ist – was im Durchschnitt alle 32 Abwanderungen vorkommt – wird das „Knotenalter“ auf 6 erhöht und in einen neuen Abschnitt verschoben. Es muss dann wahrscheinlich weitere 64 Abwanderungen in seiner neuen Sektion warten, bevor es wieder befördert wird – die Beförderung wird exponentiell schwieriger, je länger es bleibt. Dies bedeutet, dass Elders, die ältesten 7 Knoten in der Sektion, schon lange dabei sind und sich in vielen verschiedenen Sektionen bewährt haben, bevor sie ihren Stimmstatus erreicht haben.

Wie funktioniert es? Bei jedem Abwanderungsereignis teilen die Ältesten die „Abwanderungs-ID“ nach Alter, beginnend mit dem Ältesten (255) und bis zum Jüngsten (5). Wenn eines dieser Altersgruppen mit einer Reihe von Knoten in unserem Abschnitt übereinstimmt, verschieben wir bis zu elder_count/2 Knoten, die dieses Knotenalter haben. Normalerweise wird es in dieser Altersgruppe nur einen geben, aber im Falle eines Überschusses wählen wir die Knoten aus, deren „Knoten-ID“ der „Abwanderungs-ID“ am nächsten kommt.

Knoten können auch für dysfunktionales Verhalten (schlechte Leistung im Vergleich zu ihren Kollegen) herabgestuft werden. In diesem Fall wird das „Knotenalter“ halbiert, bevor sie verschoben werden.

Vorteile des Knotenalters

Dieses Schema hat drei Hauptvorteile. Der erste ist der Sybil-Widerstand. Um eine Sektion zu kontrollieren, muss ein Angreifer mindestens drei Älteste kontrollieren. Der Prozess, ein Ältester zu werden, ist lang und hart, und es ist unmöglich zu wissen, in welcher Abteilung Sie landen werden. Wenn das Netzwerk groß ist, macht ein Verhältnis von 7 Ältesten zu über 60 Erwachsenen solche Sybil-Angriffe extrem schwierig. Darüber hinaus dürfen neue Knoten nur dann einem Abschnitt beitreten, wenn mehr Speicherplatz benötigt wird, sodass Angreifer das Netzwerk nicht mit neuen Beitritten überfluten können.

Das zweite Ziel besteht darin, unnötige Arbeit zu vermeiden. Wenn ein Knoten ausfällt, wird er dies wahrscheinlich früh tun, also schmeißen wir ihn raus, bevor er weitermachen kann.

Die dritte ist die allgemeine Randomisierung. Das Erzwingen, dass die Knoten von Abschnitt zu Abschnitt springen, um Vertrauen zu gewinnen, hat auch den Vorteil, dass die Fähigkeit gleichmäßig verteilt wird.

Umzugsablauf

@Qi_ma hat an der Implementierung von Node Age gearbeitet, einschließlich des Nachrichtenflusses zwischen den Sektionsältesten, dem Beförderungskandidaten und den Ältesten in der Zielsektion. Er hielt diese Woche einen Vortrag vor dem Team. Hier ist eine seiner Folien.

Ă„lteste im Quellenabschnitt

  • Vereinbaren Sie ein Churn-Event (Mitgliedschaftswechsel) und unterschreiben Sie es (Churn-ID)
  • ĂśberprĂĽfen Sie, ob es Kandidaten fĂĽr einen Umzug gibt
  • Wählen Sie den/die ältesten Kandidaten aus
  • Berechnen Sie ihre Zielabschnitte aus ihrer Knoten-ID kombiniert mit der Churn-ID
  • Erhöhe ihr Alter um 1
  • Geben Sie fĂĽr jeden, der umgesiedelt werden soll, eine Stimme ab
  • Wenn genĂĽgend Stimmanteile gesammelt wurden, informieren Sie jeden Kandidatenknoten

Kandidatenknoten

  • Empfängt Nachrichten von Ă„ltesten
  • Bestätigt den Beginn des Umzugsprozesses
  • Erzeugt eine neue ID mit korrekten Anfangsbits (Abschnitt) und nachlaufenden Bits (ihr neues Alter)
  • Bootstraps zum neuen Abschnitt [es hat die Befugnis, dies von seinem ursprĂĽnglichen Abschnitt aus zu tun]

Ă„lteste im Zielbereich

  • ĂśberprĂĽfen Sie, ob das Wissen des Quellabschnitts auf dem neuesten Stand ist (das SAP)
  • Aktualisieren Sie sie, wenn nicht, und sagen Sie ihnen, dass sie sie erneut senden sollen
  • ĂśberprĂĽfen Sie, ob die Umzugsunterschriften und -details in Ordnung sind
  • Stimmen Sie ĂĽber den Beitritt des Kandidaten ab
  • Wenn alles gut geht, tritt der Kandidat einer neuen Sektion bei

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!