Safe Network Entwickler Update 🇩🇪 30. Juni 2022

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

Älteste entscheiden sich mittels Distributed Key Generation (DKG) zwischen zwei möglichen Handlungsalternativen. Jeder Älteste generiert einen Schlüsselanteil und sendet ihn mit seiner Stimme, und wenn eine Supermehrheit (5 von 7) dieser Schlüsselanteile empfangen wird, werden sie aggregiert, um den vollständigen Schlüssel zu erstellen, der zur Validierung der Entscheidung erforderlich ist. Wir haben dazu unser eigenes System mit BLS-Kryptografie entwickelt, das meistens gut funktioniert – aber nicht immer. Leider kann das Netzwerk bei einem Ausfall zum Erliegen kommen. Diese Woche stellt @anselme einen Anfängerleitfaden für DKG bereit, und er und @davidrusu erklären, wie wir unsere DKG-Implementierung robuster machen wollen.

Allgemeiner Fortschritt

@davidrusu und @joshuef haben weiter daran gearbeitet, sn_node so weit wie möglich Single-Threaded zu machen, um das durch das Sperren verursachte Problem zu beseitigen. Dies erfordert ein wenig Refactoring, das Verschieben von Comm – dem Code, der die Nachrichtenübermittlung zwischen Knoten handhabt – aus sn_node, damit es besser für sich alleine stehen kann und möglicherweise einen eigenen Thread hat.

In der Zwischenzeit hat @bochaco an der Prägung des ursprünglichen Genesis-DBC durch den ersten Netzwerkknoten gearbeitet, der Umgang mit verbrauchten Büchern, damit die Knoten dies nicht tun müssen sich mit anderen Abschnitten beraten, um zu sehen, ob eine Transaktion gültig ist, und andere Schritte in der DBC-Integration.

@bzee steckt in Informationsverteilungsalgorithmen (IDA) fest, wodurch wir, wie Sie sich vielleicht erinnern, den Speicherplatz reduzieren und Bandbreitenanforderungen des Netzwerks, und @roland arbeitet an einigen Schreibmodultests fĂĽr DKG und unterstĂĽtzt @Anselme mit der neuen sn_sdkg-Kiste (s bedeutet hier synchron).

Auf dem Weg zu einem stabileren DKG fĂĽr Safe

Die verteilte Schlüsselgenerierung (DKG) ist für das sichere Netzwerk notwendig, um sicherzustellen, dass jeder Älteste in einer Sektion einen eindeutigen Shard des Sektionsschlüssels hat: den Schlüsselanteil. Es ermöglicht dem Netzwerk, einen geheimen Schlüssel für jeden Abschnitt zu generieren, ohne dass ein einziger Knoten jemals den gesamten Abschnittsschlüssel kennt. Dies macht das sichere Netzwerk widerstandsfähiger gegenüber byzantinischen Knoten, da es nicht allen Ältesten vertrauen muss.

Die aktuelle DKG-Implementierung hat einen Fehler, der uns seit vielen Monaten nervt: Die Verwendung von Timern. DKG erfordert die volle Teilnahme aller Knoten, die signieren können möchten. In Zeiten hoher Netzwerkaktivität können Knoten gesichert werden und nicht rechtzeitig an DKG-Sitzungen teilnehmen.

Wenn bei unserer aktuellen Implementierung Knoten zu lange brauchen, um zu DKG beizutragen, schlägt die DKG-Sitzung fehl. Wir waren sehr daran interessiert, alle zeitbezogenen Verhaltensweisen in Safe Network zu entfernen und standardmäßig gleichzeitige und asynchrone Datenflüsse zu übernehmen.

Wir haben jetzt eine Weile nach einer Alternative zum zeitgesteuerten DKG gesucht und glauben, dass wir endlich etwas gefunden haben, das funktioniert, indem wir auf der Mitgliedschafts- und Ăśbergabearbeit aufbauen, die wir geleistet haben.

DKG fĂĽr den Rest von uns

Obwohl DKG wie eine sehr technische und komplexe Sache erscheinen kann, habe ich das Gefühl, dass seine Nützlichkeit und seine grundlegenden Mechanismen einem 6-Jährigen erklärt werden können.

Stellen Sie sich ein Königreich mit einem König vor. Der König hat einen Elfenbeinstempel, den niemand fälschen kann. Jeder Brief mit dem Gütesiegel des Königs wird vom ganzen Königreich als vertrauenswürdig angesehen.

Elfenbeinstempel == geheimer SchlĂĽssel
Gütesiegel auf einem Brief == Brief mit der Unterschrift des Königs

