Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2

Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2

Tere, Habr!

V esimeses osas Artiklis arutasime, miks vĂ”ib olla vajalik genereerida juhuslikke numbreid osalejatele, kes ei usalda ĂŒksteist, millised nĂ”uded sellistele juhuslike arvu generaatoritele esitakse, ja vaatasime kaht lĂ€henemist nende rakendamiseks.

Selles artikli osas vaatame lĂ€hemalt veel ĂŒht lĂ€henemist, mis kasutab piirsigneeringuid.

Veidi krĂŒptograafiast

Kuna piirsigneeringute toimimise mĂ”istmiseks on vajalik pisut pĂ”hiteadmisi krĂŒptograafiast. Kasutame kahte kontseptsiooni: skalaare, ehk lihtsalt numbreid, mida tĂ€histame vĂ€ikeste tĂ€htedega (x, y) ja punkte elliptilisel kĂ”veral, mida tĂ€histame suurte tĂ€htedega.

Piirsigneeringute pÔhialuste mÔistmiseks pole vaja teada, kuidas elliptilised kÔverad töötavad, vÀlja arvatud mÔned pÔhiasjad:

  1. Elliptilise kÔvera punktide kokkulaskmine ja skalaari korrutamine on vÔimalik (skalaari korrutamist tÀhistame kui xG, kuigi notaatsioon Gx ka kasutatakse sageli ka kirjanduses). Skalaari liitmise ja korrutamise tulemus on punkt elliptilisel kÔveral.

  2. Teades ainult punkti G ja selle korrutist skalaari xG ei saa arvutada x.

Kasutame ka polĂŒnoomi kontseptsiooni p(x) aste k-1. EelkĂ”ige kasutame jĂ€rgmist polĂŒnoomide omadust: kui teame vÀÀrtust p(x) kĂ”igile k erinevatele x (ja meil pole rohkem teavet p(x)), saame arvutada p(x) kĂ”igile teistele x.

Huvitav, et iga polĂŒnoomi p(x) ja mingi punkt kĂ”veral G, teades vÀÀrtust p(x)G kĂ”igile k erinevate vÀÀrtuste x, saab samuti arvutada p(x)G kĂ”igil x.

Seda teavet piisab, et sĂŒveneda detailidesse, kuidas töötavad lĂ€ve allkirjad ja kuidas neid kasutada juhuslike arvude genereerimiseks.

LÀve allkirjad pÔhinev juhuslike arvude generaator

Oletame, et n osalejad soovivad genereerida juhuslikku arvu, ja me tahame, et ĂŒkskĂ”ik milline k nendest oleks piisav, et genereerida number, kuid et pahatahtlikud isikud, kes kontrollivad k-1 vĂ”i vĂ€hem osalejat, ei saa ennustada ega mĂ”jutada genereeritud numbrit.

Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2

Oletame, et selline polĂŒnoom eksisteerib p(x) aste k-1, mis esimene osaleja teab p(1), teine teab p(2), ja nii edasi (n-ne teab p(n)). Samuti oletame, et mĂ”nes eelnevalt mÀÀratud punktis G teavad kĂ”ik p(x)G kĂ”igi vÀÀrtuste x. Me nimetame p(i) “privaatseks komponendiks” i-ndast osalejast (sest ainult i-ne osaleja teab seda), ja p(i)G “avalikuks komponendiks” i-ndast osalejast (sest kĂ”ik osalejad teavad seda). Nagu te mĂ€letate, teadmine p(i)G ei ole piisav, et taastada p(i).

Sellise polĂŒnoomi loomine nii, et ainult i-ne osaleja ja keegi muu ei teaks oma privaatset komponenti – see on protokolli kĂ”ige keerulisem ja huvitavam osa, mida uurime allpool. Kui oletame, et selline polĂŒnoom meil on ja kĂ”ik osalejad teavad oma privaatseid komponente.

Kuidas me saame kasutada sellist polĂŒnoomi juhusliku numbri genereerimiseks? Esiteks vajame me mingit jĂ€rjekorda, mis ei ole varem kasutatud sisendina genereerijale. Bloochain’i puhul on viimase bloki hash h – hea kandidaat selliseks jĂ€rjekorraks. Oletame, et osalejad soovivad luua juhusliku numbri, kasutades h nĂ€iteks seemnena. Esmalt konverteerivad osalejad h punkt, kĂ”veral kasutades mis tahes eelnevalt mÀÀratud funktsiooni:

