{"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\/hr\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","title":{"rendered":"Nasumi brojevi i decentralizirane mre\u017ee: implementacije","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Uvod<\/h1>\n<p><\/p>\n<pre><code class=\"plaintext\">function getAbsolutelyRandomNumer() {\n        return 4; \/\/ vra\u0107a apsolutno nasumi\u010dan broj!\n}<\/code><\/pre>\n<p><\/p>\n<p>Kao u slu\u010daju koncepta apsolutno otpornog \u0161ifriranja iz kriptografije, stvarni protokoli \u201cPublicly Verifiable Random Beacon\u201d (dalje PVRB) poku\u0161avaju se \u0161to vi\u0161e pribli\u017eiti idealnoj shemi, jer u stvarnim mre\u017eama u \u010distom obliku ona nije primjenjiva: potrebno je dogovoriti se strogo o jednom bitu, mora biti puno rundi, a sve poruke trebaju biti savr\u0161eno brze i uvijek dostavljene. Naravno, u stvarnim mre\u017eama to nije tako. Stoga, prilikom dizajniranja PVRB za odre\u0111ene zadatke u modernim blockchainima, osim nemogu\u0107nosti kontrole dobivenog nasumi\u010dnog broja i kriptografske otpornosti, pojavljuje se jo\u0161 mnogo \u010distih arhitektonskih i tehni\u010dkih problema.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Sam blockchain predstavlja za PVRB su\u0161tinski sredinu za komunikaciju, u kojoj su poruke=transakcije. To omogu\u0107ava djelomi\u010dnu apstrakciju od mre\u017enih problema, neodgovaraju\u0107ih poruka, problema posredni\u010dkog softvera \u2014 sve te rizike preuzima decentralizirana mre\u017ea, a njena glavna vrijednost za PVRB je nemogu\u0107nost povla\u010denja ili kvarenja ve\u0107 poslane transakcije \u2014 to ne dopu\u0161ta sudionicima da odustanu od sudjelovanja u protokolu, osim ako nisu proveli uspje\u0161an napad na konsenzus. Takva razina sigurnosti je prihvatljiva, stoga PVRB mora biti otporan na dogovore sudionika u istoj mjeri kao \u0161to je to i glavna lancu blockchaina. Tako\u0111er, to sugerira da PVRB mora biti dio konsenzusa ako je mre\u017ea postigla dogovor oko glavne lan\u010dane blokade, neka se dogovori i o jedinom po\u0161tenom rezultantnom nasumi\u010dnom broju. Ili, PVRB je jednostavno samostalni protokol, implementiran pametnim ugovorom, koji djeluje asinkrono u odnosu na blockchain i blokove. Oba pristupa imaju svoje prednosti i nedostatke, a izbor izme\u0111u njih nije trivijalan. <\/p>\n<p><\/p>\n<h2 id=\"dva-sposoba-implementacii-pvrb\">Dva na\u010dina implementacije PVRB<\/h2>\n<p><\/p>\n<p>Detaljnije \u0107emo opisati dva na\u010dina implementacije PVRB \u2014 standalone verziju koja radi koriste\u0107i pametni ugovor neovisno o blockchainu, i consensus-integrated \u2014 ugra\u0111enu u protokol, prema kojem se mre\u017ea dogovara o lancu blokova i uklju\u010divanim transakcijama. U svim slu\u010dajevima imat \u0107u na umu popularne blockchain motore: Ethereum, EOS i sve sli\u010dne njima po na\u010dinu smje\u0161tanja i procesuiranja pametnih ugovora. <\/p>\n<p><\/p>\n<h3 id=\"standalone-contract\">Standalone ugovor<\/h3>\n<p><\/p>\n<p>U ovoj verziji PVRB predstavlja pametni ugovor koji prihva\u0107a transakcije random-producer-a (u daljnjem tekstu RP), obra\u0111uje ih, kombinira rezultate i, kao rezultat, dolazi do odre\u0111enog vrijednosti koju mo\u017ee dobiti svaki korisnik iz ovog ugovora. Ova vrijednost ne mora biti pohranjena u ugovoru izravno, ve\u0107 mo\u017ee biti predstavljena samo podacima iz kojih se mo\u017ee deterministi\u010dki dobiti samo jedna i jedina vrijednost rezultantnog nasumi\u010dnog broja. U ovoj shemi RP su korisnici blockchaina, a u procesu generacije mo\u017ee sudjelovati tko god \u017eeli.<\/p>\n<p><\/p>\n<p>Standalone-contract opcija je dobra:<\/p>\n<p><\/p>\n<ul>\n<li>prijenosivo\u0161\u0107u (ugovore mo\u017eete prenositi iz blockchaina u blockchain)<\/li>\n<li>jednostavno\u0161\u0107u implementacije i testiranja (ugovore je lako pisati i testirati)<\/li>\n<li>prakti\u010dno\u0161\u0107u implementacije ekonomskih shema (lako je izraditi svoj token, \u010dija logika slu\u017ei ciljevima PVRB)<\/li>\n<li>mogu\u0107no\u0161\u0107u pokretanja u ve\u0107 postoje\u0107im blockchainima<\/li>\n<\/ul>\n<p><\/p>\n<p>Ima i nedostatke:<\/p>\n<p><\/p>\n<ul>\n<li>sna\u017ena ograni\u010denja resursa tijekom izra\u010duna, volume transakcija i storage (jednostavno re\u010deno cpu\/mem\/io)<\/li>\n<li>ograni\u010denja na operacije unutar ugovora (nisu sve instrukcije dostupne, te\u0161ko je povezati vanjske biblioteke)<\/li>\n<li>nemogu\u0107nost organiziranja razmjene poruka br\u017ee nego \u0161to se transakcije uklju\u010duju u blockchain<\/li>\n<\/ul>\n<p><\/p>\n<p>Ova opcija je pogodna za implementaciju PVRB, koji se mora pokrenuti u ve\u0107 postoje\u0107e mre\u017ei, ne sadr\u017ei slo\u017eenu kriptografiju i ne zahtijeva puno interakcija.<\/p>\n<p><\/p>\n<h3 id=\"consensus-integrated\">Consensus-integrated<\/h3>\n<p><\/p>\n<p>U ovoj verziji, PVRB je implementiran unutar koda blockchain \u010dvora, integriran ili radi paralelno s razmjenom poruka izme\u0111u \u010dvorova blockchaina. Rezultati protokola se bilje\u017ee direktno u generiranim blokovima, a poruke protokola se \u0161alju putem P2P mre\u017ee izme\u0111u \u010dvorova. Po\u0161to protokol generira brojeve koji trebaju biti zabilje\u017eeni u blokovima, mre\u017ea mora do\u0107i do konsenzusa o njima. To zna\u010di da poruke PVRB, kao i transakcije, moraju biti validirane od strane \u010dvorova i uklju\u010dene u blokove, kako bi svaki sudionik mre\u017ee mogao validirati uskla\u0111enost s protokolom PVRB. Ovo nas automatski vodi do o\u010diglednog rje\u0161enja \u2014 ako se mre\u017ea dogovara o konsenzusu u vezi s blokovima i transakcijama u njima, PVRB mora biti dio konsenzusa, a ne odvojeni protokol. Ina\u010de, mo\u017ee do\u0107i do situacije gdje je blok valjan u smislu konsenzusa, ali protokol PVRB nije po\u0161tivan, te blok ne mo\u017ee biti prihva\u0107en s gledi\u0161ta PVRB. Tako da ako je odabran \u201econsensus-integrated\u201c variant, PVRB postaje va\u017ean deo konsenzusa.<\/p>\n<p><\/p>\n<p>Pri opisivanju implementacija PVRB na razini konsenzusa u mre\u017ei, nikako ne smijemo zaobi\u0107i pitanja finalnosti. Finalnost je mehanizam koji se koristi u deterministi\u010dkim konsenzusima za fiksiranje bloka (i lanca koji vodi do njega), koji je finalan i nikada ne\u0107e biti izba\u010den, \u010dak i ako se pojavi paralelni fork. Na primjer, u Bitcoin-u ovaj mehanizam ne postoji \u2014 ako se objavi lanac ve\u0107e slo\u017eenosti, on \u0107e zamijeniti bilo koju manje slo\u017eenu, bez obzira na du\u017einu lanaca. A u EOS-u, finalni su takozvani Last Irreversible Blocks, koji se pojavljuju u prosjeku svaka 432 bloka (12*21 + 12*15, pre-vote + pre-commit). Ovaj proces je su\u0161tinski \u010dekanje na 2\/3 potpisa od strane proizvo\u0111a\u010da blokova (dalje BP). Kada se pojave forkovi koji su stariji od posljednjeg LIB-a, oni se jednostavno odbacuju. Ovaj mehanizam omogu\u0107ava da se garantuje da je transakcija uklju\u010dena u blockchain i da nikada ne\u0107e biti povu\u010dena, bez obzira na resurse koje napada\u010d ima. Tako\u0111er, finalni blokovi su blokovi potpisani od strane 2\/3 BP u Hyperledger, Tendermint i drugim pBFT-based konsenzusima. Tako\u0111er, protokol za osiguranje finalnosti ima smisla raditi kao nadogradnju na konsenzus, jer mo\u017ee raditi asinkrono s proizvodnjom i objavljivanjem blokova. Ovo je dobro <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">\u010dlanak<\/a><\/noindex> o kona\u010dnosti u Ethereum-u.<\/p>\n<p><\/p>\n<p>Kona\u010dnost je izuzetno va\u017ena za korisnike, koji bez nje mogu postati \u017ertve napada \"double spend\", kada BP \"zadr\u017eava\" blokove i objavljuje ih nakon \u0161to je mre\u017ea \"vidjela\" dobru transakciju. Ako nema kona\u010dnosti, objavljeni fork \u0107e zameniti blok s \"dobrom\" transakcijom ne\u010dim iz \"lo\u0161eg\" forka, u kojem su isti resursi preneseni na adresu napada\u010da. U slu\u010daju PVRB, zahtevi za kona\u010dnost su jo\u0161 stro\u017ei, budu\u0107i da izgradnja forkova za PVRB omogu\u0107ava napada\u010du da pripremi nekoliko varijanti nasumi\u010dnosti s ciljem da objavi onu koja mu najvi\u0161e odgovara, i da ograni\u010di vreme potencijalnog napada \u2014 \u0161to je dobro re\u0161enje.<\/p>\n<p><\/p>\n<p>Stoga je najbolje re\u0161enje spojiti PVRB i kona\u010dnost u jedan protokol \u2014 tada finalizirani blok = finalizirana nasumi\u010dnost, a to je upravo ono \u0161to je trebalo posti\u0107i. Sada igra\u010di dobijaju garantovanu nasumi\u010dnost za N sekundi i mogu biti sigurni da ju je nemogu\u0107e vratiti ili ponovo odigrati.<\/p>\n<p><\/p>\n<p>Opcija s integriranim konsenzusom je dobra:<\/p>\n<p><\/p>\n<ul>\n<li>mogu\u0107no\u0161\u0107u asinkrone implementacije u odnosu na proizvodnju blokova \u2014 blokovi se proizvode kao i obi\u010dno, ali paralelno s tim mo\u017ee raditi protokol PVRB, koji proizvodi nasumi\u010dnosti ne za svaki blok<\/li>\n<li>mogu\u0107no\u0161\u0107u implementacije \u010dak i te\u0161ke cryptografije, bez ograni\u010denja koja name\u0107u pametni ugovori<\/li>\n<li>mogu\u0107no\u0161\u0107u organizovanja razmene poruka br\u017ee nego \u0161to se transakcije uklju\u010duju u blockhain, na primer deo protokola mo\u017ee raditi izme\u0111u nodova bez \u0161irenja poruka po mre\u017ei<\/li>\n<\/ul>\n<p><\/p>\n<p>Ima i nedostatke:<\/p>\n<p><\/p>\n<ul>\n<li>te\u017eine prilikom testiranja i razvoja \u2014 bi\u0107e potrebno emulirati mre\u017ene gre\u0161ke, nestale nodove, hardforkove mre\u017ee<\/li>\n<li>gre\u0161ke u implementaciji zahtevaju hardfork mre\u017ee<\/li>\n<\/ul>\n<p><\/p>\n<p>Oba na\u010dina implementacije PVRB imaju pravo na \u017eivot, ali implementacija na pametnim ugovorima u savremenim blockchain-ima je ipak prili\u010dno ograni\u010dena u ra\u010dunalnim resursima, a svaki prelaz na ozbiljnu cryptografiju \u010desto je jednostavno nemogu\u0107. A ozbiljna cryptografija \u0107e nam biti potrebna, kako \u0107e biti prikazano dalje. Iako, ovaj problem ima o\u010digledno privremen karakter, ozbiljna cryptografija u ugovorima je potrebna za re\u0161avanje mnogih zadataka, i postepeno se pojavljuje (na primer, sistemski ugovori za zkSNARKs u Ethereum-u)<\/p>\n<p><\/p>\n<p>Blockchain, which provides a transparent and reliable messaging exchange channel for the protocol, does not come for free. Any decentralized protocol must take into account the possibility of a Sybil attack; any action can be agreed upon by a multitude of accounts. Therefore, design must consider the attackers' ability to create an arbitrary number of protocol participants acting in collusion. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-peremennye-bloka\">PVRB and block variables.<\/h2>\n<p><\/p>\n<p>I wasn't lying when I said that a good PVRB, tested by many gambling applications, hasn't yet been implemented in blockchains. Where then does such a number of gambling applications in Ethereum and EOS come from? It surprises me just as much as it surprises you; how did we find so many 'stubborn' randoms in a completely deterministic environment?<\/p>\n<p><\/p>\n<p>The favorite way to extract randomness in blockchain is to take some 'unpredictable' information from the block and use it to generate randomness \u2014 simply hashing one or several values. There's a good article about the problems of such schemes. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.positive.com\/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">ovdje<\/a><\/noindex>You can take any of the 'unpredictable' values in the block, like the block hash, the number of transactions, network difficulty, and other unknown values. Then hash one or several of them, and, theoretically, you should get genuine randomness. You can even add to the whitepaper that your scheme is 'post-quantum secure' (since there are quantum-proof hash functions).<\/p>\n<p><\/p>\n<p>But even post-quantum secure hashes are unfortunately not enough. The secret lies in the requirements for PVRB, which I will remind you of from the previous article:<\/p>\n<p><\/p>\n<ol>\n<li>The result must have a provably uniform distribution, i.e., based on provably strong cryptography.<\/li>\n<li>No bits of the result can be controlled. Consequently, the result cannot be predicted in advance.<\/li>\n<li>The protocol generation cannot be sabotaged by non-participation in the protocol or by overloading the network with attacking messages.<\/li>\n<li>All of the above must be resistant to collusion among a permissible number of dishonest participants in the protocol (for example, 1\/3 of the participants).<\/li>\n<\/ol>\n<p><\/p>\n<p>U ovom slu\u010daju po\u0161tuje se samo zahtjev 1, dok se 2 ne po\u0161tuje. Hashiranjem nepredvidivih vrijednosti iz bloka dobit \u0107emo ravnomjernu raspodjelu i dobre nasumi\u010dne vrijednosti. No, BP ima barem mogu\u0107nost \"objaviti blok ili ne\". Tako BP mo\u017ee birati izme\u0111u DVA na\u010dina nasumi\u010dnosti: \"svoju\" i onu koja bi nastala ako bi blok napravio netko drugi. BP mo\u017ee unaprijed \"zagledati\" \u0161to \u0107e biti ako objavi blok i jednostavno donijeti odluku o tome ho\u0107e li to u\u010diniti ili ne. Tako, igraju\u0107i primjerice \"par-nepar\" ili \"crveno\/crno\" na ruletu, mo\u017ee objaviti blok samo ako vidi dobitak. To tako\u0111er \u010dini neu\u010dinkovitom strategiju kori\u0161tenja, primjerice, hash-a bloka \"iz budu\u0107nosti\". U ovom slu\u010daju se govori da \"\u0107e biti kori\u0161tena nasumi\u010dnost koja se dobiva hashiranjem trenutnih podataka i hash-a budu\u0107eg bloka visine, primjerice, N + 42, gdje je N trenutna visina bloka. To malo ja\u010da shemu, ali svejedno omogu\u0107ava BP-u da, iako u budu\u0107nosti, bira ho\u0107e li zadr\u017eati blok ili ga objaviti.<\/p>\n<p><\/p>\n<p>Softver BP u ovom slu\u010daju postaje slo\u017eeniji, ali ne pretjerano. Samo prilikom validacije i uklju\u010divanja transakcije u blok dolazi do brze provjere ho\u0107e li biti dobitka, a mo\u017eda i odabira jednog parametra transakcije kako bi se postigla velika vjerojatnost dobitka. U isto vrijeme, uhvatiti pametnog BP-a u ovakvim manipulacijama gotovo je nemogu\u0107e, svaki put se mogu koristiti nove adrese, i dobitci se mogu osvajati pomalo, ne izazivaju\u0107i sumnju.<\/p>\n<p><\/p>\n<p>Dakle, na\u010dini koji koriste informacije iz bloka nisu prikladni kao univerzalna implementacija PVRB. U ograni\u010denoj varijanti, s ograni\u010denjima na veli\u010dine oklada, ograni\u010denjima broja igra\u010da i\/ili KYC registracijom (kako bi se sprije\u010dilo da jedan igra\u010d koristi vi\u0161e adresa), ovi modeli mogu funkcionirati za manje igre, ali ne vi\u0161e od toga.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-commit-reveal\">PVRB i commit-reveal.<\/h2>\n<p><\/p>\n<p>U redu, hvala hashiranju i barem relativnoj nepredvidivosti hash-a bloka i drugih varijabli. Ako se rije\u0161i problem front-running-a rudara, trebali bismo dobiti ne\u0161to bolje. Dodajmo u ovu shemu korisnike \u2014 neka tako\u0111er utje\u010du na nasumi\u010dnost: svaki djelatnik tehni\u010dke podr\u0161ke re\u0107i \u0107e vam da su najnasumi\u010dniji u IT sustavima postupci korisnika \ud83d\ude42<\/p>\n<p><\/p>\n<p>Naivna shema, kada korisnici jednostavno \u0161alju slu\u010dajne brojeve, a rezultat se izra\u010dunava kao, na primjer, hash njihove sume, nije dovoljna. U ovom slu\u010daju, poslednji igra\u010d mo\u017ee kontrolisati koji \u0107e rezultat biti biraju\u0107i vlastitu slu\u010dajnost. Zato se koristi \u0161iroko primenjivani obrazac commit-reveal. U\u010desnici prvo \u0161alju hasheve svojih slu\u010dajnosti (commit-ove), a zatim otkrivaju same slu\u010dajnosti (reveal-ove). Faza \u201creveal\u201d po\u010dinje tek nakon \u0161to su prikupljeni neophodni commit-ovi, tako da u\u010desnici mogu poslati ta\u010dno onu slu\u010dajnost \u010diji su hash poslali ranije. Sada ovo sve spojimo s parametrima bloka, pri \u010demu je bolje uzeti iz budu\u0107nosti (slu\u010dajnost \u0107e biti poznata samo u jednom od budu\u0107ih blokova), i voila \u2014 slu\u010dajnost je spremna! Sada svaki igra\u010d uti\u010de na rezultantnu slu\u010dajnost i mo\u017ee \u201cpobediti\u201d zlonamerni BP, prekrivaju\u0107i njegovu slu\u010dajnost svojom, unapred nepoznatom, slu\u010dajnosti... Tako\u0111e, mo\u017ee se dodati za\u0161tita od sabotiranja protokola putem neotkrivanja u fazi reveal \u2014 jednostavno zahtevaju\u0107i prilikom commit-a da prilo\u017ee odre\u0111en iznos uz transakciju \u2014 osiguranje, koje se vra\u0107a samo u proceduri reveal. U tom slu\u010daju, praviti commit i ne napraviti reveal bi\u0107e neisplativo.<\/p>\n<p><\/p>\n<p>To je bio dobar poku\u0161aj, a takve sheme postoje u igra\u010dkim DApp-ima, ali na\u017ealost, to opet nije dovoljno. Sada na rezultat mo\u017ee uticati ne samo rudar, ve\u0107 i svaki u\u010desnik protokola. Kontrolisati samo vrednost je i dalje mogu\u0107e, s manjom stepenom varijabilnosti i uz novac, ali, kao i u slu\u010daju s rudarom, ako su rezultati izvla\u010denja vredniji od cene u\u010de\u0161\u0107a u PVRB protokolu, random-producer (RP) mo\u017ee odlu\u010diti ho\u0107e li napraviti reveal i i dalje mo\u017ee birati izme\u0111u najmanje dve varijante slu\u010dajnosti.<br \/>\nZato je pojavila mogu\u0107nost ka\u017enjavanja onih koji prave commit i ne rade reveal, a ova shema \u0107e se jo\u0161 koristiti. Njena jednostavnost predstavlja ozbiljnu prednost \u2014 ozbiljniji protokoli zahtevaju mnogo mo\u0107nije prora\u010dune.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-determinirovannye-podpisi\">PVRB i deterministi\u010dki potpisi.<\/h2>\n<p><\/p>\n<p>Postoji jo\u0161 jedan na\u010din da se RP prisili na generiranje pseudosluhanne brojeve na koje ne mo\u017ee utjecati, ako mu se pru\u017ei \"prototip\" - to su deterministi\u010dki potpisi. Takav potpis je, na primjer, RSA, a ECS nije. Ako RP ima par klju\u010deva: RSA i E\u0421\u0421, i potpisuje neku vrijednost svojim privatnim klju\u010dem, tada \u0107e u slu\u010daju RSA dobiti JEDAN I JEDINI potpis, dok u slu\u010daju ECS mo\u017ee generirati vi\u0161e razli\u010ditih valjanih potpisa. To se doga\u0111a jer se pri stvaranju ECS potpisa koristi slu\u010dajni broj koji bira potpisnik, i on ga mo\u017ee odabrati na razli\u010dite na\u010dine, daju\u0107i potpisniku mogu\u0107nost biranja izme\u0111u vi\u0161e potpisa. U slu\u010daju RSA: \"jedna ulazna vrijednost\" + \"jedan par klju\u010deva\" = \"jedan potpis\". Nije mogu\u0107e predvidjeti koji \u0107e potpis dobiti drugi RP, stoga se PVRB s deterministi\u010dkim potpisima mo\u017ee organizirati kombiniranjem RSA potpisa vi\u0161e sudionika koji su potpisali istu vrijednost. Na primjer - prethodni slu\u010dajan broj. U ovoj shemi se \u0161tedi zna\u010dajna koli\u010dina resursa, jer su potpisi ujedno i potvrda pravilnog pona\u0161anja prema protokolu i izvor slu\u010dajnog broja.<\/p>\n<p><\/p>\n<p>Me\u0111utim, \u010dak i s deterministi\u010dkim potpisima, shema je i dalje podlo\u017ena problemu \"posljednjeg aktera\". Posljednji sudionik i dalje mo\u017ee odlu\u010diti ho\u0107e li objaviti svoj potpis ili ne, \u010dime kontrolira rezultat. Mogu se dodatno doraditi sheme, dodati hash-ovi blokova, organizirati runde kako bi se unaprijed ne bi moglo predvidjeti rezultat, ali sve te tehnike, i uz brojne dorade, i dalje ostavljaju nerije\u0161en problem utjecaja jednog sudionika na kolektivni rezultat u nepovjerenom okru\u017eenju i mogu raditi samo pod uvjetima ekonomskih i vremenskih ograni\u010denja. Osim toga, veli\u010dina RSA klju\u010deva (1024 i 2048 bitova) je prili\u010dno velika, dok je veli\u010dina za blockchain transakcije iznimno va\u017ean parametar. \u010cini se da jednostavno rje\u0161enje problema ne\u0107e biti mogu\u0107e, idemo dalje.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-secret-sharing-shemy\">PVRB i sheme tajnog dijeljenja<\/h2>\n<p><\/p>\n<p>U kriptografiji postoje sheme koje omogu\u0107uju mre\u017ei da se dogovori o jednom i samo jednom vrijednosti PVRB, pri \u010demu su takve sheme otporne na zlonamjerne radnje dijela sudionika. Jedan od korisnih protokola koji vrijedi prou\u010diti je shema dijeljenja tajne Shamir. Ona slu\u017ei za dijeljenje tajne (na primjer, tajnog klju\u010da) na nekoliko dijelova, i distribuciju tih dijelova N sudionicima. Tajna se raspodjeljuje na na\u010din da je za njezino obnavljanje potrebno M dijelova od N, pri \u010demu to mogu biti bilo koja M dijela. Ako se pojednostavi, imaju\u0107i graf poznate funkcije, sudionici razmjenjuju to\u010dke na grafu, a nakon dobivanja M to\u010daka, cijela funkcija mo\u017ee biti obnovljena.<br \/>\nDobro obja\u0161njenje je dano u <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Shamir%27s_Secret_Sharing\">wiki<\/a><\/noindex> , a igraju\u0107i se s njim prakti\u010dno, korisno je 'pro\u0107i' protokol kroz glavu na <noindex><a rel=\"nofollow\" href=\"http:\/\/point-at-infinity.org\/ssss\/demo.html\">demo<\/a><\/noindex> stranici.<\/p>\n<p><\/p>\n<p>Da je shema FSSS (Fiat-Shamir Secret Sharing) primjenjiva u \u010distom obliku \u2014 bio bi to neuni\u0161tiv PVRB. U najjednostavnijoj varijanti protokol mo\u017ee izgledati ovako:<\/p>\n<p><\/p>\n<ul>\n<li>Svaki sudionik generira svoj vlastiti random i dijeli dijelove od njega ostalim sudionicima.<\/li>\n<li>Svaki sudionik otkriva svoje dijelove tajni drugih sudionika.<\/li>\n<li>Ako je za sudionika prikupljeno vi\u0161e od M dijelova, onda se broj tog sudionika mo\u017ee izra\u010dunati, i on \u0107e biti jedinstven, bez obzira na skup otkrivenih sudionika.<\/li>\n<li>Kombinacija otkrivenih randomova i predstavlja tra\u017eeni PVRB.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ovdje jedan pojedina\u010dni sudionik vi\u0161e ne utje\u010de na rezultate protokola, osim u slu\u010dajevima kada isklju\u010divo od njega ovisi postizanje threshold-a otkrivanja randoma. Stoga ovaj protokol, uz neophodan postotak onih koji rade prema protokolu i dostupne RP, funkcionira, ispunjavaju\u0107i zahtjeve za kriptografsku otpornost, a ostaju\u0107i otporan na problem 'zadnjeg aktera'.<\/p>\n<p><\/p>\n<p>To bi mogla biti idealna opcija, ova shema PVRB temeljena na dijeljenju tajne Fiat-Shamira opisana je, na primjer, u <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2017\/216.pdf\">ove<\/a><\/noindex> \u010dlanku. No, kao \u0161to je re\u010deno, ako se poku\u0161a primijeniti izravno u blockchainu, pojavljuju se tehni\u010dka ograni\u010denja. Evo primjera testne implementacije protokola u smart ugovoru EOS i najva\u017enijeg dijela \u2014 provjera objavljenog dijela sudionika: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/eoscraper\/blob\/master\/Proof.hh#L23\">kod<\/a><\/noindex>. Iz koda je vidljivo da validacija proofa zahtijeva nekoliko skalarnih mno\u017eenja, a kori\u0161tena su vrlo velika brojeva. Pri tome je va\u017eno razumjeti da se u blockchainima verifikacija odvija u trenutku kada block-producer obra\u0111uje transakciju, i zapravo svaki sudionik treba lako provjeriti ispravnost protokola, stoga su zahtjevi za brzinom funkcije verifikacije vrlo ozbiljni. U ovoj varijanti je rje\u0161enje pokazalo neispravnim, jer verifikacija nije stizala u vremenski okvir od 0.5 sekundi.<\/p>\n<p><\/p>\n<p>Efikasnost verifikacije jedan je od najva\u017enijih zahtjeva za kori\u0161tenje gotovo svih naprednih kriptografskih shema u blockchainu. Kreiranje proof-ova, priprema poruka \u2014 te procedure mogu se iznijeti izvan lanca i izvoditi na visoko-performantnim ra\u010dunalima, ali verifikaciju se ne mo\u017ee zaobi\u0107i \u2014 to je jo\u0161 jedan va\u017ean zahtjev za PVRB. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB i threshold potpisi<\/h2>\n<p><\/p>\n<p>Upoznaju\u0107i se sa shemom tajnog dijeljenja, otvorili smo cijelu klasu protokola, ujedinjenih klju\u010dnom rije\u010di \u201cthreshold\u201d. Kada je za otkrivanje odre\u0111enih informacija potrebno sudjelovanje M po\u0161tenih sudionika iz N, a skup po\u0161tenih sudionika mo\u017ee biti proizvoljna podskupina N, govori se o \u201cthreshold\u201d shemama. One omogu\u0107avaju rje\u0161avanje problema \u201cposljednjeg aktera\u201d, sada ako napada\u010d ne otkrije svoj dio tajne, to \u0107e u\u010diniti drugi, po\u0161teni sudionik. Ove sheme omogu\u0107avaju dogovor o jednom i jedinom vrijednosti, \u010dak i kada dio sudionika sabotira protokol. <\/p>\n<p><\/p>\n<p>Kombinacija deterministi\u010dkih potpisa i threshold-shema omogu\u0107ila je razvoj vrlo prikladne i obe\u0107avaju\u0107e sheme za implementaciju PVRB \u2014 to su deterministi\u010dki threshold-potpisi. Evo <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2002\/081.pdf\">\u010dlanak<\/a><\/noindex> o razli\u010ditim primjenama threshold-potpisa, a evo jo\u0161 jednog dobrog <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.dash.org\/secret-sharing-and-threshold-signatures-with-bls-954d1587b5f\">longread<\/a><\/noindex> od Dash. <\/p>\n<p><\/p>\n<p>U posljednjem \u010dlanku opisani su BLS potpisi (BLS se dekodira kao Boneh-Lynn-Shacham, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.iacr.org\/archive\/asiacrypt2001\/22480516.pdf\">evo<\/a><\/noindex> \u010dlanak ), koji imaju vrlo va\u017enu i izuzetno korisnu karakteristiku za programere \u2014 javni, tajni, javni klju\u010devi i potpisi BLS mogu se me\u0111usobno kombinirati pomo\u0107u jednostavnih matemati\u010dkih operacija, pri \u010demu njihova kombinacija ostaje valjana klju\u010devi i potpisi, omogu\u0107uju\u0107i lako agregiranje mnogih potpisa u jedan i mnogo javnih klju\u010deva u jedan. Tako\u0111e, karakteriziraju ih i deterministi\u010dnost, \u0161to zna\u010di da pri istim ulaznim podacima daju isti rezultat. Zahvaljuju\u0107i ovoj osobini, kombinacije BLS potpisa same su valjani klju\u010devi, \u0161to omogu\u0107ava realizaciju varijante u kojoj M od N sudionika proizvode jedan i jedini potpis, koji je determiniran, javno provjerljiv i nepredvidiv sve dok ga ne otkrije M-ti sudionik.<\/p>\n<p><\/p>\n<p>U shemi s threshold BLS potpisima svaki sudionik potpisuje pomo\u0107u BLS ne\u0161to (na primjer prethodni random), a ukupni threshold-potpis je tra\u017eeni random. Kriptografske osobine BLS potpisa zadovoljavaju zahtjeve za kvalitetu randoma, threshold-dio \u0161titi od \"last-actor\" scenarija, a jedinstvena kombinabilnost klju\u010deva omogu\u0107uje implementaciju mnogih zanimljivih algoritama koji, na primjer, omogu\u0107uju u\u010dinkovitu agregaciju poruka protokola.<\/p>\n<p><\/p>\n<p>Dakle, ako gradite PVRB u svom blockchainu, velika je vjerojatnost da \u0107ete do\u0107i do sheme BLS threshold potpisa, koju ve\u0107 koriste neki projekti. Na primjer, DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">ovdje<\/a><\/noindex> benchmark koji implementira shemu, a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/vss\/blob\/master\/docs\/index.md\">ovdje<\/a><\/noindex> primjer implementacije verifiable secret sharing), ili Keep.network (evo njihovog random beacon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-yellowpaper\">yellowpaper<\/a><\/noindex>, a evo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-box\">primjer<\/a><\/noindex> pametan ugovor koji podr\u017eava protokol).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">Implementacija PVRB<\/h2>\n<p><\/p>\n<p>Na\u017ealost, jo\u0161 uvijek ne vidimo gotov, implementiran u PVRB blockchainima protokol koji je dokazao svoju sigurnost i otpornost. Iako su sami protokoli spremni, tehni\u010dki je te\u0161ko primijeniti ih na postoje\u0107a rje\u0161enja. Za centralizirane sustave PVRB nema smisla, dok su decentralizirani strogo ograni\u010deni u svim ra\u010dunalnim resursima: CPU, memorija, pohrana, I\/O. Dizajniranje PVRB-a zna\u010di kombiniranje razli\u010ditih protokola kako bi se ipak stvorilo ne\u0161to \u0161to \u0107e zadovoljiti sve zahtjeve barem za neki odr\u017eivi blockchain. Jedan protokol djelotvornije ra\u010duna, ali zahtijeva vi\u0161e poruka izme\u0111u RP-a, dok drugi zahtijeva ekstremno malo poruka, ali kreiranje dokaza mo\u017ee trajati desetke minuta, pa \u010dak i sati.<\/p>\n<p><\/p>\n<p>Nabrojat \u0107u \u010dimbenike koje morate uzeti u obzir prilikom odabira kvalitetnog PVRB-a:<\/p>\n<p><\/p>\n<ul>\n<li><em>Kryptografska otpornost<\/em>. Va\u0161 PVRB mora biti strogo neistran, bez mogu\u0107nosti kontrole jednog bita. U nekim shemama to nije slu\u010daj, stoga pozovite kriptografa.<\/li>\n<li><em>Problema \u201cposljednjeg aktera\u201d<\/em>. Va\u0161 PVRB mora biti otporan na napade kada napada\u010d, koji kontrolira jednog ili vi\u0161e RP-a, mo\u017ee birati jedan od dva mogu\u0107a rezultata.<\/li>\n<li><em>Problema sabotiranja protokola<\/em>. Va\u0161 PVRB mora biti otporan na napade kada napada\u010d, koji kontrolira jednog ili vi\u0161e RP-a, odlu\u010duje o tome ho\u0107e li randomizirati ili ne te mo\u017ee zajam\u010deno, ili s odre\u0111enom vjerojatno\u0161\u0107u utjecati na to.<\/li>\n<li><em>Problema broja poruka<\/em>. Va\u0161i RP-ovi trebaju slati minimalno poruka u blockchain i maksimalno izbjegavati sinkronizirane aktivnosti poput situacija \u201cposlao sam neke informacije, \u010dekam odgovor od odre\u0111enog sudionika\u201d. U p2p mre\u017eama, posebno geografski raspr\u0161enim, ne treba ra\u010dunati na brzi odgovor.<\/li>\n<li><em>Problema ra\u010dunalne kompleksnosti<\/em>. Verifikacija bilo kojeg koraka PVRB-a on-chain mora biti izuzetno jednostavna, budu\u0107i da je izvode svi puni klijenti mre\u017ee. Ako se implementacija radi putem pametnog ugovora, zahtjevi za brzinom su vrlo strogi.<\/li>\n<li><em>Problema dostupnosti i stalnosti<\/em>. Va\u0161 PVRB treba te\u017eiti da bude otporan na situacije kada dio mre\u017ee postane nedostupan neko vrijeme, a dio RP-a jednostavno prestane raditi.<\/li>\n<li><em>Problema pouzdane postavke i prvotne distribucije klju\u010deva<\/em>. Ako va\u0161 PVRB koristi primarni setup protokola, to je velika i ozbiljna pri\u010da. Evo <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">primjer<\/a><\/noindex>. Ako sudionici moraju prije po\u010detka protokola me\u0111usobno razmijeniti svoje klju\u010deve \u2014 to je tako\u0111er problem, ako se sastav sudionika mijenja<\/li>\n<li><em>Problemi razvoja<\/em>. Postojanje biblioteka na potrebnim jezicima, njihova sigurnost i performanse, javnost, slo\u017eeni testovi itd.<\/li>\n<\/ul>\n<p><\/p>\n<p>Na primjer, kod threshold BLS potpisa postoji zna\u010dajan problem \u2014 prije nego \u0161to zapo\u010dnu rad, sudionicima je obavezno potrebna razmjena klju\u010deva, organiziraju\u0107i grupu koja \u0107e raditi na thresholdu. To zna\u010di da se barem jedan krug razmjene u decentraliziranoj mre\u017ei mora \u010dekati, a s obzirom na to da je generirani random, na primjer, potreban u igrama, prakti\u010dki u realnom vremenu, to implicira da je sabotiranje protokola mogu\u0107e u ovoj fazi, a prednosti threshold sheme se gube. Ovaj problem je ve\u0107 jednostavniji od prethodnog, ali ipak zahtijeva razvoj zasebne procedure formiranja threshold grupa, koju \u0107e biti potrebno ekonom\u0441\u043a\u0438 za\u0161tititi, putem depozita i oduzimanja sredstava (slashing) od sudionika koji se ne pridr\u017eavaju protokola. Tako\u0111er, verifikacija BLS s prihvatljivim nivoom sigurnosti jednostavno ne staje, na primjer, u standardnu transakciju EOS-a ili Ethereuma \u2014 jednostavno nema dovoljno vremena za verifikaciju. Kod ugovora \u2014 to je WebAssembly ili EVM, izvr\u0161ava se od strane virtualne ma\u0161ine. Kriptografske funkcije nisu implementirane nativno (za sada) i rade desetke puta sporije od obi\u010dnih kriptografskih biblioteka. Mnogi protokoli ne ispunjavaju zahtjeve jednostavno zbog volumena klju\u010deva, na primjer, to su 1024 i 2048 bit za RSA, 4-8 puta vi\u0161e od standardnog potpisa transakcije u Bitcoinu i Ethereumu.<\/p>\n<p><\/p>\n<p>Igra ulogu i postojanje implementacija na razli\u010ditim programskim jezicima \u2014 kojih nema puno, posebno za nove protokole. Opcija s integracijom u konsenzus zahtijeva pisanje protokola na jeziku platforme, pa \u0107e trebati tra\u017eiti kod na Go za geth, na Rust za Parity, na C++ za EOS. Kod na JavaScriptu mora tra\u017eiti svatko, a s obzirom na to da JavaScript i kriptografija nisu posebno bliski prijatelji, WebAssembly \u0107e pomo\u0107i, koji sada ve\u0107 sigurno pretendira na ulogu sljede\u0107eg va\u017enog internet standarda.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Zaklju\u010dak<\/h2>\n<p><\/p>\n<p>Nadam se da je u prethodnoj <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448330\/\">\u010dlanku<\/a><\/noindex> Uspio sam vas uvjeriti da je generiranje nasumi\u010dnih brojeva na blockchainu od kriti\u010dne va\u017enosti za mnoge aspekte \u017eivota decentraliziranih mre\u017ea, a ovim \u010dlankom sam pokazao da je ta zada\u0107a izuzetno ambiciozna i slo\u017eena, ali dobra rje\u0161enja ve\u0107 postoje. Op\u0107enito, kona\u010dni dizajn protokola mogu\u0107 je tek nakon masovnog testiranja koje uzima u obzir sve aspekte, od postavljanja do simulacije kvarova, stoga vjerojatno ne\u0107ete prona\u0107i gotove recepte u whitepaperima timova i u \u010dlancima, a ni mi se ne\u0107emo usuditi pisati \"radite ovako, ovo je definitivno ispravno\" u sljede\u0107ih godinu ili dvije. <\/p>\n<p><\/p>\n<p>Za sada, za na\u0161 PVRB u razvoju blockchaina <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/haya\">Haya<\/a><\/noindex>, odlu\u010dili smo se za primjenu threshold BLS potpisa, planiramo implementirati PVRB na razini konsenzusa, jer verifikacija u pametnim ugovorima s prihvatljivim razinama sigurnosti jo\u0161 uvijek nije mogu\u0107a. Mogu\u0107e je da \u0107emo koristiti dvije sheme: prvo skupu tajnu podijeliti za stvaranje dugoro\u010dnog random_seed-a, a zatim \u0107emo ga koristiti kao osnovu za visoko-frekventno generiranje nasumi\u010dnih brojeva pomo\u0107u determiniranih threshold BLS potpisa, i mo\u017eda \u0107emo se ograni\u010diti samo na jednu od shema. Na\u017ealost, unaprijed nije mogu\u0107e re\u0107i kakav \u0107e biti protokol, ali veseli nas da, kao u znanosti, u in\u017eenjerskim zadacima negativan rezultat - tako\u0111er je rezultat, i svaki novi poku\u0161aj rje\u0161avanja zadatka predstavlja jo\u0161 jedan korak u istra\u017eivanju svih koji se bave tim problemom. Kako bismo zadovoljili poslovne zahtjeve, rje\u0161avamo konkretan prakti\u010dni problem - osiguranje igra\u010dkih aplikacija pouzdanim izvorom entropije, pa smo prisiljeni obratiti pa\u017enju i na sam blockchain, posebno na pitanja kona\u010dnosti lanca i upravljanja mre\u017eom. <\/p>\n<p><\/p>\n<p>I iako trenutno ne vidimo u blockchainu dokazano otpornog PVRB-a koji je ve\u0107 dovoljno dugo kori\u0161ten da bi pro\u0161ao testove stvarnim aplikacijama, vi\u0161estrukim revizijama, optere\u0107enjima i, naravno, stvarnim napadima, broj mogu\u0107ih puteva potvr\u0111uje da rje\u0161enje postoji i da \u0107e neki od tih algoritama na kraju rije\u0161iti problem. S zadovoljstvom \u0107emo dijeliti rezultate i zahvaljujemo drugim timovima koji se tako\u0111er bave ovim pitanjem na \u010dlancima i kodu koji omogu\u0107uju in\u017eenjerima da ne kro\u010de dvaput u iste zamke. <\/p>\n<p><\/p>\n<p>Ako sretnete programtera koji dizajnira decentralizirani generator nasumi\u010dnih brojeva, budite oprezni i pa\u017eljivi, a ako je potrebno, pru\u017eite psiholo\u0161ku podr\u0161ku \ud83d\ude42<\/p>\n<p>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Nasumi\u010dni brojevi i decentralizirane mre\u017ee: implementacije | ProHoster","description":"Uvod function getAbsolutelyRandomNumber() { return 4; \/\/ vra\u0107a apsolutno nasumi\u010dan broj!","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/33888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=33888"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/33888\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=33888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=33888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=33888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}