{"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\/et\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","title":{"rendered":"Juhuslikud numbrid ja detsentraliseeritud v\u00f5rgud: rakendused","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Sissejuhatus<\/h1>\n<p><\/p>\n<pre><code class=\"plaintext\">function getAbsoluutseltJuhuslikArv() {\n        return 4; \\\/\\\/ tagastab t\u00e4iesti juhusliku arvu!\n}<\/code><\/pre>\n<p><\/p>\n<p>Nii nagu t\u00e4iesti vastupidava kr\u00fcptograafilise \u0161ifri kontseptsiooni puhul, p\u00fc\u00fcavad tegelikud \"Avalikult Kontrollitavad Juhuslikud Beaconid\" (edaspidi PVRB) v\u00f5imalikult l\u00e4hedale ideaalsetele skeemidele, kuna reaalses v\u00f5rgus ei saa neid puhtal kujul rakendada: tuleb kokku leppida rangelt \u00fches bitis, ringe peab olema palju ja k\u00f5ik s\u00f5numid peavad olema ideaalselt kiirelt edastatavad. Loomulikult ei ole see reaalses v\u00f5rgus nii. Seega, PVRB kavandamisel konkreetsete \u00fclesannete jaoks t\u00e4nap\u00e4eva plokiahelates, lisaks juhuslike numbrite kontrollimise ja kr\u00fcptograafilise vastupidavuse v\u00f5imatusele, esineb veel palju puhtalt arhitektuurilisi ja tehnilisi probleeme.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ise plokiahel on PVRB jaoks sisuliselt suhtluskeskkond, kus s\u00f5numid = tehingud. See v\u00f5imaldab osaliselt abstraheerida v\u00f5rgu probleemidest, s\u00f5numite mitte-tarnimisest, vahepealse tarkvara probleemidest \u2014 k\u00f5ik need riskid v\u00f5tab enda peale detsentraliseeritud v\u00f5rk, ja selle peamine v\u00e4\u00e4rtus PVRB jaoks \u2014 ei ole v\u00f5imalik tagasi v\u00f5tta v\u00f5i rikkuda juba saadetud tehingut \u2014 see ei v\u00f5imalda osalistel loobuda protokollist, kui nad ei ole edukalt konsensust r\u00fcnnanud. Selline turvalisuse tase on vastuv\u00f5etav, seet\u00f5ttu peab PVRB olema vastupidav osaliste vanden\u00f5udele t\u00e4pselt samamoodi nagu p\u00f5hiblokiahela. See vihjab ka sellele, et PVRB peab olema osa konsensusest, kui v\u00f5rk on kokku leppinud p\u00f5hiblokiahela, siis peaks ta samaaegselt kokku leppima ka ainulaadses \u00f5iglaselt tulemuses juhuslikus. V\u00f5i, PVRB on lihtsalt iseseisev protokoll, mis on rakendatud nutilepinguna, t\u00f6\u00f6tades as\u00fcnkroonselt plokiahela ja blokkide suhtes. M\u00f5lemal meetodil on oma eelised ja puudused, ning valik nende vahel on \u00e4\u00e4rmiselt keeruline. <\/p>\n<p><\/p>\n<h2 id=\"dva-sposoba-implementacii-pvrb\">Kaks PVRB rakendamise viisi<\/h2>\n<p><\/p>\n<p>Kirjeldame l\u00e4hemalt kaht PVRB rakendamise v\u00f5imalust \u2014 iseseisvat versiooni, mis t\u00f6\u00f6tab s\u00f5ltumatu plokiahelast nutilepinguga, ja konsensusintegratsiooniga \u2014 protokolliga, mille kohaselt v\u00f5rk lepib kokku plokiahela ja h\u00f5lmatud tehingutes. K\u00f5igil juhtudel m\u00f5tlen ma populaarsetele plokiahela mootoritele: Ethereum, EOS ja k\u00f5ik, mis sarnaneb nendele nutilepingute paigutamise ja t\u00f6\u00f6tlemise viisil. <\/p>\n<p><\/p>\n<h3 id=\"standalone-contract\">Iseseisev leping<\/h3>\n<p><\/p>\n<p>Selles variandis esindab PVRB nutileping, mis aktsepteerib random-producer\u2019ite (edaspidi RP) tehinguid, t\u00f6\u00f6tleb neid, kombineerib tulemusi ning j\u00f5uab l\u00f5puks m\u00f5nele v\u00e4\u00e4rtusele, mille v\u00f5ib saada mistahes kasutaja sellest lepingust. See v\u00e4\u00e4rtus ei pruugi lepingus otse olla talletatud, vaid see v\u00f5ib olla esitatud ainult andmetena, mille p\u00f5hjal saab m\u00e4\u00e4ratult k\u00e4tte \u00fche ja ainus tulemuse. Selles skeemis on RP plokiahela kasutajad, ja protsessis osalemiseks v\u00f5ib lubada kedagi.<\/p>\n<p><\/p>\n<p>Iseseisva lepinguga variant on hea:<\/p>\n<p><\/p>\n<ul>\n<li>\u00fclekantavuse t\u00f5ttu (lepingud saab t\u00f5sta \u00fchest plokiahelast teise)<\/li>\n<li>lihtsuse t\u00f5ttu rakendamisel ja testimisel (lepingu loomine ja testimine on mugav)<\/li>\n<li>mugavuse t\u00f5ttu majanduslike skeemidega (oma tokeni loomine, mille loogika teenib PVRB eesm\u00e4rke, on lihtne)<\/li>\n<li>v\u00f5imaluse t\u00f5ttu t\u00f6\u00f6tada juba olemasolevates plokiahelates<\/li>\n<\/ul>\n<p><\/p>\n<p>Sellega on ka puuduseid:<\/p>\n<p><\/p>\n<ul>\n<li>tugevad piirangud ressurssidele arvutustes, tehingu maht ja salvestus (lihtsamalt \u00f6eldes cpu\/mem\/io)<\/li>\n<li>piirangud lepingus toimuvale tegevusele (k\u00f5iki k\u00e4ske ei ole saadaval, keeruline on v\u00e4liste teeki \u00fchendamine)<\/li>\n<li>ei ole v\u00f5imalik korraldada s\u00f5numite vahetust kiiremini, kui tehingud lisatakse plokiahelasse<\/li>\n<\/ul>\n<p><\/p>\n<p>See variant sobib PVRB rakendamiseks, mis peab olema k\u00e4ivitatud juba olemasolevas v\u00f5rgus, mis ei sisalda keerulist kr\u00fcptograafiat ja ei n\u00f5ua suurt hulka interaktsioone.<\/p>\n<p><\/p>\n<h3 id=\"consensus-integrated\">Konsensuse integreeritud<\/h3>\n<p><\/p>\n<p>Selles variandis on PVRB rakendatud plokiahela s\u00f5lmede koodis, integreeritud v\u00f5i t\u00f6\u00f6tavad plokiahela s\u00f5lmede vahelises s\u00f5numivahetuses paralleelselt. Protokolli tulemused salvestatakse kohe loodavatesse blokki, samal ajal kui protokolli s\u00f5numid saadetakse p2p v\u00f5rgu kaudu s\u00f5lmede vahel. Kuna protokollil on tulemuseks numbrid, mis tuleb salvestada blokkidesse, peab v\u00f5rk nende osas konsensuseni j\u00f5udma. See t\u00e4hendab, et PVRB s\u00f5numid, nagu ka tehingud, peavad olema s\u00f5lmede poolt valideeritud ja lisatud blokkidesse, et iga v\u00f5rgu osaleja saaks PVRB protokolli vastavust valideerida. See viib meid automaatselt ilmse lahenduse juurde \u2013 kui v\u00f5rk lepib kokku konsensusest bloki ja selle tehingute osas, peab PVRB olema osa konsensusest, mitte eraldi protokoll. Vastasel juhul v\u00f5ib juhtuda, et blokk on konsensuse seisukohalt kehtiv, kuid PVRB protokolli ei ole j\u00e4rgitud, mist\u00f5ttu PVRB seisukohalt ei saa blokk olla aktsepteeritud. Seega, kui valitakse \u201ekonsensuse-integratsiooniga\u201c variant, muutub PVRB oluliseks osaks konsensusest.<\/p>\n<p><\/p>\n<p>Kirjeldades PVRB implementeerimisi konsensuse tasandil v\u00f5rgus, ei tohi mingil juhul m\u00f6\u00f6da vaadata l\u00f5puleviimise k\u00fcsimustest. L\u00f5puleviimine on mehhanism, mida kasutatakse m\u00e4\u00e4ratletud konsensustes, mis fikseerib bloki (ja ahela, mis viib sinna), mis on l\u00f5plik ja mida kunagi ei visata v\u00e4lja, isegi kui ilmub paralleelne fork. N\u00e4iteks Bitcoinis sellist mehhanismi ei ole \u2013 kui avaldada keerukam ahel, asendab see iga v\u00e4hem keeruka, s\u00f5ltumata ahelate pikkusest. EOSes on n\u00e4iteks viimased p\u00f6\u00f6rdumatud plokid, mis ilmuvad keskmiselt iga 432 ploki j\u00e4rel (12*21 + 12*15, eelh\u00e4\u00e4lestamine + eelkomitee). See protsess on sisuliselt 2\/3 allkirjade ootamine blokki tootvatelt tootjatelt (edasi BP). Kui ilmnevad forkid, mis on vanemad kui viimane LIB, visatakse need lihtsalt k\u00f5rvale. See mehhanism v\u00f5imaldab garantii anda, et tehing on plokiahelas ja seda ei t\u00fchistata, s\u00f5ltumata sellest, kui palju ressursse r\u00fcndajal on. Samuti on l\u00f5plikud plokid need, mis on allkirjastatud 2\/3 BP poolt Hyperledgeris, Tendermintis ja muudes pBFT-p\u00f5histes konsensustes. Samuti on m\u00f5istlik, et protokoll l\u00f5puleviimise tagamiseks oleks konsensuse kohalduseks, kuna see v\u00f5ib t\u00f6\u00f6tada as\u00fcnkroonselt plokkide tootmise ja avaldamisega. <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">artikkel<\/a><\/noindex> Ethereum'i l\u00f5plikkus.<\/p>\n<p><\/p>\n<p>L\u00f5plikkus on \u00fclioluline kasutajatele, kes v\u00f5ivad ilma selleta sattuda \"topeltkulutamise\" r\u00fcnnaku ohvriks, kui BP \"hoiab\" plokke ja avaldab need p\u00e4rast seda, kui v\u00f5rk on n\u00e4inud head tehingut. Kui l\u00f5plikkust ei ole, asendab avaldatud fork ploki, kus on \"hea\" tehing, teisega, \"halva\" forki, kus need samad vahendid kantakse r\u00fcndaja aadressile. PVRB puhul on n\u00f5uded l\u00f5plikkuse osas veelgi pingestatud, kuna PVRB jaoks forki ehitamine t\u00e4hendab r\u00fcndaja v\u00f5imalust valmistada ette mitu varianti juhuslikkuse saamiseks, et avaldada talle k\u00f5ige kasulikum, ja piirata r\u00fcnnaku aega - hea lahendus.<\/p>\n<p><\/p>\n<p>Seet\u00f5ttu on parim variant \u00fchendada PVRB ja l\u00f5plikkus \u00fchte protokolli - siis on l\u00f5plik plokk = l\u00f5plik juhuslikkus, ja see on t\u00e4pselt see, mida tuli saavutada. N\u00fc\u00fcd saavad m\u00e4ngijad garanteeritud juhuslikkuse N sekundi jooksul ja v\u00f5ivad olla kindlad, et seda ei saa tagasi v\u00f5tta ega m\u00e4ngida uuesti.<\/p>\n<p><\/p>\n<p>Konsensus-integratsiooni variant on hea:<\/p>\n<p><\/p>\n<ul>\n<li>v\u00f5imalus as\u00fcnkroonseks rakendamiseks plokkide tootmise osas - plokid toodetakse nagu tavaliselt, kuid selle k\u00f5rvale v\u00f5ib t\u00f6\u00f6tada PVRB protokoll, mis genereerib juhuslikkust mitte iga ploki puhul<\/li>\n<li>v\u00f5imalus rakendada isegi keerukat kr\u00fcptograafiat, ilma piiranguteta, mida kehtestavad nutilepingud<\/li>\n<li>v\u00f5imalus organiseerida s\u00f5numite vahetust kiiremini, kui tehingud lisatakse plokiahelasse, n\u00e4iteks osa protokollist v\u00f5ib t\u00f6\u00f6tada node'ide vahelilma s\u00f5numite levitamiseta v\u00f5rgus<\/li>\n<\/ul>\n<p><\/p>\n<p>Sellega on ka puuduseid:<\/p>\n<p><\/p>\n<ul>\n<li>kompleksus testimisel ja arendamisel - tuleb emuleerida v\u00f5rgu vigu, kadunud node'e, v\u00f5rgu k\u00f5vad fork'id<\/li>\n<li>rakenduse vead n\u00f5uavad v\u00f5rgu k\u00f5va forki<\/li>\n<\/ul>\n<p><\/p>\n<p>M\u00f5lemad PVRB rakendamise viisid on eluj\u00f5ulised, kuid nutilepingute rakendamine kaasaegsetes plokiahelates on siiski arvutusressurssidest suuresti piiratud ja t\u00f5sistele kr\u00fcptograafiale \u00fcleminek on tihti lihtsalt v\u00f5imatu. T\u00f5sine kr\u00fcptograafia on vajalik, nagu n\u00e4idatakse hiljem. Kuigi see probleem on selgelt ajutine, on t\u00f5sine kr\u00fcptograafia lepingutes vajalik paljude \u00fclesannete lahendamiseks ning see ilmub j\u00e4rk-j\u00e4rgult (n\u00e4iteks s\u00fcsteemi lepingud zkSNARKs jaoks Ethereumis).<\/p>\n<p><\/p>\n<p>Plokia, mis tagab l\u00e4bipaistva ja usaldusv\u00e4\u00e4rse suhtluskanali protokollis, ei ole tasuta. Iga detsentraliseeritud protokoll peab arvestama Sybil-r\u00fcnnaku v\u00f5imalusega; iga tegevust saab teha koosk\u00f5lastatud r\u00fchmade kaudu paljude kontode abil, seet\u00f5ttu tuleb projekteerimisel arvesse v\u00f5tta r\u00fcndajate v\u00f5imet luua suvaline arv osalejaid protokollis, kes tegutsevad koost\u00f6\u00f6s. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-peremennye-bloka\">PVRB ja ploki muutujad.<\/h2>\n<p><\/p>\n<p>Ma ei valetanud, kui \u00fctlesin, et head PVRB-d, mida on testinud paljud hasartm\u00e4ngu rakendused, ei ole plokiahelates seni keegi rakendanud. Kust siis nii palju hasartm\u00e4ngu rakendusi Ethereumis ja EOS-is? See \u00fcllatab mind sama palju kui teid; kuidas on t\u00e4iesti m\u00e4\u00e4ramatutes tingimustes leitud nii palju \"kest\u00e4vaid\" juhuslikkuseid?<\/p>\n<p><\/p>\n<p>Levinud viis juhuslikkuse saamiseks plokiahelas on v\u00f5tta mingit \"ennustamatuks\" peetavat teavet plokist ja selle p\u00f5hjal genereerida juhuslikkust \u2014 lihtsalt hajutada \u00fche v\u00f5i mitu v\u00e4\u00e4rtust. Hea artikkel nende skeemide probleemidest. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.positive.com\/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">siin<\/a><\/noindex>. V\u00f5ib v\u00f5tta m\u00f5ne \"ennustamatuks\" peetava v\u00e4\u00e4rtuse plokist, n\u00e4iteks ploki hash, tehingute arv, v\u00f5rgu raskusaste ja muud, etteaimamatud v\u00e4\u00e4rtused. Seej\u00e4rel hajutatakse need, \u00fcks v\u00f5i mitu, ja idee kohaselt peaksid need andma ehtsat juhuslikkust. V\u00f5ite isegi oma whitepaperis m\u00e4rkida, et teie skeem on \"postkvantitootes turvaline\" (sest eksisteerivad kvantitehnoloogia t\u00f5estatud hash-funktsioonid :)).<\/p>\n<p><\/p>\n<p>Aga isegi postkvantitootes turvalise hash'i puhul on seda kahjuks liiga v\u00e4he. Saladus peitub n\u00f5uetes PVRB-le; meenutan neid eelmisest artiklist:<\/p>\n<p><\/p>\n<ol>\n<li>Tulemus peab olema t\u00f5estatud \u00fchtlaselt jaotunud, s.t. p\u00f5hinev t\u00f5estatud kr\u00fcptograafial.<\/li>\n<li>Mitte \u00fchtegi tulemust bitist ei saa kontrollida. Seet\u00f5ttu ei saa tulemust ette ennustada.<\/li>\n<li>Protokolli genereerimist ei saa saboteerida, osalemat protokollis v\u00f5i koormates v\u00f5rku r\u00fcndavate s\u00f5numitega.<\/li>\n<li>K\u00f5ik \u00fclalnimetatud peab olema vastupidav lubatud arvu ebaausate protokolli osalejate (n\u00e4iteks 1\/3 osalejat) koost\u00f6\u00f6le.<\/li>\n<\/ol>\n<p><\/p>\n<p>Antud juhul j\u00e4rgitakse ainult n\u00f5uet 1 ja n\u00f5ue 2 ei ole t\u00e4idetud. Hashides ettearvamatuid v\u00e4\u00e4rtusi plokist, saame me \u00fchtlase ja hea juhuslikkuse. Kuid BP-l on v\u00e4hemalt v\u00f5imalus \"plokki avaldada v\u00f5i mitte\". Seega suudab BP v\u00e4hemalt valida kahe juhuslikkuse variandi vahel: \"oma\" ja selle, mis tuleb, kui ploki avaldab keegi teine. BP saab eelnevalt \"piiluda\", mis juhtub, kui ta ploki avaldab, ja lihtsalt otsustada, kas teha seda v\u00f5i mitte. N\u00e4iteks m\u00e4ngides \"paaritud-\u00fchtlane\" v\u00f5i \"punane\/must\" rulett, v\u00f5ib ta ploki avaldada ainult siis, kui n\u00e4eb v\u00f5itu. See muudab ka tulevaste plokkide hash'i kasutamise strateegia ebat\u00f5husaks, n\u00e4iteks \u00f6eldakse, et \"kasutatakse juhuslikkust, mis tuleneb praeguste andmete ja tulevase ploki hash'ist, mille k\u00f5rgus on n\u00e4iteks N + 42, kus N on praegune ploki k\u00f5rgus. See veidi tugevdab skeemi, kuid v\u00f5imaldab BP-l, isegi tulevikus, valida, kas plokk kinni hoida v\u00f5i avaldada.<\/p>\n<p><\/p>\n<p>BP tarkvara keerukus suureneb antud juhul, kuid mitte oluliselt. Lihtsalt tehingu valideerimise ja plokki lisamise k\u00e4igus toimub kiire kontroll, kas v\u00f5it on v\u00f5imalik, ja v\u00f5ib-olla \u00fche tehingu parameetri m\u00e4\u00e4ramine, et saavutada k\u00f5rge t\u00f5en\u00e4osus v\u00f5itmiseks. Samuti on keeruline tabada nutikat BP-d, kes selliste manipulatsioonide kaudu toimib, iga kord saab kasutada uusi aadresse ja v\u00f5ita natuke, kahtlusi tekitamata.<\/p>\n<p><\/p>\n<p>Seega pole plokist saadud teabe kasutamise meetodid sobivad universaalse PVRB rakenduse jaoks. Piiratud variandis, mis h\u00f5lmab panuste suuruse, m\u00e4ngijate arvu ja\/v\u00f5i KYC registreerimise piiranguid (et v\u00e4ltida \u00fche m\u00e4ngija v\u00f5imalust kasutada mitut aadressi), v\u00f5ivad need skeemid t\u00f6\u00f6tada v\u00e4ikeste m\u00e4ngude jaoks, kuid mitte rohkem.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-commit-reveal\">PVRB ja commit-reveal.<\/h2>\n<p><\/p>\n<p>Noh, ait\u00e4h hashingule ja v\u00e4hemalt ploki ja teiste muutujate suhtelisele ettearvamatusele. Kui lahendada minerite front-running probleem, peaks tulema midagi paremat. Lisame sellesse skeemi kasutajad - lase neil samuti m\u00f5jutada juhuslikkust: iga tehnilise toe t\u00f6\u00f6taja \u00fctleb teile, et IT-s\u00fcsteemides on k\u00f5ige juhuslikumad just kasutajate tegevused \ud83d\ude42<\/p>\n<p><\/p>\n<p>Lihtne skeem, kus kasutajad saadavad lihtsalt juhuslikke numbreid ja tulemus arvutatakse n\u00e4iteks nende summa hajutamise kaudu, ei sobi. Sellisel juhul v\u00f5ib viimane m\u00e4ngija, valides oma juhuse, kontrollida, milline tulemus saab olema. Seet\u00f5ttu kasutatakse laialdaselt mustrit commit-reveal. Osalised saadavad esmalt oma juhuslikest numbritest hajutused (commit-id), seej\u00e4rel avavad oma juhuslikud numbrid (reveal-id). \u201eReveal\u201c faas algab alles p\u00e4rast seda, kui vajalikud commit-id on kogutud, seega saavad osalised saata t\u00e4pselt selle juhusliku numbri, mille hajutus nad varem saatsid. N\u00fc\u00fcd sidume k\u00f5ik selle ploki parameetritega, olles parem minevikust (juhuslik number on v\u00f5imalik teada saada ainult m\u00f5nes tulevases plokis), ja voil\u00e0 \u2014 juhuslik number on valmis! N\u00fc\u00fcd m\u00f5jutab iga m\u00e4ngija tulemuseks olevat juhuslikku numbrit ja suudab \u201ev\u00f5ita\u201c kurja BP-d, asendades tema juhusliku numbri oma, eelnevalt teadmata juhusliku numbriga... Samuti on v\u00f5imalik lisada kaitse protokolli sabotaa\u017ei vastu, mitte avades reveal etapis \u2014 n\u00f5udes commit-i k\u00e4igus tehingule teatavat summat \u2014 tagatissummat, mis naaseb ainult reveal protseduuri ajal. Sel juhul oleks commit teha ja mitte reveal mitte kasumlik.<\/p>\n<p><\/p>\n<p>See oli hea katse, ja sellised skeemid on ka m\u00e4ngu DApp-ides olemas, kuid kahjuks sellest ei piisa. N\u00fc\u00fcd saab tulemust m\u00f5jutada mitte ainult kaevandaja, vaid ka iga protokolli osaline. Kontrollida saab endiselt v\u00e4\u00e4rtust, kuid v\u00e4hem variatiivselt ja tasu eest, kuid nagu ka kaevandaja puhul, kui loosimise tulemused on v\u00e4\u00e4rtuslikumad kui osalustasu PVRB protokollis, siis random-producer (RP) v\u00f5ib otsustada, kas teha reveal ja v\u00f5ib endiselt valida v\u00e4hemalt kahest juhuslikust numbrist.<br \/>\nKuid n\u00fc\u00fcd on tekkinud v\u00f5imalus karistada neid, kes teevad commit ja ei tee reveal, ning see skeem osutub veel vajalikuks. Selle lihtsus on t\u00f5sine eelis - t\u00f5sisemad protokollid n\u00f5uavad palju v\u00f5imsamat arvutust.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-determinirovannye-podpisi\">PVRB ja deterministlikud allkirjad.<\/h2>\n<p><\/p>\n<p>On veel \u00fchte viisi, kuidas sundida RP-d esitama pseudojuhuslikku arvu, millele ta ei saa m\u00f5ju avaldada, kui talle antakse \"protot\u00fc\u00fcp\" \u2014 see on determinantne allkiri. N\u00e4iteks on selline allkiri RSA ja see ei ole ECS. Kui RP-l on v\u00f5tmepaar: RSA ja E\u0421C, ja ta allkirjastab oma privaats\u00f5numiga mingi v\u00e4\u00e4rtuse, siis RSA puhul saab ta \u00dcHE JA AINUS ALLKIRJA, kuid ECS puhul saab ta luua mis tahes arvu erinevaid kehtivaid allkirju. See juhtub seet\u00f5ttu, et ECS allkirja loomisel kasutatakse juhuslikku numbrit, mille valib allkirjastaja, ja seda v\u00f5ib valida nagu soovitakse, andes allkirjastajale v\u00f5imaluse valida \u00fche mitmest allkirjast. RSA puhul: \"\u00fcks sisendv\u00e4\u00e4rtus\" + \"\u00fcks v\u00f5tmepaar\" = \"\u00fcks allkiri\". Ei saa ennustada, milline allkiri teise RP juures tuleb, seet\u00f5ttu v\u00f5ib PVRB-d koos determinantsete allkirjadega korraldada mitme osalise RSA allkirjade kombineerimise kaudu, kes on allkirjastanud sama v\u00e4\u00e4rtuse. N\u00e4iteks \u2014 eelmine juhuslik number. Sellises skeemis s\u00e4\u00e4stetakse palju ressursse, kuna allkirjad on samal ajal ka t\u00f5endiks protokolli n\u00f5uetekohasele k\u00e4itumisele ja juhuslike numbrite allikaks.<\/p>\n<p><\/p>\n<p>Kuid isegi determinantsete allkirjade korral j\u00e4\u00e4b skeem endiselt vastuv\u00f5tlikuks \"viimase osalise\" probleemile. Viimane osaline v\u00f5ib endiselt otsustada, kas avaldada allkiri v\u00f5i mitte, kontrollides seega tulemust. Tuleb skeemi t\u00e4iendada, lisada sinna ploki hash-e, luua voorusid, et tulemusi ei saaks ette ennustada, kuid k\u00f5ik need meetodid, isegi arvestades arvukalt t\u00e4iustusi, j\u00e4tavad siiski lahendamata \u00fche osalise m\u00f5ju kollektiivsele tulemusele usaldamatutes tingimustes ja v\u00f5ivad toimida vaid majanduslike ja ajapiirangute korral. Lisaks on RSA v\u00f5tmete suurus (1024 ja 2048 bitti) \u00fcsna suur, samas kui plokiahela tehingute suurus on \u00e4\u00e4rmiselt oluline parameeter. Tundub, et probleemi lihtne lahendamine ei \u00f5nnestu, liigume edasi.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-secret-sharing-shemy\">PVRB ja saladuse jagamise skeemid<\/h2>\n<p><\/p>\n<p>Kr\u00fcptograafias on olemas skeeme, mis v\u00f5imaldavad v\u00f5rgul kokku leppida \u00fchesainus PVRB v\u00e4\u00e4rtuses, samas, kui need skeemid taluvad iga osalise pahatahtlikke tegevusi. \u00dcks kasulik protokoll, millega tasub tutvuda, on Shamir'i saladuse jagamise skeem. See teenib saladuse (n\u00e4iteks salajase v\u00f5tme) jagamiseks mitmeks osaks ja nende jagamiseks N osalisele. Saladus jagatakse nii, et selle taastamiseks on vajalik M osa N-st, kusjuures need v\u00f5ivad olla mis tahes M osa. Lihtsustatult \u00f6eldes, olles teadmata funktsiooni graafik, vahetavad osalised punkte graafikul ning p\u00e4rast M punkti saamist on kogu funktsioon taastatav.<br \/>\nHea seletus on toodud <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Shamir%27s_Secret_Sharing\">wiki<\/a><\/noindex> ja selle p\u00f5hjal katsetamine praktikas, et protokolli peas l\u00e4bi m\u00e4ngida on kasulik <noindex><a rel=\"nofollow\" href=\"http:\/\/point-at-infinity.org\/ssss\/demo.html\">demo<\/a><\/noindex> lehel.<\/p>\n<p><\/p>\n<p>Kui FSSS (Fiat-Shamir Salajase Jagamise Skeem) rakendataks puhtal kujul \u2014 oleks see h\u00e4vitamatu PVRB. Lihtsaim variand protokollist v\u00f5iks v\u00e4lja n\u00e4ha j\u00e4rgmiselt:<\/p>\n<p><\/p>\n<ul>\n<li>Iga osaline genereerib oma vale ja jagab selle osakusi teistele osalistele<\/li>\n<li>Iga osaline avab oma osa teiste osaliste saladustest<\/li>\n<li>Kui osalisele on kogunenud rohkem M osakusi, saab tema number arvutada ning see on ainus, s\u00f5ltumata avanenud osalistest<\/li>\n<li>Avatud vale kombinatsioon on otsitav PVRB<\/li>\n<\/ul>\n<p><\/p>\n<p>Siin ei m\u00f5juta \u00fcksik osaline protokolli tulemusi, v\u00e4lja arvatud juhul, kui tema poolt s\u00f5ltub threshold'i saavutamine vale avalikustamiseks. Seet\u00f5ttu t\u00f6\u00f6tab see protokoll, kui on olemas vajalik osakaal protokolli j\u00e4rgijaid ja k\u00e4ttesaadavaid RP, t\u00e4ites kr\u00fcptograafilise vastupidavuse n\u00f5udeid ja olles vastupidav \"viimase osalise\" probleemile.<\/p>\n<p><\/p>\n<p>See v\u00f5iks olla ideaalne variant, see PVRB skeem Fiat-Shamir'i saladuse jagamise alusel on kirjeldatud n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2017\/216.pdf\">selle<\/a><\/noindex> artiklis. Kuid nagu eelnevalt \u00f6eldud, kui proovida seda rakendada otse plokiahelas, tekivad juba tehnilised piirangud. Siin on n\u00e4ide protokolli testrakendusest EOS-i nutilepingus ja selle k\u00f5ige olulisem osa \u2014 osalise avaldatud osa kontrollimine: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/eoscraper\/blob\/master\/Proof.hh#L23\">koodi<\/a><\/noindex>Koodist on n\u00e4ha, et proof'i valideerimine n\u00f5uab mitmeid skalaarseid korrutamisi ning kasutatavad numbrid on v\u00e4ga suured. Samuti peab aru saama, et plokiahelas toimub valideerimine hetkel, kui block-producer t\u00f6\u00f6tleb tehingut, ja iga osaleja peab h\u00f5lpsasti kontrollima protokolli \u00f5igsust, seet\u00f5ttu on valideerimise funktsiooni kiirus n\u00f5udmistele v\u00e4ga t\u00f5sine. Antud variatiivne lahendus osutus mittefunktsionaalseks, kuna valideerimine ei mahtunud tehingu piirangusse (0,5 sek).<\/p>\n<p><\/p>\n<p>Valideerimise efektiivsus on \u00fcks t\u00e4htsamaid n\u00f5udeid mis tahes edasij\u00f5udnud kr\u00fcptograafiliste skeemide kasutamiseks plokiahelas. Proof'ide loomine, s\u00f5numite ettevalmistamine \u2014 neid protseduure saab viia off-chain ja teostada k\u00f5rgj\u00f5udlike arvutite abil, kuid valideerimist ei saa v\u00e4ltida \u2014 see on veel \u00fcks oluline n\u00f5ue PVRB-le. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB ja threshold allkirjad<\/h2>\n<p><\/p>\n<p>Tutvudes saladuse jagamise skeemiga, avastasime kogu klass protokolle, mis on seotud v\u00f5tmes\u00f5naga \"threshold\". Kui teatud teabe avamiseks on vajalik M ausa osaleja osalemine N-st, ja ausate osalejate komplekt v\u00f5ib olla N-i mis tahes alamkogum, r\u00e4\u00e4gitakse \"threshold\" skeemidest. Need skeemid v\u00f5imaldavad lahendada \"viimase tegija\" probleemi; n\u00fc\u00fcd, kui r\u00fcndaja ei ava oma osa saladusest, teeb seda tema eest m\u00f5ni teine, aus osaleja. Need skeemid v\u00f5imaldavad saavutada \u00fcheainsa v\u00e4\u00e4rtuse kokkuleppe, isegi kui osa osalejatest saboteerib protokolli. <\/p>\n<p><\/p>\n<p>Deterministlike allkirjade ja threshold-skeemide \u00fchendamine on v\u00f5imaldanud v\u00e4lja t\u00f6\u00f6tada v\u00e4ga mugava ja paljulubava skeemi PVRB rakendamiseks \u2014 need on deterministlikud threshold-allkirjad. Siin on <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2002\/081.pdf\">artikkel<\/a><\/noindex> erinevad rakendused threshold-allkirjadest, ja siin on veel \u00fcks hea n\u00e4ide <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.dash.org\/secret-sharing-and-threshold-signatures-with-bls-954d1587b5f\">pikalt lugemist<\/a><\/noindex> Dash'ilt. <\/p>\n<p><\/p>\n<p>Viimases artiklis k\u00e4sitletakse BLS allkirju (BLS t\u00e4hendab Boneh-Lynn-Shacham, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.iacr.org\/archive\/asiacrypt2001\/22480516.pdf\">siin on<\/a><\/noindex> artikkel ), mis omavad programmerijate jaoks v\u00e4ga olulist ja \u00e4\u00e4rmiselt mugavat omadust \u2014 avalikud, salajased, avalikud v\u00f5tmed ja BLS allkirjad saavad omavahel lihtsate matemaatiliste operatsioonide abil kombineerida, j\u00e4\u00e4des samal ajal kehtivateks v\u00f5tmeteks ja allkiri, v\u00f5imaldades h\u00f5lpsasti koguda palju allkirju \u00fchte ja palju avalikke v\u00f5tmeid \u00fcheks. Neil on samuti deterministlikkus ning samade sisendandmete puhul annavad nad sama tulemuse. T\u00e4nu sellele omadusele on BLS allkirjade kombinatsioonid ise kehtivad v\u00f5tmed, mis v\u00f5imaldab rakendada varianti, kus M osa N osalistest genereerib \u00fche ja ainulaadse allkirja, mis on deterministlik, avalikult kontrollitav ja ennustamatu kuni M-nda osalise paljastamiseni.<\/p>\n<p><\/p>\n<p>Threshold BLS allkirjade skeemis allkirjastab iga osaline BLS abil midagi (n\u00e4iteks eelmine juhuslik number), ja kogutud threshold-allkiri ongi soovitud juhuslik number. BLS allkirjade kr\u00fcptograafilised omadused vastavad juhuslikkuse kvaliteedi n\u00f5uetele, threshold-osa kaitseb \u201eviimase tegija\u201c vastu, ning ainulaadne v\u00f5tmete kombineeritavus v\u00f5imaldab ellu viia veel palju huvitavaid algoritme, mis v\u00f5imaldavad n\u00e4iteks t\u00f5husalt koguda protokolli s\u00f5numeid.<\/p>\n<p><\/p>\n<p>Nii et kui ehitate PVRB oma plokiahelas, j\u00f5uate t\u00f5en\u00e4oliselt BLS threshold allkirjade skeemini, mida kasutavad juba mitmed projektid. N\u00e4iteks DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">siin<\/a><\/noindex> benchmark, mis rakendab skeemi, ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/vss\/blob\/master\/docs\/index.md\">siit<\/a><\/noindex> n\u00e4ide rakendamisest verifiable secret sharing), v\u00f5i Keep.network (siin on nende juhuslik beacon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-yellowpaper\">yellowpaper<\/a><\/noindex>, aga <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-box\">n\u00e4ide<\/a><\/noindex> smart contract, mis teenindab protokolli).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">PVRB rakendamine<\/h2>\n<p><\/p>\n<p>Kahjuks ei ole me endiselt n\u00e4inud valmis PVRB protokolli, mis oleks rakendatud plokiahelates ja t\u00f5estanud oma turvalisust ning vastupidavust. Kuigi protokollid on tehniliselt valmis, on nende rakendamine olemasolevates lahendustes keeruline. Keskustatud s\u00fcsteemide jaoks pole PVRB m\u00f5ttekas, samas kui detsentraliseeritud lahendused on piiratud k\u00f5ikides arvutusressurssides: CPU, m\u00e4lu, salvestamine, I\/O. PVRB-i projekteerimine eeldab erinevate protokollide kombineerimist, et luua midagi, mis vastab v\u00e4hemalt mingitele eluj\u00f5uliste plokiahelate n\u00f5udmistele. \u00dcks protokoll arvutab efektiivsemalt, kuid vajab RP-de vahel rohkem s\u00f5numeid, teine n\u00f5uab \u00e4\u00e4rmiselt v\u00e4he s\u00f5numeid, kuid t\u00f5endi loomine v\u00f5ib v\u00f5tta k\u00fcmneid minuteid v\u00f5i isegi tunde.<\/p>\n<p><\/p>\n<p>Loetlen tegurid, mida peate arvesse v\u00f5tma kvaliteetse PVRB valimisel:<\/p>\n<p><\/p>\n<ul>\n<li><em>Kr\u00fcptograafiline vastupidavus<\/em>. Teie PVRB peab olema rangelt unbiasable, ilma v\u00f5imaluseta \u00fche bitti kontrollida. M\u00f5nedes skeemides see ei ole nii, seega kutsuge kr\u00fcptograaf.<\/li>\n<li><em>Viimase tegija probleem<\/em>. Teie PVRB peab olema vastupidav r\u00fcnnakutele, kus r\u00fcndaja, kes kontrollib \u00fchte v\u00f5i mitut RP-d, v\u00f5ib valida kahe tulemuse variandi vahel.<\/li>\n<li><em>Protokolli sabotaa\u017e<\/em>. Teie PVRB peab olema vastupidav r\u00fcnnakutele, kus r\u00fcndaja, kes kontrollib \u00fchte v\u00f5i mitut RP-d, otsustab, kas olla juhuslik v\u00f5i mitte ning v\u00f5ib garanteeritult v\u00f5i m\u00e4\u00e4ratud t\u00f5en\u00e4osusega sellele m\u00f5ju avaldada.<\/li>\n<li><em>S\u00f5numite arv<\/em>. Teie RP-d peaksid saatma plokiahelasse minimaalselt s\u00f5numeid ja maksimaalselt v\u00e4ltima s\u00fcnkrone tegevusi, nagu olukorrad \"saatsin mingi teabe, ootan vastust konkreetsele osale\". P2P v\u00f5rkudes, eriti geograafiliselt hajutatud, ei tasu loota kiirele vastusele.<\/li>\n<li><em>Arvutusalane keerukus<\/em>. Iga etapi kontrollimine PVRB on-chain peaks olema \u00e4\u00e4rmiselt lihtne, kuna seda teevad k\u00f5ik v\u00f5rgu t\u00e4isklientide. Kui rakendus kasutatakse nutilepinguna, on kiirusn\u00f5uded v\u00e4ga ranged.<\/li>\n<li><em>Saadavus ja aktiivsus<\/em>. Teie PVRB peab p\u00fc\u00fcdma j\u00e4\u00e4da vastupidavaks olukordadele, kus osa v\u00f5rku on ajutiselt k\u00e4ttesaamatu ja osa RP-dest lihtsalt lakka toimimast.<\/li>\n<li><em>Usaldusv\u00e4\u00e4rse seadistamise ja algsete v\u00f5tmete jaotamise probleem<\/em>. Kui teie PVRB kasutab esmase seadistuse protokolli, on see eraldi suur ja t\u00f5sine lugu. Siin on <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">n\u00e4ide<\/a><\/noindex>. Kui osalejad peavad enne protokolli algust \u00fcksteisele oma v\u00f5tmeid teatama \u2014 on see ka probleem, kui osalejate koosseis muutub<\/li>\n<li><em>Arendusprobleemid<\/em>. Raamatukogude olemasolu vajalikes keeltes, nende turvalisus ja j\u00f5udlus, avalikkus, keerulised testid jne.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e4iteks threshold BLS allkirjade puhul on olemas m\u00e4rkimisv\u00e4\u00e4rne probleem \u2014 enne t\u00f6\u00f6le asumist peavad osalejad kindlasti \u00fcksteisele v\u00f5tmeid jagama, korraldades r\u00fchma, mille raames threshold t\u00f6\u00f6tab. See t\u00e4hendab, et v\u00e4hemalt \u00fcks ringide vahetus detsentraliseeritud v\u00f5rgus tuleb oodata, ja arvestades, et genereeritud juhuslik number on n\u00e4iteks m\u00e4ngudes praktiliselt reaalajas vajalik, t\u00e4hendab see, et protokolli saboteerimine on v\u00f5imalik sel etapil, ja threshold skeemi eelised kaovad. See probleem on juba lihtsam kui eelmine, kuid n\u00f5uab ikkagi eraldi menetluse v\u00e4ljat\u00f6\u00f6tamist threshold-gruppide moodustamiseks, mida tuleb majanduslikult kaitsta, kasutades tagatisi ja osalejatelt, kes protokolli ei j\u00e4rgita, vahendite \u00e4rav\u00f5tmist (slashing). Samuti ei mahu BLS-i verifitseerimine vastuv\u00f5etava turvalisuse tasemega n\u00e4iteks EOS-i v\u00f5i Ethereum\u2019i standardse tehingu aega \u2014 lihtsalt ei piisa ajast verifitseerimiseks. Lepingu kood on WebAssembly v\u00f5i EVM, seda t\u00e4idab virtuaalne masin. Kr\u00fcptograafilised funktsioonid ei ole natiivsed (praegu), ja t\u00f6\u00f6tavad k\u00fcmneid kordi aeglasemalt kui tavalised kr\u00fcptograafia raamatukogud. Paljud protokollid ei sobi n\u00f5uete t\u00f5ttu lihtsalt v\u00f5tmete mahu t\u00f5ttu, n\u00e4iteks RSA puhul 1024 ja 2048 bitti, see on 4-8 korda rohkem kui standardne tehingu allkiri Bitcoin\u2019is ja Ethereum\u2019is.<\/p>\n<p><\/p>\n<p>M\u00e4ngib rolli ka rakenduste olemasolu erinevates programmeerimiskeeltes \u2014 neid on v\u00e4he, eriti uute protokollide jaoks. Integreerimise variandiga konsensuses peab protokoll olema kirjutatud platvormi keeles, seega tuleb otsida koodi Go jaoks geth, Rust\u2019i jaoks Parity, C++\u2019i jaoks EOS. K\u00f5ik peavad otsima JavaScripti koodi, ja kuna JavaScript ja kr\u00fcptograafia ei ole just parimad s\u00f5brad, aitab WebAssembly, mis pretenderib n\u00fc\u00fcd juba kindlasti j\u00e4rgmise t\u00e4htsa internetistandardi rolli.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Kokkuv\u00f5te<\/h2>\n<p><\/p>\n<p>Loodan, et eelnevas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448330\/\">artiklis<\/a><\/noindex> Mul on \u00f5nnestunud veenda teid, et juhuslike arvude genereerimine plokiahelal on h\u00e4davajalik paljude detsentraliseeritud v\u00f5rkude elu aspektide jaoks. Selle artikliga n\u00e4itasin, et see \u00fclesanne on \u00e4\u00e4rmiselt ambitsioonikas ja keeruline, kuid olemas on juba head lahendused. L\u00f5plik protokolli disain on v\u00f5imalik alles p\u00e4rast p\u00f5hjalikke teste, mis arvesse v\u00f5tavad k\u00f5iki aspekte alates seadistamisest kuni rikkeemulatsioonini, seega ei leia te t\u00f5en\u00e4oliselt valmis retsepte meeskondade whitepaper'itest ega artiklitest, ja meie ei hakka kindlasti j\u00e4rgmise aasta v\u00f5i kahe jooksul kirjutama \"tehke nii, nii on kindlasti \u00f5ige\". <\/p>\n<p><\/p>\n<p>Praegu, meie PVRB jaoks arendatavas plokiahelas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/haya\">Haya<\/a><\/noindex>, oleme peatunud threshold BLS allkirjade kasutamisel, plaanime rakendada PVRB konsensuse tasemel, kuna smart lepingutes t\u00f5husa taseme ohutusega verifitseerimine ei ole praegu v\u00f5imalik. V\u00f5imalik, et kasutame korraga kahte skeemi: alguses kallist saladuse jagamise meetodit pikaajalise random_seed loomiseks, ning kasutame seda seej\u00e4rel alusena k\u00f5rgsageduslike juhuslike arvude genereerimiseks kindlaksm\u00e4\u00e4ratud threshold BLS allkirjade abil, kuigi v\u00f5ib-olla piirdume vaid \u00fche skeemi kasutamisega. Kahjuks ei ole v\u00f5imalik ette \u00f6elda, milline protokoll v\u00e4lja kujuneb, r\u00f5\u00f5muks on aga see, et nagu teaduses, on ka inseneritehnilistes \u00fclesannetes negatiivne tulemus samuti tulemus, ja iga uus katse probleemi lahendada on uus aste k\u00f5igi uurijate jaoks, kes seda k\u00fcsimust k\u00e4sitlevad. \u00c4ri n\u00f5uete t\u00e4itmiseks lahendame konkreetset praktilist \u00fclesannet \u2014 m\u00e4ngu rakenduste kindla entropiaallika tagamine, seet\u00f5ttu peame samuti p\u00f6\u00f6rama t\u00e4helepanu plokiahelale, sealhulgas ahela l\u00f5plikkuse ja v\u00f5rgu haldamise k\u00fcsimustele. <\/p>\n<p><\/p>\n<p>Ja kuigi me ei n\u00e4e veel plokiahelates t\u00f5estatud usaldusv\u00e4\u00e4rset PVRB-d, mida oleks piisavalt kaua kasutatud, et see taluks reaalseid rakendusi, mitmeid auditeid, koormusi ja loomulikult ka reaalsetest r\u00fcnnakutest, siis olemasolevate v\u00f5imalike teede arv kinnitab, et lahendus eksisteerib, ja m\u00f5ni neist algoritmidest lahendab l\u00f5puks probleemi. Jagame hea meelega tulemusi ja t\u00e4name teisi meeskondi, kes samuti selle k\u00fcsimusega tegelevad, artiklite ja koodi eest, mis v\u00f5imaldavad inseneridel mitte astuda kaks korda samadele kivit\u00f5kkele. <\/p>\n<p><\/p>\n<p>Nii et kui kohtate programmeerijat, kes disainib detsentraliseeritud juhuslikkust, olge ettevaatlik ja hooliv, pakkudes vajadusel ps\u00fchholoogilist abi \ud83d\ude42<\/p>\n<p>Allikas: <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\/et\/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=\"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\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\/et\/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\udd47Juhuslikud numbrid ja detsentraliseeritud v\u00f5rgud: rakendused | ProHoster","description":"Sissejuhatus function getAbsolutelyRandomNumer() { return 4; \/\/ tagastab t\u00e4iesti juhusliku numbri!","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","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\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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/33888","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=33888"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/33888\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=33888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=33888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=33888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}