{"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 getAbsoluutseltJuhuslikNumber() {\n        return 4; \/\/ tagastab t\u00e4iesti juhusliku numbri!\n}<\/code><\/pre>\n<p><\/p>\n<p>Nagu ka t\u00e4iesti vastupidava kr\u00fcptograafia kontseptsiooni puhul, p\u00fc\u00fcavad reaalsed \"Avalikult Kontrollitavad Juhuslikku Tuli\" (edaspidi PVRB) protokollid v\u00f5imalikult l\u00e4hedale ideaalsetele skeemidele, kuna reaalsetes v\u00f5rkudes ei ole puhtal kujul see rakendatav: kokkulepped peavad puudutama rangelt \u00fcht bitti, ringe peab olema palju ning k\u00f5ik s\u00f5numid peavad olema ideaalselt kiired ja alati kohaletoimetatud. Loomulikult ei ole see reaalses elus nii. Seet\u00f5ttu, kui projekteerida PVRB konkreetsete \u00fclesannete jaoks kaasaegsetes plokiahelates, lisaks juhusliku arvu ja kr\u00fcptograafilise vastupidavuse kontrollimise v\u00f5imatusele, tekib palju puhtalt arhitektuurilisi ja tehnilisi probleeme.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Blockchain on PVRB essentially serves as a communication environment where messages represent transactions. This allows for partial abstraction from network issues, message delivery failures, and problems with intermediary software \u2014 all these risks are managed by the decentralized network. The primary value for PVRB lies in the impossibility of retracting or corrupting a transaction once it has been sent, which prevents participants from opting out of the protocol unless they have successfully executed an attack on consensus. This level of security is acceptable, thus PVRB must be resilient against collusion among participants to the same degree as the main blockchain. Furthermore, this implies that PVRB should be part of the consensus if the network has reached an agreement on the main block chain, and it should negotiate a single fair resulting randomness at the same time. Alternatively, PVRB can function as a standalone protocol, implemented through a smart contract, operating asynchronously in relation to the blockchain and the blocks. Both methods have their own advantages and disadvantages, and choosing between them is quite non-trivial. <\/p>\n<p><\/p>\n<h2 id=\"dva-sposoba-implementacii-pvrb\">Kaks v\u00f5imalust PVRB rakendamiseks<\/h2>\n<p><\/p>\n<p>Kirjeldame l\u00e4hemalt kahte PVRB rakenduse varianti \u2014 iseseisev versioon, mis t\u00f6\u00f6tab s\u00f5ltumatult plokiahela nutilepinguga, ja konsensusintegratsiooni \u2014 s\u00fcsteemi, mille kohaselt n\u00f5ustub v\u00f5rk plokkide ahelate ja kaasatud tehingutega. K\u00f5igis nendes juhtudel m\u00f5tlen ma populaarsetele plokiahela mootoritele: Ethereum, EOS ja k\u00f5ik sellele sarnased nutilepingute paigutamise ja t\u00f6\u00f6tlemise viisid. <\/p>\n<p><\/p>\n<h3 id=\"standalone-contract\">Iseseisev leping<\/h3>\n<p><\/p>\n<p>Selles PVRB variandis on tegemist nutilepinguga, mis v\u00f5tab vastu juhuslike tootjate (edaspidi RP) tehingud, t\u00f6\u00f6tleb neid, kombineerib tulemusi ning j\u00f5uab l\u00f5ppkokkuv\u00f5ttes teatud v\u00e4\u00e4rtuseni, mille igal kasutajal on v\u00f5imalik sellest lepingust saada. See v\u00e4\u00e4rtus ei pruugi lepingus otse olla salvestatud, vaid v\u00f5ib olla esindatud ainult andmetena, millest saab deterministlikult tuletada \u00fche ja ainsa tulemuse juhuslikkuse. Selles skeemis on RP plokiahela kasutajad, ja protsessi genereerimises v\u00f5ivad osaleda k\u00f5ik soovijad.<\/p>\n<p><\/p>\n<p>Iseseisva lepingu variant on hea:<\/p>\n<p><\/p>\n<ul>\n<li>\u00fclekantavuse (lepingud saab \u00fcle kanda plokiahelast plokiahelasse)<\/li>\n<li>lihtsuse rakendamisel ja testimisel (lepinguid on mugav kirjutada ja testida)<\/li>\n<li>mugavuse osas majanduslike skeemide rakendamisel (on lihtne luua oma token, mille loogika teenib PVRB eesm\u00e4rke)<\/li>\n<li>v\u00f5imaluse osas k\u00e4ivitamiseks juba t\u00f6\u00f6tavates plokiahelates<\/li>\n<\/ul>\n<p><\/p>\n<p>Kuid sellel on ka puudused:<\/p>\n<p><\/p>\n<ul>\n<li>suured piirangud ressursside osas arvutustes, tehingu maht ja salvestus (lihtsalt \u00f6eldes cpu\/mem\/io)<\/li>\n<li>piirangud operatsioonidele lepingus (k\u00f5ik k\u00e4sud ei ole saadaval, keeruline on \u00fchendada v\u00e4liseid teeke)<\/li>\n<li>v\u00f5imetus korraldada s\u00f5numite vahetust kiiremini, kui tehingud plokiahelasse sisestatakse<\/li>\n<\/ul>\n<p><\/p>\n<p>See valik sobib PVRB rakendamiseks, mille tuleb k\u00e4ivitada juba olemasolevas v\u00f5rgus, mis ei sisalda keerulist kr\u00fcptograafiat ja ei n\u00f5ua suurt suhtlemiste arvu.<\/p>\n<p><\/p>\n<h3 id=\"consensus-integrated\">Konsensuse integreeritud<\/h3>\n<p><\/p>\n<p>Selles variandis on PVRB rakendatud plokiahela s\u00f5lme koodis, integreeritud v\u00f5i t\u00f6\u00f6tades paralleelselt s\u00f5lmede vahelise s\u00f5numivahetusega. Protokolli tulemused salvestatakse otse genereeritud plokkidesse ja protokolli s\u00f5numid saadetakse p2p-v\u00f5rgus s\u00f5lmede vahel. Kuna protokoll toodab numbreid, mis peavad olema plokkidesse kirjutatud, peab v\u00f5rgustik nende osas konsensusele j\u00f5udma. See t\u00e4hendab, et PVRB s\u00f5numid, nagu ka tehingud, peavad olema s\u00f5lmede poolt valideeritud ja plokkidesse lisatud, et iga v\u00f5rgu osaleja saaks PVRB protokolli j\u00e4rgimist valideerida. See viib meid automaatselt ilmse lahenduse juurde: kui v\u00f5rk j\u00f5uab konsensusele ploki ja selles olevate tehingute osas, peab PVRB olema osa konsensusest, mitte eraldi protokoll. Vastasel juhul on v\u00f5imalik olukord, kus plokk on kehtiv konsensuse seisukohalt, kuid PVRB protokolli ei j\u00e4rgita, ja PVRB seisukohalt ei saa plokki aktsepteerida. Seega, kui valitakse \u201cconsensus-integrated\u201d variant, muutub PVRB oluliseks osaks konsensusest.<\/p>\n<p><\/p>\n<p>Konsensusv\u00f5rgus PVRB rakenduste kirjeldamisel ei tohiks j\u00e4tta t\u00e4helepanuta l\u00f5plikkuse teemasid. L\u00f5plikkus on mehhanism, mida kasutatakse deterministlikes konsensusprotsessides, et fikseerida plokk (ja sellele viiv ahel), mis on l\u00f5plik ja ei saa kunagi tagasi l\u00fckatud, isegi kui ilmneb paralleelne haru. N\u00e4iteks Bitcoinis sellist mehhanismi ei ole \u2014 kui postitada keerukama ahelaga plokk, asendab see mistahes v\u00e4hem keeruka, s\u00f5ltumata ahelate pikkusest. EOS-is, n\u00e4iteks, on l\u00f5plikud nii nimetatud viimane p\u00f6\u00f6rdumatu plokk (Last Irreversible Blocks), mis ilmnevad keskmiselt iga 432 ploki j\u00e4rel (12*21 + 12*15, eelh\u00e4\u00e4lestus + eelkomiteerimine). See protsess on p\u00f5him\u00f5tteliselt 2\/3 allkirjade (block-producers, edaspidi BP) ootamine. Harude puhul, mis on vanemad kui viimane LIB, lihtsalt k\u00f5rvaldakse need. See mehhanism tagab, et tehing on kindlalt kinnitatud plokikahelasse ja ei saa kunagi tagasi v\u00f5etud, s\u00f5ltumata r\u00fcndaja ressurssidest. Samuti on l\u00f5plikud plokid need, mis on allkirjastatud 2\/3 BP Hyperledgeris, Tendermintis ja muudes pBFT-p\u00f5histes konsensusprotsessides. Samuti on m\u00f5istlik teha finantseerimise protokoll konsensusmehhanismi kohal, kuna see saab t\u00f6\u00f6tada as\u00fcnkroonselt plokkide tootmise ja avaldamisega. See on hea <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">artikkel<\/a><\/noindex> Ethereum'i l\u00f5plikkusest.<\/p>\n<p><\/p>\n<p>L\u00f5plikkus on \u00fclioluline kasutajatele, kes v\u00f5ivad selle puudumisel sattuda 'double spend' r\u00fcnnaku ohvriks, kus BP 'hoiab' blokke kinni ja avaldab need p\u00e4rast seda, kui v\u00f5rk on n\u00e4inud head tehingut. Kui l\u00f5plikkust pole, asendab avaldatud fork bloki 'heas' tehingus 'halva' forki omaga, kus samad vahendid kantakse r\u00fcndaja aadressile. PVRB puhul muutuvad n\u00f5uded l\u00f5plikkusele veelgi rangemaks, kuna PVRB forki loomine t\u00e4hendab, et r\u00fcndajal on v\u00f5imalus valmistada mitmeid variatsioone, et avaldada enda jaoks k\u00f5ige soodsam, ning piirata r\u00fcnnaku v\u00f5imalust \u2014 hea lahendus.<\/p>\n<p><\/p>\n<p>Seega on parim variant \u00fchendada PVRB ja l\u00f5plikkus \u00fchte protokolli \u2014 siis on l\u00f5plik blok = l\u00f5plik juhus, ja see on t\u00e4pselt see, mida pidi saavutama. N\u00fc\u00fcd saavad m\u00e4ngijad garanteeritud juhuse N sekundi jooksul ja v\u00f5ivad olla kindlad, et seda ei saa tagasi kerida ega uuesti m\u00e4ngida.<\/p>\n<p><\/p>\n<p>Konsensusintegratsiooni variant on hea:<\/p>\n<p><\/p>\n<ul>\n<li>as\u00fcnkroonse elluviimise v\u00f5imalus plokkide tootmise osas \u2014 plokid valmivad nagu tavaliselt, kuid samal ajal v\u00f5ib t\u00f6\u00f6tada PVRB protokoll, mis genereerib mitte iga ploki puhul juhuslikke elemente.<\/li>\n<li>v\u00f5imalus rakendada isegi keerulist kr\u00fcptograafiat ilma piiranguteta, mida smart-lepingud peale panevad.<\/li>\n<li>v\u00f5imalus korraldada s\u00f5numivahetust kiiremini, kui tehingud plokkidesse lisatakse; n\u00e4iteks v\u00f5ib osa protokollist t\u00f6\u00f6tada s\u00f5lmede vahel juhul, kui s\u00f5numeid ei edastata kogu v\u00f5rgus.<\/li>\n<\/ul>\n<p><\/p>\n<p>Kuid sellel on ka puudused:<\/p>\n<p><\/p>\n<ul>\n<li>keerukus testimisel ja arendamisel \u2014 tuleb emuleerida v\u00f5rguvead, kadunud s\u00f5lmed, v\u00f5rgu hard-forkid.<\/li>\n<li>rakendamises esinevad vead n\u00f5uavad v\u00f5rgu hard-forki.<\/li>\n<\/ul>\n<p><\/p>\n<p>M\u00f5lemad PVRB rakendusviisid on \u00f5igustatud, kuid nutilepingute kasutamine t\u00e4nap\u00e4eva plokiahelates on siiski tugevalt piiratud arvutusressursside osas, mist\u00f5ttu on t\u00f5sise kr\u00fcptograafia kasutamine sageli lihtsalt v\u00f5imatu. T\u00f5sine kr\u00fcptograafia on vajalik, nagu allpool demonstreeritakse. Kuigi see probleem on ilmselgelt ajutine, on t\u00f5sine kr\u00fcptograafia lepingutes vajalik paljude \u00fclesannete lahendamiseks ja see ilmub j\u00e4rk-j\u00e4rgult (n\u00e4iteks s\u00fcsteemilepingud zkSNARKide jaoks Ethereumis).<\/p>\n<p><\/p>\n<p>Plokiahel, mis tagab protokolli jaoks l\u00e4bipaistva ja usaldusv\u00e4\u00e4rse s\u00f5numivahetuse kanali, ei tee seda tasuta. Iga detsentraliseeritud protokoll peab arvestama Sybil-r\u00fcnnaku v\u00f5imalustega; iga tegevust on v\u00f5imalik teha koosk\u00f5lastatud tegevuste abil paljude kontode kaudu, seet\u00f5ttu tuleb projekteerimisel arvestada ka r\u00fcndajate v\u00f5imalusega luua meelevaldne arv osalisi protokolli liikmeid, kes tegutsevad kokkuleppes. <\/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, mille on kinnitanud mitmed hasartm\u00e4ngu rakendused, ei ole plokiahelates praegu rakendatud. Kust siis tuleb nii palju hasartm\u00e4ngu rakendusi Ethereumis ja EOS-is? Mind imestab see samuti nagu teid, aga kust on t\u00e4iesti deterministlikus keskkonnas niisugust \u201estabiilset\u201d juhuslikkust leidnud?<\/p>\n<p><\/p>\n<p>Lemmikmeetod juhuslikkuse saamiseks plokiahelas on v\u00f5tta m\u00f5ni \u201eennustamatu\u201d teave plokist ja selle p\u00f5hjal juhuslikkust genereerida \u2014 lihtsalt hashides \u00fche v\u00f5i mitu v\u00e4\u00e4rtust. Hea artikkel selliste skeemide probleemidest. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.positive.com\/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">siit<\/a><\/noindex>V\u00f5ib v\u00f5tta m\u00f5ne \u201eennustamatu\u201d v\u00e4\u00e4rtuse plokis, n\u00e4iteks ploki hash, tehingute arv, v\u00f5rgutaseme keerukus ja muud, eelnevalt teadmata v\u00e4\u00e4rtused. Siis hashida need, \u00fcks v\u00f5i mitu, ja idee kohaselt peaks tulemuseks olema p\u00e4ris juhuslikkus. V\u00f5ib isegi lisada whitepaperisse, et teie skeem on \u201epost-quantum secure\u201d (kuna olemas on kvantit\u00f5endavad hash-funktsioonid :)).<\/p>\n<p><\/p>\n<p>Aga isegi post-quantum secure hash'id ei ole piisavad, kahjuks. Saladus peitub n\u00f5udmistes PVRB suhtes, meenutan neid eelmisest artiklist:<\/p>\n<p><\/p>\n<ol>\n<li>Tulemus peab olema t\u00f5estatult \u00fchtlaselt jaotatud, st p\u00f5hineda t\u00f5estatult tugevatel kr\u00fcptograafiatel.<\/li>\n<li>\u00dckski tulemusbit ei saa olla kontrollitav. Seet\u00f5ttu ei saa tulemust eelnevalt ennustada.<\/li>\n<li>Protokolli genereerimist ei saa saboteerida, osaledes protokollis v\u00f5i koormates v\u00f5rgustikku r\u00fcndavate teadetega.<\/li>\n<li>K\u00f5ik eelpooltoodud peab olema vastupidav kokkulepetele lubatud arvu ebaausate osaliste osas (nt 1\/3 osalistest).<\/li>\n<\/ol>\n<p><\/p>\n<p>Sellisel juhul j\u00e4rgib s\u00fcsteem ainult n\u00f5uet 1, kuid ei j\u00e4rgi n\u00f5uet 2. Hashides ettearvamatuid v\u00e4\u00e4rtusi plokkidest, saame \u00fchtlase jaotuse ja head juhuslikkust. Kuid BP-l on v\u00e4hemalt v\u00f5imalus \"plokki avaldada v\u00f5i mitte\". Seega saab BP valida v\u00e4hemalt KAHES variandis juhuslikkuse: \"oma\" ja selle, mis tekib, kui ploki avaldab keegi teine. BP v\u00f5ib eelnevalt \"vaadata\", mis juhtub, kui ta avaldab ploki, ja lihtsalt otsustada, kas seda teha v\u00f5i mitte. Nii et n\u00e4iteks m\u00e4ngides \"paar-\u00fcks\" v\u00f5i \"punane\/must\" ruletti, v\u00f5ib ta ploki avaldada ainult siis, kui ta n\u00e4eb v\u00f5itu. See muudab ka ebaefektiivseks strateegia, mis kasutab ploki \"tuleviku\" hash'i. Sellisel juhul r\u00e4\u00e4gitakse, et \"kasutatakse juhuslikkust, mis saadakse praeguste andmete ja tulevase ploki, n\u00e4iteks k\u00f5rgusega N + 42 hash'ist, kus N on praeguse ploki k\u00f5rgus. See veidi tugevdab skeemi, kuid v\u00f5imaldab siiski BP-l tulevikus valida, kas plokki kinni hoida v\u00f5i avaldada.<\/p>\n<p><\/p>\n<p>BP tarkvara muutub selles osas keerukamaks, kuid mitte oluliselt. Lihtsalt valideerimise ja tehingu lisamise k\u00e4igus plokki toimub kiire kontroll, kas v\u00f5it on v\u00f5imalik, ja v\u00f5ib-olla \u00fche tehingu parameetri valimine, et saavutada k\u00f5rge t\u00f5en\u00e4osus v\u00f5itmiseks. Samuti on peaaegu v\u00f5imatu p\u00fc\u00fcda nutikat BP-d, kuna selliste manipulatsioonide jaoks v\u00f5ib igal korral kasutada uusi aadresse ja v\u00f5ita v\u00e4hehaaval, kahtlust \u00e4ratamata.<\/p>\n<p><\/p>\n<p>Seet\u00f5ttu ei sobi ploki teabega kasutatavad meetodid PVRB universaalse rakenduse jaoks. Piiratud varianti, kus on piirm\u00e4\u00e4rad panuste suurusele, m\u00e4ngijate arvu piirangud ja\/v\u00f5i KYC registreerimine (et mitte lubada \u00fchel m\u00e4ngijal kasutada mitut aadressi), v\u00f5ivad need skeemid t\u00f6\u00f6tada v\u00e4ikeste m\u00e4ngude jaoks, kuid mitte rohkemaks.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-commit-reveal\">PVRB ja commit-reveal.<\/h2>\n<p><\/p>\n<p>Noh, ait\u00e4h, et hashimine ja v\u00e4hemalt suhteline ettearvamatus ploki hashis ja muudes muutujates. Kui lahendada kaevandajate eesjooksu probleem, peaks tulemus olema midagi paremat. Lisame sellesse skeemi kasutajad \u2014 las nadki m\u00f5jutavad juhuslikkust: iga tehnilise toe t\u00f6\u00f6taja \u00fctleb teile, et IT-s\u00fcsteemides on k\u00f5ige juhuslikum kasutajate tegevus \ud83d\ude42<\/p>\n<p><\/p>\n<p>Lihtne skeem, kus kasutajad saadavad lihtsalt juhuslikke numbreid ning tulemus arvutatakse n\u00e4iteks nende summa hash'ina, ei sobi. Sellisel juhul saab viimane m\u00e4ngija, valides oma juhuslikkuse, kontrollida, milline tulemus saadakse. Seet\u00f5ttu kasutatakse laialdaselt kasutatavat mustrit commit-reveal. Osalejad saadavad esmalt oma juhuslikest (commit\u2019id) hash\u2019id ja avavad seej\u00e4rel juhuslikud arvud (reveal\u2019id). \u201eReveal\u201c faas algab alles p\u00e4rast seda, kui vajalikud commit\u2019id on kogutud, seega saavad osalejad saata t\u00e4pselt selle juhuslikkuse, mille hash\u2019i nad varem saatsid. N\u00fc\u00fcd \u00fchendame k\u00f5ik selle ploki parameetritega, eelistatult tulevikust v\u00f5etud (juhuslikkust saab teada alles \u00fches tulevastes plokkides), ja voil\u00e0 \u2014 juhuslikkus on valmis! N\u00fc\u00fcd m\u00f5jutab iga m\u00e4ngija l\u00f5plikku juhuslikkust ja v\u00f5ib \u201ev\u00f5ita\u201c pahatahtliku BP, blokeerides tema juhuslikkuse oma, eelnevalt teadmata, juhuslikkusega... Samuti v\u00f5ib lisada kaitse protokolli saboteerimise eest, n\u00f5udes commit'e ajal tehingule teatavat summat \u2014 kindlustusdeposiiti, mis tagastatakse ainult reveal\u2019i protseduuri k\u00e4igus. Sellisel juhul on commit tegemine ja reveal mitte tegemine ebasoodsad.<\/p>\n<p><\/p>\n<p>See oli hea katse, ja sellised skeemid on samuti m\u00e4ngu DApp-ides olemas, kuid kahjuks on seda j\u00e4lle v\u00e4he. N\u00fc\u00fcd v\u00f5ivad tulemusele m\u00f5ju avaldada mitte ainult kaevandajad, vaid ka iga protokolli osaleja. V\u00e4\u00e4rtust saab endiselt kontrollida, kuid v\u00e4iksema varieerumise astmega ja raha eest. Kuid nagu ka kaevandaja puhul, kui jagamise tulemused on v\u00e4\u00e4rtuslikumad kui osalustasu PVRB-protokollis, v\u00f5ib random-producer (RP) otsustada, kas teha reveal, ja tal on endiselt v\u00f5imalus valida v\u00e4hemalt kahe juhuslikkuse variandi vahel.<br \/>\nK\u00fcll aga on tekkinud v\u00f5imalus karistada neid, kes teevad commit\u2019i, kuid ei tee reveal\u2019i, ja see skeem osutub veel kasulikuks. Selle lihtsus on t\u00f5sine eelis \u2014 t\u00f5sisemad protokollid n\u00f5uavad palju v\u00f5imsamaid arvutusi.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-determinirovannye-podpisi\">PVRB ja deterministlikud allkirjad.<\/h2>\n<p><\/p>\n<p>On veel veel v\u00f5imalusi, kuidas panna RP esitama pseudojuhuslikku arvu, millele ta ei saa m\u00f5jutada, kui talle antakse 'mudel' \u2014 see on deterministlik allkiri. N\u00e4iteks on selliseks allkirjaks RSA, mitte ECS. Kui RP-l on v\u00f5tmepaar: RSA ja ECC, ja ta allkirjastab oma privaatv\u00f5tmega mingi v\u00e4\u00e4rtuse, siis RSA puhul on tal \u00dcKS JA AINU\u00dcKS allkiri, aga ECS puhul v\u00f5ib ta genereerida mitmeid erinevaid kehtivaid allkirju. See juhtub seet\u00f5ttu, et ECS allkirjade loomisel kasutatakse juhuslikku numbrit, mille valib allkirjastaja, ja see v\u00f5ib olla valitud kuidas iganes, andes allkirjastajale v\u00f5imaluse valida mitme allkirja vahel. RSA puhul: '\u00fcks sisendv\u00e4\u00e4rtus' + '\u00fche v\u00f5tmepaar' = '\u00fche allkiri'. Etten\u00e4gemine, milline allkiri teisel RP-l on, ei ole v\u00f5imalik, seet\u00f5ttu v\u00f5ib PVRB-d deterministlike allkirjadega korraldada, kombineerides RSA allkirju mitmelt osaliselt, 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 nii protokolli k\u00e4itumise \u00f5igusp\u00e4rasuse kinnitamine kui ka juhuslikkuse allikas.<\/p>\n<p><\/p>\n<p>Kuid isegi m\u00e4\u00e4ratud allkirjadega on skeem endiselt haavatav \u201eviimase osaleja\u201d probleemi suhtes. Viimane osaleja v\u00f5ib endiselt otsustada, kas avaldada oma allkiri v\u00f5i mitte, seega kontrollides tulemust. Skeemi on v\u00f5imalik t\u00e4iustada, lisades sinna plokkide hash'id, korraldades voorud, et tulemust ei saaks ette ennustada, kuid k\u00f5ik need tehnikad, isegi arvestades mitmeid t\u00e4iustusi, ei lahenda siiski probleemi, kus \u00fcks osaleja m\u00f5jutab kollektiivset tulemust usaldamatutes keskkondades ja need v\u00f5ivad toimida ainult majanduslike ja ajakohaste piirangute korral. Lisaks on RSA v\u00f5tmete suurus (1024 ja 2048 bitti) \u00fcsna suur ning plokiahela tehingute jaoks on suurus \u00e4\u00e4rmiselt oluline parameeter. Ilmselt ei saa me probleemi lihtsalt lahendada, 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 \u00fches ja ainukeses PVRB v\u00e4\u00e4rtuses, olles samas igasuguste osaliste pahatahtlike tegevuste suhtes vastupidavad. \u00dcks kasulik protokoll, millega tasub tutvuda, on Shamir'i saladuse jagamise skeem. See on m\u00f5eldud saladuse (n\u00e4iteks salajase v\u00f5tme) jagamiseks mitmeks osaks ja nende jagamiseks N osalisele. Saladus jagatakse niimoodi, et selle taastamiseks piisab M osast N-st, kusjuures need v\u00f5ivad olla \u00fcksk\u00f5ik millised M osa. Lihtsalt \u00f6eldes, omades tundmatu funktsiooni graafikut, jagavad osalised punktid graafikul, ja p\u00e4rast M punkti saamist on kogu funktsiooni taastamine v\u00f5imalik.<br \/>\nHea seletus on toodud <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Shamir%27s_Secret_Sharing\">wiki<\/a><\/noindex> ja praktiliselt sellega m\u00e4ngida, et protokolli meelest l\u00e4bi t\u00f6\u00f6tada, on kasulik <noindex><a rel=\"nofollow\" href=\"http:\/\/point-at-infinity.org\/ssss\/demo.html\">demos<\/a><\/noindex> lehek\u00fcljel.<\/p>\n<p><\/p>\n<p>Kui FSSS (Fiat-Shamir Secrets Sharing) skeem oleks rakendatav puhtal kujul \u2014 oleks see h\u00e4vitamatu PVRB. Lihtsaimas variandis v\u00f5iks protokoll v\u00e4lja n\u00e4ha j\u00e4rgmiselt:<\/p>\n<p><\/p>\n<ul>\n<li>Iga osaline genereerib oma random ja jagab selle jagamisi \u00fclej\u00e4\u00e4nud osalistele.<\/li>\n<li>Iga osaleja paljastab oma osa teiste osalejate saladustest.<\/li>\n<li>Kui osalejal on rohkem kui M aktsiat, siis saab selle osaleja numbri arvutada, ja see on ainus, olenemata paljastatud osalejatest.<\/li>\n<li>Paljastatud juhuslike numbrite kombinatsioon on otsitav PVRB.<\/li>\n<\/ul>\n<p><\/p>\n<p>Siin ei m\u00f5juta eraldi osaleja protokolli tulemusi, v\u00e4lja arvatud juhul, kui tema s\u00f5ltub juhuslike numbrite paljastamise k\u00fcnnise saavutamine. Seet\u00f5ttu toimib see protokoll, kui olemas on vajalik osa protokolliga t\u00f6\u00f6tajatest ja ligip\u00e4\u00e4setavad RP, rahuldades kr\u00fcptograafia tugevuse n\u00f5udeid ning olles vastupidav 'viimase tegija' probleemile.<\/p>\n<p><\/p>\n<p>See v\u00f5iks olla ideaalne variant, see PVRB skeem, mis p\u00f5hineb Fiat-Shamiri saladuse jagamisel, on kirjeldatud n\u00e4iteks. <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2017\/216.pdf\">sellest<\/a><\/noindex> artiklis. Kuid nagu eelnevalt mainitud, kui proovida seda otse rakendada plokiahelas, siis tulevad esile tehnilised piirangud. Siin on n\u00e4ide protokolli katsetamisest EOS-i nutilepingus ja selle k\u00f5ige olulisem osa \u2014 osaleja avaldatud aktsia kontrollimine: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/eoscraper\/blob\/master\/Proof.hh#L23\">kood<\/a><\/noindex>. Koodi p\u00f5hjal on n\u00e4ha, et proof\u2019i valideerimine n\u00f5uab mitmeid skalaarsed korrutamised ning kasutatavad numbrid on \u00fclimalt suured. Samuti tuleb m\u00f5ista, et blokikaevandamise protsessis toimub verify hetkel, kui block-producer t\u00f6\u00f6tleb tehingut, ning iga osalist peab olema lihtne protokolli \u00f5igsust kontrollida, seega on n\u00f5uded verify funktsiooni kiirusel \u00e4\u00e4rmiselt ranged. Antud variandi puhul osutus see mitte toimivaks, kuna valideerimine ei mahtunud tehingu piirangusse (0.5 sek).<\/p>\n<p><\/p>\n<p>Valideerimise efektiivsus on \u00fcks olulisemaid n\u00f5udeid mis tahes edasij\u00f5udnud kr\u00fcptograafiliste skeemide kasutamiseks plokiahelas. Proof\u2019ide loomine, s\u00f5numite ettevalmistamine \u2014 need protseduurid saab viia off-chain ning t\u00e4ita k\u00f5rge j\u00f5udlusega arvutites, kuid valideerimist ei \u00f5nnestu m\u00f6\u00f6da minna \u2014 see on veel \u00fcks oluline n\u00f5ue PVRB-le. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB ja threshold signatures<\/h2>\n<p><\/p>\n<p>Tutvudes saladuse jagamise s\u00fcsteemiga, avasime terve klass protokolle, mida \u00fchendab v\u00f5tmes\u00f5na \u201ethreshold\u201d. Kui teatud teabe avamiseks on vaja M ausat osalejat N-st, ning ausate osalejate kogum v\u00f5ib olla N-st valitud mis tahes alamhulka, r\u00e4\u00e4gitakse \u201ethreshold\u201d skeemidest. Need v\u00f5imaldavad lahendada probleemi \u201eviimane tegija\u201d, kuna kui r\u00fcndaja ei ava oma osa saladusest, teeb seda tema eest teine, aus osaleja. Need skeemid lubavad kokku leppida \u00fches ja ainsas v\u00e4\u00e4rtuses, isegi kui osa osalejatest protokolli saboteerib. <\/p>\n<p><\/p>\n<p>Deterministlike allkirjade ja threshold-skeemide \u00fchendamine v\u00f5imaldas v\u00e4lja t\u00f6\u00f6tada v\u00e4ga mugava ja paljut\u00f5otava 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 threshold-allkiri rakendused, ning siin on veel \u00fcks hea n\u00e4ide <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.dash.org\/secret-sharing-and-threshold-signatures-with-bls-954d1587b5f\">longread<\/a><\/noindex> Dashilt. <\/p>\n<p><\/p>\n<p>Viimases artiklis kirjeldatakse BLS allkirju (BLS lahti seletamine on Boneh-Lynn-Shacham, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.iacr.org\/archive\/asiacrypt2001\/22480516.pdf\">siin on<\/a><\/noindex> artikkel), millel on v\u00e4ga oluline ja \u00e4\u00e4rmiselt mugav kvaliteet programmeerijatele \u2014 BLS-i avalikke, privaatseid, avalikke v\u00f5tmeid ja allkirju saab omavahel kombineerida lihtsate matemaatiliste toimingute abil, samal ajal kui nende kombinatsioonid j\u00e4\u00e4vad kehtivateks v\u00f5tmeteks ja allkirjadeks, v\u00f5imaldades kergesti palju allkirju kokku koguda \u00fchte ja palju avalikke v\u00f5tmeid \u00fchte. Need omadused on samuti deterministlikud, ning sama sisendi puhul annavad nad alati sama tulemuse. T\u00e4nu sellele omadusele on BLS allkirjade kombinatsioonid ise kehtivad v\u00f5tmed, mis v\u00f5imaldab rakendada varianti, kus M N-st osalejat teeb \u00fche ja ainulaadse allkirja, mis on deterministlik, avalikult kontrollitav ja ettearvamatu kuni selle hetkeni, mil M-s osaleja avab selle.<\/p>\n<p><\/p>\n<p>BLS threshold allkirjade skeemis allkirjastab iga osaleja BLS-i abil midagi (n\u00e4iteks eelneva juhusliku numbri), ning kogutud threshold-allkiri ongi soovitud juhuslik number. BLS allkirjade kr\u00fcptograafilised omadused vastavad juhuslikkuse kvaliteedi n\u00f5uetele, threshold-osa kaitseb 'last-actor' r\u00fcnnakute eest ning ainulaadne v\u00f5tmete kombineerimise v\u00f5imalus v\u00f5imaldab ellu viia veel palju huvitavaid algoritme, mis n\u00e4iteks v\u00f5imaldavad t\u00f5husalt koondada protokolli s\u00f5numeid.<\/p>\n<p><\/p>\n<p>Nii et kui sa ehitad PVRB-d oma plokiahelas, siis j\u00f5uad t\u00f5en\u00e4oliselt BLS threshold allkirjade skeemini, mida kasutab juba mitu projekti. N\u00e4iteks DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">siit<\/a><\/noindex> benchmark, mis rakendab skeemi, ning <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/vss\/blob\/master\/docs\/index.md\">siin<\/a><\/noindex> n\u00e4ide verifiable secret sharing'i rakendamisest), v\u00f5i Keep.network (siin on nende random 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\">an example<\/a><\/noindex> nutileping, mis teenindab protokolli).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">PVRB rakendamine<\/h2>\n<p><\/p>\n<p>Kahjuks ei ole me siiani n\u00e4inud valmis, PVRB plokiahelates rakendatud protokolli, mis t\u00f5estaks oma turvalisust ja vastupidavust. Kuigi protokollid on tehniliselt valmis, on nende rakendamine olemasolevates lahendustes keeruline. Kesksete s\u00fcsteemide jaoks pole PVRB m\u00f5tet, samas kui detsentraliseeritud lahendused on k\u00f5igis arvutusressurssides rangelt piiratud: CPU, m\u00e4lu, salvestus, I\/O. PVRB projekteerimine h\u00f5lmab erinevate protokollide \u00fchendamist, et luua l\u00f5puks midagi, mis sobib v\u00e4hemalt \u00fche eluj\u00f5ulise plokiahela k\u00f5igile n\u00f5udmistele. \u00dcks protokoll arvutab efektiivsemalt, kuid vajab rohkem teateid RP vahel, samas kui teine vajab \u00e4\u00e4rmiselt v\u00e4he teateid, kuid proof'i loomine v\u00f5ib olla \u00fclesanne, mis kestab k\u00fcmneid minuteid v\u00f5i koguni tunde.<\/p>\n<p><\/p>\n<p>Loetlen tegurid, mida peate arvestama 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 kontrollida \u00fchtegi bitti. M\u00f5nedes skeemides ei ole see nii, seega kutsuge kr\u00fcptograaf.<\/li>\n<li><em>Probleem \"last actor\"<\/em>. Teie PVRB peaks olema r\u00fcnnakute suhtes vastupidav, kui r\u00fcndaja, kes kontrollib \u00fchte v\u00f5i mitut RP-d, v\u00f5ib valida kahe tulemuse vahel.<\/li>\n<li><em>Protokolli saboteerimise probleem<\/em>. Teie PVRB peab olema vastupidav r\u00fcnnakutele, kui r\u00fcndaja, kes kontrollib \u00fchte v\u00f5i mitut RP-d, otsustab, kas olla juhuslik v\u00f5i mitte, ja v\u00f5ib garanteeritult v\u00f5i kindla t\u00f5en\u00e4osusega selle \u00fcle m\u00f5jutada.<\/li>\n<li><em>S\u00f5numite arvukuse probleem<\/em>. Teie RP-d peavad saadma plokiahelasse minimaalselt s\u00f5numeid ja v\u00e4ltima maksimaalselt s\u00fcmbiootilisi toiminguid nagu 'olen saatnud teavet, ootan vastust konkreetselt osalejalt'. P2P v\u00f5rkudes, eriti geograafiliselt hajutatud, ei tasu loota kiirele vastusele.<\/li>\n<li><em>Arvutusliku keerukuse probleem<\/em>. Iga PVRB etapi on-chain kinnitamine peaks olema \u00e4\u00e4rmiselt lihtne, kuna seda teevad k\u00f5ik v\u00f5rgu t\u00e4is kliendid. Kui rakendamine toimub nutilepinguga, on kiirusn\u00f5uded v\u00e4ga ranged.<\/li>\n<li><em>K\u00e4ttesaadavuse ja eluj\u00f5u probleem<\/em>. Teie PVRB peaks p\u00fc\u00fcdma olla r\u00fcnnakute suhtes vastupidav olukordades, kus osa v\u00f5rgust on teatud aja jooksul k\u00e4ttesaamatu ja osa RP-d on lihtsalt l\u00f5petanud t\u00f6\u00f6tamise.<\/li>\n<li><em>Usaldusv\u00e4\u00e4rse seadistuse ja algsete v\u00f5tmete jaotamise probleem<\/em>. Kui teie PVRB kasutab protokolli esmast seadistust, siis on see eraldi suur ja t\u00f5sine teema. Siin <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">an example<\/a><\/noindex>. Kui osalejad peavad protokolli alustamiseks omavahel oma v\u00f5tmeid jagama \u2014 on see samuti probleem, kui osalejate koosseis muutub<\/li>\n<li><em>Arendamise probleemid<\/em>. Raamatukogude olemasolu vajalikus keeles, nende turvalisus ja j\u00f5udlus, avalikkus, keerulised testid jne.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e4iteks on threshold BLS allkiri peamine probleem - enne t\u00f6\u00f6 alustamist peavad osalejad tingimata \u00fcksteisele v\u00f5tmed jagama, moodustades r\u00fchma, milles threshold toimib. See t\u00e4hendab, et v\u00e4hemalt \u00fche vahetuse vooru peab ootama detsentraliseeritud v\u00f5rgus, ja arvestades, et genereeritud juhuslik number, n\u00e4iteks, on m\u00e4ngudes vajalik praktiliselt reaalajas, t\u00e4hendab see, et protokolli sabotaa\u017e on selles etapis v\u00f5imalik, ja threshold skeemi eelised kaovad. See probleem on juba lihtsam eelmistest, kuid vajab ikkagi eraldi protseduuri arendamist threshold-r\u00fchmade moodustamiseks, mille kaitseks tuleb rakendada majanduslikke meetmeid, n\u00e4iteks hoiuseid ja osalejate vahendite \u00e4rav\u00f5tmist (slashing), kes ei j\u00e4rgita protokolli. Samuti ei mahu BLS-iga t\u00f5endamine vastuv\u00f5etava turvalisuse tasemega n\u00e4iteks standardse EOS v\u00f5i Ethereum tehingusse - lihtsalt ei ole piisavalt aega t\u00f5endamiseks. Lepingu kood on WebAssembly v\u00f5i EVM, mida t\u00e4idab virtuaalne masin. Kr\u00fcptograafilised funktsioonid ei ole veel natiivsetena rakendatud ja t\u00f6\u00f6tavad k\u00fcmneid kordi aeglasemalt kui tavalised kr\u00fcptograafilised raamatukogud. Paljud protokollid ei vasta n\u00f5uetele lihtsalt v\u00f5tmete mahu t\u00f5ttu, n\u00e4iteks RSA jaoks on see 1024 ja 2048 bitti, mis on 4-8 korda rohkem kui tavaline allkirjastamise tehing Bitcoinis ja Ethereumis.<\/p>\n<p><\/p>\n<p>M\u00e4ngib rolli ja eri programmeerimiskeelte rakenduste olemasolu \u2014 neid on v\u00e4he, eriti uute protokollide puhul. Integreerimise variant konsensuses n\u00f5uab protokolli kirjutamist platvormi keeles, seet\u00f5ttu tuleb Go jaoks otsida koodi geth'le, Rust'i jaoks Parity jaoks, C++ jaoks EOS'ile. JavaScript'i koodi tuleb k\u00f5igil otsida ja kuna JavaScript ja kr\u00fcptograafia ei ole just parimad s\u00f5brad, aitab WebAssembly, mis n\u00fc\u00fcd juba kindlasti pretendeerib j\u00e4rgmise olulise internetistandardi rollile.<\/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> suutsin veenda teid, et juhuslike arvude genereerimine plokiahelas on kriitilise t\u00e4htsusega paljude detsentraliseeritud v\u00f5rkude eluaspektide jaoks, ja selle artikli kaudu n\u00e4itasin, et see \u00fclesanne on \u00e4\u00e4rmiselt ambitsioonikas ja keeruline, kuid head lahendused juba eksisteerivad. \u00dcldiselt on l\u00f5plik protokollide disain v\u00f5imalik ainult p\u00e4rast ulatuslikke teste, mis arvestavad k\u00f5iki aspekte alates seadistamisest kuni t\u00f5rgete simuleerimiseni, seet\u00f5ttu te ei leia t\u00f5en\u00e4oliselt valmis retsepte meeskondade whitepaper'itest ja artiklitest, ja me j\u00e4rgmise aasta-kahe jooksul kindlasti ei julge kirjutada, et \u201ctehke nii, nii on kindlasti \u00f5ige\u201d. <\/p>\n<p><\/p>\n<p>Praegu, meie PVRB jaoks v\u00e4lja arendatavas plokiahelas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/haya\">Haya<\/a><\/noindex>, me oleme keskendunud threshold BLS allkirjade kasutamisele ja kavatseme rakendada PVRB konsensuse tasemel, kuna smart lepingutes on vastuv\u00f5etava turbelisuse tasemega autentimine praegu veel v\u00f5imalik. V\u00f5imalik, et v\u00f5tame kasutusele kaks skeemi: esmalt kuluka saladuse jagamise meetodi pikaajalise random_seed'i genereerimiseks, mida hiljem kasutame k\u00f5rge sagedusega juhuslikkuse genereerimiseks m\u00e4\u00e4ratletud threshold BLS allkirjade abil, v\u00f5ivad piirangud j\u00e4\u00e4da ka ainult \u00fche skeemi juurde. Kahjuks ei ole v\u00f5imalik eelnevalt \u00f6elda, milliseks protokolliks see kujuneb, kuid r\u00f5\u00f5mustav on see, et nagu teaduses, on inseneritegevuses negatiivne tulemus samuti tulemus, ja iga uus katse probleemi lahendamiseks on j\u00e4rgmine samm k\u00f5ikidele, kes tegelevad selle probleemiga. \u00c4rin\u00f5udmiste t\u00e4itmiseks lahendame konkreetset praktilist \u00fclesannet - m\u00e4ngurakenduste varustamine usaldusv\u00e4\u00e4rse entropiaallikaga, seet\u00f5ttu peame p\u00f6\u00f6rama t\u00e4helepanu ka plokiahela enda probleemidele, sealhulgas ahela l\u00f5puleviimisele ja v\u00f5rgu juhtimisele. <\/p>\n<p><\/p>\n<p>Ja kuigi me ei n\u00e4e praegu plokiahelates t\u00f5eliselt usaldusv\u00e4\u00e4rset PVRB-d, mis oleks piisavalt kaua kasutusel olnud, et l\u00e4bida reaalseid rakenduste teste, mitmekordseid auditeid, koormusi ja loomulikult ka reaalseid r\u00fcnnakuid, n\u00e4itab v\u00f5imalikute tee arv, et lahendus eksisteerib ja m\u00f5ni neist algoritmidest l\u00f5puks probleemi lahendab. Jagame meeleldi tulemusi ja t\u00e4name teisi meeskondi, kes samuti selle k\u00fcsimusega tegelevad artiklite ja koodide eest, mis aitavad inseneridel mitte astuda sama rikkaid mune kaks korda. <\/p>\n<p><\/p>\n<p>Nii et kui kohtate programmeerijat, kes projekteerib detsentraliseeritud juhuslikkust, olge ettevaatlikud ja hoolivad, 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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"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! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/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\u00f5rgustikud: rakendused | ProHoster","description":"Sissejuhatus function getAbsolutelyRandomNumber() { return 4; \/\/ tagastab t\u00e4iesti juhusliku arvu! } Nagu ka t\u00e4iesti usaldusv\u00e4\u00e4rse kr\u00fcptograafia kontseptsiooni puhul, p\u00fc\u00fcavad t\u00f5elised protokollid 'Publicly Verifiable Random Beacon' (edaspidi PVRB) lihtsalt v\u00f5imalikult palju l\u00e4heneda ideaalsele skeemile, kuna reaalsetes v\u00f5rkudes ei saa seda puhtal kujul rakendada: tuleb kokku leppida rangelt \u00fches bitis, voorud peavad olema.","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! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e","og:url":"https:\/\/prohoster.info\/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"},"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}]}}