Safe Network Entwickler Update ­čçę­čç¬ 21. Juli 2022

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

So etwas wie ein Prequel diese Woche, wenn wir uns ansehen, wie SectionChains und SAPs zu den letzte Woche angekündigten PrefixMap-Änderungen passen.

Allgemeiner Fortschritt

Keine gro├čen Enth├╝llungen in dieser Woche, mehr von der stetigen Test-, Optimierungs- und Debugging-Arbeit, die diese Phase der Entwicklung kennzeichnet.

@davidrusu hat nach M├Âglichkeiten gesucht, das Netzwerk zu ├╝berwachen und das Node Age zu verwalten, einschlie├člich der Frage, wie Erwachsene den ├ältesten beweisen k├Ânnen, dass sie am Leben sind, selbst wenn es nicht viel Netzwerkaktivit├Ąt gibt.

@bzee untersucht weiterhin OpenTelemetry, das Open-Source-├ťberwachungstool, mit einigen Refactors, die bereits vorhanden sind, um die Protokollierung ├╝ber das OTLP-Protokoll zu erm├Âglichen. Dies sollte uns hoffentlich dazu bringen, uns beim elastischen Server anzumelden, wo wir uns leichter einen ├ťberblick ├╝ber den Zustand der Testnetze verschaffen k├Ânnen.

Und @joshuef bastelt weiter an der Speicheroptimierung. Wir haben einige ├╝bereifrige Wiederholungsversuche entfernt, die m├Âglicherweise Verbindungen am Leben erhalten, und ausstehende Nachrichten im Speicher, w├Ąhrend das Senden wiederholt und wiederholt und wiederholt wurde (sowohl auf der qp2p-Ebene als auch im Knoten). Er hat auch andere kleinere Optimierungen vorgenommen, die alle dazu beigetragen haben, den Arbeitsspeicher unter Last erheblich zu reduzieren.

@yogesh hat eine PR eingerichtet, um zu erm├Âglichen, dass Traceroute-Informationen an den Client zur├╝ckgegeben werden. Dadurch werden alle am Nachrichtenfluss beteiligten Knoten f├╝r eine bestimmte Abfrage/einen bestimmten Befehl aufgelistet, was beim Debuggen helfen sollte.

SectionChains und SAPs

SectionChains liefern eine Aufzeichnung von ├ältestenwechseln innerhalb einer Sektion und dienen als Beweis daf├╝r, dass der aktuelle Satz von ├ältesten g├╝ltig ist. Wir k├Ânnen einem einzelnen ├ältesten nicht glauben, dass er der ist, f├╝r den er sich ausgibt, noch k├Ânnen wir der aktuellen Gruppe vertrauen ÔÇô das w├Ąre ein offensichtlicher Angriffsvektor. Stattdessen verwenden wir die Wunder der Kryptographie, um eine SectionChain zu erstellen, eine sicher verkn├╝pfte Liste, die beweist, dass die ├ältesten die sind, f├╝r die sie sich ausgeben, indem wir den aktuellen Abschnittsschl├╝ssel bis zur├╝ck zum Genesis-Schl├╝ssel verkn├╝pfen.

Der ÔÇ×GenesisÔÇť-Schl├╝ssel kann als ÔÇ×NetzwerknachweisÔÇť betrachtet werden. Es ist der allererste Schl├╝ssel, der vom allerersten Knoten im allerersten Abschnitt erstellt wird ÔÇô dem Abschnitt mit dem Pr├Ąfix ÔÇ×0ÔÇť. Sobald zu diesem ersten einsamen Knoten ein weiterer Knoten hinzukommt (versuchen Sie nicht, ihn Eva zu nennen, da dies schnell verwirrend wird), wird ein neuer Abschnittsschl├╝ssel B erstellt, der mit dem Genesis-Schl├╝ssel signiert ist. Wenn ein neuer Knoten C hinzukommt, wird wieder ein neuer Abschnittsschl├╝ssel erstellt, dieses Mal signiert von ÔÇ×BÔÇť, und so weiter.

Die Signierzeit des ÔÇ×GenesisÔÇť-Schl├╝ssels ist vorbei, sobald er den Schl├╝ssel ÔÇ×BÔÇť signiert. Es bleibt jedoch ├Ąu├čerst n├╝tzlich als Beweis daf├╝r, dass der aktuelle Abschnittsschl├╝ssel und alle vorangehenden g├╝ltig sind und nicht von einem Angreifer eingeschlichen werden, da es kryptografisch sehr einfach ist zu beweisen, dass der aktuelle Schl├╝ssel eines beliebigen Abschnitts letztendlich mit ÔÇ×GenesisÔÇť verkn├╝pft ist, wie lange auch immer SectionChain wird.

Unterschreiben

Aber was meinen wir mit unterschreiben? Signieren bedeutet einfach, unseren geheimen Schl├╝ssel zu verwenden, um einer Nachricht oder einer Datei einige einzigartige Bits hinzuzuf├╝gen. Jeder, der unseren ├Âffentlichen Schl├╝ssel hat, kann ├╝berpr├╝fen, ob wir ihn signiert haben (und in den meisten F├Ąllen, dass sich die Datei nach dem Signieren nicht ge├Ąndert hat).

