Oracle Random li ser bingeha îmzeya dîjîtal a di zincîra blokê de ye

Ji ramanê heya pêkanînê: em nexşeya îmzeya dîjîtal a elîptîkî ya heyî diguhezînin da ku ew diyarker be, û li ser bingeha wê em fonksiyonên ji bo bidestxistina hejmarên pseudo-random ên ku di hundurê zincîra blokê de têne verast kirin peyda dikin.

Oracle Random li ser bingeha îmzeya dîjîtal a di zincîra blokê de ye

Idea

Di payîza 2018-an de, bloka Waves tê de ye yekem peymanên biaqil aktîf kirin, pirs yekser li ser îmkana bidestxistina rabû hejmarên pseudorandomku hûn dikarin bawer bikin.

Li ser vê pirsê matmayî ma, ez di dawiyê de gihîştim encamê: her blokek şaneyek e; ne gengaz e ku meriv di pergalek girtî de çavkaniyek pêbawer a entropiyê bidest bixe.

Lê dîsa jî min ji ramanek hez kir: heke oracle random Dê daneyên bikarhêner bi algorîtmayek diyarker îmze bike, wê hingê bikarhêner dê her gav bikaribe bi karanîna mifteya gelemperî îmzeyek weha verast bike, û dê piştrast be ku nirxa encam yekta ye. Orakûl, çiqas bixwaze jî, nikare tiştekî biguherîne; algorîtm encamek nezelal derdixe. Di bingeh de, bikarhêner encamê tomar dike, lê heya ku oracle wê belav neke wê nizane. Derket holê ku hûn nekarin qet bi oracle bawer bikin, lê encama xebata wê kontrol bikin. Dûv re, di bûyera verastkirina serketî de, îmzeyek weha dikare ji bo hejmareke pseudorandom wekî çavkaniyek entropiyê were hesibandin.

Platforma bloka Waves nexşeyek îmzeyê bikar tîne EdDSA dibe Ed25519. Di vê planê de, îmze ji nirxên R û S pêk tê, ku R bi nirxek rasthatî ve girêdayî ye, û S li ser bingeha peyama ku tê îmze kirin, mifteya taybet û heman hejmara rasthatî ya R tê hesibandin. Derket holê ku ji bo heman ve girêdayîbûna yekta tune Ji bo peyamek bikarhêner gelek îmzeyên derbasdar hene.

Eşkere ye, di forma xweya paqij de, îmzeyek weha nikare wekî çavkaniyek hejmarên pseudo-random were bikar anîn, ji ber ku ew ne diyarker e û, ji ber vê yekê, dikare bi hêsanî ji hêla oracle ve were manîpule kirin.

Lê, wekî ku derket holê, bi rastî gengaz e ku meriv wê diyarker bike.

Hêviyên min ên mezin hebûn fonksiyona rasthatî ya verastkirî (VRF), lê piştî xwendina hardware, min neçar ma ku dev ji vê vebijarkê berdim. Her çend VRF guhertoyek diyarker a îmzeyê û îsbata wê pêşkêşî dike jî, di algorîtmayê de cîhek ecêb heye ku ji bo manîpulekirina orakûlê qulikek reş vedike. Ango, dema ku nirxa k (beşa 5.1) mifteyek taybet tê bikar anîn, ku ji bikarhêner re nenas dimîne, ku tê vê wateyê ku bikarhêner nikare rastbûna hesabê k-yê verast bike, ku tê vê wateyê ku oracle dikare her nirxa k-ya ku hewce dike bikar bîne û di heman demê de databasek pêwendiyan biparêze. ji k û daneyên îmzekirî ji bo ku hûn her gav bikarin ji nuqteya VRF-ê ve encama rast ji nû ve hesab bikin. Ger hûn nexşeyek li ser bingeha VRF-ê bêyî eşkerekirina mifteya taybet bibînin, hûn dikarin biaqil bin: hewcedariya eşkerekirina mifteyê destnîşan bikin, an jî wê ji hesabkirina k-yê dûr bixe, wê hingê gava ku îmzeya yekem xuya bibe mifteya taybet dê bixwe xwe eşkere bike. . Bi gelemperî, wekî ku berê jî behs kir, nexşeyek xerîb ji bo şîretek random.

