{"id":95468,"date":"2020-09-29T19:42:29","date_gmt":"2020-09-29T17:42:29","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1"},"modified":"2020-09-29T19:42:29","modified_gmt":"2020-09-29T17:42:29","slug":"mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1","title":{"rendered":"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me ei usalda \u00fcksteist? Osa 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr!<\/p>\n<p>Selles artiklis r\u00e4\u00e4gin ma pseudojuhuslike arvude genereerimisest osalistele, kes ei usalda \u00fcksteist. Nagu allpool n\u00e4eme, on 'peaaegu' head generaatorit lihtsalt rakendada, kuid v\u00e4ga hea valmistamine on keeruline.<\/p>\n<p>Miks on \u00fcldse vajalik genereerida juhuslikke numbreid osalejatele, kes ei usalda \u00fcksteist? \u00dcks rakenduse valdkond on detsentraliseeritud rakendused. N\u00e4iteks rakendus, mis v\u00f5tab panuse osalejalt ja kas kahekordistab summat 49% t\u00f5en\u00e4osusega v\u00f5i v\u00f5tab selle endale 51% t\u00f5en\u00e4osusega, t\u00f6\u00f6tab ainult siis, kui see suudab neutraalselt saada juhusliku numbri. Kui halvustaja suudab m\u00f5jutada juhuslike numbrite generaatori tulemust ja isegi v\u00e4hesel m\u00e4\u00e4ral suurendada oma v\u00f5imalust saada rakendusest v\u00e4ljamakset, t\u00fchjendab ta selle kergesti.<\/p>\n<p>Kui me arendame jagatud protokolli juhuslike arvude genereerimiseks, soovime, et see omaks kolme omadust:<\/p>\n<ol>\n<li>\n<p>See peab olema erapooletu. Teisis\u00f5nu, \u00fckski osaline ei tohi mingil moel m\u00f5jutada juhuslike arvude generaatori tulemust.<\/p>\n<\/li>\n<li>\n<p>See peab olema ettearvamatu. Teisis\u00f5nu, \u00fckski osaline ei tohi suuta ennustada, milline number genereeritakse (v\u00f5i tuletada selle omadusi) enne, kui see on genereeritud.<\/p>\n<\/li>\n<li>\n<p>Protokoll peab olema eluj\u00f5uline, st resistentne selle suhtes, et mingi osakaal osalistest lahkub v\u00f5rgust v\u00f5i \u00fcritab tahtlikult protokolli peatada.<\/p>\n<\/li>\n<\/ol>\n<p>Selles artiklis k\u00e4sitleme kahte l\u00e4henemist: RANDAO + VDF ja l\u00e4henemist, mis p\u00f5hineb kustutuskoodidel. J\u00e4rgmises osas k\u00e4sitleme p\u00f5hjalikult l\u00e4henemist, mis p\u00f5hineb l\u00e4ve allkirjadel.<\/p>\n<p>Aga k\u00f5igepealt vaatame lihtsat ja sageli kasutatavat algoritmi, mis on eluj\u00f5uline, ettearvamatu, kuid kallutatud.<\/p>\n<h3>RANDAO<\/h3>\n<p>RANDAO on v\u00e4ga lihtne ja seega suhteliselt tihti kasutatav l\u00e4henemisviis juhuslikkuse hankimiseks. K\u00f5ik v\u00f5rgu osalejad valivad k\u00f5igepealt kohapeal pseudojuhusliku numbri, seej\u00e4rel saadab iga osaleja valitud arvu hash'i. Siis avavad osalejad vaheldumisi oma valitud numbrid ja teevad avatud numbritega XOR-operatsiooni, ning selle operatsiooni tulemus ongi protokolli tulemuseks.<\/p>\n<p>Hash publikatsiooni samm enne arvu avamist on vajalik, et r\u00fcndaja ei saaks valida oma numbrit p\u00e4rast seda, kui ta on n\u00e4inud teiste osalejate arve. See v\u00f5imaldaks tal tegelikult \u00fcksi m\u00e4\u00e4rata juhuslike numbrite generaatori v\u00e4ljundi.<\/p>\n<p>Protokolli k\u00e4igus peavad osalejad kaks korda j\u00f5udma \u00fchisele otsusele (nn konsensus): millal alustada valitud numbrite avamist ja seega l\u00f5petada hashede vastuv\u00f5tmine, ja millal l\u00f5petada valitud numbrite vastuv\u00f5tmine ning arvutada l\u00f5plik juhuslik number. Nende otsuste vastuv\u00f5tmine osalejate vahel, kes ei usalda \u00fcksteist, on iseenesest keeruline \u00fclesanne, ja me p\u00f6\u00f6rdume selle teema juurde tulevastes artiklites, k\u00e4esolevas artiklis eeldame, et meil on selline konsensus algoritm olemas.<\/p>\n<p>Millised omadused, millest me eespool r\u00e4\u00e4kisime, on RANDAO-l? See on ettearvamatu, omades sama eluj\u00f5udlust kui selle p\u00f5hjal olev konsensusprotokoll, kuid see on kallutatud. Eelk\u00f5ige v\u00f5ib r\u00fcndaja j\u00e4lgida v\u00f5rgustikku ja p\u00e4rast seda, kui teised osalejad oma numbrid avavad, suudab ta arvutada nende XOR-i ja otsustada, kas avada oma number v\u00f5i mitte, et tulemusele m\u00f5ju avaldada. Kuigi see ei luba r\u00fcndajal \u00fcksi m\u00e4\u00e4rata juhuslike numbrite generaatori v\u00e4ljundit, annab see talle siiski 1 bitti m\u00f5ju. Ja kui r\u00fcndajad kontrollivad mitmeid osalejaid, siis kontrollitud bitite arv on sama, mis nende k\u00e4es oleva osalejate arv.<\/p>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me ei usalda \u00fcksteist? Osa 1\" src=\"\/wp-content\/uploads\/2020\/09\/4869d0c7dbc4cc8a368c2846997d6d2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>R\u00fcndajate m\u00f5ju v\u00f5ib oluliselt v\u00e4hendada, kui n\u00f5uda, et osalejad avavad numbrid j\u00e4rjestikku. Siis saab r\u00fcndaja tulemusele m\u00f5ju avaldada ainult juhul, kui ta avab viimase. Kuigi m\u00f5ju on m\u00e4rkimisv\u00e4\u00e4rselt v\u00e4iksem, on algoritm siiski kallutatud.<\/p>\n<h3>RANDAO + VDF<\/h3>\n<p>\u00dcks v\u00f5imalus, kuidas teha RANDAO mitte kallutatud, on j\u00e4rgmine: p\u00e4rast seda, kui k\u00f5ik numbrid on avatud ja XOR arvutatud, antakse selle tulemus sisendiks funktsioonile, mille arvutamine v\u00f5tab v\u00e4ga kaua aega, kuid mille \u00f5igsuse kontrollimine on v\u00e4ga kiire.<\/p>\n<pre><code>(vdf_output, vdf_proof) = VDF_compute(input) \/\/ see on v\u00e4ga aeglane\ncorrect = VDF_verify(input, vdf_output, vdf_proof) \/\/ see on v\u00e4ga kiire<\/code><\/pre>\n<p>See funktsioon on tuntud kui Verifiable Delay Function ehk VDF. Kui l\u00f5pliku tulemuse arvutamine v\u00f5tab rohkem aega kui numbrite avamise etapp, ei saa kurjategija ennustada efekti, kui ta oma numbrit demonstreerib v\u00f5i varjab, ning seet\u00f5ttu kaotab ta v\u00f5imaluse tulemusele m\u00f5ju avaldada.<\/p>\n<p>Hea VDF arendamine on \u00e4\u00e4rmiselt keeruline. Viimase aja jooksul on tehtud mitu l\u00e4bimurret, n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2018\/623.pdf\"><u>see<\/u><\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2018\/627.pdf\"><u>see,<\/u><\/a><\/noindex> mis on teinud VDF-de rakendamise praktikas lihtsamaks, ja Ethereum 2.0 plaanib pikaajaliselt kasutada RANDAO-d VDF-ga juhuslike numbrite allikana. Lisaks sellele, et see l\u00e4henemine on ettearvamatu ja erapooletu, on sellel lisaks veel \u00fcks eelis, mis seisneb t\u00f6\u00f6kindluses, kui v\u00e4hemalt kaks osalejat on v\u00f5rgus (eeldusel, et kasutatav konsensusprotokoll on toimiv nii v\u00e4ikese osalejate arvu puhul).<\/p>\n<p>Selle l\u00e4henemise suurim v\u00e4ljakutse on VDF seadistamine nii, et isegi osaleja, kellel on v\u00e4ga kallis spetsialiseeritud varustus, ei suudaks VDF-d arvutada enne, kui avamise faas on l\u00f5ppenud. Ideaalis peaks algoritm olema isegi m\u00e4rkimisv\u00e4\u00e4rse varu, \u00fctleme, 10x. Alloleval joonisel on kujutatud osa, kus osaleja, kellel on spetsialiseeritud ASIC, suudab k\u00e4ivitada VDF-d kiiremini, kui on RANDAO kinnituse avamiseks etten\u00e4htud aeg. Selline osaleja v\u00f5ib siiski arvutada l\u00f5pptulemuse, kasutades v\u00f5i mitte kasutades oma numbrit, ja seej\u00e4rel, l\u00e4htudes arvutustest, valima, kas n\u00e4idata seda v\u00f5i mitte.<\/p>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me ei usalda \u00fcksteist? Osa 1\" src=\"\/wp-content\/uploads\/2020\/09\/3c6e64b6473b951f549f5ba60edbafa9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00dclepool toodud VDF perekonna puhul v\u00f5ib spetsialiseeritud ASIC-i j\u00f5udlus olla \u00fcle 100 korda parem kui tavaliste seadmete omast. Seega, kui avamise faas kestab 10 sekundit, peab sellisel ASIC-il arvutatud VDF v\u00f5tma rohkem kui 100 sekundit, et omada 10-kordset ohutusvaru, ja seega sama VDF, mis arvutatakse tavalise varustuse abil, peab v\u00f5tma 100 x 100 sekundit = ~ 3 tundi.<\/p>\n<p>Ethereum Foundation kavatseb selle probleemi lahendada, luues enda avalikud tasuta ASIC-id. Kui see juhtub, saavad k\u00f5ik teised protokollid samuti seda tehnoloogiat kasutada, kuid kuni selle ajani ei ole RANDAO + VDF l\u00e4henemine sama eluj\u00f5uline protokollide jaoks, kes ei saa investeerida oma ASIC-ide arendamisse.<\/p>\n<p>Palju artikleid, videoid ja muud teavet VDF kohta on kogutud <noindex><a rel=\"nofollow\" href=\"https:\/\/vdfresearch.org\/\"><u>sellel veebilehel<\/u><\/a><\/noindex>.<\/p>\n<h3>Kasutame kustutuskode<\/h3>\n<p>Selles osas vaatleme juhuslike arvude genereerimise protokolli, mis kasutab <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D1%82%D0%B8%D1%80%D0%B0%D1%8E%D1%89%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4\">kustutuskode<\/a><\/noindex>. See suudab taluda kuni \u2153 pahatahtlikest osalejatest ja lubab kuni \u2154 pahatahtlikku osalejat, enne kui nad suudavad tulemust ennustada v\u00f5i sellele m\u00f5ju avaldada.<\/p>\n<p>Protokolli p\u00f5hij\u00f5ud on j\u00e4rgmine. Lihtsuse huvides eeldame, et selles osaleb t\u00e4pselt 100 liiget. Eeldame ka, et k\u00f5igil liikmetel on kohalikult olemas m\u00f5ni privaatv\u00f5ti ning k\u00f5igi liikmete avalikud v\u00f5tmed on k\u00f5igile osalejatele teada:<\/p>\n<ol>\n<li>\n<p>Iga liige m\u00f5tleb kohalikult v\u00e4lja pika stringi, jagab selle 67 osaks, loob kustutuskoodid 100 osaleja saamiseks, nii et igast 67-st piisab stringi taastamiseks, m\u00e4\u00e4rab iga 100 osast \u00fche osalejale ja kr\u00fcpteerib need sama osaleja avaliku v\u00f5tmega. Seej\u00e4rel avalikustatakse k\u00f5ik kr\u00fcpteeritud osad.<\/p>\n<\/li>\n<li>\n<p>Osalejad kasutavad mingit konsensust, et j\u00f5uda kokkuleppele konkreetsete 67 osaleja kr\u00fcpteeritud kogumite \u00fcle.<\/p>\n<\/li>\n<li>\n<p>Kui konsensus on saavutatud, v\u00f5tab iga liige iga 67 kogumi kr\u00fcpteeritud osad, mis on kr\u00fcpteeritud nende avaliku v\u00f5tmega, dekr\u00fcpteerib k\u00f5ik sellised osad ja avalikustab k\u00f5ik dekr\u00fcpteeritud osad.<\/p>\n<\/li>\n<li>\n<p>Kui 67 osalejat on l\u00e4binud sammu (3), saab k\u00f5iki kokkulepitud kogumeid t\u00e4ielikult dekodeerida ja taastada kustutuskoodide omaduste t\u00f5ttu, ning l\u00f5plik number v\u00f5ib olla saadud algsete stringide XOR-iga, millega osalejad alustasid (1).<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me ei usalda \u00fcksteist? Osa 1\" src=\"\/wp-content\/uploads\/2020\/09\/b74ef4bb4a8148766f0b1ab2a8222625.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>On v\u00f5imalik n\u00e4idata, et see protokoll on erapooletu ja ettearvamatu. Tulemuslik juhuslik number m\u00e4\u00e4ratakse p\u00e4rast konsensuse saavutamist, kuid kellelegi see ei ole teada, kuni \u2154 osalejatest ei dekr\u00fcpteeri osi, mis on nende avaliku v\u00f5tmega kr\u00fcptitud. Seega on juhuslik number m\u00e4\u00e4ratud enne, kui teave, mis on piisav selle taastamiseks, on avaldatud.<\/p>\n<p>Mis juhtub, kui sammu (1) jooksul saadab \u00fcks osalejatest teistele osalejatele kodeeritud osad, mis ei ole m\u00f5ne rea korrektne kustutuskood? Ilma t\u00e4iendavate muudatusteta ei suuda erinevad osalejad kas t\u00e4ielikult rida taastada v\u00f5i taastavad nad erinevaid ridu, mis viib selleni, et erinevad osalejad saavad erineva juhusliku numbri. Selle v\u00e4ltimiseks saab teha j\u00e4rgmist: iga osaleja arvutab peale kodeeritud osade ka <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%85%D0%B5%D1%88%D0%B5%D0%B9\">Merkle puu<\/a><\/noindex> , ja saadab igale osalejale nii kodeeritud osa kui Merkle puu juure ja t\u00f5endi osa sisestamise kohta Merkle puusse. Konsensuse sammul (2) n\u00f5ustuvad osalejad siis mitte lihtsalt mitme komplektiga, vaid mitme konkreetse sellise puu juurega (kui m\u00f5ni osaleja on protokollist k\u00f5rvalekaldunud ja on saatnud erinevaid Merkle puude juuri erinevatele osalejatele, ja kaks sellist juurt n\u00e4idatakse konsensuse ajal, siis ei kaasata tema rida tulemuste komplekti). Konsensuse l\u00f5puks on meil 67 kodeeritud rida ja nendega seotud Merkle puude juured, nii et v\u00e4hemalt 67 osalejat (mitte tingimata need, kes esitasid vastavad read) saavat igas 67 reas s\u00f5numi kustutuskoodiga osast ja t\u00f5endi nende osa vastavuses Merkle puusse.<\/p>\n<p>Kui sammu (4) jooksul osaleja dekr\u00fcpteerib 67 osa m\u00f5ne rea jaoks ja proovib neid j\u00e4rgi taastada, on v\u00f5imalik \u00fcks j\u00e4rgmistest variantidest:<\/p>\n<ol>\n<li>\n<p>Rida taastatakse, ja kui seda seej\u00e4rel uuesti kustutuskoodide abil kodeerida ja arvutada Merkle puu lokaalsete osade jaoks, siis juur vastab sellele, mille \u00fcle on saavutatud konsensus.<\/p>\n<\/li>\n<li>\n<p>Rida taastatakse, kuid lokaalsetelt arvutatud juurt ei vastata sellele, mille \u00fcle on saavutatud konsensus.<\/p>\n<\/li>\n<li>\n<p>Rida ei taastata.<\/p>\n<\/li>\n<\/ol>\n<p>Lihtne on n\u00e4idata, et kui v\u00e4hemalt \u00fchel osalejal juhtus variant (1), siis toimub see k\u00f5igil osalejatest ja vastupidi, kui v\u00e4hemalt \u00fchel osalejal juhtus variant (2) v\u00f5i (3), siis toimub see samuti k\u00f5igil osalejatest. Seega, iga rida andmestikus kas suudavad k\u00f5ik osalejad selle taastada v\u00f5i mitte. Seega, tulemuseks olev juhuslik number on XOR vaid nende ridade jaoks, mida osalejad suudavad taastada.<\/p>\n<h3>Piirv\u00e4\u00e4rtuste allkirjad<\/h3>\n<p>Teine l\u00e4henemine juhuslikkusele h\u00f5lmab nn BLS-i piirv\u00e4\u00e4rtuste allkirju. Piirv\u00e4\u00e4rtuste p\u00f5hjal genereeritud juhuslike arvude generaatoril on t\u00e4pselt samasugused garantiid nagu eelnevalt kirjeldatud kustutuskoodide p\u00f5hine algoritm, kuid sellel on m\u00e4rkimisv\u00e4\u00e4rselt v\u00e4iksem s\u00f5numite edastamise as\u00fcmptootika v\u00f5rreldes iga genereeritud numbri kohta.<\/p>\n<p>BLS-i allkirjad on konstruktsioon, mis v\u00f5imaldab mitmel osalejal luua \u00fche \u00fchise allkirja s\u00f5numile. Selliseid allkirju kasutatakse tihti ruumi ja ribalaiuse kokkuhoiuks, kuna need ei n\u00f5ua mitme allkirja saatmist.&nbsp;<\/p>\n<p>BLS-allkirjade sage rakendamine plokiahela protokollides, peale juhuslike arvude genereerimise, on plokkide allkirjastamine BFT protokollides. Oletame, et 100 osalejat loovad plokke, ja plokk loetakse l\u00f5plikuks, kui 67 neist allkirjastavad selle. K\u00f5ik nad saavad esitada oma BLS-allkirja osi ja kasutada mingit konsensusalgoritmi, et koondada 67 neist ja seej\u00e4rel kombineerida need \u00fcheks BLS-allkirjaks. Igasuguseid 67 (v\u00f5i rohkem) osa saab kasutada l\u00f5pliku allkirja loomiseks, mis s\u00f5ltub sellest, millised t\u00e4psed 67 allkirja on kokku pandud, ja seet\u00f5ttu v\u00f5ib see varieeruda, kuid hoolimata sellest, et erinevad valikud 67 osalejast tekitavad erineva allkirja, on iga selline allkiri valideeritud allkiri ploki jaoks. \u00dclej\u00e4\u00e4nud osalejatele on seej\u00e4rel piisav, et saada v\u00f5rgust ainult \u00fcks allkiri iga ploki kohta, mitte 67, mis oluliselt v\u00e4hendab v\u00f5rgu koormust.<\/p>\n<p>Selgus on, et kui osalejate kasutatavad privaatv\u00f5tmed genereeritakse teatud viisil, siis olenemata sellest, kui palju 67 allkirja (v\u00f5i rohkem, kuid mitte v\u00e4hem) kokku liidetakse, on tulemusena saadud allkiri sama. Seda saab kasutada juhuslikkuse allikana: osalejad lepivad esmalt kokku mingis s\u00f5numis, mille nad allkirjastavad (see v\u00f5ib olla RANDAO v\u00e4ljund v\u00f5i lihtsalt viimase ploki hash, tegelikult ei ole sellel t\u00e4htsust, peaasi, et see iga kord muutuks ja oleks koosk\u00f5lastatud) ning loovad sellele BLS-allkirja. Generatsiooni tulemus on ennustamatu, kuni 67 osalejat ei esita oma osi, ja p\u00e4rast seda on v\u00e4ljund juba ette m\u00e4\u00e4ratud ega saa s\u00f5ltuda \u00fchegi osaleja toimingutest.<\/p>\n<p>Selline l\u00e4henemine juhuslikkusele on eluj\u00f5uline, kui v\u00e4hemalt \u2154 osalejatest on online ja j\u00e4rgivad protokolli, ning on objektiivne ja ettearvamatu, kuni v\u00e4hemalt \u2153 osalejatest j\u00e4rgivad protokolli. Oluline on t\u00e4hele panna, et kurjategija, kes kontrollib rohkem kui \u2153, kuid v\u00e4hem kui \u2154 osalejat, v\u00f5ib protokolli peatada, kuid ei saa ennustada ega m\u00f5jutada selle v\u00e4ljundit.<\/p>\n<p>Piiratud allkirjad iseenesest on v\u00e4ga huvitav teema. Artikli teises osas uurime \u00fcksikasjalikult, kuidas need t\u00f6\u00f6tavad ja kuidas osalejate v\u00f5tmeid tuleb genereerida, et piiratud allkirju saaks kasutada juhuslike arvude generaatorina.<\/p>\n<h3>Kokkuv\u00f5tteks<\/h3>\n<p>See artikkel on esimene tehniliste artiklite seerias blogis <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR on plokiahela protokoll ja platvorm detsentraliseeritud rakenduste arendamiseks, keskendudes arenduse lihtsusele ja l\u00f5ppkasutajate h\u00f5lpsusele.<\/p>\n<p>Protokolli kood on avatud, meie teostus on kirjutatud Rustis, seda saab leida <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">siit<\/a><\/noindex>.<\/p>\n<p>Vaata, kuidas NEAR-i arendus v\u00e4lja n\u00e4eb ja eksperimentida saad veebip\u00f5hises IDE-s <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">siin<\/a><\/noindex>.<\/p>\n<p>K\u00f5iki uudiseid vene keeles saab j\u00e4lgida <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">grupis Telegramis<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">grupis Vkontakte<\/a><\/noindex>, ja inglise keeles ametlikus <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitteris<\/a><\/noindex>.<\/p>\n<p>J\u00f5uame taas kokku!<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0441\u0435\u0432\u0434\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u041a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0438\u0436\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u201c\u043f\u043e\u0447\u0442\u0438\u201d \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0430 \u0432\u043e\u0442 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u2013 \u0441\u043b\u043e\u0436\u043d\u043e. \u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c, \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443? \u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95469,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95468","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0441\u0435\u0432\u0434\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443.\" \/>\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\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443? \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0441\u0435\u0432\u0434\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1\" \/>\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=\"2020-09-29T17:42:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-29T17:42:29+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\udd47Kas juhuslike arvude genereerimine on v\u00f5imalik, kui me ei usalda \u00fcksteist? Osa 1 | ProHoster","description":"Tere, Habr! Selles artiklis r\u00e4\u00e4gin ma juhuslike arvude genereerimisest osalejate poolt, kes ei usalda teineteist.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1","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\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443? \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0441\u0435\u0432\u0434\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1","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":"2020-09-29T17:42:29+00:00","article:modified_time":"2020-09-29T17:42:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95468","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:05:29","updated":"2022-09-28 01:55:15","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95468","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=95468"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95468\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/95469"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=95468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=95468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=95468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}