EinfĂŒhrung
function getAbsolutZufallsZahl() {
return 4; // gibt eine absolut zufĂ€llige Zahl zurĂŒck!
}Wie beim Konzept des absolut sicheren chiffrierten Protokolls aus der Kryptographie versuchen die realen "Publicly Verifiable Random Beacon" (im Folgenden PVRB) Protokolle nur, der idealen Schematik möglichst nahe zu kommen, da sie in realen Netzwerken nicht in reiner Form anwendbar sind: Es muss streng ĂŒber ein einzelnes Bit verhandelt werden, es sollten viele Runden stattfinden, und alle Nachrichten mĂŒssen ideal schnell und immer zugestellt werden. In realen Netzwerken ist dies natĂŒrlich nicht der Fall. Daher gibt es bei der Gestaltung von PVRB fĂŒr bestimmte Aufgaben in modernen Blockchains, neben der UnfĂ€higkeit, den erhaltenen Zufall und die kryptografische Sicherheit zu kontrollieren, auch viele rein architektonische und technische Probleme.
Die Blockchain selbst fungiert fĂŒr PVRB im Grunde als Kommunikationsumgebung, in der Nachrichten=Transaktionen sind. Dies ermöglicht es, sich teilweise von Netzwerkproblemen, Nachrichtenverlusten und Problemen mit Zwischen-Software zu abstrahieren â all diese Risiken ĂŒbernimmt das dezentrale Netzwerk, und der gröĂte Wert fĂŒr PVRB ist die Unmöglichkeit, eine bereits gesendete Transaktion zurĂŒckzuziehen oder zu beschĂ€digen â dies verhindert, dass Teilnehmer die Teilnahme am Protokoll ablehnen, es sei denn, sie haben einen erfolgreichen Angriff auf den Konsens durchgefĂŒhrt. Dieses Sicherheitsniveau ist akzeptabel, daher muss PVRB gegenĂŒber Absprachen der Teilnehmer ebenso robust sein wie die Haupt-Blockchain. AuĂerdem deutet dies darauf hin, dass PVRB Teil des Konsenses sein muss, wenn sich das Netzwerk ĂŒber die Haupt-Blockchain geeinigt hat, lassen Sie es uns gleichzeitig auch ĂŒber den einzigen ehrlichen resultierenden Zufall einigen. Alternativ kann PVRB ein einfaches eigenstĂ€ndiges Protokoll sein, das durch einen Smart Contract implementiert wird und asynchron zum Blockchain und den Blöcken arbeitet. Beide AnsĂ€tze haben ihre Vor- und Nachteile, und die Wahl zwischen ihnen ist Ă€uĂerst nicht trivial.
Zwei Möglichkeiten zur Implementierung von PVRB
Lassen Sie uns die zwei Varianten der Implementierung von PVRB nĂ€her beschreiben â die Standalone-Version, die mit einem vom Blockchain unabhĂ€ngigen Smart Contract arbeitet, und die consensus-integrated â in das Protokoll integriert, gemÀà dem sich das Netzwerk ĂŒber die Blockchain und die einbezogenen Transaktionen einigt. In allen FĂ€llen werde ich beliebte Blockchain-Engines im Sinn haben: Ethereum, EOS und alle, die ihnen in Bezug auf die Bereitstellung und Verarbeitung von Smart Contracts Ă€hnlich sind.
Standalone-Vertrag
In dieser Variante ist PVRB ein Smart Contract, der Transaktionen von Random-Producern (im Folgenden RP) akzeptiert, sie verarbeitet, die Ergebnisse kombiniert und schlieĂlich zu einem Wert gelangt, den jeder Benutzer aus diesem Vertrag erhalten kann. Dieser Wert muss nicht direkt im Vertrag gespeichert werden, sondern kann nur durch Daten dargestellt werden, aus denen deterministisch ein einziges Ergebnis des Randoms abgeleitet werden kann. In diesem Schema sind RP die Benutzer der Blockchain, und jeder kann am Generierungsprozess teilnehmen.
Die Variante mit dem Standalone-Vertrag ist gut:
- PortabilitÀt (VertrÀge können von Blockchain zu Blockchain getragen werden)
- Einfachheit der Umsetzung und des Testens (VertrÀge lassen sich leicht schreiben und testen)
- Bequemlichkeit bei der Umsetzung wirtschaftlicher Modelle (es ist einfach, einen Token zu erstellen, dessen Logik den Zielen von PVRB dient)
- Möglichkeit der AusfĂŒhrung in bereits bestehenden Blockchains
Es hat jedoch auch Nachteile:
- starke EinschrÀnkungen der Ressourcen bei Berechnungen, Transaktionsvolumen und Speicher (einfach gesagt CPU / RAM / IO)
- EinschrĂ€nkungen fĂŒr Operationen innerhalb des Vertrags (nicht alle Befehle sind verfĂŒgbar, schwierig externe Bibliotheken zu integrieren)
- Unmöglichkeit, einen schnelleren Nachrichtenaustausch zu organisieren als Transaktionen in die Blockchain aufgenommen werden
Diese Variante eignet sich zur Implementierung von PVRB, das in einem bereits bestehenden Netzwerk gestartet werden muss, das keine komplexe Kryptografie enthÀlt und nicht viele Interaktionen erfordert.
Konsens-integriert
In dieser Variante ist PVRB im Code des Blockchain-Nodes implementiert, ist eingebettet oder arbeitet parallel zum Nachrichten Austausch zwischen den Nodes der Blockchain. Die Ergebnisse des Protokolls werden direkt in die erzeugten Blöcke geschrieben, wĂ€hrend die Nachrichten des Protokolls ĂŒber das P2P-Netzwerk zwischen den Nodes gesendet werden. Da das Protokoll Zahlen als Ergebnis hat, die in den Blöcken festgehalten werden mĂŒssen, muss das Netzwerk einen Konsens darĂŒber erreichen. Das bedeutet, dass die PVRB-Nachrichten wie auch die Transaktionen von den Nodes validiert und in die Blöcke aufgenommen werden mĂŒssen, damit jedes Netzwerk-Mitglied die Einhaltung des PVRB-Protokolls validieren kann. Dies fĂŒhrt automatisch zu einer offensichtlichen Lösung: Wenn das Netzwerk sich ĂŒber den Konsens bezĂŒglich eines Blocks und der darin enthaltenen Transaktionen einigt, dann sollte PVRB Teil des Konsenses sein und kein eigenstĂ€ndiges Protokoll. Andernfalls könnte es sein, dass ein Block aus Sicht des Konsenses gĂŒltig ist, aber das PVRB-Protokoll nicht eingehalten wird. Aus Sicht von PVRB könnte der Block dann nicht akzeptiert werden. Wenn also die âkonsens-integrierteâ Variante gewĂ€hlt wird, wird PVRB zu einem wichtigen Teil des Konsenses.
Bei der Beschreibung der Implementierungen von PVRB auf Konsensebene im Netzwerk können die Fragen zur FinalitĂ€t auf keinen Fall umgangen werden. FinalitĂ€t ist ein Mechanismus, der in deterministischen Konsensen verwendet wird, um einen Block (und die ihn fĂŒhrende Kette) zu fixieren, der final ist und niemals verworfen wird, selbst wenn ein paralleler Fork entsteht. Zum Beispiel gibt es in Bitcoin keinen solchen Mechanismus â wenn eine Kette mit gröĂerer Schwierigkeit veröffentlicht wird, ersetzt sie jede weniger komplexe, unabhĂ€ngig von der LĂ€nge der Ketten. In EOS hingegen sind die sogenannten Last Irreversible Blocks final, die im Durchschnitt alle 432 Blöcke erscheinen (12*21 + 12*15, pre-vote + pre-commit). Dieser Prozess ist im Wesentlichen das Warten auf 2/3 der Unterschriften der Block-Produzenten (BP). Bei dem Auftreten von Forks, die Ă€lter sind als der letzte LIB, werden sie einfach verworfen. Dieser Mechanismus ermöglicht es, garantiert zu behaupten, dass eine Transaktion in die Blockchain aufgenommen wurde und niemals zurĂŒckgezogen wird, egal welche Ressourcen der Angreifer hat. AuĂerdem sind finalisierte Blöcke die Blöcke, die von 2/3 der BP in Hyperledger, Tendermint und anderen pBFT-basierten Konsensen unterschrieben wurden. Zudem ergibt es Sinn, ein Protokoll zur Sicherstellung der FinalitĂ€t als Erweiterung ĂŒber dem Konsens zu gestalten, da es asynchron mit der Produktion und Veröffentlichung von Blöcken arbeiten kann. Hier ist eine gute ĂŒber die EndgĂŒltigkeit in Ethereum.
Die EndgĂŒltigkeit ist fĂŒr Nutzer von entscheidender Bedeutung, da sie sonst Opfer einer "Double Spend"-Attacke werden können, wenn BP Blöcke "vorhĂ€lt" und diese veröffentlicht, nachdem das Netzwerk eine gute Transaktion "gesehen" hat. Wenn es keine EndgĂŒltigkeit gibt, ersetzt der veröffentlichte Fork den Block mit der "guten" Transaktion durch einen anderen aus dem "schlechten" Fork, in dem dieselben Mittel auf die Adresse des Angreifers ĂŒbertragen werden. Im Falle von PVRB werden die Anforderungen an die EndgĂŒltigkeit sogar noch strenger, da der Aufbau von Forks fĂŒr PVRB die Möglichkeit fĂŒr den Angreifer bedeutet, mehrere Varianten von ZufĂ€llen vorzubereiten, um den vorteilhaftesten zu veröffentlichen und die mögliche Angriffszeit zu begrenzen - eine gute Lösung.
Daher ist die beste Lösung, PVRB und EndgĂŒltigkeit in ein Protokoll zu integrieren - dann ist der finalisierte Block = finalisierter Zufall, und das ist genau das, was erreicht werden sollte. Jetzt erhalten die Spieler garantierten Zufall in N Sekunden und können sicher sein, dass er nicht zurĂŒckgesetzt oder erneut gespielt werden kann.
Die Option mit dem konsens-integrierten Ansatz ist gut:
- mit der Möglichkeit der asynchronen Umsetzung in Bezug auf die Blockproduktion - Blöcke werden wie gewohnt produziert, aber parallel dazu kann das PVRB-Protokoll arbeiten, das ZufÀlle nicht bei jedem Block generiert.
- mit der Möglichkeit, selbst schwere Kryptografie zu implementieren, ohne die EinschrÀnkungen, die bei Smart Contracts bestehen.
- mit der Möglichkeit, den Nachrichten Austausch schneller zu organisieren, als Transaktionen in die Blockchain aufgenommen werden, z.B. kann ein Teil des Protokolls zwischen Knoten arbeiten, ohne Nachrichten im Netzwerk zu verbreiten.
Es hat jedoch auch Nachteile:
- Schwierigkeiten beim Testen und Entwickeln - es muss mit Netzwerkfehlern, ausgefallenen Knoten und Hardforks des Netzwerks emuliert werden.
- Fehler in der Implementierung erfordern einen Hardfork des Netzwerks.
Beide Implementierungsmethoden von PVRB haben ihre Berechtigung, aber die Umsetzung auf Smart Contracts in modernen Blockchains ist dennoch ziemlich stark durch die Rechenressourcen eingeschrĂ€nkt, und jeder Ăbergang zu ernsthafter Kryptografie ist oft einfach unmöglich. Und ernsthafte Kryptografie wird benötigt, wie im Folgenden demonstriert wird. Obwohl dieses Problem eindeutig zeitweilig ist, wird ernsthafte Kryptografie in VertrĂ€gen benötigt, um viele Aufgaben zu lösen, und allmĂ€hlich erscheint sie (z.B. systematische VertrĂ€ge fĂŒr zkSNARKs in Ethereum).
Die Blockchain, die einen transparenten und zuverlĂ€ssigen Kommunikationskanal des Protokolls gewĂ€hrleistet, macht dies nicht kostenlos. Jedes dezentrale Protokoll muss die Möglichkeit eines Sybil-Angriffs berĂŒcksichtigen, da jede Aktion von einer Vielzahl von Konten rechtmĂ€Ăig durchgefĂŒhrt werden kann. Daher mĂŒssen beim Entwurf die FĂ€higkeiten der Angreifer zur Schaffung einer beliebigen Anzahl von Teilnehmern berĂŒcksichtigt werden, die im Bunde agieren.
PVRB und Blockvariablen.
Ich habe nicht gelogen, als ich sagte, dass es bislang keinen guten PVRB gibt, der durch viele GlĂŒcksspielanwendungen ĂŒberprĂŒft wurde, in Blockchains implementiert. Woher kommt dann die groĂe Anzahl an GlĂŒcksspielanwendungen in Ethereum und EOS? Das ĂŒberrascht mich genauso wie euch, woher haben sie in einer vollstĂ€ndig deterministischen Umgebung so viele "robuste" Zufallswerte?
Die bevorzugte Methode, um Zufall in der Blockchain zu erzeugen, besteht darin, eine "unvorhersehbare" Information aus dem Block zu nehmen und auf dieser Basis Zufall zu generieren, indem man einen oder mehrere Werte einfach hash-iert. Ein guter Artikel ĂŒber die Probleme solcher Schemata. . Man kann eines der "unvorhersehbaren" Werte im Block nehmen, wie zum Beispiel den Block-Hash, die Anzahl der Transaktionen, die Netzwerk-Schwierigkeit und andere im Voraus unbekannte Werte. Dann hash-iert man sie, einen oder mehrere, und theoretisch sollte das der wirklich wahre Zufall sein. Man könnte sogar im Whitepaper hinzufĂŒgen, dass euer Schema "post-quantum-sicher" ist (da es quantensichere Hash-Funktionen gibt :)).
Aber selbst quantensichere Hashes sind leider nicht ausreichend. Das Geheimnis liegt in den Anforderungen an den PVRB, an die ich aus dem vorherigen Artikel erinnere:
- Das Ergebnis muss eine nachweisbar gleichmĂ€Ăige Verteilung aufweisen, d.h. es muss auf nachweisbar robuster Kryptografie basieren.
- Es ist unmöglich, irgendein Bit des Ergebnisses zu kontrollieren. Folglich kann das Ergebnis nicht im Voraus vorhergesagt werden.
- Der Protokollgenerator darf nicht durch Nicht-Teilnahme am Protokoll oder durch Ăberlastung des Netzwerks mit Angreifer-Nachrichten sabotiert werden.
- Alles oben Genannte muss gegenĂŒber Absprachen einer zulĂ€ssigen Anzahl unredlicher Teilnehmer des Protokolls robust sein (zum Beispiel 1/3 der Teilnehmer).
In diesem Fall wird nur die Anforderung 1 eingehalten, und 2 wird nicht eingehalten. Durch das Hashen von unvorhersehbaren Werten aus dem Block erhalten wir eine gleichmĂ€Ăige Verteilung und gute Zufallswerte. Aber BP hat mindestens die Möglichkeit, "den Block zu veröffentlichen oder nicht". So kann BP mindestens zwischen ZWEI Varianten von Zufall wĂ€hlen: "seinen" und den, der entsteht, wenn jemand anderes den Block erstellt. BP kann im Voraus "nachsehen", was passiert, wenn er den Block veröffentlicht, und einfach entscheiden, ob er das tun will oder nicht. So kann er, wenn er zum Beispiel "gerade-ungerade" oder "rot/schwarz" beim Roulette spielt, den Block nur veröffentlichen, wenn er einen Gewinn sieht. Das macht auch die Strategie der Verwendung des Hashes des Blocks "aus der Zukunft" unbrauchbar. In diesem Fall wird gesagt, dass "der Zufall verwendet wird, der durch das Hashen der aktuellen Daten und des Hashes des zukĂŒnftigen Blocks mit einer Höhe von beispielsweise N + 42 entsteht, wobei N die aktuelle Blockhöhe ist. Das verstĂ€rkt das Schema ein wenig, lĂ€sst BP aber dennoch, wenn auch in der Zukunft, wĂ€hlen, ob er den Block zurĂŒckhalten oder veröffentlichen möchte.
Die Software von BP wird in diesem Fall komplizierter, aber nicht stark. Einfach bei der Validierung und EinfĂŒgung von Transaktionen in den Block erfolgt eine schnelle ĂberprĂŒfung, ob es einen Gewinn geben wird, und möglicherweise die Anpassung eines Transaktionsparameters, um eine hohe Gewinnwahrscheinlichkeit zu erzielen. Dabei ist es nahezu unmöglich, einen intelligenten BP bei solchen Manipulationen zu erwischen; man kann jedes Mal neue Adressen verwenden und peu Ă peu gewinnen, ohne Verdacht zu erregen.
Daher sind die Methoden, die Informationen aus dem Block verwenden, nicht als universelle Implementierung von PVRB geeignet. In einer eingeschrĂ€nkten Variante, mit BeschrĂ€nkungen auf die EinsatzgröĂe, Begrenzungen der Spieleranzahl und/oder KYC-Registrierung (um zu verhindern, dass ein Spieler mehrere Adressen nutzen kann), können diese Systeme fĂŒr kleine Spiele funktionieren, aber nicht mehr.
PVRB und Commit-Reveal.
Nun, danke dem Hashing und zumindest der relativen Unvorhersehbarkeit des Blockhashes und anderer Variablen. Wenn das Problem des Front-Running von Minern gelöst wird, sollte etwas brauchbareres entstehen. Lassen Sie uns die Benutzer in dieses Schema einbeziehen â sie sollten auch den Zufall beeinflussen: Jeder Mitarbeiter des Supports wird Ihnen sagen, dass das Unberechenbarste in IT-Systemen die Handlungen der Benutzer sind đ
Ein naives Schema, bei dem die Benutzer einfach zufĂ€llige Zahlen senden und das Ergebnis beispielsweise als Hash ihrer Summe berechnet wird, ist nicht geeignet. In diesem Fall kann der letzte Spieler, der spielt, durch die Auswahl seiner eigenen Zufallszahl kontrollieren, welches Ergebnis entsteht. Daher wird ein sehr weit verbreitetes Muster, das als Commit-Reveal bekannt ist, verwendet. Die Teilnehmer senden zunĂ€chst Hashes ihrer Zufallszahlen (Commits) und öffnen dann die Zufallszahlen selbst (Reveals). Die Phase âRevealâ beginnt erst, nachdem die erforderlichen Commits gesammelt wurden, sodass die Teilnehmer genau die Zufallszahl senden können, deren Hash sie zuvor gesendet haben. Jetzt kombinieren wir all dies mit den Blockparametern, wobei wir besser eine aus der Zukunft auswĂ€hlen (die Zufallszahl kann nur in einem der zukĂŒnftigen Blöcke bekannt gegeben werden), und voilĂ â die Zufallszahl ist bereit! Jetzt hat jeder Spieler Einfluss auf die resultierende Zufallszahl und kann den böswilligen BP âbesiegenâ, indem er dessen Zufallszahl mit seiner, im Voraus unbekannten, Zufallszahl ĂŒberdeckt... AuĂerdem kann man einen Schutz gegen das Sabotieren des Protokolls hinzufĂŒgen, indem man ein Nicht-Reveal in der Reveal-Phase vorschreibt â indem man einfach verlangt, dass beim Commit eine gewisse Summe angehĂ€ngt wird â eine Sicherheitskaution, die nur wĂ€hrend des Reveal-Prozesses zurĂŒckgegeben wird. In diesem Fall wĂ€re es unvorteilhaft, einen Commit zu machen und keinen Reveal durchzufĂŒhren.
Es war ein guter Versuch, und solche Systeme gibt es auch in Gaming DApps, aber leider reicht das wieder nicht aus. Jetzt kann das Ergebnis nicht nur von einem Miner beeinflusst werden, sondern auch von jedem Teilnehmer des Protokolls. Der Wert selbst kann nach wie vor kontrolliert werden, jedoch mit geringerer VariabilitÀt und gegen Bezahlung, aber wie im Fall des Miners kann der Random-Producer (RP) entscheiden, ob er den Reveal macht und weiterhin aus mindestens zwei zufÀlligen Optionen auswÀhlen.
Aber es gibt die Möglichkeit, diejenigen zu bestrafen, die einen Commit machen und keinen Reveal durchfĂŒhren, und dieses Schema wird noch nĂŒtzlich sein. Ihre Einfachheit ist ein ernsthaftes Plus â ernsthaftere Protokolle erfordern wesentlich leistungsstĂ€rkere Berechnungen.
PVRB und deterministische Signaturen.
Es gibt noch einen weiteren Weg, um RP zu einem pseudorandomisierten Wert zu bringen, auf den er keinen Einfluss nehmen kann, wenn ihm ein âVorbildâ gegeben wird â dies ist eine deterministische Signatur. Eine solche Signatur ist zum Beispiel RSA, und nicht ECS. Wenn RP ein SchlĂŒsselpaar hat: RSA und ECC, und er mit seinem privaten SchlĂŒssel einen bestimmten Wert signiert, dann erhĂ€lt er im Fall von RSA EINE UND NUR EINE Signatur, wĂ€hrend er im Fall von ECS eine beliebige Anzahl von unterschiedlichen gĂŒltigen Signaturen generieren kann. Dies geschieht, weil bei der Erstellung einer ECS-Signatur eine zufĂ€llige Zahl verwendet wird, die vom Unterzeichner gewĂ€hlt wird, und diese kann nach Belieben ausgewĂ€hlt werden, wodurch der Unterzeichner die Möglichkeit hat, eine von mehreren Signaturen auszuwĂ€hlen. Im Fall von RSA: âein Eingabewertâ + âein SchlĂŒsselpaarâ = âeine Signaturâ. Es ist nicht möglich vorherzusagen, welche Signatur von einem anderen RP erstellt wird, daher kann PVRB mit deterministischen Signaturen durch Kombination von RSA-Signaturen mehrerer Teilnehmer organisiert werden, die denselben Wert signiert haben. Zum Beispiel â der vorherige Zufallswert. In einem solchen Schema werden viele Ressourcen gespart, da die Signaturen gleichzeitig auch eine BestĂ€tigung der korrekten Verhaltensweise gemÀà dem Protokoll und eine Quelle fĂŒr Zufallswerte darstellen.
Dennoch bleibt selbst mit deterministischen Signaturen das Schema anfĂ€llig fĂŒr das âLast Actorâ-Problem. Der letzte Teilnehmer kann immer noch entscheiden, ob er seine Signatur veröffentlicht oder nicht, und somit das Ergebnis kontrollieren. Man kann das Schema weiterentwickeln, Hashes von Blöcken hinzufĂŒgen, Runden erstellen, um das Ergebnis im Voraus unvorhersehbar zu machen, aber all diese Tricks lassen das Problem des Einflusses eines einzelnen Teilnehmers auf das kollektive Ergebnis in einer untrusted Umgebung ungelöst und funktionieren nur unter wirtschaftlichen und zeitlichen EinschrĂ€nkungen. DarĂŒber hinaus ist die GröĂe der RSA-SchlĂŒssel (1024 und 2048 Bit) recht groĂ, wĂ€hrend die GröĂe fĂŒr Blockchain-Transaktionen ein Ă€uĂerst wichtiger Parameter ist. Offenbar ist es nicht einfach, das Problem zu lösen, also gehen wir weiter.
PVRB und Secret Sharing-Schemata
In der Kryptographie gibt es Systeme, die es einem Netzwerk ermöglichen können, sich auf genau einen Wert PVRB zu einigen, wobei solche Systeme gegen böswillige Handlungen eines Teils der Teilnehmer robust sind. Ein nĂŒtzliches Protokoll, mit dem man sich vertraut machen sollte, ist das Shamir Secret Sharing. Es dient dazu, ein Geheimnis (zum Beispiel einen geheimen SchlĂŒssel) in mehrere Teile aufzuteilen und diese Teile an N Teilnehmer zu verteilen. Das Geheimnis wird so verteilt, dass fĂŒr die Wiederherstellung M Teile aus N ausreichend sind, wobei es beliebige M Teile sein können. Einfach ausgedrĂŒckt, wenn man einen Graphen einer unbekannten Funktion hat, tauschen die Teilnehmer Punkte auf dem Graphen aus, und nach Erhalt von M Punkten kann die gesamte Funktion wiederhergestellt werden.
Eine gute ErklÀrung findet sich in und es ist praktisch, damit zu experimentieren, um das Protokoll im Kopf durchzugehen, auf Seite.
WĂ€re das FSSS-Schema (Fiat-Shamir Secret Sharing) in seiner reinsten Form anwendbar â das wĂ€re ein unzerstörbarer PVRB. In der einfachsten Variante könnte das Protokoll so aussehen:
- Jeder Teilnehmer generiert einen eigenen Zufallswert und verteilt Shares davon an die anderen Teilnehmer.
- Jeder Teilnehmer gibt seine Anteile der Geheimnisse der anderen Teilnehmer preis.
- Wenn der Teilnehmer mehr als M Shares hat, kann die Zahl dieses Teilnehmers berechnet werden, und sie wird eindeutig sein, unabhÀngig von der Auswahl der aufgedeckten Teilnehmer.
- Die Kombination der aufgedeckten Zufallswerte ist der gesuchte PVRB.
Hier hat ein einzelner Teilnehmer keinen Einfluss mehr auf die Ergebnisse des Protokolls, es sei denn, seine Teilnahme ist entscheidend fĂŒr das Erreichen des Schwellenwerts fĂŒr die Offenlegung der Zufallswerte. Daher funktioniert dieses Protokoll, solange genĂŒgend Teilnehmer, die dem Protokoll folgen, und verfĂŒgbare RP vorhanden sind, und erfĂŒllt die Anforderungen an kryptographische Robustheit und ist gegen das Problem des "letzten Akteurs" resistent.
Das könnte die ideale Variante sein, dieses PVRB-Schema auf der Basis von Secret Sharing nach Fiat-Shamir wird beispielsweise in einem Artikel beschrieben. Aber wie bereits erwĂ€hnt, wenn man versucht, es direkt im Blockchain-Bereich anzuwenden, treten technische EinschrĂ€nkungen auf. Hier ist ein Beispiel fĂŒr die Testimplementierung des Protokolls in einem Smart Contract auf EOS und der wichtigste Teil davon â die ĂberprĂŒfung des veröffentlichen Shares des Teilnehmers: . Der Code zeigt, dass die Validierung des Proofs mehrere skalare Multiplikationen erfordert und die Zahlen sehr groĂ sind. Dabei muss man verstehen, dass die Verifizierung in Blockchains zum Zeitpunkt erfolgt, an dem der Blockproduzent die Transaktion verarbeitet, und allgemein sollte jeder Teilnehmer die Korrektheit des Protokolls leicht ĂŒberprĂŒfen können, weshalb die Anforderungen an die Geschwindigkeit der Verifizierungsfunktion sehr hoch sind. In dieser Variante hat sich herausgestellt, dass sie nicht funktionierte, da die Verifizierung die Transaktionszeitgrenze (0,5 Sek.) nicht einhielt.
Die Effizienz der Verifizierung ist eines der wichtigsten Anforderungen an die Nutzung praktisch aller fortgeschrittenen kryptografischen Schemata in der Blockchain. Die Erstellung von Proofs, die Vorbereitung von Nachrichten â diese Verfahren können off-chain ausgelagert und auf Hochleistungssystemen durchgefĂŒhrt werden, aber die Verifizierung kann nicht umgangen werden â dies ist ein weiteres wichtiges Anforderung an PVRB.
PVRB und Threshold-Signaturen
Nachdem wir uns mit dem Schema der geheimen Teilung vertraut gemacht hatten, eröffneten wir eine ganze Klasse von Protokollen, die durch das SchlĂŒsselwort âThresholdâ verbunden sind. Wenn zur Offenlegung bestimmter Informationen die Teilnahme von M ehrlichen Teilnehmern aus N erforderlich ist und die Gruppe der ehrlichen Teilnehmer beliebige Teilmengen von N sein kann, spricht man von âThresholdâ-Schemata. Diese ermöglichen es, das Problem des âletzten Akteursâ zu lösen; jetzt, wenn ein Angreifer seinen Teil des Geheimnisses nicht offenbart, wird dies von einem anderen ehrlichen Teilnehmer erledigt. Diese Schemata ermöglichen es, sich auf einen und nur einen Wert zu einigen, selbst wenn einige Teilnehmer das Protokoll sabotieren.
Die Kombination aus deterministischen Signaturen und Threshold-Schemata ermöglicht die Entwicklung eines sehr benutzerfreundlichen und vielversprechenden Schemas zur Implementierung von PVRB - dies sind deterministische Threshold-Signaturen. Hier ist Ăber verschiedene Anwendungen von Threshold-Signaturen, und hier ist ein weiteres gutes Beispiel von Dash.
Im letzten Artikel werden BLS-Signaturen beschrieben (BLS steht fĂŒr Boneh-Lynn-Shacham, Artikel ), die eine sehr wichtige und Ă€uĂerst praktische Eigenschaft fĂŒr Programmierer besitzen â öffentliche, geheime, öffentliche SchlĂŒssel und BLS-Unterschriften können durch einfache mathematische Operationen miteinander kombiniert werden, wobei ihre Kombinationen gĂŒltige SchlĂŒssel und Unterschriften bleiben, was es ermöglicht, viele Unterschriften in einer und viele öffentliche SchlĂŒssel in einem zu aggregieren. Sie zeichnen sich auch durch Determinismus aus und liefern bei denselben Eingabedaten immer dasselbe Ergebnis. Aufgrund dieser Eigenschaft sind die Kombinationen von BLS-Unterschriften selbst gĂŒltige SchlĂŒssel, was es ermöglicht, ein Szenario zu realisieren, bei dem M von N Teilnehmern eine einzige und eindeutige Unterschrift erstellen, die deterministisch, öffentlich verifizierbar und unvorhersehbar ist, bis sie vom M-ten Teilnehmer geöffnet wird.
Im Schema mit Schwellenwert-BLS-Unterschriften unterschreibt jeder Teilnehmer mit BLS etwas (zum Beispiel den vorherigen Zufallswert), und die gesamte Schwellenwert-Unterschrift ist der gesuchte Zufallswert. Die kryptografischen Eigenschaften der BLS-Unterschriften erfĂŒllen die Anforderungen an die QualitĂ€t des Zufalls, der Schwellenwert-Teil schĂŒtzt vor âLast-Actorâ, und die einzigartige Kombinierbarkeit der SchlĂŒssel ermöglicht es, viele interessante Algorithmen zu realisieren, die beispielsweise eine effiziente Aggregation von Nachrichten im Protokoll ermöglichen.
Wenn Sie also PVRB in Ihrer Blockchain implementieren, wird es mit groĂer Wahrscheinlichkeit auf das Schema der BLS-Schwellenwertunterschriften hinauslaufen, das bereits von mehreren Projekten genutzt wird. Zum Beispiel DFinity ( Benchmark, das das Schema umsetzt, und ein Beispiel fĂŒr die Implementierung von verifiable secret sharing), oder Keep.network (hier ist ihr Zufallsbeacon , aber hier ist des Smart Contracts, der das Protokoll bedient).
Implementierung von PVRB
Leider sehen wir immer noch kein fertiges, in den PVRB-Blockchains implementiertes Protokoll, das seine Sicherheit und StabilitĂ€t bewiesen hat. Obwohl die Protokolle selbst bereit sind, ist es technisch schwierig, sie auf bestehende Lösungen anzuwenden. FĂŒr zentralisierte Systeme macht PVRB keinen Sinn, und dezentrale Systeme sind in allen Rechenressourcen streng begrenzt: CPU, Speicher, Speicherplatz, I/O. Das Design von PVRB ist eine Kombination verschiedener Protokolle, um schlieĂlich etwas zu schaffen, das wenigstens den Anforderungen an eine lebensfĂ€hige Blockchain entspricht. Ein Protokoll rechnet effizienter, benötigt aber mehr Nachrichten zwischen RP, wĂ€hrend ein anderes extrem wenige Nachrichten erfordert, aber die Erstellung des Proofs kann eine Aufgabe von vielen Minuten oder sogar Stunden sein.
Ich werde die Faktoren auflisten, die Sie bei der Auswahl eines qualitativ hochwertigen PVRB berĂŒcksichtigen sollten:
- Kryptografische Robustheit. Ihr PVRB sollte strikt unvoreingenommen sein und keine Kontrolle ĂŒber ein einzelnes Bit zulassen. In einigen Schemen ist dies nicht der Fall, also rufen Sie einen Kryptografen.
- Das Problem des "letzten Akteurs". Ihr PVRB sollte gegen Angriffe geschĂŒtzt sein, bei denen ein Angreifer, der einen oder mehrere RP kontrolliert, eine von zwei Ergebnisoptionen auswĂ€hlen kann.
- Das Problem der Protokollsabottierung. Ihr PVRB sollte gegen Angriffe geschĂŒtzt sein, bei denen ein Angreifer, der einen oder mehrere RP kontrolliert, entscheidet, ob es zufĂ€llig ist oder nicht, und garantierte oder mit einer bestimmten Wahrscheinlichkeit darauf einwirken kann.
- Das Problem der Nachrichtenmenge. Ihre RP sollten eine minimale Anzahl von Nachrichten an die Blockchain senden und synchronisierte Aktionen wie "Ich habe Informationen gesendet, warte auf eine Antwort von einem bestimmten Teilnehmer" maximal vermeiden. In P2P-Netzwerken, insbesondere geografisch verteilten, sollte man nicht auf eine schnelle Antwort hoffen.
- Das Problem der BerechnungskomplexitĂ€t. Die Verifizierung jeder Phase von PVRB on-chain sollte extrem einfach sein, da sie von allen vollstĂ€ndigen Knoten des Netzwerks durchgefĂŒhrt wird. Wenn die Implementierung mittels Smart Contracts erfolgt, sind die Anforderungen an die Geschwindigkeit sehr streng.
- Das Problem der VerfĂŒgbarkeit und Livelihood. Ihr PVRB sollte darauf abzielen, stabil zu bleiben, auch wenn ein Teil des Netzwerks fĂŒr eine gewisse Zeit nicht verfĂŒgbar ist und einige RP einfach nicht mehr funktionieren.
- Das Problem des vertrauenswĂŒrdigen Setups und der anfĂ€nglichen Verteilung der SchlĂŒssel.. Wenn Ihre PVRB das primĂ€re Setup-Protokoll verwendet, ist das eine ganz andere groĂe und ernste Geschichte. Hier ist . Wenn die Teilnehmer vor dem Beginn des Protokolls einander ihre SchlĂŒssel mitteilen mĂŒssen, ist das ebenfalls ein Problem, wenn sich die Teilnehmergruppe Ă€ndert.
- Entwicklungsprobleme. Die VerfĂŒgbarkeit von Bibliotheken in den benötigten Sprachen, deren Sicherheit und Leistung, die Ăffentlichkeit, komplexe Tests usw.
Zum Beispiel hat es bei der Threshold-BLS-Signatur ein erhebliches Problem â bevor sie mit der Arbeit beginnen können, mĂŒssen die Teilnehmer einander unbedingt die SchlĂŒssel aushĂ€ndigen und eine Gruppe organisieren, innerhalb derer der Threshold funktioniert. Das bedeutet, dass man mindestens eine Runde des Austauschs in einem dezentralisierten Netzwerk abwarten muss, und wenn man bedenkt, dass der erzeugte Zufallswert, zum Beispiel, in Spielen praktisch in Echtzeit benötigt wird, bedeutet dies, dass Sabotage des Protokolls in diesem Stadium möglich ist und die Vorteile des Threshold-Systems verloren gehen. Dieses Problem ist bereits leichter als das vorherige, erfordert aber dennoch die Entwicklung eines separaten Verfahrens zur Bildung von Threshold-Gruppen, das aus wirtschaftlichen GrĂŒnden durch Einlagen und das Bestrafen (Slashing) von Teilnehmern, die sich nicht an das Protokoll halten, geschĂŒtzt werden muss. Zudem lĂ€sst sich die BLS-Verifizierung mit einem akzeptablen Sicherheitslevel einfach nicht in eine Standardtransaktion von EOS oder Ethereum integrieren â es fehlt einfach die Zeit fĂŒr die Verifizierung. Der Code von Smart Contracts ist WebAssembly oder EVM und wird von einer virtuellen Maschine ausgefĂŒhrt. Kryptografische Funktionen sind bisher nicht nativ implementiert und arbeiten um ein Vielfaches langsamer als gewöhnliche kryptographische Bibliotheken. Viele Protokolle sind aufgrund der GröĂe von SchlĂŒsseln nicht geeignet, beispielsweise 1024 und 2048 Bit fĂŒr RSA, was 4-8 Mal mehr ist als die Standardtransaktion in Bitcoin und Ethereum.
Es spielt auch eine Rolle, ob Implementierungen in verschiedenen Programmiersprachen vorhanden sind â davon gibt es nur wenig, insbesondere fĂŒr neue Protokolle. Die Option mit der Integration in den Konsens erfordert, dass das Protokoll in der Sprache der Plattform geschrieben wird, daher muss man nach Code in Go fĂŒr geth, in Rust fĂŒr Parity, in C++ fĂŒr EOS suchen. JavaScript-Code wird von allen gesucht werden mĂŒssen, und da JavaScript und Kryptographie nicht gerade enge Freunde sind, wird WebAssembly helfen, das now eindeutig den Anspruch auf die Rolle des nĂ€chsten wichtigen Internetstandards erhebt.
Fazit
Ich hoffe, dass in der vorherigen Ich konnte Sie davon ĂŒberzeugen, dass die Generierung von Zufallszahlen auf der Blockchain fĂŒr viele Aspekte des Lebens dezentraler Netzwerke von entscheidender Bedeutung ist, und mit diesem Artikel habe ich gezeigt, dass diese Aufgabe Ă€uĂerst ehrgeizig und komplex ist, aber gute Lösungen bereits existieren. Im Allgemeinen ist das endgĂŒltige Design des Protokolls nur nach umfangreichen Tests möglich, die alle Aspekte vom Setup bis zur Simulation von AusfĂ€llen berĂŒcksichtigen. Daher werden Sie wahrscheinlich keine fertigen Rezepte in den Whitepapers von Teams oder in Artikeln finden, und wir werden uns in den nĂ€chsten ein bis zwei Jahren sicherlich nicht dazu entschlieĂen, âtun Sie dies, das ist definitiv richtigâ zu schreiben.
Bislang fĂŒr unser PVRB in der entwickelten Blockchain , haben wir uns auf die Anwendung von threshold BLS-Signaturen geeinigt und planen, PVRB auf Konsens-Ebene umzusetzen, da eine Verifizierung in Smart Contracts mit angemessenem Sicherheitsniveau derzeit noch nicht möglich ist. Es ist möglich, dass wir sofort zwei Schemes verwenden: zuerst das teure secret sharing zur Erstellung eines langfristigen random_seed, das wir dann als Grundlage fĂŒr die hochfrequente Generierung von Zufallszahlen mit deterministischen threshold BLS-Signaturen verwenden; eventuell beschrĂ€nken wir uns auf nur eines der Schemes. Vorab zu sagen, wie das Protokoll aussehen wird, ist leider unmöglich. Positiv ist lediglich, dass wie in der Wissenschaft bei ingenieurtechnischen Aufgaben ein negatives Ergebnis ebenfalls ein Ergebnis ist und jeder neue Versuch, eine Aufgabe zu lösen, eine weitere Stufe fĂŒr die Forschung aller ist, die sich mit dem Problem befassen. Um die Anforderungen des GeschĂ€fts zu erfĂŒllen, lösen wir ein konkretes praktisches Problem â die Bereitstellung einer zuverlĂ€ssigen Quelle von Entropie fĂŒr Spieleanwendungen. Daher mĂŒssen wir auch der Blockchain selbst Beachtung schenken, insbesondere den Fragen der KettenfinalitĂ€t und der Governance des Netzwerks.
Auch wenn wir bisher kein nachgewiesenes, robustes PVRB in Blockchains sehen, das ausreichend lange genutzt wurde, um die PrĂŒfungen echter Anwendungen, mehrerer Audits, Belastungen und natĂŒrlich realer Angriffe zu bestehen, belegt die Anzahl der möglichen Wege, dass eine Lösung existiert und einer dieser Algorithmen letztendlich das Problem lösen wird. Wir freuen uns darauf, die Ergebnisse zu teilen und danken den anderen Teams, die sich ebenfalls mit diesem Thema befassen, fĂŒr ihre Artikel und ihren Code, die es Ingenieuren ermöglichen, nicht zweimal in die gleichen Fallen zu tappen.
Wenn Sie also einem Programmierer begegnen, der ein dezentrales Random-Tool entwirft, seien Sie vorsichtig und aufmerksam. Bei Bedarf leisten Sie psychologische Hilfe đ
Quelle: habr.com