H = skalaariPunkt(h)

SeejĂ€rel arvutab iga osaleja i vĂ€lja ja avaldab Hi = p(i)H, mida nad saavad teha, sest nad teavad p(i) ja H. Paljastamine Hi ei luba teistel osalejatel taastada -nda osaleja privaatset komponenti, seega vĂ”ib ĂŒhte komplekti privaatsetest komponentidest kasutada plokist plokki. SeetĂ”ttu tuleb allpool kirjeldatud keerukat polĂŒnoomide loomise algoritmi tĂ€ita ainult ĂŒks kord. iosalejad paljastasid

Kui k kĂ”ik saavad arvutada Hi = p(i)H, x = Hp(x)H tĂ€nu polĂŒnoomide omadusele, millest me eelmisel jaosal rÀÀkisime. Sel hetkel arvutavad kĂ”ik osalejad kĂ”igile x H0 = p(0)H, ja see ongi tulemuseks olev juhuslik number. Pange tĂ€hele, et keegi ei tea p(0), ja seega on ainus viis arvutada p(0)H – see on interpoleerimine p(x)H, mis on vĂ”imalik ainult siis, kui vĂ€rtused k p(i)H on tuntud. Iga vĂ€iksema hulga paljastamine ei anna mingit teavet on tuntud. Iga vĂ€iksema hulga paljastamine p(0)H. p(0)H.

Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2

Ülaltoodud generaatoril on kĂ”ik omadused, mida me soovime: sĂ€ilitajad, kes kontrollivad ainult k-1 osalejat vĂ”i vĂ€hem, ei oma mingit teavet ega mĂ”ju vĂ€ljundile, samas kui igasugused k osalejad saavad arvutada tulemuse ning iga alamhulk k osalejad jĂ”uavad alati sama tulemusele sama algvÀÀrtuse puhul.

On ĂŒks probleem, mida me eelnevalt ettevaatlikult mööda vaatasime. Et interpoleerimine toimiks, on oluline, et vÀÀrtus Hi, mille iga osaleja avaldas, i oleks tĂ”epoolest vĂ”rdsed p(i)H. Kuna keegi peale i-nda osaleja ei tea p(i), ei saa keegi peale i--nda osaleja kinnitada, et Tere tĂ”epoolest arvutatakse Ă”igesti, ja ilma mingi krĂŒptograafilise tĂ”endita Ă”igsusest Hi, vĂ”iks kĂŒberkurjategija avaldada mĂ”nda vÀÀrtust kui Tere, ja juhuslikult mĂ”jutada juhusliku arvu generaatori vĂ€ljundit.:

Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2Erinevad H_1 vÀÀrtused, mille esimene osaleja saadab, viivad erinevate tulemuste H_0-ni.

On vĂ€hemalt kaks viisi tĂ”estada Hi korrektsust, vaatame neid hiljem, kui kĂ€sitleme polĂŒnoomi genereerimist.

PolĂŒnoomi genereerimine

Eelmises jaotises eeldasime, et meil on selline polĂŒnoom p(x) aste k-1, et osaleja i teab p(i), ja mitte keegi teine ei tea selle tĂ€henduse kohta mingit teavet. JĂ€rgmises lĂ”igus peame samuti tagama, et teatud eelnevalt mÀÀratletud punktile G kĂ”ik teavad p(x)G kĂ”igile x.

Selles osas eeldame, et igal osalejal on kohalikult mingi privaatvÔti xi, nii et vastav avalik vÔti on kÔigile tuntud Xi.

