{"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\/sv\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1","title":{"rendered":"Kan vi generera slumpm\u00e4ssiga tal om vi inte litar p\u00e5 varandra? Del 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, Habr!<\/p>\n<p>I den h\u00e4r artikeln kommer jag att ber\u00e4tta om generering av pseudo-slumptal bland deltagare som inte litar p\u00e5 varandra. Som vi kommer att se nedan \u00e4r det ganska enkelt att implementera en \"n\u00e4stan\" bra generator, men en riktigt bra \u00e4r sv\u00e5r.<\/p>\n<p>Varf\u00f6r beh\u00f6vs det ens att generera slumpm\u00e4ssiga tal f\u00f6r deltagare som inte litar p\u00e5 varandra? Ett av till\u00e4mpningsomr\u00e5dena \u00e4r decentraliserade applikationer. Till exempel, en applikation som tar en satsning fr\u00e5n en deltagare och antingen dubblerar beloppet med 49% sannolikhet, eller tar 51%, kommer att fungera endast om den kan opartiskt f\u00e5 slumpm\u00e4ssiga tal. Om en angripare kan p\u00e5verka resultatet av slumpgeneratorn, och till och med minimalt \u00f6ka sina chanser att f\u00e5 utbetalning i applikationen, kan han enkelt t\u00f6mma den.<\/p>\n<p>N\u00e4r vi utvecklar ett distribuerat protokoll f\u00f6r generering av slumptal vill vi att det ska ha tre egenskaper:<\/p>\n<ol>\n<li>\n<p>Det m\u00e5ste vara opartiskt. Med andra ord f\u00e5r ingen deltagare p\u00e5 n\u00e5got s\u00e4tt p\u00e5verka resultatet av slumptalsgeneratorn.<\/p>\n<\/li>\n<li>\n<p>Det m\u00e5ste vara of\u00f6ruts\u00e4gbart. Med andra ord f\u00e5r ingen deltagare ha m\u00f6jlighet att f\u00f6ruts\u00e4ga vilket tal som kommer att genereras (eller dra n\u00e5gra av dess egenskaper) innan det har genererats.<\/p>\n<\/li>\n<li>\n<p>Protokollet m\u00e5ste vara livskraftigt, det vill s\u00e4ga motst\u00e5ndskraftigt mot att en viss procentandel av deltagarna kopplar fr\u00e5n n\u00e4tverket eller avsiktligt f\u00f6rs\u00f6ker stoppa protokollet.<\/p>\n<\/li>\n<\/ol>\n<p>I den h\u00e4r artikeln kommer vi att titta p\u00e5 tv\u00e5 tillv\u00e4gag\u00e5ngss\u00e4tt: RANDAO + VDF och ett tillv\u00e4gag\u00e5ngss\u00e4tt baserat p\u00e5 utj\u00e4mnande koder. I n\u00e4sta del kommer vi att g\u00e5 igenom tillv\u00e4gag\u00e5ngss\u00e4ttet som bygger p\u00e5 tr\u00f6skel-signaturer.<\/p>\n<p>Men f\u00f6rst l\u00e5t oss g\u00e5 igenom en enkel och ofta anv\u00e4nd algoritm som \u00e4r livskraftig, of\u00f6ruts\u00e4gbar men partisk.<\/p>\n<h3>RANDAO<\/h3>\n<p>RANDAO \u00e4r en mycket enkel och d\u00e4rf\u00f6r ganska ofta anv\u00e4nd metod f\u00f6r att f\u00e5 slumpm\u00e4ssighet. Alla deltagare i n\u00e4tverket v\u00e4ljer f\u00f6rst lokalt ett pseudorandomtal, och sedan skickar varje deltagare hash av det valda talet. D\u00e4refter avsl\u00f6jar deltagarna turvis sina valda tal och utf\u00f6r en XOR-operation p\u00e5 de avsl\u00f6jade talen, och resultatet av denna operation blir resultatet av protokollet.<\/p>\n<p>Steget med att publicera hash innan man avsl\u00f6jar siffrorna \u00e4r n\u00f6dv\u00e4ndigt f\u00f6r att f\u00f6rhindra att en angripare v\u00e4ljer sitt nummer efter att ha sett siffrorna fr\u00e5n andra deltagare. Detta skulle faktiskt ge dem m\u00f6jlighet att ensamt best\u00e4mma resultatet av den slumpm\u00e4ssiga talgeneratorn.<\/p>\n<p>Under protokollet m\u00e5ste deltagarna komma \u00f6verens tv\u00e5 g\u00e5nger (s\u00e5 kallad konsensus): n\u00e4r man ska avsl\u00f6ja de valda siffrorna och d\u00e4rmed sluta ta emot hash, och n\u00e4r man ska avsluta mottagandet av valda siffror och ber\u00e4kna det resulterande slumpm\u00e4ssiga numret. Att fatta s\u00e5dana beslut mellan deltagare som inte litar p\u00e5 varandra \u00e4r en sj\u00e4lvklar utmaning, och vi kommer att \u00e5terkomma till det i framtida artiklar. I den h\u00e4r artikeln f\u00f6ruts\u00e4tter vi att en s\u00e5dan konsensusalgoritm \u00e4r tillg\u00e4nglig f\u00f6r oss.<\/p>\n<p>Vilka av de egenskaper vi beskrev ovan har RANDAO? Den \u00e4r of\u00f6ruts\u00e4gbar, har samma livskraft som den underliggande konsensusprotokollet, men \u00e4r partisk. S\u00e4rskilt en angripare kan observera n\u00e4tverket, och efter att andra deltagare har avsl\u00f6jat sina siffror kan de ber\u00e4kna deras XOR och avg\u00f6ra om de ska avsl\u00f6ja sitt nummer eller inte, f\u00f6r att p\u00e5verka resultatet. Medan detta inte till\u00e5ter angriparen att ensamt best\u00e4mma resultatet av den slumpm\u00e4ssiga talgeneratorn, ger det dem fortfarande 1 bits p\u00e5verkan. Om angriparna kontrollerar flera deltagare kommer antalet bitar de kontrollerar att motsvara antalet deltagare under deras kontroll.<\/p>\n<p><img decoding=\"async\" alt=\"Kan vi generera slumpm\u00e4ssiga tal om vi inte litar p\u00e5 varandra? Del 1\" src=\"\/wp-content\/uploads\/2020\/09\/4869d0c7dbc4cc8a368c2846997d6d2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Angriparnas p\u00e5verkan kan minskas avsev\u00e4rt om deltagarna tvingas avsl\u00f6ja sina siffror i ordning. D\u00e5 kan angriparen endast p\u00e5verka resultatet om de avsl\u00f6jar sist. \u00c4ven om p\u00e5verkan \u00e4r avsev\u00e4rt mindre \u00e4r algoritmen fortfarande partisk.<\/p>\n<h3>RANDAO + VDF<\/h3>\n<p>Ett av s\u00e4tten att g\u00f6ra RANDAO opartiskt \u00e4r att efter att alla nummer har avsl\u00f6jats och XOR har ber\u00e4knats, mata in resultatet i en funktion som tar mycket l\u00e5ng tid att ber\u00e4kna men m\u00f6jligg\u00f6r snabb verifiering av ber\u00e4kningen.<\/p>\n<pre><code>(vdf_output, vdf_proof) = VDF_compute(input) \/\/ detta \u00e4r mycket l\u00e5ngsamt\ncorrect = VDF_verify(input, vdf_output, vdf_proof) \/\/ detta \u00e4r mycket snabbt<\/code><\/pre>\n<p>Denna funktion kallas Verifiable Delay Function, eller VDF. Om ber\u00e4kningen av det slutliga resultatet tar l\u00e4ngre tid \u00e4n avsl\u00f6jande av siffrorna, kan en angripare inte f\u00f6ruts\u00e4ga effekten av att visa eller d\u00f6lja sin siffra, och d\u00e4rmed f\u00f6rlorar hen m\u00f6jligheten att p\u00e5verka resultatet.<\/p>\n<p>Att utveckla bra VDF:er \u00e4r extremt sv\u00e5rt. P\u00e5 senare tid har det gjorts flera genombrott, till exempel <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2018\/623.pdf\"><u>det h\u00e4r<\/u><\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2018\/627.pdf\"><u>detta,<\/u><\/a><\/noindex> vilka har gjort VDF:er mer praktiskt till\u00e4mpbara, och Ethereum 2.0 planerar p\u00e5 l\u00e5ng sikt att anv\u00e4nda RANDAO med VDF som k\u00e4lla f\u00f6r slumpm\u00e4ssiga siffror. F\u00f6rutom att denna metod \u00e4r of\u00f6ruts\u00e4gbar och objektiv, har den den extra f\u00f6rdelen att den \u00e4r livskraftig, om minst tv\u00e5 deltagare \u00e4r tillg\u00e4ngliga i n\u00e4tverket (f\u00f6rutsatt att den anv\u00e4nda konsensusprotokollet \u00e4r livskraftigt vid arbete med s\u00e5 f\u00e5 deltagare).<\/p>\n<p>Den st\u00f6rsta sv\u00e5righeten med denna metod ligger i att st\u00e4lla in VDF s\u00e5 att inte ens en deltagare med mycket dyr specialiserad utrustning kan ber\u00e4kna VDF innan avsl\u00f6jandefasen \u00e4r \u00f6ver. I idealfallet b\u00f6r algoritmen ha en betydande s\u00e4kerhetsmarginal, l\u00e5t oss s\u00e4ga 10x. I bilden nedan visas en attack fr\u00e5n en deltagare med specialiserad ASIC som m\u00f6jligg\u00f6r snabbare k\u00f6rning av VDF \u00e4n den tid som avsatts f\u00f6r att avsl\u00f6ja bekr\u00e4ftelsen av RANDAO. En s\u00e5dan deltagare kan fortfarande ber\u00e4kna det slutliga resultatet med och utan sin siffra, och baserat p\u00e5 ber\u00e4kningarna v\u00e4lja att visa den eller inte.<\/p>\n<p><img decoding=\"async\" alt=\"Kan vi generera slumpm\u00e4ssiga tal om vi inte litar p\u00e5 varandra? Del 1\" src=\"\/wp-content\/uploads\/2020\/09\/3c6e64b6473b951f549f5ba60edbafa9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>F\u00f6r den ovan n\u00e4mnda familjen av VDF:er kan prestandan hos specialiserad ASIC vara \u00f6ver 100 g\u00e5nger h\u00f6gre \u00e4n hos vanlig utrustning. Om avsl\u00f6jandefasen varar i 10 sekunder, b\u00f6r VDF:n ber\u00e4knad p\u00e5 en s\u00e5dan ASIC ta mer \u00e4n 100 sekunder f\u00f6r att ha en s\u00e4kerhetsmarginal p\u00e5 10 g\u00e5nger, och d\u00e4rmed b\u00f6r samma VDF ber\u00e4knad p\u00e5 vanlig utrustning ta 100 x 100 sekunder = ~ 3 timmar.<\/p>\n<p>Ethereum Foundation planerar att l\u00f6sa detta problem genom att skapa sina egna offentliga gratis ASICs. S\u00e5 snart detta \u00e4r klart, kan alla andra protokoll ocks\u00e5 dra nytta av denna teknik, men fram till dess kommer RANDAO + VDF-ansatsen inte att vara lika livskraftig f\u00f6r protokoll som inte kan investera i utvecklingen av sina egna ASICs.<\/p>\n<p>M\u00e5nga artiklar, videor och annan information om VDF har samlats p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/vdfresearch.org\/\"><u>denna webbplats<\/u><\/a><\/noindex>.<\/p>\n<h3>Anv\u00e4nder utpl\u00e5ningskoder<\/h3>\n<p>I det h\u00e4r avsnittet kommer vi att granska protokollet f\u00f6r generering av slumpm\u00e4ssiga nummer, som anv\u00e4nder <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\">utpl\u00e5ningskoder<\/a><\/noindex>. Det kan t\u00e5la upp till \u2153 skadliga akt\u00f6rer och tolererar existensen av upp till \u2154 skadliga akt\u00f6rer innan de kan f\u00f6ruts\u00e4ga eller p\u00e5verka resultatet.<\/p>\n<p>Den grundl\u00e4ggande id\u00e9n med protokollet \u00e4r f\u00f6ljande. F\u00f6r enkelhetens skull l\u00e5t oss anta att det finns exakt 100 deltagare. L\u00e5t oss ocks\u00e5 anta att alla deltagare lokalt har en viss privat nyckel och att de offentliga nycklarna f\u00f6r alla deltagare \u00e4r k\u00e4nda av alla deltagare:<\/p>\n<ol>\n<li>\n<p>Varje deltagare lokaliserar en l\u00e5ng str\u00e4ng, delar upp den i 67 delar, skapar utpl\u00e5ningskoder f\u00f6r att f\u00e5 100 andelar, s\u00e5dana att vilka som helst 67 \u00e4r tillr\u00e4ckliga f\u00f6r att \u00e5terst\u00e4lla str\u00e4ngen, tilldelar varje av de 100 andelarna till en av deltagarna och krypterar dem med hj\u00e4lp av den samme deltagarens offentliga nyckel. D\u00e4refter publiceras alla krypterade andelar.<\/p>\n<\/li>\n<li>\n<p>Deltagarna anv\u00e4nder en form av konsensus f\u00f6r att n\u00e5 enighet om de kodade upps\u00e4ttningarna fr\u00e5n specifika 67 deltagare.<\/p>\n<\/li>\n<li>\n<p>S\u00e5 snart konsensus har n\u00e5tts, tar varje deltagare de kodade andelarna i varje av de 67 upps\u00e4ttningarna, krypterade med deras offentliga nyckel, dekrypterar alla s\u00e5dana andelar och publicerar alla s\u00e5dana dekrypterade andelar.<\/p>\n<\/li>\n<li>\n<p>N\u00e4r 67 deltagare har genomf\u00f6rt steg (3) kan alla \u00f6verenskomna upps\u00e4ttningar fullst\u00e4ndigt dekrypteras och \u00e5terst\u00e4llas p\u00e5 grund av egenskaperna hos utpl\u00e5ningskoder, och det slutliga numret kan erh\u00e5llas som XOR av de ursprungliga str\u00e4ngarna som deltagarna b\u00f6rjade med i (1).<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Kan vi generera slumpm\u00e4ssiga tal om vi inte litar p\u00e5 varandra? Del 1\" src=\"\/wp-content\/uploads\/2020\/09\/b74ef4bb4a8148766f0b1ab2a8222625.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Det kan visas att denna protokoll \u00e4r opartisk och of\u00f6ruts\u00e4gbar. Det resulterande slumptalet definieras efter att konsensus har n\u00e5tts, men ingen vet det f\u00f6rr\u00e4n \u2154 av deltagarna dekrypterar de delar som \u00e4r krypterade med deras offentliga nyckel. P\u00e5 s\u00e5 s\u00e4tt definieras slumptalet tidigare \u00e4n informationen som kr\u00e4vs f\u00f6r att \u00e5terskapa det publiceras.<\/p>\n<p>Vad h\u00e4nder om ett av deltagarna vid steg (1) skickade kodade andelar som inte \u00e4r en korrekt suddande kod f\u00f6r en viss str\u00e4ng till de andra deltagarna? Utan ytterligare f\u00f6r\u00e4ndringar kan olika deltagare antingen inte alls \u00e5terskapa str\u00e4ngen, eller s\u00e5 \u00e5terskapar de olika str\u00e4ngar, vilket leder till att olika deltagare f\u00e5r olika slumptal. F\u00f6r att f\u00f6rhindra detta kan f\u00f6ljande g\u00f6ras: varje deltagare, ut\u00f6ver de kodade andelarna, ber\u00e4knar ocks\u00e5 <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\">Merkletree<\/a><\/noindex> alla s\u00e5dana andelar, och skickar b\u00e5de den kodade andelen och roten av Merkletreet till varje deltagare, samt beviset p\u00e5 inkluderingen av andelen i Merkletreet. Vid konsensus i steg (2) kommer deltagarna d\u00e5 inte bara att enas om en m\u00e4ngd upps\u00e4ttningar, utan om en m\u00e4ngd specifika r\u00f6tter f\u00f6r s\u00e5dana tr\u00e4d (om viss deltagare avviker fr\u00e5n protokollet och skickar olika r\u00f6tter av Merkletreet till olika deltagare, och tv\u00e5 s\u00e5dana r\u00f6tter visas under konsensus, inkluderas inte hans str\u00e4ng i den resulterande upps\u00e4ttningen). I slutet av konsensus kommer vi ha 67 kodade str\u00e4ngar och motsvarande r\u00f6tter av Merkletreet, s\u00e5dana att det finns minst 67 deltagare (inte n\u00f6dv\u00e4ndigtvis samma som de som f\u00f6reslog motsvarande str\u00e4ngar), f\u00f6r vilka varje av de 67 str\u00e4ngarna har ett meddelande med en andel av suddande kod och bevis p\u00e5 att deras andel ing\u00e5r i det motsvarande Merkletreet.<\/p>\n<p>N\u00e4r en deltagare i steg (4) dekrypterar 67 andelar f\u00f6r en viss str\u00e4ng och f\u00f6rs\u00f6ker \u00e5terskapa den ursprungliga str\u00e4ngen, \u00e4r en av alternativen m\u00f6jliga:<\/p>\n<ol>\n<li>\n<p>Str\u00e4ngen \u00e5terskapas, och om den d\u00e5 kodas med suddande koder igen, och Merkletreet ber\u00e4knas f\u00f6r de lokalt ber\u00e4knade andelarna, s\u00e5 st\u00e4mmer roten \u00f6verens med den som konsensus har n\u00e5tt.<\/p>\n<\/li>\n<li>\n<p>Str\u00e4ngen \u00e5terskapas, men den lokalt ber\u00e4knade roten motsvarar inte den som konsensus har n\u00e5tt.<\/p>\n<\/li>\n<li>\n<p>Str\u00e4ngen kan inte \u00e5terskapas.<\/p>\n<\/li>\n<\/ol>\n<p>Det \u00e4r l\u00e4tt att visa att om minst en deltagare upplever alternativ (1), s\u00e5 kommer alla deltagare att uppleva alternativ (1), och omv\u00e4nt, om minst en deltagare upplever alternativ (2) eller (3), d\u00e5 kommer alla deltagare att uppleva alternativ (2) eller (3). P\u00e5 s\u00e5 s\u00e4tt, f\u00f6r varje rad i datasetet antingen kommer alla deltagare att \u00e5terst\u00e4lla den framg\u00e5ngsrikt, eller s\u00e5 kommer alla deltagare att misslyckas med att \u00e5terst\u00e4lla den. Den resulterande slumpm\u00e4ssiga siffran \u00e4r d\u00e5 XOR av endast de rader som deltagarna kunde \u00e5terst\u00e4lla.<\/p>\n<h3>Tr\u00f6skelattester<\/h3>\n<p>Ett annat tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r slumpm\u00e4ssighet involverar anv\u00e4ndningen av s\u00e5 kallade BLS-tr\u00f6skelattester. En slumpgenerator baserad p\u00e5 tr\u00f6skelattester har exakt samma garantier som den ovan beskrivna algoritmen baserad p\u00e5 utpl\u00e5ningskoder, men har en betydligt l\u00e4gre asymptotik f\u00f6r antalet meddelanden som skickas \u00f6ver n\u00e4tverket f\u00f6r varje genererat tal.<\/p>\n<p>BLS-signaturer \u00e4r en konstruktion som till\u00e5ter flera deltagare att skapa en gemensam signatur f\u00f6r ett meddelande. Dessa signaturer anv\u00e4nds ofta f\u00f6r att spara utrymme och bandbredd, eftersom de inte kr\u00e4ver att flera signaturer distribueras.&nbsp;<\/p>\n<p>En vanlig till\u00e4mpning av BLS-signaturer i blockchain-protokoll, f\u00f6rutom generering av slumpm\u00e4ssiga nummer, \u00e4r signering av block i BFT-protokoll. L\u00e5t s\u00e4ga att 100 deltagare skapar block och blocket anses vara slutgiltigt om 67 av dem signerar det. Alla kan presentera sina delar av BLS-signaturen och anv\u00e4nda en viss konsensusalgoritm f\u00f6r att enas om 67 av dem, och sedan kombinera dessa till en enda BLS-signatur. Vilka 67 (eller fler) delar som anv\u00e4nds kan skapa den slutliga signaturen, vilket inneb\u00e4r att den kan variera, men trots att olika val av 67 deltagare kommer att skapa olika signaturer, kommer vilken som helst av dessa signaturer att vara en giltig signatur f\u00f6r blocket. \u00d6vriga deltagare beh\u00f6ver sedan bara f\u00e5 och verifiera en signatur per block \u00f6ver n\u00e4tverket, ist\u00e4llet f\u00f6r 67, vilket m\u00e4rkbart minskar belastningen p\u00e5 n\u00e4tverket.<\/p>\n<p>Det visar sig att om de privata nycklar som anv\u00e4nds av deltagarna genereras p\u00e5 ett visst s\u00e4tt, s\u00e5 kommer den resulterande signaturen att vara densamma oavsett vilka 67 signaturer (eller fler, men inte f\u00e4rre) som aggregeras. Detta kan anv\u00e4ndas som en k\u00e4lla till slumpm\u00e4ssighet: deltagarna kommer f\u00f6rst \u00f6verens om ett meddelande som de ska signera (det kan vara resultatet av RANDAO eller helt enkelt hash av den senaste blocket, det spelar faktiskt ingen roll s\u00e5 l\u00e4nge det \u00e4ndras varje g\u00e5ng och \u00e4r \u00f6verenskommet), och skapar en BLS-signatur f\u00f6r det. Resultatet av genereringen kommer att vara of\u00f6ruts\u00e4gbart tills 67 deltagare l\u00e4mnar sina delar, och efter det kommer resultaten att vara f\u00f6rbest\u00e4mda och kan inte bero p\u00e5 n\u00e5gon deltagares handlingar.<\/p>\n<p>Denna metod f\u00f6r slumpm\u00e4ssighet \u00e4r livskraftig om \u00e5tminstone \u2154 av deltagarna \u00e4r online och f\u00f6ljer protokollet, och den \u00e4r opartisk och of\u00f6ruts\u00e4gbar s\u00e5 l\u00e4nge minst \u2153 av deltagarna f\u00f6ljer protokollet. Det \u00e4r viktigt att notera att en angripare som kontrollerar mer \u00e4n \u2153 men mindre \u00e4n \u2154 av deltagarna kan stoppa protokollet, men inte kan f\u00f6ruts\u00e4ga eller p\u00e5verka dess utfall.<\/p>\n<p>Tr\u00f6skelsignaturer i sig \u00e4r ett mycket intressant \u00e4mne. I den andra delen av artikeln kommer vi att utforska hur de fungerar, och hur deltagarnas nycklar ska genereras f\u00f6r att tr\u00f6skelsignaturer ska kunna anv\u00e4ndas som en generator av slumpm\u00e4ssiga nummer.<\/p>\n<h3>Avslutningsvis<\/h3>\n<p>Denna artikel \u00e4r den f\u00f6rsta i en serie tekniska artiklar i bloggen <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR \u00e4r ett blockchain-protokoll och en plattform f\u00f6r att utveckla decentraliserade applikationer med fokus p\u00e5 enkel utveckling och anv\u00e4ndarv\u00e4nlighet f\u00f6r slutanv\u00e4ndarna.<\/p>\n<p>Protokollets kod \u00e4r \u00f6ppen, v\u00e5r implementation \u00e4r skriven i Rust, och kan hittas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex>.<\/p>\n<p>Du kan se hur utvecklingen under NEAR ser ut och experimentera i en online-IDE <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">h\u00e4r<\/a><\/noindex>.<\/p>\n<p>H\u00e5ll koll p\u00e5 alla nyheter p\u00e5 ryska i <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">gruppen p\u00e5 Telegram<\/a><\/noindex> och i <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">gruppen p\u00e5 VKontakte<\/a><\/noindex>, och p\u00e5 engelska i den officiella <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitter<\/a><\/noindex>.<\/p>\n<p>Vi ses snart!<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-1\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47\u00c4r det m\u00f6jligt att generera slumpm\u00e4ssiga nummer om vi inte litar p\u00e5 varandra? Del 1 | ProHoster","description":"Hej, Habr! I den h\u00e4r artikeln kommer jag att ber\u00e4tta om generering av pseudo-slumptal bland deltagare som inte litar p\u00e5 varandra.","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/95468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=95468"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/95468\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/95469"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=95468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=95468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=95468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}