{"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\/ro\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","title":{"rendered":"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a\" src=\"\/wp-content\/uploads\/2020\/10\/fc42fe5e99ce4412a0ce99eb63629a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Salut, Habr!<\/p>\n<p>\u00cen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">prima parte<\/a><\/noindex> \u00cen articolele noastre am discutat despre motivele pentru care ar putea fi necesar\u0103 generarea de numere aleatorii pentru participan\u021bii care nu se \u00eencred unul \u00een altul, ce cerin\u021be trebuie s\u0103 \u00eendeplineasc\u0103 astfel de generatoare de numere aleatorii \u0219i am examinat dou\u0103 abord\u0103ri pentru implementarea lor.<\/p>\n<p>\u00cen aceast\u0103 parte a articolului, vom explora \u00een detaliu o alt\u0103 abordare care utilizeaz\u0103 semn\u0103turi de prag.<\/p>\n<h3>Pu\u021bin despre criptografie<\/h3>\n<p>Pentru a \u00een\u021belege cum func\u021bioneaz\u0103 semn\u0103turile de prag, trebuie s\u0103 cunoa\u0219tem pu\u021bin\u0103 criptografie de baz\u0103. Vom folosi dou\u0103 concepte: scalari, sau pur \u0219i simplu numere, pe care le vom denumi cu litere mici (<em>x, y<\/em>) \u0219i puncte pe o curb\u0103 eliptic\u0103, pe care le vom denumi cu litere mari.<\/p>\n<p>Pentru a \u00een\u021belege principiile de baz\u0103 ale semn\u0103turilor de prag nu este necesar s\u0103 \u0219tim cum func\u021bioneaz\u0103 curbele eliptice, \u00een afar\u0103 de c\u00e2teva lucruri de baz\u0103:<\/p>\n<ol>\n<li>\n<p>Punctele pe o curb\u0103 eliptic\u0103 pot fi adunate \u0219i \u00eenmul\u021bite cu un scalar (\u00eenmul\u021birea cu un scalar o vom denumi ca <em>xG<\/em>, de\u0219i nota\u021bia <em>Gx<\/em> se folose\u0219te adesea \u00een literatur\u0103). Rezultatul adun\u0103rii \u0219i \u00eenmul\u021birii cu un scalar \u2014 este un punct pe o curb\u0103 eliptic\u0103.<\/p>\n<\/li>\n<li>\n<p>Cunoa\u0219terea doar a punctului <em>G<\/em> \u0219i a produsului s\u0103u cu scalarul <em>xG<\/em> nu permite calcularea <em>x<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>De asemenea, vom folosi conceptul de polinom <em>p(x)<\/em> de grad <em>k<\/em>-1. \u00cen special, vom folosi urm\u0103toarea proprietate a polinoamelor: dac\u0103 \u0219tim valoarea <em>p(x) <\/em>pentru orice <em>k <\/em>valorile distincte <em>x <\/em>(\u0219i nu avem nicio alt\u0103 informa\u021bie despre <em>p(x)<\/em>), putem calcula <em>p(x) <\/em>pentru orice alt <em>x<\/em>.<\/p>\n<p>Este interesant c\u0103, pentru orice polinom <em>p(x)<\/em> \u0219i pentru un anumit punct pe curb\u0103 <em>G<\/em>, cunosc\u00e2nd valoarea <em>p(x)G<\/em> pentru orice <em>k<\/em> a unor valori distincte <em>x<\/em>, se poate calcula, de asemenea, <em>p(x)G<\/em> pentru orice <em>x<\/em>.<\/p>\n<p>Aceast\u0103 informa\u021bie este suficient\u0103 pentru a ne aprofunda \u00een detaliile despre cum func\u021bioneaz\u0103 semn\u0103turile de prag \u0219i cum pot fi utilizate pentru a genera numere aleatorii.<\/p>\n<h3>Generator de numere aleatorii bazat pe semn\u0103turi de prag<\/h3>\n<p>S\u0103 presupunem c\u0103 <em>n<\/em> participan\u021bii doresc s\u0103 genereze un num\u0103r aleator, \u0219i dorim ca participarea oric\u0103ror <em>k<\/em> dintre ei s\u0103 fie suficient\u0103 pentru a genera num\u0103rul, dar ca atacatorii care controleaz\u0103 <em>k<\/em>-1 sau mai pu\u021bini participan\u021bi s\u0103 nu poat\u0103 prezice sau influen\u021ba num\u0103rul generat.<\/p>\n<p><img decoding=\"async\" alt=\"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a\" src=\"\/wp-content\/uploads\/2020\/10\/00d54b3b0ca237a1551cdbdc35688099.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>S\u0103 presupunem c\u0103 exist\u0103 un astfel de polinom <em>p(x)<\/em> de grad <em>k<\/em>-1, astfel \u00eenc\u00e2t primul participant s\u0103 \u0219tie <em>p(1)<\/em>, al doilea \u0219tie <em>p(2), <\/em>\u0219i a\u0219a mai departe (<em>n<\/em>-le \u0219tie <em>p(n)<\/em>). De asemenea, s\u0103 presupunem c\u0103, pentru un anumit punct definit anterior, <em>G<\/em> to\u021bi \u0219tiu <em>p(x)G <\/em>pentru toate valorile <em>x<\/em>. Vom numi <em>p(i)<\/em> \u201ecomponenta privat\u0103\u201d <em>i<\/em>-a participantului (deoarece doar <em>i<\/em>-ul participant \u0219tie care este), \u0219i <em>p(i)G<\/em> \u201ecomponenta public\u0103\u201d <em>i<\/em>-a participantului (deoarece to\u021bi participan\u021bii o cunosc). A\u0219a cum v\u0103 aminti\u021bi, cunoa\u0219terea <em>p(i)G <\/em>nu este suficient\u0103 pentru a restaura <em>p(i).<\/em><\/p>\n<p>Crearea unei astfel de polinoame astfel \u00eenc\u00e2t doar <em>i-<\/em>-ul participant \u0219i nimeni altcineva s\u0103 \u00ee\u0219i cunoasc\u0103 componenta privat\u0103 \u2013 aceasta este cea mai complex\u0103 \u0219i interesant\u0103 parte a protocolului, \u0219i o vom analiza mai jos. \u00centre timp, s\u0103 presupunem c\u0103 avem o astfel de polinom\u0103, \u0219i to\u021bi participan\u021bii \u00ee\u0219i cunosc componentele private.<\/p>\n<p>Cum putem folosi o astfel de polinom\u0103 pentru a genera un num\u0103r aleatoriu? Pentru \u00eenceput, avem nevoie de un \u0219ir care nu a fost folosit anterior ca intrare pentru generator. \u00cen cazul blockchain-ului, hash-ul ultimei blocuri <em>h<\/em> \u2014 un bun candidat pentru un astfel de \u0219ir. S\u0103 spunem c\u0103 participan\u021bii doresc s\u0103 creeze un num\u0103r aleatoriu, folosind <em>h <\/em>ca seed. Mai \u00eent\u00e2i, participan\u021bii transform\u0103 <em>h<\/em> \u00eentr-un punct pe curb\u0103 folosind orice func\u021bie predefinit\u0103:<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Apoi, fiecare participant <em>i<\/em> calculeaz\u0103 \u0219i public\u0103 <em>Hi = p(i)H, <\/em>ceea ce pot face, deoarece cunosc<em> p(i) \u0219i H. <\/em>Dezv\u0103luirea<em> H<\/em>i nu permite altor participan\u021bi s\u0103 restaureze componenta privat\u0103 <em>i<\/em>-ului participant, \u0219i de aceea un set de componente private poate fi folosit de la un bloc la altul. Astfel, algoritmul costisitor de creare a polinomului, descris mai jos, trebuie s\u0103 fie executat doar o singur\u0103 dat\u0103.<\/p>\n<p>C\u00e2nd <em>k<\/em> participan\u021bii au dezv\u0103luit <em>Hi = p(i)H, <\/em>to\u021bi pot calcula<em> H<\/em>x = <em>p(x)H<\/em> pentru to\u021bi <em>x<\/em> datorit\u0103 propriet\u0103\u021bii polinoamelor, pe care am discutat-o \u00een sec\u021biunea anterioar\u0103. \u00cen acest moment, to\u021bi participan\u021bii calculeaz\u0103 <em>H0 = p(0)H, <\/em>\u0219i acesta este num\u0103rul aleatoriu rezultat. Re\u021bine\u021bi c\u0103 nimeni nu \u0219tie<em> p(0), <\/em>\u0219i prin urmare, singura modalitate de a calcula<em> p(0)H \u2013 <\/em>este interpolarea<em> p(x)H, <\/em>ceea ce este posibil doar atunci c\u00e2nd<em> k <\/em>valorile<em> p(i)H <\/em>sunt cunoscute. Dezv\u0103luirea oric\u0103rei cantit\u0103\u021bi mai mici<em> p(i)H <\/em>nu ofer\u0103 nicio informa\u021bie despre<em> p(0)H.<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a\" src=\"\/wp-content\/uploads\/2020\/10\/a91219381018f90f73b0a92976c92c79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Generatorul de mai sus are toate propriet\u0103\u021bile pe care le dorim: atacatorii care controleaz\u0103 doar <em>k-<\/em>1 participan\u021bi, sau mai pu\u021bin, nu au nicio informa\u021bie \u0219i influen\u021b\u0103 asupra ie\u0219irii, \u00een timp ce oricare <em>k<\/em> participan\u021bi pot calcula num\u0103rul rezultat, iar orice submul\u021bime de <em>k<\/em> participan\u021bi va ajunge \u00eentotdeauna la acela\u0219i rezultat pentru acela\u0219i seed.<\/p>\n<p>Exist\u0103 o problem\u0103 pe care am evitat-o cu aten\u021bie mai sus. Pentru ca interpolarea s\u0103 func\u021bioneze, este important ca valoarea<em> H<\/em>i publicat\u0103 de fiecare participant <em>i<\/em> s\u0103 fie cu adev\u0103rat egal\u0103 cu <em>p(i)H.<\/em> Deoarece nimeni, \u00een afar\u0103 de <em>i<\/em>-ul participant nu \u0219tie <em>p(i), <\/em>nimeni \u00een afar\u0103 de <em>i-<\/em>participantul respectiv nu poate verifica dac\u0103 <em>Salut <\/em>a fost \u00eentr-adev\u0103r calculat corect, \u0219i f\u0103r\u0103 o dovad\u0103 criptografic\u0103 a corectitudinii<em> H<\/em>i un atacator poate publica orice valoare ca fiind <em>Salut, <\/em>\u0219i poate afecta aleatoriu rezultatul generatorului de numere aleatoare.<em>:<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a\" src=\"\/wp-content\/uploads\/2020\/10\/694a86666806c49edb6e44dd9ec26b0f.png\" style=\"display:block;margin: 0 auto;\" \/>Valori diferite H_1 trimise de primul participant duc la H_0 rezultant diferit.<\/p>\n<p>Exist\u0103 cel pu\u021bin dou\u0103 moduri de a dovedi corectitudinea<em> H<\/em>i, le vom examina dup\u0103 ce discut\u0103m despre generarea polinomului.<\/p>\n<h3>Generarea polinomului<\/h3>\n<p>\u00cen sec\u021biunea precedent\u0103 am presupus c\u0103 avem un astfel de polinom <em>p(x)<\/em> de grad <em>k<\/em>-1 pe care participantul <em>i<\/em> cunoa\u0219te, <em>p(i)<\/em>iar nimeni altcineva nu are nicio informa\u021bie despre aceast\u0103 valoare. \u00cen sec\u021biunea urm\u0103toare, va trebui de asemenea s\u0103 ne asigur\u0103m c\u0103 pentru un anumit punct predefinit <em>G<\/em> to\u021bi \u0219tiu <em>p(x)G <\/em>pentru to\u021bi<em> x<\/em>.<\/p>\n<p>\u00cen aceast\u0103 sec\u021biune vom presupune c\u0103 fiecare participant are local o cheie privat\u0103 <em>xi, <\/em>astfel \u00eenc\u00e2t cheia public\u0103 corespunz\u0103toare<em> X<\/em>i este cunoscut\u0103.<\/p>\n<p>Un protocol posibil de generare a polinomului este urm\u0103torul:<\/p>\n<p><img decoding=\"async\" alt=\"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a\" src=\"\/wp-content\/uploads\/2020\/10\/ccd8afbc3c88a7f5a03714aeb6593361.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ol>\n<li>\n<p>Fiecare participant <em>i<\/em> creaz\u0103 local un polinom aleator <em>pi(x) de grad k-1. <\/em>Ace\u0219tia apoi trimit fiec\u0103rui participant<em> j <\/em>valoarea<em> p<\/em>i(j), criptat cu cheia public\u0103 <em>Xj. <\/em>Astfel, doar<em> i-<\/em>j-l<em> <\/em>\u0219i<em> participant \u0219tie<\/em>j-l<em> <\/em>i(j). Participantul<em> p<\/em>de asemenea anun\u021b\u0103 public <em>i<\/em> pi(j)G <em>inclusiv. <\/em>pentru to\u021bi<em> j <\/em>de la<em> 1 <\/em>la<em> k <\/em>To\u021bi participan\u021bii folosesc un consens pentru a selecta<\/p>\n<\/li>\n<li>\n<p>participan\u021bii ale c\u0103ror polinoame vor fi utilizate. Deoarece unii participan\u021bi pot fi offline, nu putem a\u0219tepta ca to\u021bi<em> k <\/em>participan\u021bii s\u0103 publice polinoamele. Rezultatul acestui pas este un set<em> n <\/em>format din cel pu\u021bin<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>polinoame create \u00een pasul (1)<em> k <\/em>Participan\u021bii se asigur\u0103 c\u0103 valorile pe care le cunosc<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>i(j) corespund celor public anun\u021bate<em> p<\/em>pi(j)G. <em>Dup\u0103 acest pas, ar trebui s\u0103 r\u0103m\u00e2n\u0103 doar polinoame pentru care componentele private <\/em>calcul\u0103 componenta sa privat\u0103<em> <\/em><strong><em>Z <\/em><\/strong>p(j)<em> p<\/em>pi(j)G. <em>Dup\u0103 acest pas, ar trebui s\u0103 r\u0103m\u00e2n\u0103 doar polinoame pentru care componentele private<\/em><\/p>\n<\/li>\n<li>\n<p>Fiecare participant<em> j <\/em>ca sum\u0103<em> i(j) pentru to\u021bi. <\/em>Fiecare participant de asemenea calculeaz\u0103 toate valorile<em> p<\/em>pi(x)G pentru to\u021bi i <em>i<\/em> \u00een <strong><em>Z<\/em><\/strong>p(x) \u2013 <em>p(x)G <\/em>Fiecare participant de asemenea calculeaz\u0103 toate valorile <em>acesta este cu adev\u0103rat un polinom de grad <\/em>\u00een<em> <\/em><strong><em>Z<\/em><\/strong><em>.<\/em><\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a\" src=\"\/wp-content\/uploads\/2020\/10\/a7a92dba3b9de7a376c415fc6c330c46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Re\u021bine\u021bi c\u0103<em> k-1, <\/em>deoarece este suma indivizibilelor<em> i(x), fiecare dintre care este un polinom de grad <\/em>deoarece aceasta este suma separatelor<em> p<\/em>i(x), fiecare dintre ele fiind un polinom de grad <em>k<\/em>-1. Apoi, re\u021bine\u021bi c\u0103, \u00een timp ce fiecare participant <em>j<\/em> cunoa\u0219te, <em>p(j), <\/em>nu au nicio informa\u021bie despre <em>p(x)<\/em> pentru <em>x \u2260 j<\/em>. \u00centr-adev\u0103r, pentru a calcula aceast\u0103 valoare, trebuie s\u0103 cunoasc\u0103 toate <em>pi(x), <\/em>\u0219i at\u00e2t timp c\u00e2t participantul<em> j <\/em>nu \u0219tie cel pu\u021bin unul dintre polinoamele alese, nu au informa\u021bii suficiente despre<em> p(x).<\/em><\/p>\n<p>Aceasta este \u00eentreaga proces de generare a polinomului, care a fost necesar\u0103 \u00een sec\u021biunea precedent\u0103. Pa\u0219ii 1, 2 \u0219i 4 de mai sus au o implementare suficient de evident\u0103. Dar pasul 3 nu este at\u00e2t de trivial.<\/p>\n<p>Specifically, trebuie s\u0103 putem dovedi c\u0103 encrypt\u0103rile<em> p<\/em>i(j) corespund cu cele publicate. <em>Dup\u0103 acest pas, ar trebui s\u0103 r\u0103m\u00e2n\u0103 doar polinoame pentru care componentele private <\/em>Dac\u0103 nu putem dovedi acest lucru, un atacator<em> i <\/em>poate trimite gunoi \u00een loc de<em> p<\/em>i(j) participantului <em>j<\/em>, iar participantul <em>j <\/em>nu va putea ob\u021bine valoarea real\u0103 <em>pi(j), <\/em>\u0219i nu va putea calcula componenta sa privat\u0103.<em>.<\/em><\/p>\n<p>Exist\u0103 un protocol criptografic care permite generarea unui mesaj suplimentar<em> proof<\/em>i(j), astfel \u00eenc\u00e2t orice participant, av\u00e2nd o anumit\u0103 valoare <em>e, <\/em>\u0219i de asemenea<em> proofi(j) <\/em>\u0219i<em> p<\/em>i(j)G, poate verifica local c\u0103 <em>e<\/em> \u2013 este cu adev\u0103rat <em>pi(j), <\/em>criptat cu cheia participantului<em> j. <\/em>Din p\u0103cate, dimensiunea unei astfel de dovezi este incredibil de mare, iar av\u00e2nd \u00een vedere c\u0103 trebuie s\u0103 publice<em> O(nk) <\/em>astfel de dovezi, utilizarea lor \u00een acest scop nu va fi posibil\u0103.<\/p>\n<p>\u00cen loc s\u0103 dovedim c\u0103 <em>pi(j) <\/em>corespunde<em> p<\/em>i(j)G, putem \u00een protocolul de generare a polinomului s\u0103 aloc\u0103m un interval de timp foarte mare, \u00een timpul c\u0103ruia to\u021bi participan\u021bii verific\u0103 encrypt\u0103rile primite <em>pi(j), <\/em>\u0219i dac\u0103 mesajul decriptat nu corespunde publicului<em> p<\/em>i(j)G, ei public\u0103 o dovad\u0103 criptografic\u0103 c\u0103 mesajul encryptat pe care l-au primit este gre\u0219it. A dovedi c\u0103 mesajul <em>nu <\/em>corespunde <em>pi(G)<\/em> este mult mai simplu dec\u00e2t a dovedi c\u0103 acesta corespunde. Trebuie remarcat c\u0103 acest lucru necesit\u0103 ca fiecare participant s\u0103 apar\u0103 \u00een re\u021bea cel pu\u021bin o dat\u0103 \u00een timpul alocat pentru generarea acestor dovezi \u0219i se bazeaz\u0103 pe presupunerea c\u0103, dac\u0103 au publicat o astfel de dovad\u0103, aceasta va ajunge la to\u021bi ceilal\u021bi participan\u021bi \u00een acel timp acordat.<\/p>\n<p><img decoding=\"async\" alt=\"Putem genera numere aleatorii dac\u0103 nu ne \u00eencredin\u021b\u0103m unii altora? Partea a 2-a\" src=\"\/wp-content\/uploads\/2020\/10\/f7d92f18c75aa6161a9e3f1724b57426.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Dac\u0103 un participant nu a ap\u0103rut \u00een re\u021bea \u00een aceast\u0103 perioad\u0103 de timp, iar el avea cu adev\u0103rat cel pu\u021bin o component\u0103 incorect\u0103, atunci acest participant specific nu va putea participa la generarea ulterioar\u0103 a numerelor. Protocolul, \u00eens\u0103, va continua s\u0103 func\u021bioneze, dac\u0103 exist\u0103 m\u0103car <em>k<\/em> participan\u021bilor, care fie c\u0103 abia au primit componente corecte, fie c\u0103 au reu\u0219it s\u0103 lase dovada incorectitudinii la timp.<\/p>\n<h3>Dovada corectitudinii H_i<\/h3>\n<p>Ultima parte care trebuie discutat\u0103 este cum s\u0103 demonstr\u0103m corectitudinea celor publicate<em> H<\/em>i, \u0219i anume c\u0103 <em>Hi = p(i)H, <\/em>f\u0103r\u0103 dezv\u0103luire<em> p(i).<\/em><\/p>\n<p>S\u0103 ne amintim c\u0103 valorile<em> H, G, p(i)G <\/em>sunt publice \u0219i cunoscute de to\u021bi.<em> <\/em>Opera\u021bia de ob\u021binere<em> p(i) <\/em>cunoa\u0219terea<em> p(i)G <\/em>\u0219i<em> G <\/em>se nume\u0219te logaritm discret, sau<em> dlog, <\/em>\u0219i dorim s\u0103 demonstr\u0103m c\u0103:<\/p>\n<p><em>dlog(p(i)G, G) = dlog(H<\/em>i, <em>H<\/em>)<\/p>\n<p>f\u0103r\u0103 dezv\u0103luire <em>p(i)<\/em>. Exist\u0103 construc\u021bii pentru astfel de dovezi, de exemplu<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Protocolul Schnorr<\/u><\/a><\/noindex>.<\/p>\n<p>Cu o astfel de construc\u021bie, fiecare participant \u00eempreun\u0103 cu <em>Salut <\/em>trimite dovezi de corectitudine conform construc\u021biei.<\/p>\n<p>C\u00e2nd num\u0103rul aleatoriu este generat, adesea trebuie s\u0103 fie folosit de participan\u021bi diferi\u021bi de cei care l-au generat. Astfel, acestora \u00eempreun\u0103 cu num\u0103rul trebuie s\u0103 le fie trimise toate <em>Salut<\/em> \u0219i dovezile aferente.<\/p>\n<p>Cititorul curios s-ar putea \u00eentreba: av\u00e2nd \u00een vedere c\u0103 num\u0103rul aleatoriu final este<em> H<\/em>0, \u0219i <em>p(0)G \u2013 <\/em>aceasta este informa\u021bie public\u0103, de ce este necesar\u0103 dovada pentru fiecare individual<em> H<\/em>i, de ce s\u0103 nu trimitem \u00een loc dovada c\u0103<\/p>\n<p>dlog(<em>p(0)G, G) = dlog(H<\/em>0, <em>H<\/em>)<\/p>\n<p>Problema este c\u0103, prin Protocolul Schnorr, nu se poate crea o astfel de dovad\u0103, deoarece nimeni nu cunoa\u0219te valoarea <em>p(0)<\/em>, necesar\u0103 pentru a crea dovada, iar mai mult, \u00eentregul generator de numere aleatoare se bazeaz\u0103 pe faptul c\u0103 nimeni nu \u0219tie aceast\u0103 valoare. Prin urmare, este necesar s\u0103 avem toate valorile <em>Salut <\/em>\u0219i dovezile lor individuale pentru a demonstra corectitudinea<em> H<\/em>0.<\/p>\n<p>Cu toate acestea, dac\u0103 ar exista o opera\u021bie pe punctele de pe curbele eliptice care s\u0103 fie semantic asem\u0103n\u0103toare cu \u00eenmul\u021birea, dovada corectitudinii <em>H0 <\/em>ar fi trivial\u0103, am verifica pur \u0219i simplu c\u0103<\/p>\n<p><em>H<\/em>0 \u00d7 <em>G<\/em> = <em>p(0)G \u00d7 H<\/em><\/p>\n<p>Dac\u0103 curba aleas\u0103 sus\u021bine <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>\u00eemperecheri de curbe eliptice<\/u><\/a><\/noindex>, aceast\u0103 dovad\u0103 func\u021bioneaz\u0103. \u00cen acest caz<em> H<\/em>0 \u2013 este nu doar ie\u0219irea generatorului de numere aleatoare, pe care o poate verifica orice participant care \u0219tie <em>G, H<\/em> \u0219i <em>p(0)G. H<\/em>0 \u2013 este de asemenea o semn\u0103tur\u0103 pe un mesaj care a fost utilizat ca seed, confirm\u00e2nd c\u0103 <em>k<\/em> \u0219i <em>n <\/em>participan\u021bii au semnat acest mesaj. Astfel, dac\u0103 <em>seed \u2013 <\/em>este hash-ul blocului \u00een protocolul blockchain, atunci <em>H0<\/em> \u2013 este simultan o semn\u0103tur\u0103 multi-pe bloc, \u0219i un num\u0103r aleatoriu foarte bun.<\/p>\n<h4>\u00cen concluzie<\/h4>\n<p>Acest articol este parte dintr-o serie de articole tehnice pe blog <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR \u2013 este un protocol blockchain \u0219i o platform\u0103 pentru dezvoltarea aplica\u021biilor descentralizate, axat\u0103 pe simplitatea dezvolt\u0103rii \u0219i u\u0219urin\u021ba pentru utilizatorii finali.<\/p>\n<p>Codul protocolului este deschis, iar implementarea noastr\u0103 este scris\u0103 \u00een Rust, \u0219i poate fi g\u0103sit\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">aici<\/a><\/noindex>.<\/p>\n<p>Pute\u021bi vedea cum arat\u0103 dezvoltarea pe NEAR \u0219i experimenta \u00een online-IDE <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">aici<\/a><\/noindex>.<\/p>\n<p>Urm\u0103rii toate nout\u0103\u021bile \u00een limba rom\u00e2n\u0103 se poate \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">grup\u0103 pe Telegram<\/a><\/noindex> \u0219i \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">grup\u0103 pe VKontakte<\/a><\/noindex>, iar \u00een limba englez\u0103 \u00een oficialul <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">twitter.<\/a><\/noindex>.<\/p>\n<p>Pe cur\u00e2nd!<\/p>\n<p>Sursa: <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.2.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\/ro\/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.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Se pot genera numere aleatoare dac\u0103 nu ne \u00eencredem unii \u00een al\u021bii? Partea 2 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/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":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/95846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=95846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/95846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/95847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=95846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=95846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=95846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}