{"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\/da\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","title":{"rendered":"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2\" src=\"\/wp-content\/uploads\/2020\/10\/fc42fe5e99ce4412a0ce99eb63629a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hello, Habr!<\/p>\n<p>I <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">f\u00f8rste del<\/a><\/noindex> I artiklen diskuterede vi, hvorfor det kan v\u00e6re n\u00f8dvendigt at generere tilf\u00e6ldige tal for deltagere, der ikke stoler p\u00e5 hinanden, hvilke krav der stilles til s\u00e5danne tilf\u00e6ldige talgeneratorer, og vi gennemgik to tilgange til deres implementering.<\/p>\n<p>I denne del af artiklen vil vi se n\u00e6rmere p\u00e5 endnu en tilgang, der bruger t\u00e6rskelsignaturer.<\/p>\n<h3>Lidt kryptografi<\/h3>\n<p>For at forst\u00e5, hvordan t\u00e6rskelsignaturer fungerer, skal man have lidt grundl\u00e6ggende viden om kryptografi. Vi vil bruge to begreber: skal\u00e6rer, eller blot tal, som vi vil betegne med sm\u00e5 bogstaver (<em>x, y<\/em>) og punkter p\u00e5 den elliptiske kurve, som vi vil betegne med store bogstaver.<\/p>\n<p>For at forst\u00e5 grundlaget for t\u00e6rskelsignaturer er det ikke n\u00f8dvendigt at forst\u00e5, hvordan elliptiske kurver fungerer, bortset fra nogle grundl\u00e6ggende ting:<\/p>\n<ol>\n<li>\n<p>Punkter p\u00e5 en elliptisk kurve kan l\u00e6gges sammen og ganges med et skal\u00e6r (multiplikation med et skal\u00e6r vil vi betegne som <em>xG<\/em>, selvom notationen <em>Gx<\/em> bruges ogs\u00e5 ofte i litteraturen). Resultatet af addition og multiplikation med en skalar \u2014 er et punkt p\u00e5 en elliptisk kurve.<\/p>\n<\/li>\n<li>\n<p>At kende kun punktet <em>G<\/em> og dets produkt med skal\u00e6ren <em>xG<\/em> g\u00f8r det umuligt at beregne <em>x<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>Vi vil ogs\u00e5 bruge begrebet polynomium <em>p(x)<\/em> af graden <em>k<\/em>-1. Is\u00e6r vil vi bruge f\u00f8lgende egenskab ved polynomer: hvis vi kender v\u00e6rdien <em>p(x) <\/em>for enhver <em>k <\/em>forskellig <em>x <\/em>(og ikke har flere oplysninger om <em>p(x)<\/em>), kan vi beregne <em>p(x) <\/em>for enhver anden <em>x<\/em>.<\/p>\n<p>Det er interessant, at for ethvert polynomium <em>p(x)<\/em> og et bestemt punkt p\u00e5 kurven <em>G<\/em>, at kende v\u00e6rdien <em>p(x)G<\/em> for enhver <em>k<\/em> af forskellige v\u00e6rdier <em>x<\/em>, kan man ogs\u00e5 beregne <em>p(x)G<\/em> for enhver <em>x<\/em>.<\/p>\n<p>Denne information er tilstr\u00e6kkelig til at dykke ned i detaljerne om, hvordan t\u00e6rskelsignaturer fungerer, og hvordan de bruges til at generere tilf\u00e6ldige tal.<\/p>\n<h3>Tilf\u00e6ldig talgenerator baseret p\u00e5 t\u00e6rskelsignaturer<\/h3>\n<p>Lad os antage, at <em>n<\/em> deltagere \u00f8nsker at generere et tilf\u00e6ldigt tal, og vi \u00f8nsker, at deltagelsen fra enhver <em>k<\/em> af dem skal v\u00e6re tilstr\u00e6kkelig til at generere et tal, men at angribere, der kontrollerer <em>k<\/em>-1 eller f\u00e6rre deltagere, ikke kan forudsige eller p\u00e5virke det genererede tal.<\/p>\n<p><img decoding=\"async\" alt=\"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2\" src=\"\/wp-content\/uploads\/2020\/10\/00d54b3b0ca237a1551cdbdc35688099.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Lad os antage, at der findes et s\u00e5dant polynomium <em>p(x)<\/em> af graden <em>k<\/em>-1, s\u00e5 den f\u00f8rste deltager kender <em>p(1)<\/em>, den anden kender <em>p(2), <\/em>og s\u00e5 videre (<em>n<\/em>-ende kender <em>p(n)<\/em>). Det er ogs\u00e5 antaget, at for et bestemt forudbestemt punkt <em>G<\/em> ved alle ved <em>p(x)G <\/em>for alle v\u00e6rdier <em>x<\/em>. Vi vil kalde <em>p(i)<\/em> \u201cden private komponent\u201d <em>i<\/em>-de deltagers (fordi kun <em>i<\/em>-deltageren kender den), og <em>p(i)G<\/em> \u201cden offentlige komponent\u201d <em>i<\/em>-de deltagers (fordi alle deltagere kender den). Som du husker, er viden <em>p(i)G <\/em>ikke tilstr\u00e6kkeligt til at genskabe <em>p(i).<\/em><\/p>\n<p>At skabe et s\u00e5dant polynomium, s\u00e5 kun <em>i-<\/em>-deltageren og ingen andre kender sin private komponent \u2013 er den mest komplekse og interessante del af protokollen, og vi vil gennemg\u00e5 det nedenfor. Indtil videre antager vi, at vi har et s\u00e5dant polynomium, og at alle deltagere kender deres private komponenter.<\/p>\n<p>Hvordan kan vi bruge et s\u00e5dant polynomium til at generere et tilf\u00e6ldigt tal? F\u00f8rst skal vi have en streng, der ikke tidligere er brugt som input til generatoren. I tilf\u00e6lde af blockchain er hash af den seneste blok <em>h<\/em> \u2014 en god kandidat til en s\u00e5dan streng. Lad deltagerne \u00f8nske at skabe et tilf\u00e6ldigt tal ved at bruge <em>h <\/em>som seed. F\u00f8rst konverterer deltagerne <em>h<\/em> til et punkt p\u00e5 kurven ved hj\u00e6lp af en hvilken som helst forudbestemt funktion:<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Derefter beregner og offentligg\u00f8r hver deltager <em>i<\/em> Hi = p(i)H, <em>som de kan g\u00f8re, fordi de kender <\/em>p(i) og H.<em> Afsl\u00f8ring <\/em>H<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>-de deltagers, og derfor kan et s\u00e6t private komponenter bruges fra blok til blok. S\u00e5ledes skal den dyre algoritme til at skabe polynomet, der er beskrevet nedenfor, kun udf\u00f8res \u00e9n gang. <em>i<\/em>Deltagerne har afsl\u00f8ret<\/p>\n<p>N\u00e5r <em>k<\/em> alle kan beregne <em>som de kan g\u00f8re, fordi de kender <\/em>x =<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>p(x)H <em>for alle<\/em> takket v\u00e6re egenskaberne ved polynomer, som vi diskuterede i det foreg\u00e5ende afsnit. P\u00e5 dette tidspunkt beregner alle deltagere <em>x<\/em> H0 = p(0)H, <em>og dette er det resulterende tilf\u00e6ldige tal. Bem\u00e6rk, at ingen kender <\/em>p(0),<em> og derfor er den eneste m\u00e5de at beregne <\/em>p(0)H \u2013<em> at interpolere <\/em>p(x)H,<em> hvilket kun er muligt, n\u00e5r <\/em>v\u00e6rdierne<em> k <\/em>p(i)H<em> er kendt. Afsl\u00f8ring af ethvert mindre antal <\/em>giver ingen information om<em> er kendt. Afsl\u00f8ring af ethvert mindre antal <\/em>p(0)H.<em> Generatoren ovenfor har alle de egenskaber, vi \u00f8nsker: angribere, der kun kontrollerer<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2\" src=\"\/wp-content\/uploads\/2020\/10\/a91219381018f90f73b0a92976c92c79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>k- <em>-1 deltagere, eller f\u00e6rre, har ingen information og indflydelse p\u00e5 output, mens enhver<\/em>deltager kan beregne det resulterende tal, og ethvert delm\u00e6ngde af <em>k<\/em> deltagere kan. <em>k<\/em> Deltagerne vil altid n\u00e5 frem til det samme resultat for den samme seed.<\/p>\n<p>Der er \u00e9t problem, som vi forsigtigt har undg\u00e5et ovenfor. For at interpolationen fungerer, er det vigtigt, at v\u00e6rdien<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>i som hver deltager har offentliggjort <em>i<\/em> faktisk er lig med <em>p(i)H.<\/em> Da ingen andre end <em>i<\/em>den deltagende person ved <em>p(i), <\/em>kan ingen andre end <em>i-<\/em>den deltagende person bekr\u00e6fte, at <em>Hej <\/em>faktisk er blevet korrekt beregnet, og uden noget kryptografisk bevis for korrektheden<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>kan en angriber offentligg\u00f8re enhver v\u00e6rdi som <em>Hej, <\/em>og arbitr\u00e6rt p\u00e5virke output fra den tilf\u00e6ldige talgenerator.<em>:<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2\" src=\"\/wp-content\/uploads\/2020\/10\/694a86666806c49edb6e44dd9ec26b0f.png\" style=\"display:block;margin: 0 auto;\" \/>Forskellige v\u00e6rdier H_1, sendt af den f\u00f8rste deltager, f\u00f8rer til forskellige resulterende H_0.<\/p>\n<p>Der er mindst to m\u00e5der at bevise korrektheden p\u00e5<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>i, som vi vil se p\u00e5, efter vi har behandlet polynomiegenereringen.<\/p>\n<h3>Polynomiegenerering<\/h3>\n<p>I det tidligere afsnit antog vi, at vi har et s\u00e5dant polynomium <em>p(x)<\/em> af graden <em>k<\/em>-1 som den deltagende person <em>i<\/em> kender <em>p(i)<\/em>, og ingen andre har nogen information om denne v\u00e6rdi. I det n\u00e6ste afsnit vil vi ogs\u00e5 have brug for, at for et bestemt forudbestemt punkt <em>G<\/em> alle kender <em>p(x)G <\/em>takket v\u00e6re egenskaberne ved polynomer, som vi diskuterede i det foreg\u00e5ende afsnit. P\u00e5 dette tidspunkt beregner alle deltagere<em> x<\/em>.<\/p>\n<p>I dette afsnit antager vi, at hver deltager har lokalt en privat n\u00f8gle <em>xi, <\/em>s\u00e5dan at den tilsvarende offentlige n\u00f8gle<em> X<\/em>i er kendt af alle.<\/p>\n<p>En mulig protokol for polynomiegenerering er den f\u00f8lgende:<\/p>\n<p><img decoding=\"async\" alt=\"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2\" src=\"\/wp-content\/uploads\/2020\/10\/ccd8afbc3c88a7f5a03714aeb6593361.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ol>\n<li>\n<p>Hver deltager <em>i<\/em> lokalt opretter et vilk\u00e5rligt polynomium <em>pi(x) af graden k-1. <\/em>De sender derefter til hver deltager<em> j <\/em>v\u00e6rdien<em> p<\/em>i(j), krypteret med den offentlige n\u00f8gle <em>Xj. <\/em>S\u00e5ledes ved kun<em> i-<\/em>den<em> <\/em>og<em> j-<\/em>den<em> <\/em>deltager, hvad<em> p<\/em>i(j) er. Deltageren <em>i<\/em> annoncerer ogs\u00e5 offentligt <em>pi(j)G <\/em>takket v\u00e6re egenskaberne ved polynomer, som vi diskuterede i det foreg\u00e5ende afsnit. P\u00e5 dette tidspunkt beregner alle deltagere<em> j <\/em>fra<em> 1 <\/em>op til<em> k <\/em>inklusive.<\/p>\n<\/li>\n<li>\n<p>Alle deltagere bruger en form for konsensus til at v\u00e6lge<em> k <\/em>de deltagere, hvis polynomier vil blive brugt. Da nogle deltagere kan v\u00e6re offline, kan vi ikke vente, indtil alle<em> n <\/em>deltagere offentligg\u00f8r polynomier. Resultatet af dette trin \u2013 m\u00e6ngden<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>best\u00e5r af mindst<em> k <\/em>polynomier, der er oprettet i trin (1).<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>Deltagerne sikrer, at de kendte v\u00e6rdier<em> p<\/em>i(j) svarer til de offentligt annoncerede <em>pi(j)G. <\/em>Efter dette trin skal der kun v\u00e6re polynomier, for hvilke privat overf\u00f8rte<em> <\/em><strong><em>Z <\/em><\/strong>beregner deres private komponent<em> p<\/em>i(j) svarer til de offentligt annoncerede <em>pi(j)G.<\/em><\/p>\n<\/li>\n<li>\n<p>Hver deltager<em> j <\/em>p(j)<em> som summen <\/em>i(j) for alle<em> p<\/em>. Hver deltager beregner ogs\u00e5 alle v\u00e6rdier <em>i<\/em> i <strong><em>Z<\/em><\/strong>pi(x)G for alle i <em>p(x)G <\/em>i(j) for alle <em>p(x) \u2013 <\/em>i<em> <\/em><strong><em>Z<\/em><\/strong><em>.<\/em><\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2\" src=\"\/wp-content\/uploads\/2020\/10\/a7a92dba3b9de7a376c415fc6c330c46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Bem\u00e6rk venligst, at<em> det er faktisk et polynomium af graden <\/em>k-1.<em> k-1, <\/em>fordi det er summen af de individuelle<em> p<\/em>i(x), hvor hver enkelt er et polynomium af grad <em>k<\/em>-1. Bem\u00e6rk desuden, at mens hver deltager <em>j<\/em> kender <em>p(j), <\/em>de har ingen information om <em>p(x)<\/em> for <em>x \u2260 j<\/em>. Faktisk, for at beregne denne v\u00e6rdi, skal de vide alt om <em>pi(x), <\/em>og s\u00e5 l\u00e6nge deltageren<em> j <\/em>ikke kender mindst et af de valgte polynomer, har de ikke tilstr\u00e6kkelig information om<em> p(x).<\/em><\/p>\n<p>Dette er hele processen til at generere polynomet, som var n\u00f8dvendig i det foreg\u00e5ende afsnit. Trin 1, 2 og 4 ovenfor har en ret \u00e5benlys implementation. Men trin 3 er ikke s\u00e5 trivielt.<\/p>\n<p>Specifikt skal vi v\u00e6re i stand til at bevise, at de krypterede<em> p<\/em>i(j) virkelig svarer til de offentliggjorte <em>pi(j)G. <\/em>Hvis vi ikke kan bevise det, kan en angriber<em> i <\/em>sender affald i stedet for<em> p<\/em>i(j) til deltageren <em>j<\/em>, og deltageren <em>j <\/em>vil ikke kunne f\u00e5 den rigtige v\u00e6rdi <em>pi(j), <\/em>og vil ikke kunne beregne sin private komponent<em>.<\/em><\/p>\n<p>Der er en kryptografisk protokol, der g\u00f8r det muligt at skabe en yderligere besked<em> proof<\/em>i(j), s\u00e5dan at enhver deltager, der har en vis v\u00e6rdi <em>e, <\/em>samt<em> proofi(j) <\/em>og<em> p<\/em>i(j)G, kan lokalt sikre, at <em>e<\/em> \u2013 det er faktisk <em>pi(j), <\/em>krypteret med deltagerens n\u00f8gle<em> j. <\/em>Desv\u00e6rre er st\u00f8rrelsen af en s\u00e5dan bevis utrolig stor, og idet der skal offentligg\u00f8res<em> O(nk) <\/em>s\u00e5danne beviser, kan de ikke bruges til dette form\u00e5l.<\/p>\n<p>I stedet for at bevise, at <em>pi(j) <\/em>svarer til<em> p<\/em>i(j)G kan vi i protokollen til generering af polynomiet afs\u00e6tte en meget lang periode, hvor alle deltagere kontrollerer de modtagne krypterede <em>pi(j), <\/em>og hvis den dekrypterede besked ikke svarer til det offentlige<em> p<\/em>i(j)G, offentligg\u00f8r de et kryptografisk bevis for, at den krypterede besked, de har modtaget, er forkert. At bevise, at beskeden <em>ikke <\/em>svarer til <em>pi(G)<\/em> er meget lettere end at bevise, at den svarer til. Det skal bem\u00e6rkes, at dette kr\u00e6ver, at hver deltager dukker op p\u00e5 netv\u00e6rket mindst \u00e9n gang i den tid, der er afsat til at skabe s\u00e5danne beviser, og det antages, at hvis de har offentliggjort et s\u00e5dant bevis, n\u00e5r det n\u00e5r alle andre deltagere inden for den samme afsatte tid.<\/p>\n<p><img decoding=\"async\" alt=\"Kan man generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2\" src=\"\/wp-content\/uploads\/2020\/10\/f7d92f18c75aa6161a9e3f1724b57426.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hvis en deltager ikke er online i denne periode, og de faktisk har haft mindst \u00e9t forkert komponent, s\u00e5 vil denne specifikke deltager ikke kunne deltage i den videre generering af tal. Protokollen vil dog stadig fungere, hvis der er mindst <em>k<\/em> deltagere, der enten kun har f\u00e5et korrekte komponenter, eller som har form\u00e5et at efterlade bevis for ukorrekthed inden for den tildelte tid.<\/p>\n<h3>Beviser for korrekthed H_i<\/h3>\n<p>Den sidste del, vi mangler at diskutere, er, hvordan man beviser korrektheden af de offentliggjorte<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>i, nemlig at <em>som de kan g\u00f8re, fordi de kender <\/em>uden afsl\u00f8ring<em> p(i).<\/em><\/p>\n<p>Lad os huske, at v\u00e6rdierne<em> H, G, p(i)G <\/em>er offentlige og kendt af alle.<em> <\/em>Operationen til at f\u00e5<em> p(i) <\/em>kendt som<em> p(i)G <\/em>og<em> G <\/em>diskret logarithme, eller<em> dlog, <\/em>og vi \u00f8nsker at bevise, at:<\/p>\n<p><em>dlog(p(i)G, G) = dlog(H<\/em>i, <em>i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>)<\/p>\n<p>uden afsl\u00f8ring <em>p(i)<\/em>. Konstruktioner til s\u00e5danne beviser eksisterer, for eksempel<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Schnorr Protokol<\/u><\/a><\/noindex>.<\/p>\n<p>Med en s\u00e5dan konstruktion, sender hver deltager sammen med <em>Hej <\/em>beviset for korrekthed i henhold til konstruktionen.<\/p>\n<p>N\u00e5r et tilf\u00e6ldigt tal er genereret, er det ofte n\u00f8dvendigt, at deltagerne, der er forskellige fra dem, der genererede det, ogs\u00e5 skal bruge det. S\u00e5danne deltagere skal modtage alle <em>Hej<\/em> og tilknyttede beviser sammen med tallet.<\/p>\n<p>Den nysgerrige l\u00e6ser kan sp\u00f8rge: da det endelige tilf\u00e6ldige tal er<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>0, og <em>p(0)G - <\/em>er offentlige oplysninger, hvorfor er der behov for et bevis for hver enkelt<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>i, hvorfor i stedet ikke sende et bevis for at<\/p>\n<p>dlog(<em>p(0)G, G) = dlog(H<\/em>0, <em>i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>)<\/p>\n<p>Problemet er, at det ikke er muligt at oprette et s\u00e5dant bevis med Schnorr Protokol, fordi ingen kender v\u00e6rdien <em>p(0)<\/em>, n\u00f8dvendig for at oprette beviset, og desuden er hele generatoren af tilf\u00e6ldige tal baseret p\u00e5, at ingen kender denne v\u00e6rdi. Derfor er det n\u00f8dvendigt at have alle v\u00e6rdier <em>Hej <\/em>og deres individuelle beviser for at bevise korrektheden.<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>0.<\/p>\n<p>Men hvis der var en eller anden operation ved punkterne p\u00e5 elliptiske kurver, som er semantisk lig med multiplikation, ville beviset for korrektheden <em>H0 <\/em>v\u00e6re trivielt, vi ville blot sikre os, at<\/p>\n<p><em>i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>0 \u00d7 <em>G<\/em> = <em>p(0)G \u00d7 H<\/em><\/p>\n<p>Hvis den valgte kurve underst\u00f8tter <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>elliptic curve pairings<\/u><\/a><\/noindex>, fungerer et s\u00e5dant bevis. I dette tilf\u00e6lde<em> i giver ikke andre deltagere mulighed for at genskabe den private komponent<\/em>0 - er ikke blot output fra generatoren af tilf\u00e6ldige tal, som enhver deltager, der kender <em>G, H<\/em> og <em>p(0)G. H<\/em>0 \u2013 dette er ogs\u00e5 en signatur p\u00e5 beskeden, der blev brugt som seed, der bekr\u00e6fter, at <em>k<\/em> og <em>n <\/em>deltagerne har underskrevet denne besked. Dermed, hvis <em>seed \u2013 <\/em>er en hash af blokken i blockchain-protokollen, s\u00e5 <em>H0<\/em> er det samtidig en multi-signatur p\u00e5 blokken og et meget godt tilf\u00e6ldigt tal.<\/p>\n<h4>Afslutningsvis<\/h4>\n<p>Denne artikel er en del af en serie tekniske artikler p\u00e5 bloggen <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR er en blockchain-protokol og platform til udvikling af decentraliserede applikationer med fokus p\u00e5 enkelhed i udviklingen og brugervenlighed for slutbrugerne.<\/p>\n<p>Protokolens kode er \u00e5ben, vores implementering er skrevet i Rust, og den kan findes <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">her<\/a><\/noindex>.<\/p>\n<p>Du kan se, hvordan udviklingen under NEAR ser ud, og eksperimentere i online-IDE'en. <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">her<\/a><\/noindex>.<\/p>\n<p>Hold dig opdateret med alle nyheder p\u00e5 russisk i <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">gruppen i Telegram.<\/a><\/noindex> og i <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">gruppen p\u00e5 VKontakte,<\/a><\/noindex>mens du kan finde nyheder p\u00e5 engelsk i det officielle <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitter.<\/a><\/noindex>.<\/p>\n<p>Vi ses snart!<\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Kan vi generere tilf\u00e6ldige tal, hvis vi ikke stoler p\u00e5 hinanden? Del 2 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/95846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=95846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/95846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/95847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=95846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=95846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=95846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}