{"id":33888,"date":"2019-10-31T21:55:15","date_gmt":"2019-10-31T18:55:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\/"},"modified":"2019-10-31T21:55:15","modified_gmt":"2019-10-31T18:55:15","slug":"sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","title":{"rendered":"Zufallszahlen und dezentrale Netzwerke: Implementierungen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Einf\u00fchrung<\/h1>\n<p><\/p>\n<pre><code class=\"plaintext\">function getAbsolutelyRandomNumer() {\n        return 4; \/\/ gibt eine absolut zuf\u00e4llige Zahl zur\u00fcck!\n}<\/code><\/pre>\n<p><\/p>\n<p>\u00c4hnlich wie bei der Idee einer absolut sicheren Verschl\u00fcsselung in der Kryptografie versuchen echte Protokolle \"Publicly Verifiable Random Beacon\" (PVRB) lediglich, dem idealen Schema so nah wie m\u00f6glich zu kommen, da es in realen Netzwerken in seiner reinen Form nicht anwendbar ist: Es muss strikt \u00fcber ein einzelnes Bit verhandelt werden, es sollte viele Runden geben, und alle Nachrichten m\u00fcssen perfekt schnell und immer zuverl\u00e4ssig zugestellt werden. In realen Netzwerken ist dies jedoch nicht der Fall. Daher ergeben sich bei der Gestaltung von PVRB f\u00fcr spezifische Aufgaben in modernen Blockchains neben der Unm\u00f6glichkeit, die erhaltene Zuf\u00e4lligkeit und kryptografische Sicherheit zu kontrollieren, noch viele rein architektonische und technische Probleme.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Die Blockchain fungiert f\u00fcr PVRB im Wesentlichen als Kommunikationsumgebung, in der Nachrichten gleichbedeutend mit Transaktionen sind. Dies erm\u00f6glicht eine teilweise Abstraktion von Netzwerkproblemen, dem Verlust von Nachrichten und Problemen mit Middleware \u2013 all diese Risiken werden von einem dezentralen Netzwerk \u00fcbernommen. Der Hauptvorteil f\u00fcr PVRB liegt in der Unm\u00f6glichkeit, eine bereits gesendete Transaktion zur\u00fcckzuziehen oder zu \u00e4ndern, was es den Teilnehmern unm\u00f6glich macht, die Teilnahme am Protokoll abzulehnen, es sei denn, sie f\u00fchren einen erfolgreichen Angriff auf den Konsens durch. Dieses Sicherheitsniveau ist akzeptabel; daher muss PVRB gegen\u00fcber Kollusionen der Teilnehmer ebenso widerstandsf\u00e4hig sein wie die Haupt-Blockchain. Dies deutet auch darauf hin, dass PVRB Teil des Konsenses sein muss, wenn das Netzwerk sich \u00fcber die Haupt-Blockkette einigt, und gleichzeitig muss es sich auch \u00fcber einen einzigen fairen Zufallswert einigen. Alternativ k\u00f6nnte PVRB einfach ein eigenst\u00e4ndiges Protokoll sein, das durch einen Smart Contract implementiert ist und asynchron zur Blockchain und den Bl\u00f6cken arbeitet. Beide Methoden haben ihre Vorz\u00fcge und Nachteile, und die Wahl zwischen ihnen ist alles andere als trivial. <\/p>\n<p><\/p>\n<h2 id=\"dva-sposoba-implementacii-pvrb\">Zwei M\u00f6glichkeiten zur Implementierung von PVRB<\/h2>\n<p><\/p>\n<p>Lassen Sie uns die beiden Implementierungsvarianten von PVRB n\u00e4her beschreiben \u2014 die Standalone-Version, die mit einem vom Blockchain unabh\u00e4ngigen Smart Contract arbeitet, und die einvernehmliche integrierte Version \u2014 die in das Protokoll eingebaut ist, gem\u00e4\u00df dem sich das Netzwerk \u00fcber die Blockchain und die einbezogenen Transaktionen einigt. In allen F\u00e4llen werde ich mich auf beliebte Blockchain-Engines beziehen: Ethereum, EOS und alle \u00e4hnlichen, die nach demselben Prinzip der Bereitstellung und Verarbeitung von Smart Contracts funktionieren. <\/p>\n<p><\/p>\n<h3 id=\"standalone-contract\">Standalone-Vertrag<\/h3>\n<p><\/p>\n<p>In dieser Variante ist PVRB ein Smart Contract, der Transaktionen von Random-Produzenten (im Folgenden RP) annimmt, diese verarbeitet, die Ergebnisse kombiniert und schlie\u00dflich zu einem bestimmten Wert gelangt, den jeder Benutzer aus diesem Vertrag beziehen kann. Dieser Wert wird m\u00f6glicherweise nicht direkt im Vertrag gespeichert, sondern nur durch Daten dargestellt, aus denen deterministisch ein einziges Ergebnis des Zufallswerts abgeleitet werden kann. In diesem Schema sind RP die Benutzer der Blockchain, und jeder kann am Generierungsprozess teilnehmen.<\/p>\n<p><\/p>\n<p>Die Standalone-Vertragsvariante hat folgende Vorteile:<\/p>\n<p><\/p>\n<ul>\n<li>Portabilit\u00e4t (Vertr\u00e4ge k\u00f6nnen von einer Blockchain zur anderen \u00fcbertragen werden)<\/li>\n<li>einfacher in der Umsetzung und im Testen (Vertr\u00e4ge lassen sich leicht schreiben und \u00fcberpr\u00fcfen)<\/li>\n<li>Bequemlichkeit bei der Umsetzung wirtschaftlicher Modelle (einfach, um eigene Token zu erstellen, deren Logik den Zielen von PVRB dient)<\/li>\n<li>die M\u00f6glichkeit, in bestehenden Blockchains zu starten<\/li>\n<\/ul>\n<p><\/p>\n<p>Es hat jedoch auch Nachteile:<\/p>\n<p><\/p>\n<ul>\n<li>starke Einschr\u00e4nkungen bei Ressourcen f\u00fcr Berechnungen, Transaktionsvolumen und Speicherung (einfach gesagt cpu\/mem\/io)<\/li>\n<li>Einschr\u00e4nkungen bei Operationen innerhalb des Vertrags (nicht alle Anweisungen sind verf\u00fcgbar, schwierig, externe Bibliotheken anzubinden)<\/li>\n<li>die Unm\u00f6glichkeit, Nachrichten schneller zu organisieren, als Transaktionen in die Blockchain aufgenommen werden<\/li>\n<\/ul>\n<p><\/p>\n<p>Diese Option ist geeignet f\u00fcr die Umsetzung von PVRB, das in einem bestehenden Netzwerk gestartet werden muss, das keine komplexe Kryptografie enth\u00e4lt und keine gro\u00dfen Interaktionen erfordert.<\/p>\n<p><\/p>\n<h3 id=\"consensus-integrated\">Konsens-integriert<\/h3>\n<p><\/p>\n<p>In dieser Variante ist PVRB im Code des Blockchain-Knotens implementiert, entweder integriert oder parallel zum Nachrichtenaustausch zwischen den Blockchain-Knoten aktiv. Die Ergebnisse des Protokolls werden direkt in die erstellten Bl\u00f6cke geschrieben, w\u00e4hrend die Protokollnachrichten \u00fcber das P2P-Netzwerk zwischen den Knoten gesendet werden. Da das Protokoll Ergebnisse in Form von Zahlen hat, die in den Bl\u00f6cken aufgezeichnet werden m\u00fcssen, muss das Netzwerk einen Konsens \u00fcber diese Zahlen erreichen. Das bedeutet, dass die PVRB-Nachrichten, ebenso wie die Transaktionen, von den Knoten validiert und in die Bl\u00f6cke aufgenommen werden m\u00fcssen, damit jeder Teilnehmer im Netzwerk die Einhaltung des PVRB-Protokolls \u00fcberpr\u00fcfen kann. Dies f\u00fchrt uns automatisch zu einer offensichtlichen L\u00f6sung \u2013 wenn das Netzwerk einen Konsens \u00fcber einen Block und dessen darin enthaltene Transaktionen erzielt, muss PVRB Teil des Konsenses sein und darf nicht als getrenntes Protokoll angesehen werden. Andernfalls k\u00f6nnte es passieren, dass ein Block aus Sicht des Konsenses g\u00fcltig ist, aber das PVRB-Protokoll nicht eingehalten wurde, was bedeutet, dass der Block aus Sicht von PVRB nicht akzeptiert werden kann. Wenn also die Option \u201ekonsens-integriert\u201c gew\u00e4hlt wird, wird PVRB zu einem wichtigen Bestandteil des Konsenses.<\/p>\n<p><\/p>\n<p>Bei der Beschreibung der Implementierungen von PVRB auf Konsensniveau im Netzwerk d\u00fcrfen die Fragen zur Finalit\u00e4t auf keinen Fall au\u00dfer Acht gelassen werden. Finalit\u00e4t ist ein Mechanismus, der in deterministischen Konsensen verwendet wird, um einen Block (und die dazugeh\u00f6rige Kette) zu fixieren, der final ist und niemals verworfen wird, selbst wenn ein paralleler Fork auftaucht. Zum Beispiel hat Bitcoin keinen solchen Mechanismus \u2013 wenn eine Kette mit gr\u00f6\u00dferer Komplexit\u00e4t ver\u00f6ffentlicht wird, ersetzt sie jede weniger komplexe, unabh\u00e4ngig von der L\u00e4nge der Ketten. In EOS zum Beispiel sind die sogenannten Last Irreversible Blocks (LIB) final, die im Durchschnitt alle 432 Bl\u00f6cke (12*21 + 12*15, Pre-Vote + Pre-Commit) erscheinen. Dieser Prozess besteht im Wesentlichen darin, auf 2\/3 der Unterschriften von Blockproduzenten (BP) zu warten. Forks, die \u00e4lter sind als der letzte LIB, werden einfach verworfen. Dieser Mechanismus garantiert, dass eine Transaktion in die Blockchain aufgenommen wird und niemals zur\u00fcckgezogen werden kann, egal \u00fcber welche Ressourcen der Angreifer verf\u00fcgt. Auch final sind Bl\u00f6cke, die von 2\/3 der BP in Hyperledger, Tendermint und anderen pBFT-basierten Konsensen signiert wurden. Dar\u00fcber hinaus ist es sinnvoll, ein Protokoll zur Sicherstellung der Finalit\u00e4t als Erweiterung \u00fcber den Konsens zu gestalten, da es asynchron zum Produzieren und Ver\u00f6ffentlichen von Bl\u00f6cken arbeiten kann. Hier ist ein gutes <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">Artikel<\/a><\/noindex> \u00dcber die Finalit\u00e4t in Ethereum.<\/p>\n<p><\/p>\n<p>Finalit\u00e4t ist von entscheidender Bedeutung f\u00fcr Benutzer, die ohne sie Opfer eines \u201eDouble Spend\u201c-Angriffs werden k\u00f6nnen, wenn der Blockproduzent (BP) die Bl\u00f6cke \u201eh\u00e4lt\u201c und sie ver\u00f6ffentlicht, nachdem das Netzwerk eine g\u00fcltige Transaktion \u201egesehen\u201c hat. Fehlt die Finalit\u00e4t, ersetzt der ver\u00f6ffentlichte Fork den Block mit der \u201eguten\u201c Transaktion durch einen anderen aus dem \u201eschlechten\u201c Fork, in dem dieselben Mittel an die Adresse des Angreifers \u00fcberwiesen werden. Bei PVRB werden die Anforderungen an die Finalit\u00e4t noch strenger, da das Erstellen von Forks f\u00fcr PVRB bedeutet, dass der Angreifer mehrere Varianten von Zufallszahlen vorbereiten kann, um die f\u00fcr ihn g\u00fcnstigste zu ver\u00f6ffentlichen und die Zeit f\u00fcr einen m\u00f6glichen Angriff zu begrenzen \u2014 eine gute L\u00f6sung.<\/p>\n<p><\/p>\n<p>Deshalb ist die beste L\u00f6sung, PVRB und Finalit\u00e4t in einem Protokoll zu kombinieren \u2014 dann ist der finalisierte Block = finalisierte Zufallszahl, und das ist genau das, was erreicht werden sollte. Jetzt werden die Spieler garantierte Zufallszahlen innerhalb von N Sekunden erhalten und k\u00f6nnen sicher sein, dass sie zur\u00fcckgesetzt oder erneut gespielt werden k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Das Konzept mit integrierter Konsens ist gut:<\/p>\n<p><\/p>\n<ul>\n<li>mit der M\u00f6glichkeit zur asynchronen Umsetzung in der Blockproduktion - Bl\u00f6cke werden wie gewohnt produziert, w\u00e4hrend gleichzeitig das PVRB-Protokoll l\u00e4uft, das nicht f\u00fcr jeden Block Zufallszahlen erzeugt.<\/li>\n<li>mit der M\u00f6glichkeit, auch komplexe Kryptografie ohne Einschr\u00e4nkungen durch Smart Contracts zu implementieren.<\/li>\n<li>mit der M\u00f6glichkeit, Nachrichten schneller zu organisieren, als Transaktionen in die Blockchain aufgenommen werden, beispielsweise kann ein Teil des Protokolls zwischen Knoten kommunizieren, ohne Nachrichten im Netzwerk zu verbreiten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Es hat jedoch auch Nachteile:<\/p>\n<p><\/p>\n<ul>\n<li>Herausforderungen bei der Testung und Entwicklung - es wird erforderlich sein, Netzwerkfehler, ausgefallene Knoten und Netzwerk-Hardforks zu emulieren.<\/li>\n<li>Fehler in der Implementierung erfordern einen Hardfork des Netzwerks.<\/li>\n<\/ul>\n<p><\/p>\n<p>Beide Implementierungsans\u00e4tze f\u00fcr PVRB haben ihre Berechtigung, jedoch sind Smart Contracts in modernen Blockchains stark in ihren Rechenressourcen eingeschr\u00e4nkt, sodass der \u00dcbergang zu ernsthafter Kryptographie oft schlichtweg nicht m\u00f6glich ist. Ernste Kryptographie wird jedoch ben\u00f6tigt, wie im Folgenden demonstriert wird. Obwohl dieses Problem offensichtlich tempor\u00e4r ist, ist ernsthafte Kryptographie in Vertr\u00e4gen notwendig, um viele Aufgaben zu l\u00f6sen, und allm\u00e4hlich wird sie eingef\u00fchrt (zum Beispiel systematische Vertr\u00e4ge f\u00fcr zkSNARKs in Ethereum).<\/p>\n<p><\/p>\n<p>Eine Blockchain, die einen transparenten und zuverl\u00e4ssigen Nachrichtenaustausch \u00fcber das Protokoll gew\u00e4hrleistet, geschieht nicht kostenlos. Jeder dezentrale Protokoll muss die M\u00f6glichkeit einer Sybil-Attacke ber\u00fccksichtigen; jede Handlung kann durch die vereinbarten Kr\u00e4fte einer Vielzahl von Konten ausgef\u00fchrt werden. Daher m\u00fcssen bei der Planung die F\u00e4higkeiten der Angreifer zur Erstellung einer beliebigen Anzahl von Protokollteilnehmern, die im Einklang agieren, ber\u00fccksichtigt werden. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-peremennye-bloka\">PVRB und Blockvariablen.<\/h2>\n<p><\/p>\n<p>Ich habe nicht gelogen, als ich sagte, dass es bisher in den Blockchains kein gutes PVRB gibt, das von zahlreichen Gl\u00fccksspielanwendungen getestet wurde. Woher kommt dann die gro\u00dfe Zahl an Gl\u00fccksspielanwendungen in Ethereum und EOS? Das \u00fcberrascht mich ebenso wie Sie \u2013 woher haben sie in einer vollst\u00e4ndig deterministischen Umgebung so viele \u201estabile\u201c Zufallszahlen?<\/p>\n<p><\/p>\n<p>Die bevorzugte Methode, um Zufallszahlen in der Blockchain zu generieren, besteht darin, irgendeine \u201eunvorhersehbare\u201c Information aus einem Block zu verwenden und darauf basierend Zufallszahlen zu erstellen \u2013 indem man einfach einen oder mehrere Werte hasht. Ein guter Artikel \u00fcber die Probleme solcher Ans\u00e4tze. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.positive.com\/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">hier<\/a><\/noindex>Man kann einen der \u201cunvorhersehbaren\u201d Werte im Block verwenden, zum Beispiel den Block-Hash, die Anzahl der Transaktionen, die Netzwerkschwierigkeit und andere, im Voraus unbekannte Werte. Dann hash man diese, einen oder mehrere, und theoretisch sollte dabei ein echter Zufallswert herauskommen. Man k\u00f6nnte sogar im Whitepaper anmerken, dass Ihr Schema \u201epost-quantum secure\u201c ist (da es quantenresistente Hashfunktionen gibt :)).<\/p>\n<p><\/p>\n<p>Aber selbst post-quantum sichere Hashfunktionen sind leider nicht ausreichend. Das Geheimnis liegt in den Anforderungen an das PVRB, die ich aus dem vorherigen Artikel noch einmal in Erinnerung rufen m\u00f6chte:<\/p>\n<p><\/p>\n<ol>\n<li>Das Ergebnis muss nachweislich gleichm\u00e4\u00dfig verteilt sein, d.h. es basiert auf nachweislich sicherer Kryptografie.<\/li>\n<li>Keiner der Bits des Ergebnisses kann kontrolliert werden. Folglich kann das Ergebnis nicht im Voraus vorhergesagt werden.<\/li>\n<li>Der Protokoll zur Generierung kann nicht durch Nicht-Teilnahme oder durch \u00dcberlastung des Netzwerks mit Angriffsnachrichten sabotiert werden.<\/li>\n<li>All das oben Genannte muss widerstandsf\u00e4hig gegen Kollusionen einer zul\u00e4ssigen Anzahl unehrlicher Teilnehmer im Protokoll sein (z. B. 1\/3 der Teilnehmer).<\/li>\n<\/ol>\n<p><\/p>\n<p>In diesem Fall wird nur die Anforderung 1 erf\u00fcllt, w\u00e4hrend 2 nicht beachtet wird. Durch das Hashen unvorhersehbarer Werte aus dem Block erhalten wir eine gleichm\u00e4\u00dfige Verteilung und gute Zufallszahlen. Aber der Blockvermittler (BP) hat zumindest die M\u00f6glichkeit, \"einen Block zu ver\u00f6ffentlichen oder nicht\". Somit kann der BP zumindest zwischen ZWEI Zufallsvarianten w\u00e4hlen: seinem eigenen und dem, der entsteht, wenn jemand anderer den Block erstellt. Der BP kann im Voraus \"nachsehen\", was passiert, wenn er den Block ver\u00f6ffentlicht, und trifft dann die Entscheidung, ob er es tun m\u00f6chte oder nicht. Beispielsweise kann er beim Spielen von \"gerade-ungerade\" oder \"Rot\/Schwarz\" beim Roulette einen Block nur ver\u00f6ffentlichen, wenn er einen Gewinn sieht. Dies macht auch die Strategie der Verwendung eines Blockhashs \"aus der Zukunft\" wirkungslos. In diesem Fall wird gesagt, dass \"der Zufall verwendet wird, der durch das Hashen der aktuellen Daten und des Hashs des zuk\u00fcnftigen Blocks mit einer H\u00f6he von beispielsweise N + 42, wobei N die aktuelle Blockh\u00f6he ist, entsteht.\" Das st\u00e4rkt das Schema ein wenig, erlaubt dem BP jedoch immer noch, auch in der Zukunft zu w\u00e4hlen, ob er den Block zur\u00fcckhalten oder ver\u00f6ffentlichen m\u00f6chte.<\/p>\n<p><\/p>\n<p>Die Soft-BP wird in diesem Fall zwar kompliziert, aber nicht \u00fcberm\u00e4\u00dfig schwierig. Bei der Validierung und Eingliederung der Transaktion in den Block erfolgt eine schnelle \u00dcberpr\u00fcfung, ob ein Gewinn m\u00f6glich ist und m\u00f6glicherweise die Anpassung bestimmter Transaktionsparameter, um eine hohe Gewinnwahrscheinlichkeit zu erzielen. Dabei ist es nahezu unm\u00f6glich, einen cleveren BP auf solche Manipulationen zu erwischen, da immer wieder neue Adressen verwendet werden k\u00f6nnen, um schrittweise zu gewinnen, ohne Verdacht zu erregen.<\/p>\n<p><\/p>\n<p>Daher sind Methoden, die Informationen aus dem Block nutzen, nicht als universelle Implementierung von PVRB geeignet. In einer eingeschr\u00e4nkten Variante, mit Begrenzungen f\u00fcr die Einsatzh\u00f6hen, Einschr\u00e4nkungen der Anzahl der Spieler und\/oder KYC-Registrierung (um einem Spieler zu verbieten, mehrere Adressen zu verwenden), k\u00f6nnten diese Schemen f\u00fcr kleine Spiele funktionieren, aber nicht dar\u00fcber hinaus.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-commit-reveal\">PVRB und Commit-Reveal.<\/h2>\n<p><\/p>\n<p>Gut, danke der Hashing-Technologie und zumindest der relativen Unvorhersehbarkeit des Blockhashes und anderer Variablen. Wenn wir das Problem des Front-Running bei Minern l\u00f6sen, sollte etwas Besseres dabei herauskommen. Lassen Sie uns die Benutzer in dieses System einbeziehen \u2013 sie sollten ebenfalls den Zufall beeinflussen: Jeder Mitarbeiter des technischen Supports wird Ihnen sagen, dass das Unvorhersehbarste in IT-Systemen das Verhalten der Benutzer ist \ud83d\ude42<\/p>\n<p><\/p>\n<p>Ein naives Schema, bei dem Nutzer einfach zuf\u00e4llige Zahlen senden und das Ergebnis zum Beispiel als Hash ihrer Summe berechnet wird, ist nicht praktikabel. In diesem Fall kann der letzte Spieler mit seiner eigenen Zufallszahl das Ergebnis beeinflussen. Daher wird ein weit verbreitetes Muster namens Commit-Reveal verwendet. Die Teilnehmer senden zun\u00e4chst Hashes ihrer Zufallszahlen (Commits) und \u00f6ffnen dann die Zufallszahlen selbst (Reveals). Die Phase \"Reveal\" beginnt erst, nachdem die notwendigen Commits gesammelt wurden, sodass die Teilnehmer genau die Zufallszahl senden k\u00f6nnen, deren Hash sie zuvor \u00fcbermittelt haben. Jetzt integrieren wir all dies mit den Blockparametern, idealerweise aus einem zuk\u00fcnftigen Block (die Zufallszahl kann erst in einem der zuk\u00fcnftigen Bl\u00f6cke bekannt gegeben werden), und voil\u00e0 \u2013 die Zufallszahl ist bereit! Nun kann jeder Spieler das Ergebnis der Zufallszahl beeinflussen und m\u00f6glicherweise den b\u00f6swilligen BP \u00fcberlisten, indem er dessen Zufallszahl mit seiner eigenen, im Voraus unbekannten Zufallszahl \u00fcberlagert\u2026 Au\u00dferdem kann man einen Schutz gegen die Sabotage des Protokolls einf\u00fcgen, indem man beim Reveal-Stage eine Offenlegung verlangt \u2013 indem man zum Beispiel verlangt, dass man beim Commit eine gewisse Summe als Sicherheit hinterlegt, die nur w\u00e4hrend des Reveal-Verfahrens zur\u00fcckgegeben wird. In diesem Fall w\u00e4re es nachteilig, einen Commit zu machen, ohne auch ein Reveal durchzuf\u00fchren.<\/p>\n<p><\/p>\n<p>Das war ein guter Versuch, und solche Modelle gibt es auch in Spiel-DApps. Leider ist das jedoch wieder nicht ausreichend. Jetzt kann das Ergebnis nicht nur von den Minern, sondern von jedem Teilnehmer des Protokolls beeinflusst werden. Der Wert selbst kann nach wie vor kontrolliert werden, allerdings mit weniger Variabilit\u00e4t und gegen Zahlung. Doch wie beim Miner, wenn die Ergebnisse der Ziehung wertvoller sind als die Teilnahmegeb\u00fchr am PVRB-Protokoll, kann der random-producer (RP entscheiden, ob er das Reveal durchf\u00fchrt und hat weiterhin die M\u00f6glichkeit, aus mindestens zwei Zufallsoptionen auszuw\u00e4hlen.<br \/>\nDaf\u00fcr gibt es jetzt die M\u00f6glichkeit, diejenigen zu bestrafen, die einen Commit machen, aber kein Reveal durchf\u00fchren, und dieses Modell wird sich als n\u00fctzlich erweisen. Seine Einfachheit ist ein ernsthaftes Plus \u2014 anspruchsvollere Protokolle erfordern deutlich leistungsf\u00e4higere Berechnungen.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-determinirovannye-podpisi\">PVRB und deterministische Signaturen.<\/h2>\n<p><\/p>\n<p>Es gibt noch einen weiteren Weg, RP dazu zu bringen, eine pseudorandomisierte Zahl bereitzustellen, auf die er keinen Einfluss nehmen kann, wenn ihm ein \"Prototyp\" gegeben wird \u2013 das ist eine deterministische Signatur. Eine solche Signatur ist zum Beispiel RSA, w\u00e4hrend ECS nicht dazu geh\u00f6rt. Wenn der RP ein Schl\u00fcsselpaar bestehend aus RSA und ECC hat und mit seinem privaten Schl\u00fcssel einen bestimmten Wert signiert, erh\u00e4lt er im Falle von RSA EINE UND NUR EINE Signatur, w\u00e4hrend er im Falle von ECS beliebig viele verschiedene g\u00fcltige Signaturen generieren kann. Dies geschieht, weil bei der Erstellung von ECS-Signaturen eine zuf\u00e4llige Zahl verwendet wird, die vom Unterzeichner gew\u00e4hlt wird, und diese beliebig gew\u00e4hlt werden kann, wodurch dem Unterzeichner die M\u00f6glichkeit gegeben wird, eine von mehreren Signaturen auszuw\u00e4hlen. Im Fall von RSA: \"ein Eingabewert\" + \"ein Schl\u00fcsselpaar\" = \"eine Signatur\". Es ist unm\u00f6glich vorherzusagen, welche Signatur ein anderer RP erhalten wird, daher kann PVRB mit deterministischen Signaturen durch die Kombination von RSA-Signaturen mehrerer Teilnehmer organisiert werden, die denselben Wert signiert haben. Zum Beispiel \u2013 die vorherige Zufallszahl. In einem solchen Schema werden viele Ressourcen gespart, da die Signaturen gleichzeitig eine Best\u00e4tigung der korrekten Protokollverwendung und eine Quelle f\u00fcr Zuf\u00e4lligkeit darstellen.<\/p>\n<p><\/p>\n<p>Dennoch ist das System, selbst mit deterministischen Signaturen, nach wie vor anf\u00e4llig f\u00fcr das Problem des \"letzten Akteurs\". Der letzte Teilnehmer kann weiterhin entscheiden, ob er seine Signatur ver\u00f6ffentlicht oder nicht, und damit das Ergebnis steuern. Man k\u00f6nnte das System verbessern, indem man Block-Hashes hinzuf\u00fcgt und Runden erstellt, um vorherzusagen, dass das Ergebnis nicht absehbar ist, aber all diese Methoden, selbst mit vielen \u00dcberarbeitungen, lassen das Problem des Einflusses eines Einzelnen auf das kollektive Ergebnis in einem nicht vertrauensw\u00fcrdigen Umfeld ungel\u00f6st. Dar\u00fcber hinaus ist die Gr\u00f6\u00dfe der RSA-Schl\u00fcssel (1024 und 2048 Bit) ziemlich gro\u00df, w\u00e4hrend die Gr\u00f6\u00dfe f\u00fcr Blockchain-Transaktionen ein extrem wichtiger Parameter ist. Offenbar wird es keine einfache L\u00f6sung f\u00fcr das Problem geben, also lassen Sie uns weitermachen.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-secret-sharing-shemy\">PVRB und Secret Sharing-Schemata<\/h2>\n<p><\/p>\n<p>In der Kryptografie gibt es Protokolle, die es einem Netzwerk erm\u00f6glichen, sich auf genau einen Wert PVRB zu einigen, wobei diese Protokolle gegen b\u00f6swillige Handlungen von Teilen der Teilnehmer resistent sind. Eines der n\u00fctzlichen Protokolle, mit denen man sich vertraut machen sollte, ist das Shamir Secret Sharing. Es dient dazu, ein Geheimnis (zum Beispiel einen geheimen Schl\u00fcssel) in mehrere Teile zu teilen und diese Teile an N Teilnehmer zu verteilen. Das Geheimnis wird so verteilt, dass zur Wiederherstellung M Teile aus N ausreichen, wobei dies beliebige M Teile sein k\u00f6nnen. Kurz gesagt, indem die Teilnehmer Punkte auf dem Graphen einer unbekannten Funktion austauschen, k\u00f6nnen sie, nachdem sie M Punkte erhalten haben, die gesamte Funktion rekonstruieren.<br \/>\nEine gute Erkl\u00e4rung findet sich in <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Shamir%27s_Secret_Sharing\">Wiki<\/a><\/noindex> und um mit ihm praktisch zu experimentieren, ist es hilfreich, das Protokoll im Kopf zu durchspielen bei <noindex><a rel=\"nofollow\" href=\"http:\/\/point-at-infinity.org\/ssss\/demo.html\">Demo<\/a><\/noindex> Seite.<\/p>\n<p><\/p>\n<p>Wenn das FSSS (Fiat-Shamir Secret Sharing) Protokoll im reinen Sinne anwendbar w\u00e4re, w\u00e4re es ein unzerst\u00f6rbarer PVRB. In der einfachsten Variante k\u00f6nnte das Protokoll folgenderma\u00dfen aussehen:<\/p>\n<p><\/p>\n<ul>\n<li>Jeder Teilnehmer generiert seine eigene Zufallszahl und verteilt Anteile davon an die anderen Teilnehmer.<\/li>\n<li>Jeder Teilnehmer \u00f6ffnet seinen Teil der Geheimnisse der anderen Teilnehmer.<\/li>\n<li>Wenn ein Teilnehmer mehr als M Anteile hat, kann die Zahl dieses Teilnehmers berechnet werden, und sie wird einzigartig sein, unabh\u00e4ngig von der Menge der ge\u00f6ffneten Teilnehmer.<\/li>\n<li>Die Kombination aus ge\u00f6ffneten Zufallszahlen ist das gesuchte PVRB.<\/li>\n<\/ul>\n<p><\/p>\n<p>Hier hat ein einzelner Teilnehmer keinen Einfluss mehr auf die Ergebnisse des Protokolls, es sei denn, es h\u00e4ngt ausschlie\u00dflich von ihm ab, den Schwellenwert f\u00fcr die Offenlegung des Zufalls zu erreichen. Daher funktioniert dieses Protokoll, sofern der notwendige Anteil an funktionierenden Teilnehmern und verf\u00fcgbaren RPs vorhanden ist, um die Anforderungen an die kryptographische Sicherheit zu erf\u00fcllen und ist resistent gegen das Problem des \u201eletzten Akteurs\u201c.<\/p>\n<p><\/p>\n<p>Das k\u00f6nnte eine ideale L\u00f6sung sein; dieses PVRB-Schema auf Basis von Secret Sharing von Fiat-Shamir wird beispielsweise in <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2017\/216.pdf\">dieser<\/a><\/noindex> einem Artikel beschrieben. Aber, wie bereits erw\u00e4hnt, wenn man versucht, es direkt in einer Blockchain anzuwenden, treten technische Einschr\u00e4nkungen auf. Hier ist ein Beispiel f\u00fcr die Testimplementierung des Protokolls in einem Smart Contract auf EOS und der wichtigste Teil davon \u2014 die \u00dcberpr\u00fcfung des ver\u00f6ffentlichten Anteils des Teilnehmers: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/eoscraper\/blob\/master\/Proof.hh#L23\">Code<\/a><\/noindex>. Der Code zeigt, dass die Validierung des Proofs mehrere skalare Multiplikationen erfordert, und die Zahlen sind sehr gro\u00df. Dabei ist zu verstehen, dass die \u00dcberpr\u00fcfung in Blockchains erfolgt, wenn der Blockproduzent die Transaktion verarbeitet. Jeder Teilnehmer sollte die Korrektheit des Protokolls problemlos \u00fcberpr\u00fcfen k\u00f6nnen, weshalb die Anforderungen an die Geschwindigkeit der \u00dcberpr\u00fcfung sehr hoch sind. In dieser Variante erwies sich die L\u00f6sung als nicht funktionsf\u00e4hig, da die Verifizierung die Transaktionsgrenze (0,5 Sek.) nicht einhalten konnte.<\/p>\n<p><\/p>\n<p>Die Effizienz der Verifizierung ist eine der wichtigsten Anforderungen f\u00fcr die Verwendung fortschrittlicher kryptografischer Schemata in der Blockchain. Die Erstellung von Proofs und die Vorbereitung von Nachrichten - diese Verfahren k\u00f6nnen off-chain ausgelagert und auf Hochleistungscomputern durchgef\u00fchrt werden, aber die Verifizierung kann nicht umgangen werden - dies ist ein weiteres wichtiges Kriterium f\u00fcr PVRB. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB und Schwellenwertsignaturen<\/h2>\n<p><\/p>\n<p>Mit dem Konzept des Secret Sharing haben wir eine ganze Klasse von Protokollen entdeckt, die unter dem Schl\u00fcsselwort \u201eThreshold\u201c zusammengefasst sind. Wenn zur Offenlegung bestimmter Informationen die Teilnahme von M ehrlichen Teilnehmern aus N erforderlich ist und die Gruppe der ehrlichen Teilnehmer eine beliebige Teilmenge von N sein kann, spricht man von \u201eThreshold\u201c-Schemen. Diese erm\u00f6glichen es, das Problem des \u201elast actor\u201c zu l\u00f6sen; selbst wenn ein Angreifer seinen Teil des Geheimnisses nicht offenbart, kann ein anderer ehrlicher Teilnehmer dies \u00fcbernehmen. Diese Schemen erm\u00f6glichen es, sich auf einen einzigen Wert zu einigen, selbst wenn einige Teilnehmer das Protokoll sabotieren. <\/p>\n<p><\/p>\n<p>Die Kombination von deterministischen Unterschriften und Threshold-Schemen hat eine sehr praktische und vielversprechende Methode zur Implementierung von PVRB geschaffen \u2013 dies sind deterministische Threshold-Unterschriften. Hier ist <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2002\/081.pdf\">Artikel<\/a><\/noindex> eine \u00dcbersicht \u00fcber verschiedene Anwendungen von Threshold-Unterschriften und hier ist ein weiterer interessanter <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.dash.org\/secret-sharing-and-threshold-signatures-with-bls-954d1587b5f\">Longread<\/a><\/noindex> von Dash. <\/p>\n<p><\/p>\n<p>Im letzten Artikel werden BLS-Unterschriften beschrieben (BLS steht f\u00fcr Boneh-Lynn-Shacham, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.iacr.org\/archive\/asiacrypt2001\/22480516.pdf\">hier ist<\/a><\/noindex> Artikel, die eine \u00e4u\u00dferst wichtige und \u00e4u\u00dferst praktische Eigenschaft f\u00fcr Programmierer haben \u2013 \u00f6ffentliche, geheime, \u00f6ffentliche Schl\u00fcssel und BLS-Signaturen k\u00f6nnen durch einfache mathematische Operationen miteinander kombiniert werden, wobei ihre Kombinationen g\u00fcltige Schl\u00fcssel und Signaturen bleiben, die es erm\u00f6glichen, viele Signaturen in einer und viele \u00f6ffentliche Schl\u00fcssel in einem zu aggregieren. Sie weisen auch Determinismus auf und liefern bei denselben Eingabedaten dasselbe Ergebnis. Aufgrund dieser Eigenschaft sind Kombinationen von BLS-Signaturen selbst g\u00fcltige Schl\u00fcssel, was die Implementierung eines Szenarios erm\u00f6glicht, bei dem M aus N Teilnehmern eine einzige, deterministische, \u00f6ffentlich \u00fcberpr\u00fcfbare und bis zur Enth\u00fcllung durch den M-ten Teilnehmer unvorhersehbare Signatur erzeugen.<\/p>\n<p><\/p>\n<p>Im BLS-Signaturen-Schema mit Schwellenwert unterschreibt jeder Teilnehmer mithilfe von BLS etwas (z.B. den vorherigen Zufallswert), und die gemeinsame Schwellenwert-Unterschrift ist der gesuchte Zufallswert. Die kryptografischen Eigenschaften der BLS-Unterschriften erf\u00fcllen die Anforderungen an die Qualit\u00e4t des Zufalls, der Schwellenwert-Teil sch\u00fctzt vor \"Last-Actor\", und die einzigartige Kombinierbarkeit der Schl\u00fcssel erm\u00f6glicht die Umsetzung vieler interessanter Algorithmen, die beispielsweise die effektive Aggregation von Nachrichten im Protokoll erm\u00f6glichen.<\/p>\n<p><\/p>\n<p>Wenn Sie also ein PVRB in Ihrer Blockchain aufbauen, werden Sie mit hoher Wahrscheinlichkeit zu dem Schema der BLS-Schwellenwertsignaturen kommen, das bereits von mehreren Projekten verwendet wird. Zum Beispiel von DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">hier<\/a><\/noindex> Benchmark, der das Schema implementiert, und <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/vss\/blob\/master\/docs\/index.md\">hier<\/a><\/noindex> ein Beispiel f\u00fcr die Implementierung von verifiable secret sharing), oder Keep.network (hier ist ihr random beacon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-yellowpaper\">yellowpaper<\/a><\/noindex>, und hier ist <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-box\">Nummer 00 oder<\/a><\/noindex> Smart Contract, der das Protokoll unterst\u00fctzt).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">Implementierung von PVRB<\/h2>\n<p><\/p>\n<p>Leider sehen wir immer noch kein funktionierendes PVRB-Protokoll, das in Blockchains implementiert wurde und seine Sicherheit sowie Stabilit\u00e4t bewiesen hat. Obwohl die Protokolle selbst bereit sind, ist es technisch schwierig, sie auf bestehende L\u00f6sungen anzuwenden. F\u00fcr zentralisierte Systeme macht PVRB keinen Sinn, w\u00e4hrend dezentrale Systeme streng in ihren Rechenressourcen beschr\u00e4nkt sind: CPU, Speicher, Speicherung, I\/O. Die Gestaltung von PVRB erfordert die Kombination unterschiedlicher Protokolle, um etwas zu schaffen, das wenigstens den Anforderungen eines lebensf\u00e4higen Blockchain-Systems entspricht. Ein Protokoll berechnet effizienter, erfordert jedoch mehr Nachrichten zwischen RP, w\u00e4hrend ein anderes extrem wenige Nachrichten ben\u00f6tigt, aber die Erstellung eines Proofs kann eine Aufgabe von mehreren Minuten oder sogar Stunden sein.<\/p>\n<p><\/p>\n<p>Ich werde die Faktoren aufz\u00e4hlen, die Sie bei der Auswahl eines qualitativ hochwertigen PVRB ber\u00fccksichtigen m\u00fcssen:<\/p>\n<p><\/p>\n<ul>\n<li><em>Kryptographische Sicherheit<\/em>. Ihr PVRB sollte strikt unbeeinflussbar sein, ohne die M\u00f6glichkeit, auch nur ein einziges Bit zu kontrollieren. In einigen Schemen ist das nicht der Fall, daher sollten Sie einen Kryptographen zu Rate ziehen.<\/li>\n<li><em>Das Problem des \"letzten Akteurs\"<\/em>. Ihr PVRB sollte gegen Angriffe resilient sein, bei denen ein Angreifer, der einen oder mehrere RPs kontrolliert, zwischen zwei Ergebnissen w\u00e4hlen kann.<\/li>\n<li><em>Das Problem der Protokoll-Sabotage<\/em>. Ihr PVRB sollte gegen Angriffe resilient sein, bei denen ein Angreifer, der einen oder mehrere RPs kontrolliert, entscheidet, ob es zuf\u00e4llig sein soll oder nicht und garantiert oder mit einer bestimmten Wahrscheinlichkeit darauf Einfluss nehmen kann.<\/li>\n<li><em>Das Problem der Nachrichtenanzahl<\/em>. Ihre RPs sollten mindestens an das Blockchain-Netzwerk Nachrichten senden und m\u00f6glichst synchronisierte Aktionen wie \"Ich habe Informationen gesendet, warte auf eine Antwort von einem bestimmten Teilnehmer\" vermeiden. In P2P-Netzwerken, insbesondere geografisch verteilten, ist es nicht realistisch, auf eine schnelle Antwort zu hoffen.<\/li>\n<li><em>Das Problem der Rechenkomplexit\u00e4t<\/em>. Die \u00dcberpr\u00fcfung jedes PVRB-Phasen on-chain sollte \u00e4u\u00dferst einfach sein, da sie von allen vollst\u00e4ndigen Clients des Netzwerks durchgef\u00fchrt wird. Wenn die Implementierung durch einen Smart Contract erfolgt, sind die Anforderungen an die Geschwindigkeit sehr streng.<\/li>\n<li><em>Das Problem der Verf\u00fcgbarkeit und Liveness<\/em>. Ihr PVRB sollte bestrebt sein, in Situationen resilient zu sein, in denen ein Teil des Netzwerks vor\u00fcbergehend nicht verf\u00fcgbar ist und einige RPs einfach aufh\u00f6ren zu funktionieren.<\/li>\n<li><em>Problem mit Trusted Setup und der anf\u00e4nglichen Verteilung der Schl\u00fcssel<\/em>. Wenn Ihr PVRB das prim\u00e4re Setup-Protokoll verwendet, ist das eine separate gro\u00dfe und ernsthafte Angelegenheit. Hier ist <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">Nummer 00 oder<\/a><\/noindex>. Wenn die Teilnehmer vor Beginn des Protokolls ihre Schl\u00fcssel austauschen m\u00fcssen, ist das ebenfalls ein Problem, wenn sich die Teilnehmerzahl \u00e4ndert<\/li>\n<li><em>Entwicklungsprobleme<\/em>. Die Verf\u00fcgbarkeit von Bibliotheken in den ben\u00f6tigten Sprachen, deren Sicherheit und Performance, \u00d6ffentlichkeit, umfangreiche Tests usw.<\/li>\n<\/ul>\n<p><\/p>\n<p>Zum Beispiel gibt es bei threshold BLS-Signaturen ein erhebliches Problem: Bevor die Teilnehmer anfangen k\u00f6nnen zu arbeiten, m\u00fcssen sie sich unbedingt gegenseitig Schl\u00fcssel aush\u00e4ndigen und eine Gruppe bilden, innerhalb derer das threshold-Protokoll arbeitet. Das bedeutet, dass mindestens eine Runde des Austausches in einem dezentralen Netzwerk abgewartet werden muss. Unter Ber\u00fccksichtigung, dass der erzeugte Zufallswert beispielsweise in Spielen praktisch in Echtzeit ben\u00f6tigt wird, hei\u00dft das, dass ein Sabotage des Protokolls in dieser Phase m\u00f6glich ist und die Vorteile des threshold-Systems verloren gehen. Dieses Problem ist zwar einfacher als das vorherige, erfordert jedoch dennoch die Entwicklung eines separaten Verfahrens zur Bildung der threshold-Gruppen, das wirtschaftlich gesch\u00fctzt werden muss, etwa durch Einlagen und das Slashing von Mitteln bei Teilnehmern, die das Protokoll nicht einhalten. Au\u00dferdem kann die BLS-Verifizierung mit einem akzeptablen Sicherheitsniveau einfach nicht in eine Standardtransaktion von EOS oder Ethereum integriert werden \u2013 es fehlt einfach die Zeit zur Verifizierung. Der Code der Vertr\u00e4ge ist WebAssembly oder EVM und wird von einer virtuellen Maschine ausgef\u00fchrt. Krypto-Funktionen sind derzeit noch nicht nativ implementiert und arbeiten mehrere Male langsamer als herk\u00f6mmliche Kryptobibliotheken. Viele Protokolle erf\u00fcllen die Anforderungen einfach aufgrund der Schl\u00fcsselausgaben nicht, zum Beispiel 1024 und 2048 Bit f\u00fcr RSA, was 4-8 Mal mehr ist als die Standardtransaktion in Bitcoin und Ethereum.<\/p>\n<p><\/p>\n<p>Die Verf\u00fcgbarkeit von Implementierungen in verschiedenen Programmiersprachen spielt eine Rolle \u2013 und davon gibt es nicht viele, insbesondere bei neuen Protokollen. Der Ansatz mit der Integration in den Konsens erfordert, dass das Protokoll in der Sprache der Plattform geschrieben wird, sodass Sie nach Go-Code f\u00fcr Geth, Rust f\u00fcr Parity und C++ f\u00fcr EOS suchen m\u00fcssen. JavaScript-Code wird jeder suchen m\u00fcssen, und da JavaScript und Kryptografie nicht die engsten Freunde sind, kann WebAssembly hilfreich sein, das jetzt definitiv als der n\u00e4chste wichtige Internetstandard gilt.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Fazit<\/h2>\n<p><\/p>\n<p>Ich hoffe, im Vorherigen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448330\/\">Artikel<\/a><\/noindex> konnten Sie \u00fcberzeugen, dass die Generierung von Zufallszahlen auf der Blockchain f\u00fcr viele Aspekte des Lebens dezentraler Netzwerke von entscheidender Bedeutung ist. Mit diesem Artikel habe ich gezeigt, dass diese Aufgabe \u00e4u\u00dferst ehrgeizig und nicht einfach ist, aber es gibt bereits gute L\u00f6sungen. Allgemein kann das endg\u00fcltige Design des Protokolls nur nach umfassenden Tests erfolgen, die alle Aspekte vom Setup bis hin zur Simulation von Ausf\u00e4llen ber\u00fccksichtigen. Daher werden Sie wahrscheinlich keine fertigen Rezepte in den Whitepapers der Teams oder in Artikeln finden, und wir werden in den n\u00e4chsten ein bis zwei Jahren sicherlich nicht dazu bereit sein zu sagen: \u201eMachen Sie es so, das ist sicher korrekt.\u201c <\/p>\n<p><\/p>\n<p>Bis dahin f\u00fcr unser PVRB in der entwickelten Blockchain <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/haya\">Haya<\/a><\/noindex>, wir haben uns f\u00fcr die Verwendung von Threshold-BLS-Signaturen entschieden. Wir planen die Implementierung von PVRB auf Konsensniveau, da die Verifikation in Smart Contracts mit einem akzeptablen Sicherheitsniveau derzeit noch nicht m\u00f6glich ist. M\u00f6glicherweise verwenden wir sofort zwei Ans\u00e4tze: Zuerst die kostspielige Secret Sharing-Methode zur Erstellung eines langfristigen Random Seeds, welcher dann als Grundlage f\u00fcr die hochfrequente Generierung von Zufallszahlen durch deterministische Threshold-BLS-Signaturen dient; eventuell beschr\u00e4nken wir uns nur auf einen dieser Ans\u00e4tze. Es ist bedauerlich, dass wir im Voraus nicht sagen k\u00f6nnen, wie das Protokoll aussehen wird. Positiv ist jedoch, dass, wie in der Wissenschaft, auch bei ingenieurtechnischen Aufgaben ein negatives Ergebnis immer noch ein Ergebnis ist. Jeder neue Versuch, ein Problem zu l\u00f6sen, ist ein weiterer Schritt in der Forschung f\u00fcr alle, die sich mit der Problematik besch\u00e4ftigen. Um die Anforderungen aus der Wirtschaft zu erf\u00fcllen, l\u00f6sen wir eine konkrete praktische Aufgabe \u2013 die Bereitstellung einer zuverl\u00e4ssigen Entropiequelle f\u00fcr Spieleanwendungen. Deshalb m\u00fcssen wir auch der Blockchain und insbesondere den Fragen der Kettenfinalit\u00e4t und der Governance des Netzwerks Beachtung schenken. <\/p>\n<p><\/p>\n<p>Obwohl wir noch keinen nachweislich stabilen PVRB in Blockchains sehen, der ausreichend lange genutzt wurde, um die Pr\u00fcfungen echter Anwendungen, mehrfacher Audits, Lasten und nat\u00fcrlich realer Angriffe zu bestehen, zeigt die Anzahl der m\u00f6glichen Wege, dass eine L\u00f6sung existiert. Irgendeiner dieser Algorithmen wird letztendlich das Problem l\u00f6sen. Wir freuen uns darauf, die Ergebnisse zu teilen, und danken den anderen Teams, die ebenfalls an diesem Thema arbeiten, f\u00fcr ihre Artikel und Codes, die es den Ingenieuren erm\u00f6glichen, nicht zweimal in die gleiche Falle zu tappen. <\/p>\n<p><\/p>\n<p>Wenn Sie also auf einen Programmierer treffen, der einen dezentralen Zufallsmechanismus entwirft, seien Sie aufmerksam und f\u00fcrsorglich. Bieten Sie bei Bedarf psychologische Unterst\u00fctzung an \ud83d\ude42.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/452340\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33888","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438: \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:55:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:55:15+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Zufallszahlen und dezentrale Netzwerke: Implementierungen | ProHoster","description":"Die Einf\u00fchrung function getAbsolutelyRandomNumber() { return 4; \/\/ gibt eine absolut zuf\u00e4llige Zahl zur\u00fcck! } \u00e4hnelt dem Konzept eines absolut stabilen Verschl\u00fcsselungsmechanismus in der Kryptografie. Die realen Protokolle 'Publicly Verifiable Random Beacon' (PVRB) versuchen lediglich, der idealen L\u00f6sung so nahe wie m\u00f6glich zu kommen, da sie in realen Netzwerken in ihrer reinsten Form nicht anwendbar sind: man muss sich strikt auf ein einzelnes Bit einigen, die Runden m\u00fcssen...","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438: \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:55:15+00:00","article:modified_time":"2019-10-31T18:55:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33888","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 17:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:31:23","updated":"2026-01-21 17:06:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/33888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=33888"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/33888\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=33888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=33888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=33888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}