Piştî ramanek piçûk û wergirtina piştgiriya analîstên herêmî, pilana xebata VECRO çêbû.

VECRO kurtenivîsa Random Oracle ya Rasthatî ya Elliptîk e, ku bi rûsî tê maneya orakula rasthatî ya verastkirî ya li ser kemerên eliptîk.

Her tişt pir hêsan derketiye holê; ji bo bidestxistina determînîzmê, hûn hewce ne ku nirxa R-yê rast bikin berî ku peyama ku were îmzekirin xuya bibe. Ger R bête kirin û beşek ji peyama ku tê imze kirin be, ev jî piştrast dike ku R di peyama ku tê imze kirin de ye, nirxa S-yê yekta ji hêla peyama bikarhêner ve tê destnîşankirin û ji ber vê yekê dikare wekî çavkaniyek ji bo hejmarên pseudorandom were bikar anîn.

Di nexşeyek weha de, ne girîng e ku R çawa were sabît kirin; ev berpirsiyariya oracle dimîne. Girîng e ku S bi taybetî ji hêla bikarhêner ve were destnîşankirin, lê nirxa wê nayê zanîn heya ku oracle wê çap neke. Her tiştê ku me dixwest!

Axaftina R-ya rastkirî, bala xwe bidin ku ji nû ve bikar anîn R dema ku peyamên cihêreng îmze dike, ew bi rengek yekane mifteya taybet a di nexşeya EdDSA de eşkere dike. Ji bo xwediyê oracle pir girîng dibe ku îmkana ji nû ve karanîna R-yê ji bo îmzekirina peyamên bikarhêner ên cihêreng ji holê rake. Ango, bi her manîpulasyon an lihevkirinek re, oracle dê her gav xetereya windakirina mifteya xweya taybet hebe.

Bi tevahî, oracle divê du fonksiyonan ji bikarhêneran re peyda bike: destpêkkirin, ku nirxa R rast dike, û îmzekirin, ku nirxa S vedigerîne. Di vê rewşê de, cotê R, S nîşana asayî ya verastkirî ya peyamek bikarhêner e ku tê de nirxek sabît heye. nirxa R û daneyên bikarhênerê keyfî.

Dikare were nîqaş kirin ku ev pilana ji bo zincîra blokê ji asayî pêve ne tiştek din e plana commit-berfirehkirinê. Di bingeh de, erê, ew ew e. Lê çend nuans hene. Ya yekem, oracle her gav di hemî operasyonan de bi heman mifteyê dixebite, mînakî, ev ji bo karanîna di peymanan de hêsan e. Ya duyemîn, metirsiyek heye ku oracle mifteya taybet winda bike heke ew xelet tevbigere, mînakî, oracle destûrê dide we ku hûn nimûneyên encamê çêbikin, wê hingê bes e ku hûn tenê du ceribandinan bikin da ku mifteya taybet bibînin û tam bistînin. gihîştina berîka. Ya sêyemîn, îmzeyek ku bi xwezayî li ser zincîra blokê verastkirî ye û çavkaniyek rasthatiniyê ye, xweş e.

Şeş mehan fikra pêkanînê di serê min de dişewite, heya ku di dawiyê de motîvasyon di formê de xuya bû alîkarî ji Waves Labs. Bi bexşeyek mezin berpirsiyariyek mezin tê, ku tê vê wateyê ku proje dê li wir be!

Реализация

Ji ber vê yekê, di vê projeyê de VECRO hate pêkanîn li ser bloka Waves di moda daxwaz-bersiv de bi karanîna danûstandinên veguheztinê di navbera bikarhêner û oracle de. Di heman demê de, skrîptek li ser hesabê oracle tê saz kirin, ku li gorî mantiqa ku li jor hatî destnîşan kirin, xebatê bi hişkî kontrol dike. Danûstandinên Oracle têne verast kirin û tevahiya zincîra danûstendina bikarhêner tê sererast kirin. Her çar danûstendin di verastkirina nirxa paşîn de têkildar in; peymana biaqil wan bi xêzek verastkirinê ya hişk li hev dicivîne, gav bi gav hemî nirxan kontrol dike û ji ti manîpulasyonê re cîh nahêle.

Careke din, da ku wê bidin aliyekî û zelaltir bikin. Oracle ne tenê li gorî nexşeya pêşniyarkirî dixebite. Karê wê bi tevahî di asta blokê de ji hêla sazkirî ve tê kontrol kirin tightly bi peymaneke jîr. Biçe çepê û danûstendin bi hêsanî derbas nabe. Ji ber vê yekê, ger danûstendinek di zincîra blokê de hebe, bikarhêner ne hewce ye ku tiştek kontrol bike; bi sedan girêkên torê berê her tiştî ji bo wî kontrol kirine.

Heya nuha, yek VECRO heye ku li ser tora sereke ya Waves-ê dixebite (hûn dikarin xweya xwe bimeşînin, ew ne dijwar e, tenê li mînaka veavakirinê binêre). Koda heyî di PHP de (li ser WavesKit, li ser ku Min berê ji te re got).

Ji bo ku hûn karûbarê oracle bikar bînin, divê hûn:

  • Rast bikin R;
    • Bi kêmanî 0.005 Pêlan bişînin oracle alias init@vecr;
    • Di veguheztina 1 nîşanek R-vecr ji oracle ji bikarhêner re koda R-ya di qada pêvekirinê de bistînin;
  • Îmzeyê bistînin;
    • Herî kêm 0.005 Pêlan ji oracle bi navê random@vecr re bişînin, û di heman demê de DIVÊ R-koda ku berê hatî standin û daneyên bikarhêner ên zêde di qada pêvekê de destnîşan bikin;
    • Di veguheztina 1 nîşanek S-vecr de ji oracle ji bikarhêner re, koda S-yê di qada pêvekirinê de bistînin;
  • S-kodê wekî çavkaniya jimareya pseudo-random bikar bînin.

Nîşaneyên pêkanîna heyî:

  • Pêlên ku ji oracle re têne şandin wekî komîsyonek ji bo danûstendina vegerê ji bikarhêner re têne bikar anîn, heya herî zêde 1 Waves;
  • R-kod hevgirtina baytek karaktera 'R' û nirxek R-ya bingehîn32-şifkirî ya 58-byte ye;
  • R-koda di pêvekê de divê yekem be, daneyên bikarhêner piştî R-kodê tê;
  • S-kod hevgirtina baytek karaktera 'S' û nirxek 32-byte-base58-kodkirî ya S-yê ye;
  • S encama dabeşkirina modulo ye, ji ber vê yekê hûn nikanin S-yê wekî jimareyek pseudorandom a tam 256-bit bikar bînin (ev hejmar dikare herî zêde jimareyek pseudorandom 252-bit were hesibandin);
  • Vebijarka herî hêsan ev e ku meriv hashê S-kodê wekî jimarek pseudo-random bikar bîne.

Mînaka wergirtina S-kodê:

Ji hêla teknîkî ve, oracle bi tevahî ji bo xebatê amade ye, hûn dikarin bi ewlehî bikar bînin. Ji xala karanîna ji hêla bikarhênerê navîn ve, kêmbûna navgînek grafîkî ya hêsan heye; ev ê pêdivî be ku li bendê bimîne.

Ez ê kêfxweş bibim ku bersiva pirsan bidim û şîroveyan qebûl bikim, spas.

Source: www.habr.com

Add a comment