Eines Tages erkennt der König, dass er alt ist. Der König hat vier Erben, und er will fair sein, also bittet er seinen Handwerksmeister, seinen Elfenbeinstempel in vier gleiche Teile zu zerbrechen, die jeweils einen Teil des Siegels des Königs drucken können. Einen dieser kleinen Stempel verteilt er dann an seine vier Kinder. Um nun das Gütesiegel des Königs nachzubilden, müssen die Kinder ihre winzigen Elfenbeinstempel verwenden und jeweils ihre Siegelteile nebeneinander ausdrucken, bis man wieder das vollständige Siegel sehen kann.

4 ElfenbeinmarkenstĂĽcke == mehrsig
winziger Stempel == SchlĂĽsselanteil

Nach einer Weile erkennen die Erben, dass dieser Mechanismus das Königreich verlangsamt, weil es eine mühsame Angelegenheit ist, jedes Mal alle Siegelteile zu benötigen, einige von ihnen sind abwesend und reisen manchmal, so dass es ziemlich kompliziert werden kann, alle Siegelteile zu bekommen. Sie haben also eine Idee: Sie sind sich einig, dass, solange man mehr als die Hälfte des Siegels des Königs auf einem Brief sehen kann (3/4+ Siegel), das Siegel als gültig angesehen wird und die Autorität des Königreichs trägt.

3/4+ Siegel == Schwellenkryptographie

Eines Tages erkennen die Erben, dass der Handwerksmeister unehrlich war und eine Kopie des ursprünglichen Elfenbeinstempels des Königs aufbewahrte und dass er sie im ganzen Königreich an einige Übeltäter verkaufte. Die Erben beschließen dann, einen neuen Stempel für ihr Königreich zu erstellen. Aber um den Fehler des letzten Mals zu vermeiden, stellen sie jeweils einen Handwerker ein, um ein einzelnes neues Stück einer neuen Briefmarke herzustellen. Jeder Erbe hat sein eigenes Siegel, das er auf seiner Seite geschaffen hat. Durch das Zusammenfügen derSie erhalten ein neues königliches Siegel, das einzigartig ist und von keiner einzelnen Briefmarke gefälscht werden kann. Sie dekretieren, dass die Vereinigung von mehr als der Hälfte dieser Siegel die Autorität des Königreichs darstellt. Da niemand jemals den vollständigen Stempel gesehen hat, können sie sicher sein, dass diesmal niemand schummeln wird.

separat erstellte Stempel, die ein einzigartiges Siegel bilden == DKG

Im sicheren Netzwerk wird DKG von den Ältesten verwendet, um den Abschnittsschlüssel zu generieren, der die Abschnittsautorität trägt. In der SN-Terminologie ist der Genesis-Schlüssel (Schlüssel des ersten Knotens im Netzwerk) wie der Stempel des Königs. Sobald weitere Mitglieder beitreten, führen der Genesis-Knoten und neue Knoten DKG aus, um einen neuen Abschnittsschlüssel zu erstellen. Sie erstellen jeweils ihren eigenen Schlüssel-Share (winzige Stempel), aber sie haben nie die Schlüssel des anderen gesehen, sodass niemand jemals den gesamten Schlüssel in seinen Händen hat. Jedes Mal, wenn sich die Ältesten (die Erben) ändern, führen die Knoten DKG durch, um einen neuen Abschnittsschlüssel zu erstellen. Dies ist ziemlich sicher, da man eine Mehrheit der älteren Knoten kontrollieren müsste, um Sektionsautorität zu haben (mehr als die Hälfte des Siegels des Königreichs).

DKG von Poanetwork

hbbft von Poanetwork (Honey Badger Byzantine Fault Tolerant Konsensalgorithmus) hat eine ziemlich einfache Implementierung von DKG, die keine Timer verwendet. Ihr Code wurde von einigen sachkundigen Krypto-Leuten geprĂĽft, das ist also auch ein groĂźer Vorteil gegenĂĽber unserem.

Der SchlĂĽsselerzeugungsalgorithmus von HBBFT in KĂĽrze:

  • Die Teilnehmer erzeugen jeweils „Teile“, die sie an die anderen senden
  • Die Teilnehmer ĂĽberprĂĽfen alle „Teile“ und generieren „Acks“ (Bestätigungen) fĂĽr jeden von ihnen, die auch an die anderen gesendet werden
  • SchlieĂźlich kann jeder seinen eigenen Keyshare aus den Parts und Acks generieren

Es gibt jedoch einen Haken! Sie alle mĂĽssen die gleichen Sets* von Parts und Acks verarbeiten!

Aus ihren Dokumenten:

Wenn Alices Ack von Bob bearbeitet wurde, aber nicht von Carol, könnten Bob und Carol unterschiedliche öffentliche Schlüsselsätze und geheime Schlüsselanteile erhalten, die nicht übereinstimmen.
Eine Möglichkeit, dies sicherzustellen, besteht darin, die Nachrichten vor der Bearbeitung in ein öffentliches Hauptbuch zu übernehmen.

Obwohl keine Timer beteiligt sind, erfordert dieser Algorithmus, dass Knoten aufeinander warten.

Integration mit Safe

Wir müssen sicherstellen, dass alle Teilnehmer Zugang zu denselben Sätzen von „Parts“ und „Acks“ haben. Die Dokumente von Poanetwork schlagen vor, ein verteiltes Ledger wie eine Blockchain zu verwenden, um sicherzustellen, dass alle Teilnehmer die gleichen Sets haben. Wir haben keine Blockchain in Safe - aber das ist in Ordnung. Unser Team hatte eine Idee mit Broadcast-signierten Nachrichten, die keinen vollständigen Konsens erfordern! Es funktioniert wie folgt:

  • Senden Sie „Teile“ in einer signierten Nachricht
  • Warten Sie, bis alle 7 Teile eintreffen, senden Sie das signierte Set
  • Warten Sie, bis alle 7 identisch signierten Sätze von Teilen eintreffen
  • Senden Sie „Acks“.
  • Warten Sie, bis alle 7 Acks eintreffen, senden Sie das signierte Set
  • Warten Sie, bis alle 7 identisch signierten Acks-Sätze eintreffen
  • Sobald ein Knoten 7 signierte Sätze mit denselben „Acks“ erhält, kann er den SchlĂĽsselanteil aus den vereinbarten „Teilen“ und „Acks“ generieren

Die Tatsache, dass wir diese zusätzliche Runde von All-to-All-Broadcast haben, um alle Knoten dazu zu bringen, zu sehen, dass alle Knoten die gleichen „Teile“ und „Acks“ gesehen haben, macht diesen Algorithmus widerstandsfähig gegenüber einer bestimmten Anzahl von byzantinischen Knoten. Es ist auch einfach zu beweisen, dass ein Knoten betrogen hat, indem er zwei verschiedene und widersprüchliche Nachrichten anzeigt, die er signiert hat.

Obwohl dieser einfache Algorithmus sicherstellt, dass sich die Knoten auf die gleichen „Teile“ und „Acks“ einigen, garantiert er nicht die Beendigung im Falle eines bestimmten Nachrichtenverlusts. Das ist in Ordnung, wir begrüßen es und sehen es nicht als Misserfolg an.

Wenn genügend Botschaften verloren gehen, nehmen wir an, dass diese Gruppe von Kandidaten überhaupt nicht geeignet war, Älteste zu werden. Bei jedem Abwanderungsereignis (Knoten tritt einer Sektion bei oder verlässt sie) prüfen die Ältesten, ob die ältesten 7 Mitglieder in der Sektion die aktuellen Ältesten sind. Ist dies nicht der Fall, bitten sie die ältesten Mitglieder, die DKG zu gründen. Dieser Vorgang wird als Handover bezeichnet.

Abwanderungsereignisse können ziemlich schnell passieren, sodass mehrere gleichzeitige DKGs möglich sind. Es ist ein Rennen zwischen mehreren DKGs, und wer zuerst ins Ziel kommt, gewinnt das Recht, den Übergabeprozess zu durchlaufen. Viele DKGs bleiben entweder noch nicht fertig oder hängen aufgrund von Nachrichtenverlusten fest, aber das ist in Ordnung, es ist Teil des Spiels. Jeder Knoten hält seinen aktuellen DKG-Status in einem temporären Satz, der bei jeder Übergabe zurückgesetzt wird.

Dieser Algorithmus macht DKG zu einem passiven Prozess: Es handelt sich lediglich um eine Nachrichtenbehandlung. Es gibt keine Zeitgeber, keine Abrufe von Daten auf anderen Knoten, nur eine vorübergehende Gruppe laufender DKGs, die darauf warten, nach der nächsten Übergabe abgeschlossen oder verworfen zu werden.

Wenn aus irgendeinem Grund mehrere Nachrichten verworfen werden und ein DKG nicht beendet werden kann, ist dies einfach zu handhaben. Wir können es Dysfunction überlassen, schließlich inaktive/langsame Nodes aufzuspüren und abzuwählen. Dies wiederum löst c ausHurn, und dieser Churn löst eine neue DKG-Runde aus.

VerknĂĽpfungen


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!