{"id":95846,"date":"2020-10-04T01:42:23","date_gmt":"2020-10-03T23:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2"},"modified":"2020-10-04T01:42:23","modified_gmt":"2020-10-03T23:42:23","slug":"mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","title":{"rendered":"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2\" src=\"\/wp-content\/uploads\/2020\/10\/fc42fe5e99ce4412a0ce99eb63629a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tere, Habr!<\/p>\n<p>Uues <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">esimeses osas<\/a><\/noindex> artiklites arutasime, miks v\u00f5ib olla vajalik genereerida juhuslikke numbreid osalistele, kes ei usalda \u00fcksteist, millised n\u00f5uded sellistele juhuslike numbrite generaatoritele esitatakse ning kaaluti kahte l\u00e4henemist nende rakendamiseks.<\/p>\n<p>Selles artikli osas vaatleme \u00fcksikasjalikult veel \u00fchte l\u00e4henemist, mis kasutab l\u00e4ve allkirju.<\/p>\n<h3>Veidi kr\u00fcptograafia<\/h3>\n<p>Selleks, et m\u00f5ista, kuidas l\u00e4ve allkirjad t\u00f6\u00f6tavad, on vajalik v\u00e4hene arusaam p\u00f5hilistest kr\u00fcptograafia m\u00f5istetest. Kasutame kahte kontseptsiooni: skalaare ehk lihtsalt numbreid, mida t\u00e4histame v\u00e4ikeste t\u00e4htedega (<em>x, y<\/em>) ja punkte elliptilisel k\u00f5veral, mida t\u00e4histame suurte t\u00e4htedega.<\/p>\n<p>L\u00e4ve allkirjade p\u00f5hialuste m\u00f5istmiseks ei pea \u00fcldse aru saama, kuidas elliptilised k\u00f5verad toimivad, v\u00e4lja arvatud m\u00f5ned p\u00f5hiasjad:<\/p>\n<ol>\n<li>\n<p>Elliptilise k\u00f5vera punkte saab liita ja skalaari k\u00fclge korrutada (skalaari k\u00fclge korrutamist t\u00e4histame kui <em>xG<\/em>, kuigi s\u00fcmboolikat <em>Gx<\/em> ka sageli kasutatakse ka kirjanduses). Summa ja skalaari korrutamise tulemus on punkt elliptilise k\u00f5vera peal.<\/p>\n<\/li>\n<li>\n<p>Teades ainult punkti <em>G<\/em> ja selle korrutist skalaari <em>xG<\/em> ei saa arvestada <em>x<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>Kasutame samuti pol\u00fcnoomi kontseptsiooni <em>p(x)<\/em> kraadi <em>k<\/em>-1. Eelk\u00f5ige kasutame j\u00e4rgmist pol\u00fcnoomide omadust: kui teame v\u00e4\u00e4rtust <em>p(x) <\/em>iga\u00fche jaoks <em>k <\/em>erinev <em>x <\/em>(ja ei oma rohkem teavet <em>p(x)<\/em>), saame arvestada <em>p(x) <\/em>iga teisega <em>x<\/em>.<\/p>\n<p>Huvitav on, et iga pol\u00fcnoomi <em>p(x)<\/em> ja mingi punkti kohta k\u00f5veral, teades v\u00e4\u00e4rtust <em>G<\/em>p(x)G <em>erinevate v\u00e4\u00e4rtuste<\/em> iga\u00fche jaoks <em>k<\/em> , on v\u00f5imalik ka arvestada <em>x<\/em>igaga <em>erinevate v\u00e4\u00e4rtuste<\/em> Seda teavet on piisavalt, et s\u00fcveneda \u00fcksikasjadesse, kuidas l\u00e4ve allkirjad t\u00f6\u00f6tavad ja kuidas neid kasutada juhuslike numbrite genereerimiseks. <em>x<\/em>.<\/p>\n<p>L\u00e4ve allkirjadega juhuslike numbrite generaator<\/p>\n<h3>Oletame, et<\/h3>\n<p>osalisi soovivad genereerida juhusliku numbri ja tahame, et \u00fcksk\u00f5ik milline <em>n<\/em> neist oleks piisav numbri genereerimiseks, kuid et kurjategijad, kes kontrollivad <em>k<\/em> -1 v\u00f5i v\u00e4hem osalisi, ei saaks ennustada v\u00f5i m\u00f5jutada genereeritud numbrit. <em>k<\/em>Oletame, et eksisteerib selline pol\u00fcnoom<\/p>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2\" src=\"\/wp-content\/uploads\/2020\/10\/00d54b3b0ca237a1551cdbdc35688099.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>-1, et esimene osaline teab <em>p(x)<\/em> kraadi <em>k<\/em>p(1) <em>, teine teab<\/em>p(2), <em>ja nii edasi ( <\/em>-ndal on info<em>n<\/em>p(n) <em>). Oletame ka, et mingi eelnevalt m\u00e4\u00e4ratletud punkti korral<\/em>teavad k\u00f5ik <em>G<\/em> k\u00f5igi v\u00e4\u00e4rtuste kohta <em>erinevate v\u00e4\u00e4rtuste <\/em>k\u00f5ikide v\u00e4\u00e4rtuste jaoks <em>x<\/em>. Me nimetame <em>p(i)<\/em> \u201eprivaatseks komponendiks\u201c <em>i<\/em>-ndast osalisest (sest ainult <em>i<\/em>-ne osaline teab seda), ja <em>p(i)G<\/em> \u201eavalikuks komponendiks\u201c <em>i<\/em>-ndast osalisest (sest k\u00f5ik osalised teavad seda). Nagu te m\u00e4letate, teadmine <em>p(i)G <\/em>ei ole piisav, et taastada <em>p(i).<\/em><\/p>\n<p>Sellise pol\u00fcnoomi loomine, et ainult <em>i-<\/em>-ne osaline ja keegi teine ei teaks oma privaatset komponenti \u2013 see on protokolli k\u00f5ige keerulisem ja huvitavam osa, ja me k\u00e4sitleme seda allpool. Oletame, et meil on selline pol\u00fcnoom, ja k\u00f5ik osalised teavad oma privaatseid komponente.<\/p>\n<p>Kuidas me saame kasutada sellist pol\u00fcnoomi, et genereerida juhuslik number? Esmalt vajame mingit stringi, mis pole varem sissep\u00e4\u00e4suks genereerijale kasutatud. Blokaadi puhul on eelmise blokki hash <em>h<\/em> \u2014 hea kandidaat sellise stringi jaoks. Las osalejad tahavad luua juhusliku numbri, kasutades <em>h <\/em>kui seemet. Esmalt konverteerivad osalised <em>h<\/em> punktiks k\u00f5veral, kasutades m\u00f5nda eelnevalt m\u00e4\u00e4ratud funktsiooni:<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Siis arvutab ja avaldab iga osaline <em>i<\/em> Hi = p(i)H, <em>mida nad saavad teha, sest nad teavad <\/em>p(i) ja H.<em> i avamine ei v\u00f5imalda teistel osalistel taastada privaatset komponenti <\/em>-ndast osalisest, ja seet\u00f5ttu saab sama privaatsete komponentide komplekti kasutada bloki kaupa. Seega tuleb allpool kirjeldatud kulukas pol\u00fcnoomi loomise algoritm teostada ainult \u00fcks kord.<em> H<\/em>osalised avasid <em>i<\/em>k\u00f5ik saavad arvutada<\/p>\n<p>Kui <em>k<\/em> x = <em>mida nad saavad teha, sest nad teavad <\/em>p(x)H<em> H<\/em>k\u00f5igi <em>pol\u00fcnoomide omaduse t\u00f5ttu, millest me eelnevas osas r\u00e4\u00e4kisime. Sel hetkel arvutavad k\u00f5ik osalised<\/em> H0 = p(0)H, <em>x<\/em> ja see ongi tulemuslik juhuslik number. Pange t\u00e4hele, et keegi ei tea <em>p(0), <\/em>ja seega on ainus viis arvutada<em> p(0)H \u2013 <\/em>see on interpolatsioon<em> p(x)H, <\/em>mida on v\u00f5imalik teha ainult siis, kui<em> v\u00e4\u00e4rtusi <\/em>p(i)H<em> k <\/em>teatakse. Iga v\u00e4iksema arvu avamine<em> ei anna mingit teavet <\/em>p(0)H-st.<em> ei anna mingit teavet <\/em>\u00dclaltoodud generaator omab k\u00f5iki omadusi, mida me soovime: kurjategijad, kes kontrollivad ainult<em> k-<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2\" src=\"\/wp-content\/uploads\/2020\/10\/a91219381018f90f73b0a92976c92c79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>1 osalist v\u00f5i v\u00e4hem, ei oma mingit teavet ega m\u00f5ju v\u00e4ljundile, samal ajal kui igasugused <em>osalised saavad arvutada tulemuslikku numbrit ning iga osaliste alamhulk j\u00f5uab alati sama tulemuse juurde sama seemne jaoks.<\/em>1 osalejat v\u00f5i v\u00e4hem ei oma mingit teavet ega m\u00f5ju tulemusele, samas kui igasugused <em>k<\/em> osalejad saavad arvutada tulemuse ja iga alamhulk <em>k<\/em> osalejatest j\u00f5uab alati sama tulemus sama seemne jaoks.<\/p>\n<p>On \u00fcks probleem, mida me eelnevalt ettevaatlikult v\u00e4ltisime. Et interpoleerimine toimiks, on oluline, et v\u00e4\u00e4rtus<em> H<\/em>i, mille iga osaleja on avaldanud, <em>i<\/em> oleks t\u00f5eliselt v\u00f5rdne <em>p(i)H.<\/em> Kuna keegi peale <em>i<\/em>-ndat osalejat ei tea <em>p(i), <\/em>ei saa keegi peale <em>i-<\/em>-nda osaleja kontrollida, et <em>Hi <\/em>on t\u00f5eliselt \u00f5igesti arvutatud, ja ilma mingi kr\u00fcptograafilise t\u00f5endi \u00f5iguse kohta,<em> H<\/em>v\u00f5ib kurjategija avaldada mistahes v\u00e4\u00e4rtuse kui <em>Hi, <\/em>ja suvaliselt m\u00f5jutada juhuslike numbrite generaatori v\u00e4ljundit.<em>:<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2\" src=\"\/wp-content\/uploads\/2020\/10\/694a86666806c49edb6e44dd9ec26b0f.png\" style=\"display:block;margin: 0 auto;\" \/>Erinevad H_1 v\u00e4\u00e4rtused, mida esimene osaleja saadab, toovad kaasa erinevad l\u00f5pp-H_0-d.<\/p>\n<p>On v\u00e4hemalt kaks viisi t\u00f5estada \u00f5igust<em> H<\/em>i, neid k\u00e4sitleme p\u00e4rast pol\u00fcnoomi genereerimise arutamist.<\/p>\n<h3>Pol\u00fcnoomi genereerimine<\/h3>\n<p>Eelmisel l\u00f5igul eeldasime, et meil on selline pol\u00fcnoom <em>p(x)<\/em> kraadi <em>k<\/em>-1, et osaleja <em>i<\/em> kuidas seda teha. Ja seep\u00e4rast k\u00e4itub Google \u00fches suhtes v\u00e4ga targalt: lubab Androidi inimestel teha k\u00f5ike omamoodi. <em>p(i)<\/em>, ja keegi teine ei oma selle v\u00e4\u00e4rtuse kohta mingit teavet. J\u00e4rgmises l\u00f5igus peame samuti arvestama, et m\u00f5nes eelnevalt m\u00e4\u00e4ratud punktis <em>G<\/em> k\u00f5ik teavad <em>erinevate v\u00e4\u00e4rtuste <\/em>H0 = p(0)H,<em> x<\/em>.<\/p>\n<p>Selles l\u00f5igus eeldame, et igal osalejal on kohalikult mingi privaatv\u00f5ti <em>xi, <\/em>ni, et k\u00f5ik teavad vastavat avalikku v\u00f5tit<em> X<\/em>i.<\/p>\n<p>\u00dcks v\u00f5imalik pol\u00fcnoomi genereerimise protokoll on j\u00e4rgmine:<\/p>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2\" src=\"\/wp-content\/uploads\/2020\/10\/ccd8afbc3c88a7f5a03714aeb6593361.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ol>\n<li>\n<p>Iga osaleja <em>i<\/em> loodab kohalikult suvalise pol\u00fcnoomi <em>pi(x) j\u00e4rku k-1. <\/em>Seej\u00e4rel saadavad nad igale osalejale<em> j <\/em>v\u00e4\u00e4rtuse<em> p<\/em>i(j), mis on kr\u00fcpteeritud avaliku v\u00f5tmega <em>Xj. <\/em>Nii et ainult<em> i-<\/em>j-nda<em> <\/em>ja<em> - osaleja teab<\/em>j-nda<em> <\/em>i(j). Osaleja<em> p<\/em>teeb samuti avalikult teada <em>i<\/em> pi(j)G <em>kaasa arvatud. <\/em>H0 = p(0)H,<em> j <\/em>alates<em> 1 <\/em>kuni<em> k <\/em>K\u00f5ik osalejad kasutavad mingit konsensust, et valida<\/p>\n<\/li>\n<li>\n<p>osalejad, kelle pol\u00fcnoome kasutatakse. Kuna m\u00f5ned osalejad v\u00f5ivad olla v\u00e4ljaspool v\u00f5rku, ei saa me oodata, kuni k\u00f5ik<em> k <\/em>osalejad avaldavad pol\u00fcnoome. Selle sammu tulemus on hulk<em> n <\/em>mis koosneb v\u00e4hemalt<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>pol\u00fcnoomidest, mis loodi sammus (1)<em> k <\/em>Osalejad veenduvad, et neile tuntud v\u00e4\u00e4rtused<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>i(j) vastavad avalikult teada antud<em> p<\/em>pi(j)G. <em>P\u00e4rast seda sammu peaksid j\u00e4\u00e4ma vaid pol\u00fcnoomid, mille privaatselt edastatud <\/em>arvutab oma privaatkomponendi<em> <\/em><strong><em>Z <\/em><\/strong>p(j)<em> p<\/em>pi(j)G. <em>P\u00e4rast seda sammu peaksid j\u00e4\u00e4ma vaid pol\u00fcnoomid, mille privaatselt edastatud<\/em><\/p>\n<\/li>\n<li>\n<p>Iga osaleja<em> j <\/em>nagu summa<em> i(j) k\u00f5igi <\/em>. Iga osaleja arvutab samuti k\u00f5ik v\u00e4\u00e4rtused<em> p<\/em>pi(x)G k\u00f5ikide i jaoks. <em>i<\/em> ja <strong><em>Z<\/em><\/strong>p(x) \u2013 <em>erinevate v\u00e4\u00e4rtuste <\/em>. Iga osaleja arvutab samuti k\u00f5ik v\u00e4\u00e4rtused <em>see on t\u00f5eliselt pol\u00fcnoom j\u00e4rku <\/em>ja<em> <\/em><strong><em>Z<\/em><\/strong><em>.<\/em><\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2\" src=\"\/wp-content\/uploads\/2020\/10\/a7a92dba3b9de7a376c415fc6c330c46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Pange t\u00e4hele, et<em> k-1, <\/em>sest see on eraldi<em> i(x), millest iga\u00fcks on pol\u00fcnoom astmega <\/em>k-1.<em> p<\/em>seega on see summa eraldi <em>k<\/em>-1. See, while each participant <em>j<\/em> kuidas seda teha. Ja seep\u00e4rast k\u00e4itub Google \u00fches suhtes v\u00e4ga targalt: lubab Androidi inimestel teha k\u00f5ike omamoodi. <em>p(j), <\/em>they have no information about <em>p(x)<\/em> jaoks <em>x \u2260 j<\/em>. Indeed, to compute this value, they need to know all <em>pi(x), <\/em>and as long as the participant<em> j <\/em>doesn't know at least one of the selected polynomials, they lack sufficient information about<em> p(x).<\/em><\/p>\n<p>This is the entire polynomial generation process that was required in the previous section. Steps 1, 2, and 4 above have a quite clear implementation. However, step 3 is not so trivial.<\/p>\n<p>Specifically, we need to be able to prove that the encrypted<em> p<\/em>i(j) indeed corresponds to the published <em>P\u00e4rast seda sammu peaksid j\u00e4\u00e4ma vaid pol\u00fcnoomid, mille privaatselt edastatud <\/em>If we cannot prove this, an attacker<em> i <\/em>could send garbage instead of<em> p<\/em>i(j) to the participant <em>j<\/em>, and the participant <em>j <\/em>would not be able to obtain the actual value <em>pi(j), <\/em>and would not be able to calculate their private component.<em>.<\/em><\/p>\n<p>There is a cryptographic protocol that allows you to create an additional message<em> proof<\/em>i(j), such that any participant, having some value <em>e, <\/em>as well as<em> proofi(j) <\/em>ja<em> p<\/em>i(j)G, can locally verify that <em>e<\/em> \u2013 this is indeed <em>pi(j), <\/em>encrypted with participant's key<em> j. <\/em>Unfortunately, the size of such proof is incredibly large, and considering that it is necessary to publish<em> O(nk) <\/em>such proofs, they cannot be used for this purpose.<\/p>\n<p>Instead of proving that <em>pi(j) <\/em>vastab<em> p<\/em>i(j)G we can in the polynomial generation protocol allocate a very large interval of time, during which all participants check the obtained encrypted <em>pi(j), <\/em>and if the decrypted message does not match the public<em> p<\/em>i(j)G, they publish a cryptographic proof that the encrypted message they received is incorrect. Proving that the message <em>ei <\/em>vastab <em>pi(G)<\/em> is much easier than proving that it corresponds. It should be noted that this requires each participant to appear in the network at least once during the time allocated for creating such proofs and relies on the assumption that if they published such proof, it will reach all other participants within the same allocated time.<\/p>\n<p><img decoding=\"async\" alt=\"Kas on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usalda? Osa 2\" src=\"\/wp-content\/uploads\/2020\/10\/f7d92f18c75aa6161a9e3f1724b57426.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>If a participant did not appear in the network during this time period, and they indeed had at least one incorrect component, then this particular participant will not be able to participate in further number generation. The protocol, however, will still function if there is at least <em>k<\/em> osalejatest, kes kas just said \u00f5iged komponendid v\u00f5i suutsid j\u00e4tta t\u00f5estuse vale kohta etten\u00e4htud ajas.<\/p>\n<h3>H_i \u00f5iguse t\u00f5estused<\/h3>\n<p>Viimane osa, mida arutada, on see, kuidas t\u00f5estada avaldatud korrektset<em> H<\/em>i, nimelt, et <em>mida nad saavad teha, sest nad teavad <\/em>ilma avamata.<em> p(i).<\/em><\/p>\n<p>K\u00e4idame meeles, et v\u00e4\u00e4rtused<em> H, G, p(i)G <\/em>on avalikud ja tuntud k\u00f5igile.<em> <\/em>Saamist teo<em> p(i) <\/em>teades<em> p(i)G <\/em>ja<em> G <\/em>nimetatakse diskreetseks logaritmiks, v\u00f5i<em> dlog, <\/em>ja me tahame t\u00f5estada, et:<\/p>\n<p><em>dlog(p(i)G, G) = dlog(H<\/em>i, <em>H<\/em>)<\/p>\n<p>ilma avaldamiseta. <em>p(i)<\/em>Selliste t\u00f5estuste jaoks on olemas konstruktsioonid, n\u00e4iteks<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Schnorr protokoll.<\/u><\/a><\/noindex>.<\/p>\n<p>Sellise konstruktsiooniga saadab iga osaleja koos <em>Hi <\/em>t\u00f5estuse \u00f5iguse j\u00e4rgi konstruktsiooni.<\/p>\n<p>Kui juhuslik number on genereeritud, tuleb seda tihti kasutada osalejatele, kes ei ole selle genereerinud. Sellistele osalejatele tuleb koos numbriga saata k\u00f5ik <em>Hi<\/em> ja seotud t\u00f5estused.<\/p>\n<p>Uuriv lugeja v\u00f5ib k\u00fcsida: kuna l\u00f5plik juhuslik number on<em> H<\/em>0 ja <em>p(0)G \u2013 <\/em>see on avalik teave, siis miks on vajalik t\u00f5estus iga eraldi jaoks<em> H<\/em>i, miks mitte saata t\u00f5estust selle osas, et<\/p>\n<p>dlog(<em>p(0)G, G) = dlog(H.<\/em>0, <em>H<\/em>)<\/p>\n<p>Probleem on selles, et Schnorr protokolli abil ei saa luua sellist t\u00f5estust, sest keegi ei tea v\u00e4\u00e4rtust <em>p(0),<\/em>mida on vajalik t\u00f5estuse loomiseks, ning veelgi enam, kogu juhuslike numbrite generaator p\u00f5hineb sellel, et keegi ei tea seda v\u00e4\u00e4rtust. Seet\u00f5ttu on vajalik omada k\u00f5iki v\u00e4\u00e4rtusi <em>Hi <\/em>ja nende individuaalseid t\u00f5estusi, et t\u00f5estada \u00f5igust.<em> H<\/em>0.<\/p>\n<p>Kuid kui eliptiliste k\u00f5verate punktidel oleks mingisugune tegu, mis on semantiliselt sarnane korrutamisega, siis oleks \u00f5iguse t\u00f5estamine <em>H0 <\/em>olnud triviaalne, me lihtsalt kindlustaksime, et<\/p>\n<p><em>H<\/em>0 \u00d7 <em>G<\/em> = <em>p(0)G \u00d7 H.<\/em><\/p>\n<p>Kui valitud k\u00f5ver toetab <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>elliptic curve pairings,<\/u><\/a><\/noindex>siis t\u00f6\u00f6tab selline t\u00f5estus. Sellisel juhul<em> H<\/em>0 on mitte ainult juhuslike numbrite generaatori v\u00e4ljund, mida saab kontrollida iga osaleja, kes teab <em>G, H,<\/em> ja <em>p(0)G. H<\/em>0 on samuti allkiri s\u00f5numis, mida kasutati seemnena, kinnitades, et <em>k<\/em> ja <em>n <\/em>osalejad allkirjastasid selle s\u00f5numi. Seega, kui <em>seeme \u2013 <\/em>on ploki hash plokiahela protokollis, siis <em>H0<\/em> - on samaaegselt mitme allkiri plokis ja v\u00e4ga hea juhuslik number.<\/p>\n<h4>Kokkuv\u00f5tteks<\/h4>\n<p>See artikkel on osa tehniliste artiklite seeriast blogis. <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR \u2013 see on plokiahel protokoll ja platvorm detsentraliseeritud rakenduste arendamiseks, mille r\u00f5hk on arendamise lihtsusel ja l\u00f5ppkasutajate kasutusmugavusel.<\/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\/521700\/\">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 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u0437\u0430\u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\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, \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, \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u043a \u0442\u0430\u043a\u0438\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0438. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95847,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95846","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=\"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-2\" \/>\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 2 | ProHoster\" \/>\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-2\" \/>\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-10-03T23:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-03T23:42:23+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 on v\u00f5imalik genereerida juhuslikke numbreid, kui me \u00fcksteisele ei usu? Osa 2 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","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 2 | ProHoster","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","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-10-03T23:42:23+00:00","article:modified_time":"2020-10-03T23:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95846","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 10:56:24","updated":"2022-09-30 13:54:48","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\/95846","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=95846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/95847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=95846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=95846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=95846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}