Üks vĂ”imalik polĂŒnoomi genereerimise protokoll on jĂ€rgmine:

Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2

  1. Iga osaleja i loob kohalikult suvalise polĂŒnoomi pi(x) astme k-1. SeejĂ€rel saadavad nad igaĂŒhele osalejale j vÀÀrtus pi(j), krĂŒpteerituna avaliku vĂ”tmega Xj. Nii teavad ainult i-j- ja osalejaidj- i(j). Osaleja pavalikult kuulutab samuti i pi(j)G kaasa arvatud. kĂ”igile j alates 1 kuni k KĂ”ik osalejad kasutavad teatud konsensust, et valida

  2. osalejad, kelle polĂŒnoome kasutatakse. Kuna mĂ”ned osalejad vĂ”ivad olla vĂ”rguĂŒhenduseta, ei saa me oodata, kuni kĂ”ik k osalejad avaldavad polĂŒnoome. Selle sammu tulemus on kogum n mille hulka kuulub vĂ€hemalt Z polĂŒnoome, mis loodi sammul (1) k Osalejad veenduvad, et neile tuntud vÀÀrtused.

  3. i(j) vastavad avalikult kuulutatud ppi(j)G. PĂ€rast seda sammu on PĂ€rast seda sammu on Z peavad jÀÀma ainult polĂŒnoomid, mille puhul on edastatud privaatsed ppi(j)G. PĂ€rast seda sammu on

  4. Iga osaleja j arvutab oma privaatkomponendi p(j) nagu summa pi(j) kĂ”igi jaoks i ĂŒhes Z. Iga osaleja arvutab ka kĂ”ik vÀÀrtused p(x)G nagu summa pi(x)G kĂ”igi i jaoks ĂŒhes Z.

Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2

Pange tĂ€hele, et p(x) – see on tĂ”epoolest polĂŒnoom astmest k-1, sest see on eraldi osade summa pi(x), millest igaĂŒks on polĂŒnoom astmest k-1. Siis, tĂ€helepanu, et kuigi igal osalejal on j teab p(j), ei ole neil mingit teavet p(x) kuna x ≠ j. TĂ”epoolest, et seda vÀÀrtust arvutada, peavad nad teadma kĂ”iki pi(x), ja seni, kuni osaleja j ei tea vĂ€hemalt ĂŒhte valitud polĂŒnoomi, ei ole neil piisavalt teavet p(x).

See on kogu polĂŒnoomi genereerimise protsess, mis oli vajalik eelnevates jaotistes. Sammud 1, 2 ja 4 on ĂŒsnagi ilmsed. Kuid samm 3 ei ole nii triviaalne.

Konkreetsemalt, peame suutma tĂ”estada, et krĂŒpteeritud pi(j) vastavad tĂ”eliselt avaldatud PĂ€rast seda sammu on Kui me ei saa seda tĂ”estada, vĂ”ib rĂŒndaja i saata prĂŒgi asemel pi(j) osalejale j, ja osaleja j ei saa tĂ”elist vÀÀrtust pi(j), ja ei saa arvutada oma privaatkomponenti.

On olemas krĂŒptograafiline protokoll, mis vĂ”imaldab luua tĂ€iendava sĂ”numi proofi(j), nii et iga osaleja, kellel on mingi vÀÀrtus e, ja samuti proofi(j) ja pi(j)G, vĂ”ib kohapeal veenduda, et e – see on tĂ”epoolest pi(j), osaleja vĂ”tmega krĂŒptitud j. Kahjuks on sellise tĂ”endi suurus uskumatult suur ja arvestades, et tuleb avaldada O(nk) selliseid tĂ”endeid, pole neid selle eesmĂ€rgi saavutamiseks vĂ”imalik kasutada.

Kohas, et tĂ”estada, et pi(j) vastab pi(j)G, saame polĂŒnoomi genereerimise protokollis eraldada vĂ€ga pika ajavahemiku, mille jooksul kĂ”ik osalejad kontrollivad saadud krĂŒptitud pi(j), ja kui dekrĂŒpteeritud sĂ”num ei vasta avalikule pi(j)G, siis avaldavad nad krĂŒptograafilise tĂ”endi, et saadud krĂŒptitud sĂ”num on vale. TĂ”estada, et sĂ”num ei vastab pi(G) kaugel lihtsam, kui tĂ”estada, et see vastab. Tuleb mĂ€rkida, et see nĂ”uab, et iga osaleja ilmuks vĂ”rku vĂ€hemalt korra ajavahemiku jooksul, mis on ette nĂ€htud selliste tĂ”endite esitamiseks, ja pĂ”hineb eeldusega, et kui nad avaldasid sellise tĂ”endi, saavutab see kĂ”ikidele teistele osalejatele sellel samal ajavahemikul.

