{"id":37355,"date":"2019-10-31T22:17:10","date_gmt":"2019-10-31T19:17:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/rsa-random-na-blokchejne\/"},"modified":"2019-10-31T22:17:10","modified_gmt":"2019-10-31T19:17:10","slug":"rsa-random-na-blokchejne","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rsa-random-na-blokchejne","title":{"rendered":"RSA-Zufallszahl auf der Blockchain","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Es gibt ein Problem \u2013 es ist schwierig, eine Zufallszahl in einem dezentralisierten Netzwerk zu generieren. Fast alle Blockchains haben damit zu k\u00e4mpfen. In Netzwerken, in denen kein Vertrauen zwischen den Nutzern besteht, l\u00f6st die Schaffung einer unbestreitbaren Zufallszahl viele Herausforderungen. <\/p>\n<p>In diesem Artikel erkl\u00e4ren wir, wie wir das Problem anhand von Spielen gel\u00f6st haben. Das erste davon war <noindex><a rel=\"nofollow\" href=\"https:\/\/2019.wavesplatform.com\/\">Waves Xmas Tree<\/a><\/noindex>. F\u00fcr die Entwicklung ben\u00f6tigten wir einen Zufallszahlengenerator.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/65826ec0fd880a1792a5eefda3af0673.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nUrspr\u00fcnglich hatten wir geplant, die Zahl anhand von Informationen aus der Blockchain zu generieren. Doch bald wurde klar, dass die Zahl manipuliert werden k\u00f6nnte, was bedeutet, dass diese L\u00f6sung nicht geeignet war. <\/p>\n<p>Wir haben einen Workaround entwickelt: Wir verwendeten das \u201eCommit-\u00d6ffnen\u201c-Schema. Der Server \u201er\u00e4tselte\u201c eine Zahl von 1 bis 5, f\u00fcgte \u201eSalz\u201c hinzu und hashierte dann das Ergebnis mit Hilfe der <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SHA-3\">Keccak-Funktion<\/a><\/noindex>. Der Server deployte im Voraus einen Smart Contract mit der bereits gespeicherten Zahl. Das Spiel bestand also darin, dass der Benutzer die Zahl erriet, die durch den Hash verborgen war.<\/p>\n<p>Der Spieler platzierte seine Wette, w\u00e4hrend der Server die gezogene Zahl sowie das \u201eSalt\u201c an den Smart Contract sendete. Einfach ausgedr\u00fcckt: Die Karten wurden aufgedeckt. Danach verglich der Server die Zahlen und entschied, ob der Benutzer gewonnen oder verloren hatte.<\/p>\n<p>Wenn der Server keine Zahl oder kein \u201eSalt\u201c zur \u00dcberpr\u00fcfung sendete, gewann der Benutzer. In diesem Fall musste f\u00fcr jedes Spiel der Smart Contract im Voraus bereitgestellt und das potenzielle Gewinnbetrag hinterlegt werden. Dies stellte sich als unpraktisch, zeitaufwendig und kostspielig heraus. Zu dieser Zeit gab es keine andere sichere L\u00f6sung.<\/p>\n<p>K\u00fcrzlich schlug das Team von Tradisys vor, die Funktion <b>rsaVerify()<\/b>zum Protokoll Waves hinzuzuf\u00fcgen. Sie \u00fcberpr\u00fcft die G\u00fcltigkeit der RSA-Signatur basierend auf dem \u00f6ffentlichen und privaten Schl\u00fcssel. Letztendlich wurde die Funktion hinzugef\u00fcgt. <\/p>\n<p>Wir haben drei Spiele entwickelt: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.dappocean.io\/dapp\/DICES\">Dice Roller<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.dappocean.io\/dapp\/COINFLIP\">Coin Flip<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/www.dappocean.io\/dapp\/WRIDER\">Ride On Waves<\/a><\/noindex>. Jedes nutzt die Technologie der Zufallszahl. Lassen Sie uns sehen, wie das funktioniert.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/ae7de5a7e96486b7dfaeabca6b22e4b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBetrachten wir die Generierung einer Zufallszahl am Beispiel von Ride on Waves. Den Smart Contract finden Sie unter <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesexplorer.com\/testnet\/address\/3MrfW5HU9H1r5yAGY5Gzcr1A7ACNPLKsDcC\">hier<\/a><\/noindex>.<\/p>\n<p>Gehen Sie zur Registerkarte <b>Script<\/b> und w\u00e4hlen Sie <b>Decompiled<\/b>. Sie sehen den Code des Smart Contracts (dies ist auch das Skript).<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/0f8383ef250c4515ae42e3248e1969c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Code des Smart Contracts enth\u00e4lt eine Reihe von Funktionen. Die mit @Callable gekennzeichneten k\u00f6nnen durch <b>Invocation-Transaktionen gestartet werden.<\/b>. Wir interessieren uns f\u00fcr zwei Funktionen: <b>wette<\/b> und <b>abheben<\/b>:<\/p>\n<ul>\n<li>func wette (spielerWahl)<\/li>\n<li>func abheben (spielId, rsaSign)<\/li>\n<\/ul>\n<p>\n 1. Der Benutzer w\u00e4hlt die L\u00e4nge des Abschnitts und die H\u00f6he des Einsatzes.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/0b517b5a8ff23d7c2fb0f793de498816.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n2. Der Kunde erstellt die wette-Funktion. F\u00fcr das obige Bild w\u00e4re das <b>wette (\u00ab50 \u00bb)<\/b>.<\/p>\n<p>3. Der Kunde sendet eine Invocation-Transaktion an die Adresse des Smart Contracts (broadcast InvocationTx). Die Transaktion enth\u00e4lt als Call-Parameter die Funktion wette. Das bedeutet, dass die Invocation-Transaktion die Ausf\u00fchrung der wette-Funktion (wahl: String) im Smart Contract ausl\u00f6st.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/7f7b77235d384a0df3c44642e1566a17.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n4. Betrachtung der wette-Funktion:<\/p>\n<pre><code class=\"scala\">@Callable(i)\nfunc wette (spielerWahl) = {\n    let neueSpielNum = IncrementGameNum()\n    let spielId = toBase58String(i.transactionId)\n    let pmt = extract(i.payment)\n    let einsatzNichtInWellen = isDefined(pmt.assetId)\n    let geb\u00fchrNichtInWellen = isDefined(pmt.assetId)\n    let gewinnBetrag = ValidateBetAndDefineWinAmt(pmt.amount, spielerWahl)\n    let txIdVerwendet = isDefined(getString(this, spielId))\n    if (einsatzNichtInWellen)\n        then throw (\"Der Einsatz muss in Waves sein\")\n        else if (geb\u00fchrNichtInWellen)\n            then throw (\"Die Geb\u00fchr der Transaktion muss in Waves sein\")\n            else if (txIdVerwendet)\n                then throw (\"Die \u00fcbergebene txId wurde bereits verwendet. Spiel abgebrochen.\")\n                else {\n                    let spielerPubKey58 = toBase58String(i.callerPublicKey)\n                    let spielDatenStr = FormatGameDataStr(STATESUBMITTED, spielerWahl, spielerPubKey58, height, gewinnBetrag, \"\")\n                    ScriptResult(WriteSet(cons(DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(gewinnBetrag)), cons(DataEntry(GAMESCOUNTERKEY, neueSpielNum), cons(DataEntry(spielId, spielDatenStr), nil)))), TransferSet(cons(ScriptTransfer(SERVER, COMMISSION, unit), nil)))\n                    }\n    }<\/code><\/pre>\n<p>\nDie Funktion speichert ein neues Spiel im Status des Smart Contracts. Genauer gesagt:<\/p>\n<ul>\n<li>Eindeutige Kennung des neuen Spiels <b>(Spiel-ID)<\/b><\/li>\n<li>Spielstatus = EINGEREICHT<\/li>\n<li>Spielerwahl (Segmentl\u00e4nge 50)<\/li>\n<li>\u00d6ffentlicher Schl\u00fcssel<\/li>\n<li>Potenzielle Gewinne (abh\u00e4ngig vom Einsatz des Spielers)<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/1d75391b43fd235310438250eecaf4f5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSo sieht der Datensatz in der Blockchain aus (Schl\u00fcssel-Wert):<\/p>\n<pre><code class=\"scala\">{\n    \"type\": \"string\",\n    \"value\": \"03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229\",\n    \"key\": \"2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx\"\n  }<\/code><\/pre>\n<p>\n\u201eSchl\u00fcssel\u201c (key) \u2013 <b>Spiel-ID<\/b> des neuen Spiels. Die anderen Daten finden sich im Feld \u201eWert\u201c (value). Diese Eintr\u00e4ge werden im Tab <b>Data<\/b> des Smart Contracts gespeichert:<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/0263b9c0080d17c947c77f0be712494c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/fd567f32e0acc92d542de8355257fbec.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n5. Der Server \u201e\u00fcberwacht\u201c den Smart Contract und findet die gesendete Transaktion (neues Spiel) \u00fcber die Blockchain-API. Die Spiel-ID des neuen Spiels ist bereits in der Blockchain gespeichert, was bedeutet, dass sie nicht mehr ver\u00e4ndert oder beeinflusst werden kann.<\/p>\n<p> 6. Der Server erstellt die Abhebefunktion (gameId, rsaSign). Zum Beispiel so:<\/p>\n<pre><code class=\"plaintext\">withdraw (\"FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq\", \"base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5\/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL\/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk\/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY\/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr\/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa\/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr\/q0x6Bg==\")<\/code><\/pre>\n<p>\n 7. Der Server sendet eine Invocation-Transaktion an den Smart Contract (broadcast InvocationTx). Die Transaktion enth\u00e4lt den Aufruf der erstellten Withdraw-Funktion (gameId, rsaSign):<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/8a8685b9d83b98233da86ea30346302c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Funktion enth\u00e4lt <b>Spiel-ID<\/b> das neue Spiel und das Ergebnis der RSA-Signatur des eindeutigen Identifikators mit dem privaten Schl\u00fcssel. Das Signaturergebnis bleibt unver\u00e4ndert. <\/p>\n<p><i>Was bedeutet das?<\/i><\/p>\n<p>Wir nehmen denselben Wert (gameId) und wenden die RSA-Signaturmethode darauf an. Wir werden immer dasselbe Ergebnis erhalten. So funktioniert der RSA-Algorithmus. Es ist nicht m\u00f6glich, die finale Zahl zu manipulieren, da gameId und das Ergebnis der RSA-Anwendung unbekannt sind. Es ist auch sinnlos, eine Zahl zu erraten. <\/p>\n<p>8. Die Blockchain akzeptiert die Transaktion. Diese startet die Withdraw-Funktion (gameId, rsaSign).<\/p>\n<p>9. Innerhalb der Withdraw-Funktion erfolgt der Export <b>der GenerateRandInt-Funktion<\/b> (gameId, rsaSign). Das ist der Zufallszahlengenerator.<\/p>\n<p><\/p>\n<pre><code class=\"scala\"># @return 1 ... 100\nfunc GenerateRandInt (gameId,rsaSign) = {\n   \t# verify RSA signature to proof random\n    let rsaSigValid = rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)\n    if (rsaSigValid)\n        then {\n            let rand = (toInt(sha256(rsaSign)) % 100)\n            if ((0 &gt; rand))\n                then ((-1 * rand) + 1)\n                else (rand + 1)\n            }\n        else throw (\"Invalid RSA signature\")\n    }<\/code><\/pre>\n<p>\n<b>rand<\/b> ist die Zufallszahl. <\/p>\n<p>Zuerst wird die Zeichenkette genommen, die das Ergebnis der RSA-Signatur <b>Spiel-ID<\/b> mit dem privaten Schl\u00fcssel (<b>rsaSign<\/b>). Dann wird sie mit SHA-256 gehasht (<b>sha256(rsaSign)<\/b>). <\/p>\n<p>Wir k\u00f6nnen das Ergebnis der Signatur und der anschlie\u00dfenden Hash-Berechnung nicht vorhersagen. Daher ist es nicht m\u00f6glich, die Generierung einer Zufallszahl zu beeinflussen. Um eine Zahl in einem bestimmten Bereich zu erhalten (zum Beispiel von 1 bis 100), wird die Funktion toInt und 0 verwendet (analog <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC\">mod<\/a><\/noindex>).<\/p>\n<p>Am Anfang des Artikels haben wir die Funktion erw\u00e4hnt <b>rsaVerify()<\/b>, die es erm\u00f6glicht, die G\u00fcltigkeit einer RSA-Signatur mit dem privaten Schl\u00fcssel anhand des \u00f6ffentlichen Schl\u00fcssels zu \u00fcberpr\u00fcfen. Hier ist ein Teil von GenerateRandInt (gameId, rsaSign):<\/p>\n<pre><code class=\"plaintext\">rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)<\/code><\/pre>\n<p>\nEs werden der \u00f6ffentliche Schl\u00fcssel RSAPUBLIC und der String rsaSign \u00fcbergeben. Die Signatur wird auf ihre G\u00fcltigkeit \u00fcberpr\u00fcft. Eine Zahl wird nur bei erfolgreicher \u00dcberpr\u00fcfung generiert. Andernfalls betrachtet das System die Signatur als ung\u00fcltig (Ung\u00fcltige RSA-Signatur).<\/p>\n<p>Der Server muss die gameId des Spiels mit dem privaten Schl\u00fcssel signieren und innerhalb von 2880 Bl\u00f6cken eine g\u00fcltige RSA-Signatur senden. Dieser Parameter wird beim Deployment des Smart Contracts festgelegt. Wenn innerhalb der festgelegten Zeit nichts passiert, gewinnt der Benutzer. In diesem Fall muss der Preis selbst an die eigene Adresse gesendet werden. Das bedeutet, der Server hat keinen Anreiz zu betr\u00fcgen, da dies zu einem Verlust f\u00fchren w\u00fcrde. Im Folgenden ein Beispiel.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-Zufallszahl auf der Blockchain\" src=\"\/wp-content\/uploads\/2019\/08\/927a5240a6b094186b1906df81929699.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Benutzer spielt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.dappocean.io\/dapp\/DICES\">Dice Roller<\/a><\/noindex>. Ich habe 2 von 6 Seiten des W\u00fcrfels ausgew\u00e4hlt, der Einsatz betr\u00e4gt 14 WAVES. Wenn der Server innerhalb der festgelegten Zeit (2880 Bl\u00f6cke) keine g\u00fcltige RSA-Unterschrift f\u00fcr den Smart Contract sendet, erh\u00e4lt der Benutzer 34,44 WAVES zur\u00fcck.<\/p>\n<p>Zur Generierung von Zahlen in den Spielen nutzen wir ein Oracle \u2013 ein externes, nicht blockchainbasiertes System. Der Server erstellt die RSA-Unterschrift f\u00fcr die Spiel-ID. Der Smart Contract \u00fcberpr\u00fcft die G\u00fcltigkeit der Unterschrift und bestimmt den Gewinner. Wenn der Server nichts gesendet hat, gewinnt der Benutzer automatisch.<\/p>\n<p>Dies ist eine faire Methode zur Generierung, da Manipulation technisch unm\u00f6glich ist. Alle Spiele von Tradisys basieren auf dem beschriebenen Algorithmus. So funktionieren Spiele auf der Blockchain. Alles ist transparent und \u00fcberpr\u00fcfbar. Ein solches System gibt es in keiner anderen Blockchain. Das ist echter Zufall.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/waves\/blog\/464357\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2013 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0427\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b \u0443\u0436\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c. \u0412\u0435\u0434\u044c \u0432 \u0441\u0435\u0442\u044f\u0445, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0441\u043f\u043e\u0440\u0438\u043c\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0433\u0440. \u041f\u0435\u0440\u0432\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u0430\u043b\u0430 Waves Xmas Tree. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28025,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37355","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2013 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0427\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b \u0443\u0436\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c. \u0412\u0435\u0434\u044c \u0432 \u0441\u0435\u0442\u044f\u0445, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0441\u043f\u043e\u0440\u0438\u043c\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0433\u0440. \u041f\u0435\u0440\u0432\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u0430\u043b\u0430 Waves Xmas Tree. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f\" \/>\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\/rsa-random-na-blokchejne\" \/>\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\udd47RSA-\u0440\u0430\u043d\u0434\u043e\u043c \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2013 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0427\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b \u0443\u0436\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c. \u0412\u0435\u0434\u044c \u0432 \u0441\u0435\u0442\u044f\u0445, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0441\u043f\u043e\u0440\u0438\u043c\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0433\u0440. \u041f\u0435\u0440\u0432\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u0430\u043b\u0430 Waves Xmas Tree. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rsa-random-na-blokchejne\" \/>\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-31T19:17:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:10+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\udd47RSA-Zufallszahl auf der Blockchain | ProHoster","description":"Es gibt ein Problem \u2013 es ist schwierig, eine Zufallszahl in einem dezentralen Netzwerk zu generieren. Praktisch alle Blockchains haben damit zu k\u00e4mpfen. In Netzwerken, wo kein Vertrauen zwischen den Benutzern besteht, l\u00f6st die Erstellung einer unanfechtbaren Zufallszahl viele Probleme. Im Artikel erkl\u00e4ren wir, wie es gelungen ist, das Problem am Beispiel von Spielen zu l\u00f6sen. Das erste davon war Waves Xmas Tree. F\u00fcr die Entwicklung ben\u00f6tigten wir","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rsa-random-na-blokchejne","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\udd47RSA-\u0440\u0430\u043d\u0434\u043e\u043c \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 | ProHoster","og:description":"\u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2013 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0427\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b \u0443\u0436\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c. \u0412\u0435\u0434\u044c \u0432 \u0441\u0435\u0442\u044f\u0445, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0441\u043f\u043e\u0440\u0438\u043c\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0433\u0440. \u041f\u0435\u0440\u0432\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u0430\u043b\u0430 Waves Xmas Tree. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rsa-random-na-blokchejne","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-31T19:17:10+00:00","article:modified_time":"2019-10-31T19:17:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37355","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-23 17:27:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:28:27","updated":"2026-01-23 17:27:20"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37355","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=37355"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37355\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/28025"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=37355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=37355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=37355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}