{"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\/et\/blog\/administrirovanie\/rsa-random-na-blokchejne","title":{"rendered":"RSA-vedur plokiahelis","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>On probleem \u2013 raske genereerida juhuslikku arvu detsentraliseeritud v\u00f5rgus. Peaaegu k\u00f5ik plokiahelad on sellega silmitsi seisnud. Usu puudumisel kasutajate vahel lahendab vaieldamatu juhuslik number mitmeid probleeme. <\/p>\n<p>Artiklus r\u00e4\u00e4gib, kuidas suudsime probleemi lahendada m\u00e4ngude n\u00e4itel. Esimene neist oli <noindex><a rel=\"nofollow\" href=\"https:\/\/2019.wavesplatform.com\/\">Waves Xmas Tree<\/a><\/noindex>. Arendamiseks vajasime juhuslike numbrite generaatorit.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" 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 \/>\nAlguses plaanisime genereerida numbri plokiahela teabest. Siiski sai kiiresti selgeks, et numbrit v\u00f5ib v\u00f5ltsida, seega see lahendus ei sobinud. <\/p>\n<p>K\u00e4isime v\u00e4lja alternatiivse tee: kasutada skeemi \"komiteerimine-avamine\". Server \"m\u00f5tles v\u00e4lja\" numbri vahemikus 1 kuni 5, lisas sellele \"soola\" ja seej\u00e4rel hash'iks tulemuse kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SHA-3\">Keccak funktsiooni<\/a><\/noindex>. Server k\u00e4ivitas eelnevalt nutilepingu, kus oli juba salvestatud number. Niisiis oli m\u00e4ng kokkuv\u00f5ttes selles, et kasutaja pidi arvama numbrit, mis oli peidetud hash'i taha.<\/p>\n<p>M\u00e4ngija tegi panuse, samal ajal kui server saatis m\u00f5eldud numbri ja \u201esoola\u201d nutitulepingule. Lihtsalt \u00f6eldes, avas ta kaardid. P\u00e4rast seda v\u00f5rreldes server numbreid ja otsustas, kas kasutaja v\u00f5itis v\u00f5i kaotas.<\/p>\n<p>Kui server ei saatnud numbrit v\u00f5i \u201esoola\u201d kontrollimiseks, v\u00f5itis kasutaja. Sellisel juhul oli iga m\u00e4ngu jaoks vajalik eelnevalt seadistada nutituleping ja m\u00e4\u00e4rata sellesse potentsiaalne v\u00f5it. Selgus, et see oli ebamugav, aeglane ja kallis. Sel hetkel polnud muud turvalist lahendust.<\/p>\n<p>Hiljuti pakkus Tradisys meeskond v\u00e4lja, et lisada Waves protokolli funktsioon <b>rsaVerify()<\/b>. See kontrollib RSA allkirja kehtivust avaliku ja privaatse v\u00f5tme alusel. L\u00f5puks lisati funktsioon. <\/p>\n<p>Olemas on kolm m\u00e4ngu: <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> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.dappocean.io\/dapp\/WRIDER\">Ride On Waves<\/a><\/noindex>. Igas m\u00e4ngus on rakendatud juhuslike numbrite tehnoloogiat. Vaatame, kuidas see t\u00f6\u00f6tab.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/ae7de5a7e96486b7dfaeabca6b22e4b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVaatame juhusliku numbri genereerimist m\u00e4ngu Ride on Waves n\u00e4itel. Nutitulepingu leiate <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesexplorer.com\/testnet\/address\/3MrfW5HU9H1r5yAGY5Gzcr1A7ACNPLKsDcC\">siit<\/a><\/noindex>.<\/p>\n<p>Mine vahekaardile <b>Script<\/b> ja vali <b>Decompiled<\/b>. N\u00e4ete nutitulepingu koodi (ehk skripti).<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/0f8383ef250c4515ae42e3248e1969c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNutitulepingu kood sisaldab funktsioonide kogumit. Need, mis on m\u00e4rgitud kui @Callable, saavad k\u00e4ivituda <b>Invocation-tehingute abil<\/b>. Meie huvitavad kaks funktsiooni: <b>bet<\/b> ja <b>withdraw.<\/b>:<\/p>\n<ul>\n<li>func bet (m\u00e4ngijaValik)<\/li>\n<li>func withdraw (m\u00e4nguId, rsaSign)<\/li>\n<\/ul>\n<p>\n 1. Kasutaja valib l\u00f5igu pikkuse ja panuse suuruse.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/0b517b5a8ff23d7c2fb0f793de498816.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n2. Klient genereerib bet-funktsiooni. \u00dclaltoodud pildi jaoks on see <b>bet (\"50\")<\/b>.<\/p>\n<p>3. Klient saadab Invocation-tehingu nutilepingule (broadcast InvocationTx). Tehing sisaldab Call-parameetrit, mis sisaldab bet-funktsiooni. See t\u00e4hendab, et Invocation-tehing k\u00e4ivitab bet-funktsiooni (valik: String) nutilepingus.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/7f7b77235d384a0df3c44642e1566a17.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n4. Vaatleme bet-funktsiooni:<\/p>\n<pre><code class=\"scala\">@Callable(i)\nfunc bet (m\u00e4ngijaValik) = {\n    let uusM\u00e4nguNum = IncrementGameNum()\n    let m\u00e4nguId = toBase58String(i.transactionId)\n    let pmt = extract(i.payment)\n    let betMitteWaves'is = isDefined(pmt.assetId)\n    let tasuMitteWaves'is = isDefined(pmt.assetId)\n    let v\u00f5itSuurus = ValidateBetAndDefineWinAmt(pmt.amount, m\u00e4ngijaValik)\n    let txIdKasutatud = isDefined(getString(this, m\u00e4nguId))\n    if (betMitteWaves'is)\n        then throw (\"Panuse kogus peab olema Waves'is\")\n        else if (tasuMitteWaves'is)\n            then throw (\"Tehingu tasu peab olema Waves'is\")\n            else if (txIdKasutatud)\n                then throw (\"Edastatud txId on varem kasutatud. M\u00e4ng katkestatud.\")\n                else {\n                    let m\u00e4ngijaAvalikV\u00f5ti58 = toBase58String(i.callerPublicKey)\n                    let m\u00e4nguAndmeteStr = FormatGameDataStr(STATESUBMITTED, m\u00e4ngijaValik, m\u00e4ngijaAvalikV\u00f5ti58, height, v\u00f5itSuurus, \"\")\n                    ScriptResult(WriteSet(cons(DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(v\u00f5itSuurus)), cons(DataEntry(GAMESCOUNTERKEY, uusM\u00e4nguNum), cons(DataEntry(m\u00e4nguId, m\u00e4nguAndmeteStr), nil)))), TransferSet(cons(ScriptTransfer(SERVER, COMMISSION, unit), nil)))\n                    }\n    }<\/code><\/pre>\n<p>\nFunktsioon salvestab smartratelepingu staatuse uut m\u00e4ngu. Nimelt:<\/p>\n<ul>\n<li>Uue m\u00e4ngu unikaalne identifikaator <b>(m\u00e4ngu id)<\/b><\/li>\n<li>M\u00e4ngu staatus = SUBMITTED<\/li>\n<li>M\u00e4ngija valik (l\u00f5igu pikkus 50)<\/li>\n<li>Avalik v\u00f5ti<\/li>\n<li>V\u00f5imalik v\u00f5it (s\u00f5ltub m\u00e4ngija panusest)<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/1d75391b43fd235310438250eecaf4f5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNii n\u00e4eb v\u00e4lja andmete salvestamine plokiahelas (v\u00f5ti-v\u00e4\u00e4rtus):<\/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\u00abV\u00f5ti\u00bb (key) \u2013 <b>m\u00e4ngu id<\/b> uus m\u00e4ng. \u00dclej\u00e4\u00e4nud andmed sisaldavad v\u00e4lja \u00abv\u00e4\u00e4rtus\u00bb (value) rea. Need m\u00e4rkmed salvestatakse smartratelepingu vahekaardile: <b>Andmed<\/b> smartratelepingu:<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/0263b9c0080d17c947c77f0be712494c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/fd567f32e0acc92d542de8355257fbec.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n5. Server \u201evaatab\u201c smartratelepingut ja leiab saatedud tehingu (uus m\u00e4ng) l\u00e4bi plokiahela Api. Uue m\u00e4ngu m\u00e4ngu id on juba salvestatud plokiahelasse, seega ei saa seda muuta ega m\u00f5jutada.<\/p>\n<p> 6. Server genereerib withdraw-funktsiooni (gameId, rsaSign). N\u00e4iteks sellise:<\/p>\n<pre><code class=\"plaintext\">withdraw (\"FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq\", \"base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5\/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL\/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk\/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY\/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr\/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa\/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr\/q0x6Bg==\")<\/code><\/pre>\n<p>\n 7. Server saadab smarthanke jaoks Invocation-tehingu (broadcast InvocationTx). Tehing sisaldab loodud withdraw-funktsiooni (gameId, rsaSign) kutsumist:<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/8a8685b9d83b98233da86ea30346302c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFunktsioon sisaldab <b>m\u00e4ngu id<\/b> uue m\u00e4ngu ja RSA-allkirja tulemuse eristamiseks, mis on saadud privaatv\u00f5tmega. Allkirja tulemus on muutumatu. <\/p>\n<p><i>Mida see t\u00e4hendab?<\/i><\/p>\n<p>V\u00f5tame sama v\u00e4\u00e4rtuse (m\u00e4ngu ID) ja rakendame sellele RSA-allkirja meetodi. Saame alati sama tulemuse. Nii t\u00f6\u00f6tab RSA-algoritm. L\u00f5pptulemust ei saa manipuleerida, kuna m\u00e4ngu ID ja RSA rakendamise tulemus ei ole teada. Arvu kontrollimine on ka m\u00f5ttetuks. <\/p>\n<p>8. Blokeerimine aktsepteerib tehingu. See k\u00e4ivitab withdraw-funktsiooni (gameId, rsaSign)<\/p>\n<p>9. Withdraw-funktsiooni sees toimub v\u00e4ljaveo <b>GenerateRandInt-funktsioon<\/b> (gameId, rsaSign). See on juhuslike arvude generaator.<\/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> on juhuslik number. <\/p>\n<p>Esiteks v\u00f5etakse rida, mis on RSA-allkirja tulemus <b>m\u00e4ngu id<\/b> privaatv\u00f5tmega (<b>rsaSign<\/b>). Siis hajutatakse see SHA-256 abil (<b>sha256(rsaSign)<\/b>). <\/p>\n<p>\u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 1 \u0434\u043e 100), \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f toInt \u0438 %100 (\u0430\u043d\u0430\u043b\u043e\u0433 <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>Artikli alguses mainisime funktsiooni <b>rsaVerify()<\/b>, mis v\u00f5imaldab kontrollida RSA-allkirja kehtivust privaatv\u00f5tme ja avaliku v\u00f5tmega. Siin on osa GenerateRandInt (gameId,rsaSign):<\/p>\n<pre><code class=\"plaintext\">rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)<\/code><\/pre>\n<p>\nSisendiks on avalik v\u00f5ti RSAPUBLIC ja rida rsaSign. Allkiri kontrollitakse kehtivuse osas. number genereeritakse, kui kontroll on edukas. Vastasel juhul peab s\u00fcsteem allkirja kehtetuks (Invalid RSA signature).<\/p>\n<p>Server peab m\u00e4ngu ID-d allkirjastama privaatv\u00f5tmega ja saatma kehtiva RSA-allkirja 2880 ploki jooksul. Parameeter seadistatakse nutilepingu juurutamisel. Kui antud ajavahemikul midagi ei toimu, v\u00f5idab kasutaja. Sellisel juhul peab auhind saadetama isiklikule aadressile. Tulemuseks on see, et server ei saa endale \u00abpettust\u00bb lubada, kuna see viib kaotusse. Allpool on n\u00e4ide.<\/p>\n<p><img decoding=\"async\" alt=\"RSA-vedur plokiahelis\" src=\"\/wp-content\/uploads\/2019\/08\/927a5240a6b094186b1906df81929699.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKasutaja m\u00e4ngib <noindex><a rel=\"nofollow\" href=\"https:\/\/www.dappocean.io\/dapp\/DICES\">Dice Roller<\/a><\/noindex>. Valisin 2 kuue k\u00fclje hulgast, panus \u2013 14 WAVES. Kui server ei saada nutilepingule kehtivat RSA-allkirja m\u00e4\u00e4ratud aja jooksul (2880 plokki), saab kasutaja tagasi 34.44 WAVES.<\/p>\n<p>Numbrite genereerimiseks m\u00e4ngudes kasutame oraaklit \u2013 v\u00e4list, mitte plokiahela s\u00fcsteemi. Server koostatakse RSA-allkiri m\u00e4ngu id-le. Nutileping kontrollib allkirja kehtivust ja m\u00e4\u00e4rab v\u00f5itja. Kui server ei saatnud midagi, siis kasutaja v\u00f5idab automaatselt.<\/p>\n<p>See on aus meetod genereerimiseks, kuna manipulatsioon on tehniliselt v\u00f5imatu. K\u00f5ik Tradisys m\u00e4ngud t\u00f6\u00f6tavad antud algoritmi alusel. Nii t\u00f6\u00f6tavad m\u00e4ngud plokiahelas. K\u00f5ik on l\u00e4bipaistev ja kontrollitav. Sarnast s\u00fcsteemi pole \u00fcheski teises plokiahelas. See on aus juhus.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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-randome blockchainis | ProHoster","description":"On probleem \u2013 keeruline on genereerida juhuslikku numbrit detsentraliseeritud v\u00f5rgus. Peaaegu k\u00f5ik plokiahelad on selle v\u00e4ljakutsega silmitsi seisnud. Sest v\u00f5rgus, kus ei ole usaldusv\u00e4\u00e4rsust kasutajate vahel, lahendab vaidevaba juhuslik number mitmeid probleeme. Artiklis r\u00e4\u00e4gime sellest, kuidas suudeti probleem lahendada m\u00e4ngude n\u00e4itel. Esimene neist oli Waves Xmas Tree. Arendamiseks vajasime","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/rsa-random-na-blokchejne","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/37355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=37355"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37355\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/28025"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=37355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=37355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=37355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}