Kas on vĂ”imalik genereerida juhuslikke numbreid, kui me ei usalda ĂŒksteist? Osa 2

Kui osaleja ei ilmu vĂ”rku selle ajavahemiku jooksul ja tal on tĂ”epoolest vĂ€hemalt ĂŒks vale komponent, siis ei saa see konkreetne osaleja osaleda edasises numbrite genereerimises. Protokoll töötab siiski jĂ€tkuvalt, kui on vĂ€hemalt k osalejat, kes on saanud ainult Ă”iged komponendid vĂ”i on suutnud jĂ€tta vale tĂ”endi ette nĂ€htud ajavahemiku jooksul.

H_i Ôiguse tÔendid

Viimane osa, mida on veel arutada, on see, kuidas tÔestada avaldatud Hi, nimelt et Hi = p(i)H, ilma avamiseta p(i).

KÀidame meeles, et vÀÀrtused H, G, p(i)G on avalikud ja kÔigile teada. Saamisel operatsioon p(i) teades p(i)G ja G nimetatakse diskrreetseks logaritmiks vÔi dlog, ja me tahame tÔestada, et:

dlog(p(i)G, G) = dlog(Hi, H)

ilma avaldamiseta p(i). TÔestuskonstruktsioonid selliste tÔendite jaoks eksisteerivad, nÀiteks Schnorr Protokoll.

Sellise konstruktsiooni korral saadab iga osaleja koos Tere tÔendi korrektsuse kohta vastavalt konstruktsioonile.

Kui juhuslik number on genereeritud, peavad osalejad sageli seda kasutama, erinevalt neist, kes selle genereerisid. Sellistele osalejatele tuleb koos numbriga saata kÔik Tere ja lisatÔendid.

Uudishimulik lugeja vĂ”ib kĂŒsida: kuna lĂ”plik juhuslik number on H0, ja p(0)G – see on avalik teave, miks on iga eraldi jaoks tĂ”end vajalik Hi, miks mitte saata tĂ”end, et

dlog(p(0)G, G) = dlog(H0, H)

Probleem on selles, et Schnorr Protokolliga ei saa sellist tĂ”endit luua, sest keegi ei tea vÀÀrtust p(0), mis on vajalik tĂ”endi loomiseks, ja veelgi enam, kogu juhuslikkuse generaator pĂ”hineb hĂŒpoteesil, et keegi ei tea seda vÀÀrtust. SeetĂ”ttu on vajalikud kĂ”ik vÀÀrtused Tere ja nende individuaalsed tĂ”endid, et tĂ”estada korrektsust. H0.

Kuid kui elliptiliste kÔverate punktidel oleks mingisugune tehe, mis on semantilises mÔttes sarnane korrutamisele, oleks tÔestamine triviaalne. H0 me lihtsalt veenduksime, et

H0 × G = p(0)G × H

Kui valitud kĂ”ver toetab elliptilisi kĂ”vera paaritusi, siis see tĂ”estus toimib. Sel juhul H0 ei ole mitte ainult juhuslike arvude generaatori vĂ€ljund, mida vĂ”ib kontrollida iga osaleja, kes teab G, H ja p(0)G. H0 on ka allkiri sĂ”numil, mis kasutati seemnena, kinnitades, et k ja n osalejad on selle sĂ”numi allkirjastanud. Seega, kui seeme – see on ploki hash plokiahelas, siis H0 – on see samal ajal mitme allkiri plokil ja vĂ€ga hea juhuslik number.

KokkuvÔtteks

See artikkel on osa tehniliste artiklite seeriast blogis NEAR. NEAR on plokiahela protokoll ja platvorm detsentraliseeritud rakenduste arendamiseks, millel on rÔhk arendamise lihtsusele ja lÔppkasutajate jaoks kasutamise lihtsusele.

Protokolli kood on avatud, meie teostus on kirjutatud Rustis, selle leiate siin.

Vaata, milline nÀeb vÀlja NEAR-i arendamine, ja katseta online-IDE-s. siit.

JÀlgi kÔiki uudiseid eesti keeles Telegrami grupis ja VKontakte grupis., aga inglise keeles ametlikul Twitteris.

Kohtumiseni!

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster