{"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 getAbsolutZufallsZahl() {\n        return 4; \/\/ gibt eine absolut zuf\u00e4llige Zahl zur\u00fcck!\n}<\/code><\/pre>\n<p><\/p>\n<p>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\u00f6glichst nahe zu kommen, da sie in realen Netzwerken nicht in reiner Form anwendbar sind: Es muss streng \u00fcber ein einzelnes Bit verhandelt werden, es sollten viele Runden stattfinden, und alle Nachrichten m\u00fcssen ideal schnell und immer zugestellt werden. In realen Netzwerken ist dies nat\u00fcrlich nicht der Fall. Daher gibt es bei der Gestaltung von PVRB f\u00fcr bestimmte Aufgaben in modernen Blockchains, neben der Unf\u00e4higkeit, den erhaltenen Zufall und die kryptografische Sicherheit zu kontrollieren, auch viele rein architektonische und technische Probleme.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Die Blockchain selbst fungiert f\u00fcr PVRB im Grunde als Kommunikationsumgebung, in der Nachrichten=Transaktionen sind. Dies erm\u00f6glicht es, sich teilweise von Netzwerkproblemen, Nachrichtenverlusten und Problemen mit Zwischen-Software zu abstrahieren \u2014 all diese Risiken \u00fcbernimmt das dezentrale Netzwerk, und der gr\u00f6\u00dfte Wert f\u00fcr PVRB ist die Unm\u00f6glichkeit, eine bereits gesendete Transaktion zur\u00fcckzuziehen oder zu besch\u00e4digen \u2014 dies verhindert, dass Teilnehmer die Teilnahme am Protokoll ablehnen, es sei denn, sie haben einen erfolgreichen Angriff auf den Konsens durchgef\u00fchrt. Dieses Sicherheitsniveau ist akzeptabel, daher muss PVRB gegen\u00fcber Absprachen der Teilnehmer ebenso robust sein wie die Haupt-Blockchain. Au\u00dferdem deutet dies darauf hin, dass PVRB Teil des Konsenses sein muss, wenn sich das Netzwerk \u00fcber die Haupt-Blockchain geeinigt hat, lassen Sie es uns gleichzeitig auch \u00fcber den einzigen ehrlichen resultierenden Zufall einigen. Alternativ kann PVRB ein einfaches eigenst\u00e4ndiges Protokoll sein, das durch einen Smart Contract implementiert wird und asynchron zum Blockchain und den Bl\u00f6cken arbeitet. Beide Ans\u00e4tze haben ihre Vor- und Nachteile, und die Wahl zwischen ihnen ist \u00e4u\u00dferst nicht 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 zwei Varianten der Implementierung von PVRB n\u00e4her beschreiben \u2014 die Standalone-Version, die mit einem vom Blockchain unabh\u00e4ngigen Smart Contract arbeitet, und die consensus-integrated \u2014 in das Protokoll integriert, gem\u00e4\u00df dem sich das Netzwerk \u00fcber die Blockchain und die einbezogenen Transaktionen einigt. In allen F\u00e4llen werde ich beliebte Blockchain-Engines im Sinn haben: Ethereum, EOS und alle, die ihnen in Bezug auf die Bereitstellung und Verarbeitung von Smart Contracts \u00e4hnlich sind. <\/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-Producern (im Folgenden RP) akzeptiert, sie verarbeitet, die Ergebnisse kombiniert und schlie\u00dflich 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.<\/p>\n<p><\/p>\n<p>Die Variante mit dem Standalone-Vertrag ist gut:<\/p>\n<p><\/p>\n<ul>\n<li>Portabilit\u00e4t (Vertr\u00e4ge k\u00f6nnen von Blockchain zu Blockchain getragen werden)<\/li>\n<li>Einfachheit der Umsetzung und des Testens (Vertr\u00e4ge lassen sich leicht schreiben und testen)<\/li>\n<li>Bequemlichkeit bei der Umsetzung wirtschaftlicher Modelle (es ist einfach, einen Token zu erstellen, dessen Logik den Zielen von PVRB dient)<\/li>\n<li>M\u00f6glichkeit der Ausf\u00fchrung in bereits bestehenden Blockchains<\/li>\n<\/ul>\n<p><\/p>\n<p>Es hat jedoch auch Nachteile:<\/p>\n<p><\/p>\n<ul>\n<li>starke Einschr\u00e4nkungen der Ressourcen bei Berechnungen, Transaktionsvolumen und Speicher (einfach gesagt CPU \/ RAM \/ IO)<\/li>\n<li>Einschr\u00e4nkungen f\u00fcr Operationen innerhalb des Vertrags (nicht alle Befehle sind verf\u00fcgbar, schwierig externe Bibliotheken zu integrieren)<\/li>\n<li>Unm\u00f6glichkeit, einen schnelleren Nachrichtenaustausch zu organisieren als Transaktionen in die Blockchain aufgenommen werden<\/li>\n<\/ul>\n<p><\/p>\n<p>Diese Variante eignet sich zur Implementierung von PVRB, das in einem bereits bestehenden Netzwerk gestartet werden muss, das keine komplexe Kryptografie enth\u00e4lt und nicht viele 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-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\u00f6cke geschrieben, w\u00e4hrend die Nachrichten des Protokolls \u00fcber das P2P-Netzwerk zwischen den Nodes gesendet werden. Da das Protokoll Zahlen als Ergebnis hat, die in den Bl\u00f6cken festgehalten werden m\u00fcssen, muss das Netzwerk einen Konsens dar\u00fcber erreichen. Das bedeutet, dass die PVRB-Nachrichten wie auch die Transaktionen von den Nodes validiert und in die Bl\u00f6cke aufgenommen werden m\u00fcssen, damit jedes Netzwerk-Mitglied die Einhaltung des PVRB-Protokolls validieren kann. Dies f\u00fchrt automatisch zu einer offensichtlichen L\u00f6sung: Wenn das Netzwerk sich \u00fcber den Konsens bez\u00fcglich eines Blocks und der darin enthaltenen Transaktionen einigt, dann sollte PVRB Teil des Konsenses sein und kein eigenst\u00e4ndiges Protokoll. Andernfalls k\u00f6nnte es sein, dass ein Block aus Sicht des Konsenses g\u00fcltig ist, aber das PVRB-Protokoll nicht eingehalten wird. Aus Sicht von PVRB k\u00f6nnte der Block dann nicht akzeptiert werden. Wenn also die \u201ekonsens-integrierte\u201c Variante gew\u00e4hlt wird, wird PVRB zu einem wichtigen Teil des Konsenses.<\/p>\n<p><\/p>\n<p>Bei der Beschreibung der Implementierungen von PVRB auf Konsensebene im Netzwerk k\u00f6nnen die Fragen zur Finalit\u00e4t auf keinen Fall umgangen werden. Finalit\u00e4t ist ein Mechanismus, der in deterministischen Konsensen verwendet wird, um einen Block (und die ihn f\u00fchrende 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 \u2013 wenn eine Kette mit gr\u00f6\u00dferer Schwierigkeit ver\u00f6ffentlicht wird, ersetzt sie jede weniger komplexe, unabh\u00e4ngig von der L\u00e4nge der Ketten. In EOS hingegen sind die sogenannten Last Irreversible Blocks final, die im Durchschnitt alle 432 Bl\u00f6cke 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 \u00e4lter sind als der letzte LIB, werden sie einfach verworfen. Dieser Mechanismus erm\u00f6glicht es, garantiert zu behaupten, dass eine Transaktion in die Blockchain aufgenommen wurde und niemals zur\u00fcckgezogen wird, egal welche Ressourcen der Angreifer hat. Au\u00dferdem sind finalisierte Bl\u00f6cke die Bl\u00f6cke, 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\u00e4t als Erweiterung \u00fcber dem Konsens zu gestalten, da es asynchron mit der Produktion und Ver\u00f6ffentlichung von Bl\u00f6cken arbeiten kann. Hier ist eine gute <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">Artikel<\/a><\/noindex> \u00fcber die Endg\u00fcltigkeit in Ethereum.<\/p>\n<p><\/p>\n<p>Die Endg\u00fcltigkeit ist f\u00fcr Nutzer von entscheidender Bedeutung, da sie sonst Opfer einer \"Double Spend\"-Attacke werden k\u00f6nnen, wenn BP Bl\u00f6cke \"vorh\u00e4lt\" und diese ver\u00f6ffentlicht, nachdem das Netzwerk eine gute Transaktion \"gesehen\" hat. Wenn es keine Endg\u00fcltigkeit gibt, ersetzt der ver\u00f6ffentlichte Fork den Block mit der \"guten\" Transaktion durch einen anderen aus dem \"schlechten\" Fork, in dem dieselben Mittel auf die Adresse des Angreifers \u00fcbertragen werden. Im Falle von PVRB werden die Anforderungen an die Endg\u00fcltigkeit sogar noch strenger, da der Aufbau von Forks f\u00fcr PVRB die M\u00f6glichkeit f\u00fcr den Angreifer bedeutet, mehrere Varianten von Zuf\u00e4llen vorzubereiten, um den vorteilhaftesten zu ver\u00f6ffentlichen und die m\u00f6gliche Angriffszeit zu begrenzen - eine gute L\u00f6sung.<\/p>\n<p><\/p>\n<p>Daher ist die beste L\u00f6sung, PVRB und Endg\u00fcltigkeit 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\u00f6nnen sicher sein, dass er nicht zur\u00fcckgesetzt oder erneut gespielt werden kann.<\/p>\n<p><\/p>\n<p>Die Option mit dem konsens-integrierten Ansatz ist gut:<\/p>\n<p><\/p>\n<ul>\n<li>mit der M\u00f6glichkeit der asynchronen Umsetzung in Bezug auf die Blockproduktion - Bl\u00f6cke werden wie gewohnt produziert, aber parallel dazu kann das PVRB-Protokoll arbeiten, das Zuf\u00e4lle nicht bei jedem Block generiert.<\/li>\n<li>mit der M\u00f6glichkeit, selbst schwere Kryptografie zu implementieren, ohne die Einschr\u00e4nkungen, die bei Smart Contracts bestehen.<\/li>\n<li>mit der M\u00f6glichkeit, 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.<\/li>\n<\/ul>\n<p><\/p>\n<p>Es hat jedoch auch Nachteile:<\/p>\n<p><\/p>\n<ul>\n<li>Schwierigkeiten beim Testen und Entwickeln - es muss mit Netzwerkfehlern, ausgefallenen Knoten und Hardforks des Netzwerks emuliert werden.<\/li>\n<li>Fehler in der Implementierung erfordern einen Hardfork des Netzwerks.<\/li>\n<\/ul>\n<p><\/p>\n<p>Beide Implementierungsmethoden von PVRB haben ihre Berechtigung, aber die Umsetzung auf Smart Contracts in modernen Blockchains ist dennoch ziemlich stark durch die Rechenressourcen eingeschr\u00e4nkt, und jeder \u00dcbergang zu ernsthafter Kryptografie ist oft einfach unm\u00f6glich. Und ernsthafte Kryptografie wird ben\u00f6tigt, wie im Folgenden demonstriert wird. Obwohl dieses Problem eindeutig zeitweilig ist, wird ernsthafte Kryptografie in Vertr\u00e4gen ben\u00f6tigt, um viele Aufgaben zu l\u00f6sen, und allm\u00e4hlich erscheint sie (z.B. systematische Vertr\u00e4ge f\u00fcr zkSNARKs in Ethereum).<\/p>\n<p><\/p>\n<p>Die Blockchain, die einen transparenten und zuverl\u00e4ssigen Kommunikationskanal des Protokolls gew\u00e4hrleistet, macht dies nicht kostenlos. Jedes dezentrale Protokoll muss die M\u00f6glichkeit eines Sybil-Angriffs ber\u00fccksichtigen, da jede Aktion von einer Vielzahl von Konten rechtm\u00e4\u00dfig durchgef\u00fchrt werden kann. Daher m\u00fcssen beim Entwurf die F\u00e4higkeiten der Angreifer zur Schaffung einer beliebigen Anzahl von Teilnehmern ber\u00fccksichtigt werden, die im Bunde agieren. <\/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 bislang keinen guten PVRB gibt, der durch viele Gl\u00fccksspielanwendungen \u00fcberpr\u00fcft wurde, in Blockchains implementiert. Woher kommt dann die gro\u00dfe Anzahl an Gl\u00fccksspielanwendungen in Ethereum und EOS? Das \u00fcberrascht mich genauso wie euch, woher haben sie in einer vollst\u00e4ndig deterministischen Umgebung so viele \"robuste\" Zufallswerte?<\/p>\n<p><\/p>\n<p>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 \u00fcber die Probleme solcher Schemata. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.positive.com\/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">hier<\/a><\/noindex>. 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\u00f6nnte sogar im Whitepaper hinzuf\u00fcgen, dass euer Schema \"post-quantum-sicher\" ist (da es quantensichere Hash-Funktionen gibt :)).<\/p>\n<p><\/p>\n<p>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:<\/p>\n<p><\/p>\n<ol>\n<li>Das Ergebnis muss eine nachweisbar gleichm\u00e4\u00dfige Verteilung aufweisen, d.h. es muss auf nachweisbar robuster Kryptografie basieren.<\/li>\n<li>Es ist unm\u00f6glich, irgendein Bit des Ergebnisses zu kontrollieren. Folglich kann das Ergebnis nicht im Voraus vorhergesagt werden.<\/li>\n<li>Der Protokollgenerator darf nicht durch Nicht-Teilnahme am Protokoll oder durch \u00dcberlastung des Netzwerks mit Angreifer-Nachrichten sabotiert werden.<\/li>\n<li>Alles oben Genannte muss gegen\u00fcber Absprachen einer zul\u00e4ssigen Anzahl unredlicher Teilnehmer des Protokolls robust sein (zum Beispiel 1\/3 der Teilnehmer).<\/li>\n<\/ol>\n<p><\/p>\n<p>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\u00e4\u00dfige Verteilung und gute Zufallswerte. Aber BP hat mindestens die M\u00f6glichkeit, \"den Block zu ver\u00f6ffentlichen oder nicht\". So kann BP mindestens zwischen ZWEI Varianten von Zufall w\u00e4hlen: \"seinen\" und den, der entsteht, wenn jemand anderes den Block erstellt. BP kann im Voraus \"nachsehen\", was passiert, wenn er den Block ver\u00f6ffentlicht, 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\u00f6ffentlichen, 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\u00fcnftigen Blocks mit einer H\u00f6he von beispielsweise N + 42 entsteht, wobei N die aktuelle Blockh\u00f6he ist. Das verst\u00e4rkt das Schema ein wenig, l\u00e4sst BP aber dennoch, wenn auch in der Zukunft, w\u00e4hlen, ob er den Block zur\u00fcckhalten oder ver\u00f6ffentlichen m\u00f6chte.<\/p>\n<p><\/p>\n<p>Die Software von BP wird in diesem Fall komplizierter, aber nicht stark. Einfach bei der Validierung und Einf\u00fcgung von Transaktionen in den Block erfolgt eine schnelle \u00dcberpr\u00fcfung, ob es einen Gewinn geben wird, und m\u00f6glicherweise die Anpassung eines Transaktionsparameters, um eine hohe Gewinnwahrscheinlichkeit zu erzielen. Dabei ist es nahezu unm\u00f6glich, einen intelligenten BP bei solchen Manipulationen zu erwischen; man kann jedes Mal neue Adressen verwenden und peu \u00e0 peu gewinnen, ohne Verdacht zu erregen.<\/p>\n<p><\/p>\n<p>Daher sind die Methoden, die Informationen aus dem Block verwenden, nicht als universelle Implementierung von PVRB geeignet. In einer eingeschr\u00e4nkten Variante, mit Beschr\u00e4nkungen auf die Einsatzgr\u00f6\u00dfe, Begrenzungen der Spieleranzahl und\/oder KYC-Registrierung (um zu verhindern, dass ein Spieler mehrere Adressen nutzen kann), k\u00f6nnen diese Systeme f\u00fcr kleine Spiele funktionieren, aber nicht mehr.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-commit-reveal\">PVRB und Commit-Reveal.<\/h2>\n<p><\/p>\n<p>Nun, danke dem Hashing und zumindest der relativen Unvorhersehbarkeit des Blockhashes und anderer Variablen. Wenn das Problem des Front-Running von Minern gel\u00f6st wird, sollte etwas brauchbareres entstehen. Lassen Sie uns die Benutzer in dieses Schema einbeziehen \u2013 sie sollten auch den Zufall beeinflussen: Jeder Mitarbeiter des Supports wird Ihnen sagen, dass das Unberechenbarste in IT-Systemen die Handlungen der Benutzer sind \ud83d\ude42<\/p>\n<p><\/p>\n<p>Ein naives Schema, bei dem die Benutzer einfach zuf\u00e4llige 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\u00e4chst Hashes ihrer Zufallszahlen (Commits) und \u00f6ffnen dann die Zufallszahlen selbst (Reveals). Die Phase \u201eReveal\u201c beginnt erst, nachdem die erforderlichen Commits gesammelt wurden, sodass die Teilnehmer genau die Zufallszahl senden k\u00f6nnen, deren Hash sie zuvor gesendet haben. Jetzt kombinieren wir all dies mit den Blockparametern, wobei wir besser eine aus der Zukunft ausw\u00e4hlen (die Zufallszahl kann nur in einem der zuk\u00fcnftigen Bl\u00f6cke bekannt gegeben werden), und voil\u00e0 \u2013 die Zufallszahl ist bereit! Jetzt hat jeder Spieler Einfluss auf die resultierende Zufallszahl und kann den b\u00f6swilligen BP \u201ebesiegen\u201c, indem er dessen Zufallszahl mit seiner, im Voraus unbekannten, Zufallszahl \u00fcberdeckt... Au\u00dferdem kann man einen Schutz gegen das Sabotieren des Protokolls hinzuf\u00fcgen, indem man ein Nicht-Reveal in der Reveal-Phase vorschreibt \u2013 indem man einfach verlangt, dass beim Commit eine gewisse Summe angeh\u00e4ngt wird \u2013 eine Sicherheitskaution, die nur w\u00e4hrend des Reveal-Prozesses zur\u00fcckgegeben wird. In diesem Fall w\u00e4re es unvorteilhaft, einen Commit zu machen und keinen Reveal durchzuf\u00fchren.<\/p>\n<p><\/p>\n<p>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\u00e4t 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\u00e4lligen Optionen ausw\u00e4hlen.<br \/>\nAber es gibt die M\u00f6glichkeit, diejenigen zu bestrafen, die einen Commit machen und keinen Reveal durchf\u00fchren, und dieses Schema wird noch n\u00fctzlich sein. Ihre Einfachheit ist ein ernsthaftes Plus \u2013 ernsthaftere Protokolle erfordern wesentlich leistungsst\u00e4rkere 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, um RP zu einem pseudorandomisierten Wert zu bringen, auf den er keinen Einfluss nehmen kann, wenn ihm ein \u201eVorbild\u201c gegeben wird \u2014 dies ist eine deterministische Signatur. Eine solche Signatur ist zum Beispiel RSA, und nicht ECS. Wenn RP ein Schl\u00fcsselpaar hat: RSA und ECC, und er mit seinem privaten Schl\u00fcssel einen bestimmten Wert signiert, dann erh\u00e4lt er im Fall von RSA EINE UND NUR EINE Signatur, w\u00e4hrend er im Fall von ECS eine beliebige Anzahl von unterschiedlichen g\u00fcltigen Signaturen generieren kann. Dies geschieht, weil bei der Erstellung einer ECS-Signatur eine zuf\u00e4llige Zahl verwendet wird, die vom Unterzeichner gew\u00e4hlt wird, und diese kann nach Belieben ausgew\u00e4hlt werden, wodurch der Unterzeichner die M\u00f6glichkeit hat, eine von mehreren Signaturen auszuw\u00e4hlen. Im Fall von RSA: \u201eein Eingabewert\u201c + \u201eein Schl\u00fcsselpaar\u201c = \u201eeine Signatur\u201c. Es ist nicht m\u00f6glich 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 \u2014 der vorherige Zufallswert. In einem solchen Schema werden viele Ressourcen gespart, da die Signaturen gleichzeitig auch eine Best\u00e4tigung der korrekten Verhaltensweise gem\u00e4\u00df dem Protokoll und eine Quelle f\u00fcr Zufallswerte darstellen.<\/p>\n<p><\/p>\n<p>Dennoch bleibt selbst mit deterministischen Signaturen das Schema anf\u00e4llig f\u00fcr das \u201eLast Actor\u201c-Problem. Der letzte Teilnehmer kann immer noch entscheiden, ob er seine Signatur ver\u00f6ffentlicht oder nicht, und somit das Ergebnis kontrollieren. Man kann das Schema weiterentwickeln, Hashes von Bl\u00f6cken hinzuf\u00fcgen, 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\u00f6st und funktionieren nur unter wirtschaftlichen und zeitlichen Einschr\u00e4nkungen. Dar\u00fcber hinaus ist die Gr\u00f6\u00dfe der RSA-Schl\u00fcssel (1024 und 2048 Bit) recht gro\u00df, w\u00e4hrend die Gr\u00f6\u00dfe f\u00fcr Blockchain-Transaktionen ein \u00e4u\u00dferst wichtiger Parameter ist. Offenbar ist es nicht einfach, das Problem zu l\u00f6sen, also gehen wir weiter.<\/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 Kryptographie gibt es Systeme, die es einem Netzwerk erm\u00f6glichen k\u00f6nnen, sich auf genau einen Wert PVRB zu einigen, wobei solche Systeme gegen b\u00f6swillige Handlungen eines Teils der Teilnehmer robust sind. Ein n\u00fctzliches Protokoll, mit dem man sich vertraut machen sollte, ist das Shamir Secret Sharing. Es dient dazu, ein Geheimnis (zum Beispiel einen geheimen Schl\u00fcssel) in mehrere Teile aufzuteilen und diese Teile an N Teilnehmer zu verteilen. Das Geheimnis wird so verteilt, dass f\u00fcr die Wiederherstellung M Teile aus N ausreichend sind, wobei es beliebige M Teile sein k\u00f6nnen. Einfach ausgedr\u00fcckt, 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.<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 es ist praktisch, damit zu experimentieren, um das Protokoll im Kopf durchzugehen, auf <noindex><a rel=\"nofollow\" href=\"http:\/\/point-at-infinity.org\/ssss\/demo.html\">Demo<\/a><\/noindex> Seite.<\/p>\n<p><\/p>\n<p>W\u00e4re das FSSS-Schema (Fiat-Shamir Secret Sharing) in seiner reinsten Form anwendbar \u2013 das w\u00e4re ein unzerst\u00f6rbarer PVRB. In der einfachsten Variante k\u00f6nnte das Protokoll so aussehen:<\/p>\n<p><\/p>\n<ul>\n<li>Jeder Teilnehmer generiert einen eigenen Zufallswert und verteilt Shares davon an die anderen Teilnehmer.<\/li>\n<li>Jeder Teilnehmer gibt seine Anteile der Geheimnisse der anderen Teilnehmer preis.<\/li>\n<li>Wenn der Teilnehmer mehr als M Shares hat, kann die Zahl dieses Teilnehmers berechnet werden, und sie wird eindeutig sein, unabh\u00e4ngig von der Auswahl der aufgedeckten Teilnehmer.<\/li>\n<li>Die Kombination der aufgedeckten Zufallswerte ist der 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, seine Teilnahme ist entscheidend f\u00fcr das Erreichen des Schwellenwerts f\u00fcr die Offenlegung der Zufallswerte. Daher funktioniert dieses Protokoll, solange gen\u00fcgend Teilnehmer, die dem Protokoll folgen, und verf\u00fcgbare RP vorhanden sind, und erf\u00fcllt die Anforderungen an kryptographische Robustheit und ist gegen das Problem des \"letzten Akteurs\" resistent.<\/p>\n<p><\/p>\n<p>Das k\u00f6nnte die ideale Variante sein, dieses PVRB-Schema auf der Basis von Secret Sharing nach 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 im Blockchain-Bereich 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 \u2013 die \u00dcberpr\u00fcfung des ver\u00f6ffentlichen Shares 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 sehr gro\u00df 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 \u00fcberpr\u00fcfen k\u00f6nnen, 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.<\/p>\n<p><\/p>\n<p>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 \u2014 diese Verfahren k\u00f6nnen off-chain ausgelagert und auf Hochleistungssystemen durchgef\u00fchrt werden, aber die Verifizierung kann nicht umgangen werden \u2014 dies ist ein weiteres wichtiges Anforderung an PVRB. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB und Threshold-Signaturen<\/h2>\n<p><\/p>\n<p>Nachdem wir uns mit dem Schema der geheimen Teilung vertraut gemacht hatten, er\u00f6ffneten wir eine ganze Klasse von Protokollen, die durch das Schl\u00fcsselwort \u201eThreshold\u201c 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 \u201eThreshold\u201c-Schemata. Diese erm\u00f6glichen es, das Problem des \u201eletzten Akteurs\u201c zu l\u00f6sen; jetzt, wenn ein Angreifer seinen Teil des Geheimnisses nicht offenbart, wird dies von einem anderen ehrlichen Teilnehmer erledigt. Diese Schemata erm\u00f6glichen es, sich auf einen und nur einen Wert zu einigen, selbst wenn einige Teilnehmer das Protokoll sabotieren. <\/p>\n<p><\/p>\n<p>Die Kombination aus deterministischen Signaturen und Threshold-Schemata erm\u00f6glicht die Entwicklung eines sehr benutzerfreundlichen und vielversprechenden Schemas zur Implementierung von PVRB - dies sind deterministische Threshold-Signaturen. Hier ist <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2002\/081.pdf\">Artikel<\/a><\/noindex> \u00dcber verschiedene Anwendungen von Threshold-Signaturen, und hier ist ein weiteres gutes Beispiel <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-Signaturen beschrieben (BLS steht f\u00fcr Boneh-Lynn-Shacham, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.iacr.org\/archive\/asiacrypt2001\/22480516.pdf\">hier<\/a><\/noindex> Artikel ), die eine sehr wichtige und \u00e4u\u00dferst praktische Eigenschaft f\u00fcr Programmierer besitzen \u2013 \u00f6ffentliche, geheime, \u00f6ffentliche Schl\u00fcssel und BLS-Unterschriften k\u00f6nnen durch einfache mathematische Operationen miteinander kombiniert werden, wobei ihre Kombinationen g\u00fcltige Schl\u00fcssel und Unterschriften bleiben, was es erm\u00f6glicht, viele Unterschriften in einer und viele \u00f6ffentliche Schl\u00fcssel 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\u00fcltige Schl\u00fcssel, was es erm\u00f6glicht, ein Szenario zu realisieren, bei dem M von N Teilnehmern eine einzige und eindeutige Unterschrift erstellen, die deterministisch, \u00f6ffentlich verifizierbar und unvorhersehbar ist, bis sie vom M-ten Teilnehmer ge\u00f6ffnet wird.<\/p>\n<p><\/p>\n<p>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\u00fcllen die Anforderungen an die Qualit\u00e4t des Zufalls, der Schwellenwert-Teil sch\u00fctzt vor \u201eLast-Actor\u201c, und die einzigartige Kombinierbarkeit der Schl\u00fcssel erm\u00f6glicht es, viele interessante Algorithmen zu realisieren, die beispielsweise eine effiziente Aggregation von Nachrichten im Protokoll erm\u00f6glichen.<\/p>\n<p><\/p>\n<p>Wenn Sie also PVRB in Ihrer Blockchain implementieren, wird es mit gro\u00dfer Wahrscheinlichkeit auf das Schema der BLS-Schwellenwertunterschriften hinauslaufen, das bereits von mehreren Projekten genutzt wird. Zum Beispiel DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">hier<\/a><\/noindex> Benchmark, das das Schema umsetzt, 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 Zufallsbeacon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-yellowpaper\">yellowpaper<\/a><\/noindex>, aber hier ist <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-box\">Beispiel<\/a><\/noindex> des Smart Contracts, der das Protokoll bedient).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">Implementierung von PVRB<\/h2>\n<p><\/p>\n<p>Leider sehen wir immer noch kein fertiges, in den PVRB-Blockchains implementiertes Protokoll, das seine Sicherheit und 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, 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\u00dflich etwas zu schaffen, das wenigstens den Anforderungen an eine lebensf\u00e4hige Blockchain entspricht. Ein Protokoll rechnet effizienter, ben\u00f6tigt aber mehr Nachrichten zwischen RP, w\u00e4hrend ein anderes extrem wenige Nachrichten erfordert, aber die Erstellung des Proofs kann eine Aufgabe von vielen Minuten oder sogar Stunden sein.<\/p>\n<p><\/p>\n<p>Ich werde die Faktoren auflisten, die Sie bei der Auswahl eines qualitativ hochwertigen PVRB ber\u00fccksichtigen sollten:<\/p>\n<p><\/p>\n<ul>\n<li><em>Kryptografische Robustheit<\/em>. Ihr PVRB sollte strikt unvoreingenommen sein und keine Kontrolle \u00fcber ein einzelnes Bit zulassen. In einigen Schemen ist dies nicht der Fall, also rufen Sie einen Kryptografen.<\/li>\n<li><em>Das Problem des \"letzten Akteurs\"<\/em>. Ihr PVRB sollte gegen Angriffe gesch\u00fctzt sein, bei denen ein Angreifer, der einen oder mehrere RP kontrolliert, eine von zwei Ergebnisoptionen ausw\u00e4hlen kann.<\/li>\n<li><em>Das Problem der Protokollsabottierung<\/em>. Ihr PVRB sollte gegen Angriffe gesch\u00fctzt sein, bei denen ein Angreifer, der einen oder mehrere RP kontrolliert, entscheidet, ob es zuf\u00e4llig ist oder nicht, und garantierte oder mit einer bestimmten Wahrscheinlichkeit darauf einwirken kann.<\/li>\n<li><em>Das Problem der Nachrichtenmenge<\/em>. 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.<\/li>\n<li><em>Das Problem der Berechnungskomplexit\u00e4t<\/em>. Die Verifizierung jeder Phase von PVRB on-chain sollte extrem einfach sein, da sie von allen vollst\u00e4ndigen Knoten des Netzwerks durchgef\u00fchrt wird. Wenn die Implementierung mittels Smart Contracts erfolgt, sind die Anforderungen an die Geschwindigkeit sehr streng.<\/li>\n<li><em>Das Problem der Verf\u00fcgbarkeit und Livelihood<\/em>. Ihr PVRB sollte darauf abzielen, stabil zu bleiben, auch wenn ein Teil des Netzwerks f\u00fcr eine gewisse Zeit nicht verf\u00fcgbar ist und einige RP einfach nicht mehr funktionieren.<\/li>\n<li><em>Das Problem des vertrauensw\u00fcrdigen Setups und der anf\u00e4nglichen Verteilung der Schl\u00fcssel.<\/em>. Wenn Ihre PVRB das prim\u00e4re Setup-Protokoll verwendet, ist das eine ganz andere gro\u00dfe und ernste Geschichte. Hier ist <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">Beispiel<\/a><\/noindex>. Wenn die Teilnehmer vor dem Beginn des Protokolls einander ihre Schl\u00fcssel mitteilen m\u00fcssen, ist das ebenfalls ein Problem, wenn sich die Teilnehmergruppe \u00e4ndert.<\/li>\n<li><em>Entwicklungsprobleme<\/em>. Die Verf\u00fcgbarkeit von Bibliotheken in den ben\u00f6tigten Sprachen, deren Sicherheit und Leistung, die \u00d6ffentlichkeit, komplexe Tests usw.<\/li>\n<\/ul>\n<p><\/p>\n<p>Zum Beispiel hat es bei der Threshold-BLS-Signatur ein erhebliches Problem \u2013 bevor sie mit der Arbeit beginnen k\u00f6nnen, m\u00fcssen die Teilnehmer einander unbedingt die Schl\u00fcssel aush\u00e4ndigen 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\u00f6tigt wird, bedeutet dies, dass Sabotage des Protokolls in diesem Stadium m\u00f6glich 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\u00fcnden durch Einlagen und das Bestrafen (Slashing) von Teilnehmern, die sich nicht an das Protokoll halten, gesch\u00fctzt werden muss. Zudem l\u00e4sst sich die BLS-Verifizierung mit einem akzeptablen Sicherheitslevel einfach nicht in eine Standardtransaktion von EOS oder Ethereum integrieren \u2013 es fehlt einfach die Zeit f\u00fcr die Verifizierung. Der Code von Smart Contracts ist WebAssembly oder EVM und wird von einer virtuellen Maschine ausgef\u00fchrt. Kryptografische Funktionen sind bisher nicht nativ implementiert und arbeiten um ein Vielfaches langsamer als gew\u00f6hnliche kryptographische Bibliotheken. Viele Protokolle sind aufgrund der Gr\u00f6\u00dfe von Schl\u00fcsseln nicht geeignet, beispielsweise 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>Es spielt auch eine Rolle, ob Implementierungen in verschiedenen Programmiersprachen vorhanden sind \u2013 davon gibt es nur wenig, insbesondere f\u00fcr 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\u00fcr geth, in Rust f\u00fcr Parity, in C++ f\u00fcr EOS suchen. JavaScript-Code wird von allen gesucht werden m\u00fcssen, und da JavaScript und Kryptographie nicht gerade enge Freunde sind, wird WebAssembly helfen, das now eindeutig den Anspruch auf die Rolle des n\u00e4chsten wichtigen Internetstandards erhebt.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Fazit<\/h2>\n<p><\/p>\n<p>Ich hoffe, dass in der vorherigen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448330\/\">Artikel<\/a><\/noindex> Ich konnte Sie davon \u00fcberzeugen, dass die Generierung von Zufallszahlen auf der Blockchain f\u00fcr viele Aspekte des Lebens dezentraler Netzwerke von entscheidender Bedeutung ist, und mit diesem Artikel habe ich gezeigt, dass diese Aufgabe \u00e4u\u00dferst ehrgeizig und komplex ist, aber gute L\u00f6sungen bereits existieren. Im Allgemeinen ist das endg\u00fcltige Design des Protokolls nur nach umfangreichen Tests m\u00f6glich, die alle Aspekte vom Setup bis zur Simulation von Ausf\u00e4llen ber\u00fccksichtigen. Daher werden Sie wahrscheinlich keine fertigen Rezepte in den Whitepapers von Teams oder in Artikeln finden, und wir werden uns in den n\u00e4chsten ein bis zwei Jahren sicherlich nicht dazu entschlie\u00dfen, \u201etun Sie dies, das ist definitiv richtig\u201c zu schreiben. <\/p>\n<p><\/p>\n<p>Bislang f\u00fcr unser PVRB in der entwickelten Blockchain <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/haya\">Haya<\/a><\/noindex>, 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\u00f6glich ist. Es ist m\u00f6glich, dass wir sofort zwei Schemes verwenden: zuerst das teure secret sharing zur Erstellung eines langfristigen random_seed, das wir dann als Grundlage f\u00fcr die hochfrequente Generierung von Zufallszahlen mit deterministischen threshold BLS-Signaturen verwenden; eventuell beschr\u00e4nken wir uns auf nur eines der Schemes. Vorab zu sagen, wie das Protokoll aussehen wird, ist leider unm\u00f6glich. 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\u00f6sen, eine weitere Stufe f\u00fcr die Forschung aller ist, die sich mit dem Problem befassen. Um die Anforderungen des Gesch\u00e4fts zu erf\u00fcllen, l\u00f6sen wir ein konkretes praktisches Problem \u2013 die Bereitstellung einer zuverl\u00e4ssigen Quelle von Entropie f\u00fcr Spieleanwendungen. Daher m\u00fcssen wir auch der Blockchain selbst Beachtung schenken, insbesondere den Fragen der Kettenfinalit\u00e4t und der Governance des Netzwerks. <\/p>\n<p><\/p>\n<p>Auch wenn wir bisher kein nachgewiesenes, robustes PVRB in Blockchains sehen, das ausreichend lange genutzt wurde, um die Pr\u00fcfungen echter Anwendungen, mehrerer Audits, Belastungen und nat\u00fcrlich realer Angriffe zu bestehen, belegt die Anzahl der m\u00f6glichen Wege, dass eine L\u00f6sung existiert und einer dieser Algorithmen letztendlich das Problem l\u00f6sen wird. Wir freuen uns darauf, die Ergebnisse zu teilen und danken den anderen Teams, die sich ebenfalls mit diesem Thema befassen, f\u00fcr ihre Artikel und ihren Code, die es Ingenieuren erm\u00f6glichen, nicht zweimal in die gleichen Fallen zu tappen. <\/p>\n<p><\/p>\n<p>Wenn Sie also einem Programmierer begegnen, der ein dezentrales Random-Tool entwirft, seien Sie vorsichtig und aufmerksam. Bei Bedarf leisten Sie psychologische Hilfe \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 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number!\" \/>\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) 5.0.1.1\" \/>\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!\" \/>\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":"Einf\u00fchrung function getAbsolutelyRandomNumer() { return 4; \/\/ gibt absolut zuf\u00e4llige Zahl zur\u00fcck!","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!","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}