Um das klassische Beispiel zu verwenden, sendet Alice eine Nachricht an Bob und signiert sie mit ihrem geheimen Schl├╝ssel, was bedeutet, dass sie eine eindeutige ÔÇ×SignaturÔÇť aus einer Kombination des Nachrichteninhalts und ihres geheimen Schl├╝ssels erstellt. Bob kann sicher sein, dass es von Alice signiert wurde, da er die Signatur mit ihrem ├Âffentlichen Schl├╝ssel verifizieren kann. Die Lauscherin Eve hat auch Alices ├Âffentlichen Schl├╝ssel, aber sie ist machtlos, Bob auszutricksen, indem sie Alices Nachricht ├Ąndert, da sie keine g├╝ltige Signatur mehr tragen w├╝rde.

Anstelle von Einzelpersonen wie Alice und Bob haben wir es in einem Abschnitt mit Gruppenentscheidungen zu tun, die von einer gro├čen Mehrheit von ├ältesten genehmigt werden m├╝ssen. Um byzantinisch fehlertolerant zu sein (was bedeutet, dass ein Drittel der Knoten dysfunktional sein kann, ohne einen Ausfall zu verursachen), m├╝ssen f├╝nf von sieben ├ältesten eine Nachricht unterschreiben. Anstatt jeden ├ältesten einen Prozess wie Alice und Bob oben durchf├╝hren zu lassen, ist ein viel effizienterer Weg, dies zu tun, die verteilte Schl├╝sselgenerierung (DKG), bei der jeder ├älteste einen Schl├╝sselanteil beisteuert. Sobald wir f├╝nf dieser Schl├╝sselanteile haben ÔÇô beliebige f├╝nf ÔÇô erstellen wir einen g├╝ltigen Signaturschl├╝ssel und die Entscheidung wird validiert. Dies ist das ├äquivalent des Abschnitts geheimer Schl├╝ssel, der die Nachricht signiert, obwohl bei BLS kein geheimer Schl├╝ssel existiert.

Das ist alles in Ordnung, solange wir nur eine Sektion haben, aber wenn das Netzwerk w├Ąchst, wird die Sektion schlie├člich aufgeteilt, um die neuen Sektionen ÔÇ×01ÔÇť und ÔÇ×11ÔÇť mit neuen ├ältesten und neuen SectionKeys zu erstellen, die von denen der ├╝bergeordneten Sektion signiert sind. Diese neuen Abschnitte werden im Laufe der Zeit eine Abwanderung erfahren, wobei bei jeder Gelegenheit ein neuer DKG-Abschnittsschl├╝ssel erstellt wird. Schlie├člich wird eine Baumstruktur mit Genesis als Wurzel gebildet und jeder Zweig bringt zwei neue Zweige hervor, wenn das Netzwerk erweitert wird.

Wichtig ist, dass jeder aktuelle Abschnittsschl├╝ssel in jedem Abschnitt einen Pfad die Zweige hinab zum Genesis-Schl├╝ssel hat. Das hei├čt, wir k├Ânnen beweisen, dass wir uns im richtigen Netzwerk befinden und dass der Prozess der Begr├╝├čung neuer Knoten bei jedem Schritt g├╝ltig war, zumindest bis zum DKG ist besorgt. Aber sobald es mehr als einen Abschnitt gibt, hat jeder Abschnitt einen anderen Pfad zur├╝ck zur ÔÇ×GenesisÔÇť, an welchem ÔÇőÔÇőPunkt die Abschnittskette zu einem DAG (gerichteter azyklischer Graph) wird und nicht zu einer linearen Kette.

Der Section Authority Provider (SAP)

Die Abschnittskette ist ein einfaches, aber wichtiges Werkzeug. Jeder Knoten und Client enth├Ąlt eine SectionChain. Als Client oder Knoten sagt es uns, dass der aktuelle Abschnitt, mit dem wir sprechen, kryptografisch g├╝ltig ist und dass wir uns im richtigen Netzwerk befinden (wie durch den ÔÇ×GenesisÔÇť-Schl├╝ssel bewiesen wird), und nicht in einem Fork, aber das war es auch schon .

Wenn ein Knoten oder Client dem Netzwerk beitritt, erh├Ąlt er die SectionChain und den SAP. Die SAP erz├Ąhlt uns von den derzeitigen ├ältesten. Es ist eine Liste der aktuellen ├ältesten (jeder ├älteste hat eine eindeutige ID, eine IP und einen Port), die von einem der Schl├╝ssel in der SectionChain signiert sind. Das hei├čt, wenn wir uns mit einem Knoten in dieser Liste verbinden, k├Ânnen wir sicher sein, dass er g├╝ltig ist, da die Signatur wieder bis zu ÔÇ×GenesisÔÇť zur├╝ckverfolgt werden kann. Der SAP enth├Ąlt auch den aktuellen SectionKey.

Wie letzte Woche erkl├Ąrt, ist der SAP in der PrefixMap enthalten, die jedes Abschnittspr├Ąfix allen Schl├╝sseln im Verlauf dieses Abschnitts zuordnet. Dies bedeutet nicht nur, dass wir ├╝berpr├╝fen k├Ânnen, ob alle von uns verarbeiteten Daten korrekt sind (sie haben dasselbe Pr├Ąfix wie der Abschnitt), sondern auch, dass wir beim Wechseln zwischen den Abschnitten nicht erneut die gesamte Abschnittskette erfassen m├╝ssen. Stattdessen k├Ânnen wir den Baum einfach so weit wie n├Âtig nach unten gehen, bis wir auf einen Abschnitt treffen, der bereits in unserer Abschnittskette vorhanden ist, und ihn von dort aus nehmen, was offensichtlich effizienter ist.

N├Ąchste Woche mehr dar├╝ber, wie alles zusammenpasst.


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!