Tilviljunarkennd véfrétt byggð á stafrænni undirskrift í blockchain

Frá hugmynd til útfærslu: við breytum núverandi sporöskjulaga feril stafrænni undirskriftarkerfi þannig að það sé ákveðið, og byggt á því bjóðum við upp á aðgerðir til að fá gervi-handahófskenndar tölur sem hægt er að sannreyna innan blokkkeðjunnar.

Tilviljunarkennd véfrétt byggð á stafrænni undirskrift í blockchain

Hugmynd

Haustið 2018 var Waves blockchain með fyrstu snjallsamningarnir virkjaðir, vaknaði strax spurningin um möguleikann á að fá gervi-slembitölurþú getur treyst.

Ég furðaði mig á þessari spurningu og komst að lokum að þeirri niðurstöðu: hvaða blockchain sem er er fruma; það er ómögulegt að fá áreiðanlega uppsprettu óreiðu í lokuðu kerfi.

En mér líkaði samt ein hugmynd: ef tilviljunarkennd véfrétt mun undirrita notendagögn með ákveðinni reiknirit, þá mun notandinn alltaf geta sannreynt slíka undirskrift með því að nota opinbera lykilinn og vera viss um að gildið sem myndast sé einstakt. Véfrétturinn, sama hversu erfitt hún vill, getur ekki breytt neinu; reikniritið gefur ótvíræða niðurstöðu. Í meginatriðum skráir notandinn niðurstöðuna, en veit hana ekki fyrr en véfréttin birtir hana. Það kemur í ljós að þú getur alls ekki treyst véfréttinni, heldur athugaðu niðurstöðu vinnu hennar. Síðan, ef sannprófun hefur tekist, getur slík undirskrift talist uppspretta óreiðu fyrir gervi-handahófsnúmer.

Waves blockchain vettvangurinn notar undirskriftarkerfi EdDSA вариант Ed25519. Í þessu kerfi samanstendur undirskriftin af gildunum R og S, þar sem R er háð slembigildi, og S er reiknað út frá skilaboðunum sem verið er að skrifa undir, einkalyklinum og sömu slembitölu og R. Það kemur í ljós að það er engin einstök háð fyrir sama. Það eru margar gildar undirskriftir fyrir notendaskilaboð.

Augljóslega, í sinni hreinu mynd, er ekki hægt að nota slíka undirskrift sem uppsprettu gervi-handahófskenndra talna, þar sem hún er óákveðin og því auðvelt að vinna með hana af véfréttinni.

En eins og það kom í ljós er í raun hægt að gera það ákveðið.

Ég gerði mér miklar vonir um sannanlegt slembifall (VRF), en eftir að hafa kynnt mér vélbúnaðinn varð ég að hætta við þennan valmöguleika. Þrátt fyrir að VRF bjóði upp á ákveðna útgáfu af undirskriftinni og sönnun þess, þá er undarlegur staður í reikniritinu sem opnar svarthol til að meðhöndla véfréttinn. Nefnilega þegar reiknað er út gildi k (5.1. kafla) Notaður er einkalykill, sem er óþekktur fyrir notandann, sem þýðir að notandinn getur ekki sannreynt réttmæti útreikningsins á k, sem þýðir að véfrétturinn getur notað hvaða gildi sem það þarf á k og á sama tíma viðhaldið gagnagrunni yfir samsvörun af k og undirrituðum gögnum til að alltaf sé hægt að endurreikna rétta niðurstöðu frá sjónarhóli VRF . Ef þú sérð teikningu byggða á VRF án þess að birta einkalykilinn geturðu verið klár: gefið til kynna að þú þurfir annaðhvort að sýna lykilinn, eða útiloka hann frá útreikningi á k, þá mun einkalykillinn sjálfkrafa opinberast þegar fyrsta undirskriftin birtist . Almennt, eins og áður hefur komið fram, undarlegt kerfi fyrir handahófskennda véfrétt.

Eftir smá umhugsun og að fá stuðning staðbundinna greiningaraðila fæddist VECRO vinnuáætlunin.

VECRO er skammstöfun fyrir Verifiable Elliptic Curve Random Oracle, sem á rússnesku þýðir sannanlegt tilviljunarkennt véfrétt á sporöskjulaga ferlum.

Allt reyndist frekar einfalt; til að ná fram ákveðinni stefnu þarf að laga gildi R áður en skilaboðin sem á að undirrita birtast. Ef R er skuldbundið og er hluti af skilaboðunum sem verið er að undirrita, sem tryggir enn frekar að R sé skuldbundið í skilaboðunum sem verið er að undirrita, er gildi S ákveðið af skilaboðum notandans og því hægt að nota það sem heimild fyrir gervihandahófsnúmer.

Í slíku kerfi skiptir ekki máli hvernig R er fastur; þetta er áfram á ábyrgð véfréttarinnar. Mikilvægt er að S sé einstaklega ákvörðuð af notandanum, en gildi þess er óþekkt fyrr en véfréttin gefur það út. Allt sem við vildum!

Talandi um fast R, athugaðu það endurnýtt R þegar þú undirritar ýmis skilaboð sýnir það einkalykilinn í EdDSA kerfinu. Það verður afar mikilvægt fyrir eiganda véfréttarinnar að útiloka möguleikann á að endurnýta R til að undirrita mismunandi notendaskilaboð. Það er, með hvers kyns meðferð eða samráði mun véfrétturinn alltaf eiga á hættu að missa einkalykilinn sinn.

Alls verður véfrétturinn að veita notendum tvær aðgerðir: frumstilling, sem festir gildið R, og undirskrift, sem skilar gildinu S. Í þessu tilviki er parið R, S venjulegt sannanlegt undirskrift notendaskilaboða sem inniheldur fasta gildi R og handahófskennd notendagögn.

Það má halda því fram að þetta kerfi fyrir blockchain sé ekkert annað en venjulegt skuldbinda-útvíkka kerfi. Í meginatriðum, já, það er hún. En það eru nokkur blæbrigði. Í fyrsta lagi vinnur véfrétturinn alltaf með sama takkann í öllum aðgerðum, þetta er til dæmis þægilegt að nota í samningum. Í öðru lagi er hætta á að véfréttin tapi einkalyklinum ef hún hagar sér rangt, til dæmis leyfir véfrétturinn þér að gera sýnishorn af niðurstöðunni, þá er nóg að gera aðeins tvær prófanir til að finna út einkalykilinn og ná fullum aðgang að veskinu. Í þriðja lagi er undirskrift sem er náttúrulega sannreynanleg á blockchain og er uppspretta handahófs falleg.

Í sex mánuði kraumaði hugmyndin um framkvæmd í höfðinu á mér, þar til loksins hvatning birtist í formi styrk frá Waves Labs. Með stórum styrk fylgir mikil ábyrgð, svo verkefnið verður til staðar!

Framkvæmd

Svo, í þessu verkefni VECRO var innleitt á Waves blockchain í beiðni-viðbragðsham með því að nota flutningsviðskipti milli notandans og véfréttarinnar. Á sama tíma er forskrift sett upp á véfréttareikningnum sem stjórnar verkinu nákvæmlega í samræmi við rökfræðina sem lýst er hér að ofan. Oracle viðskipti eru staðfest og öll keðja notendasamskipta er endurheimt. Öll fjögur viðskiptin taka þátt í að sannreyna lokagildið; snjallsamningurinn bindur þau saman með ströngum sannprófunarþræði, athugar öll gildi skref fyrir skref og gefur ekkert pláss fyrir neina meðferð.

Enn og aftur til að leggja það til hliðar og gera það skýrara. Véfrétturinn virkar ekki bara samkvæmt fyrirhuguðu kerfi. Vinnu þess er algjörlega stjórnað á blockchain stigi af rótgrónu þétt með snjöllum samningi. Stígðu til vinstri og viðskiptin ganga einfaldlega ekki í gegn. Svo, ef viðskipti eru innifalin í blockchain, þarf notandinn ekki einu sinni að athuga neitt; hundruð nethnúta hafa þegar athugað allt fyrir hann.

Eins og er er einn VECRO í gangi á Waves mainnetinu (þú getur keyrt þitt eigið, það er ekki erfitt, bara kíktu á uppsetningardæmið). Núverandi kóði keyrir í PHP (on WavesKit, um hvaða Ég sagði þér það áðan).

Til að nota véfréttaþjónustuna verður þú að:

  • Festa R;
    • Sendu að minnsta kosti 0.005 bylgjur til Oracle alias init@vecr;
    • Fáðu R-kóðann í viðhengisreitnum við flutning á 1 R-vecr tákni frá véfréttinni til notandans;
  • Fáðu undirskrift;
    • Sendu að minnsta kosti 0.005 bylgjur til véfréttakallsins random@vecr, og VERÐUR einnig að gefa til kynna áður móttekinn R-kóða og viðbótarnotendagögn í viðhengisreitnum;
    • Fáðu S-kóðann í viðhengisreitnum við flutning á 1 S-vecr tákni frá véfréttinni til notandans;
  • Notaðu S-kóða sem uppsprettu gervi-handahófsnúmers.

Litbrigði núverandi útfærslu:

  • Bylgjur sem sendar eru til véfréttarinnar eru notaðar sem þóknun fyrir skilafærsluna til notandans, að hámarki 1 bylgjur;
  • R-kóði er samtenging bæti af „R“ stafnum og 32 bæta base58-kóðuðu R gildi;
  • R-kóði í viðhengi ætti að vera fyrst, notendagögn koma á eftir R-kóða;
  • S-kóði er samtenging bæti af stafnum 'S' og 32-bæta base58-kóðuðu gildi S;
  • S er afleiðing af modulo skiptingu, svo þú getur ekki notað S sem fulla 256 bita gervi-slembitölu (þessi tala getur talist að hámarki 252-bita gervi-slembitölu);
  • Einfaldasti kosturinn er að nota S-kóða kjötkássa sem gervi-handahófsnúmer.

Dæmi um móttöku S-kóða:

Frá tæknilegu sjónarhorni er véfréttin alveg tilbúin til vinnu, þú getur örugglega notað hana. Frá sjónarhóli notkunar meðalnotanda, þá er skortur á þægilegu grafísku viðmóti; þetta verður að bíða.

Ég mun vera fús til að svara spurningum og samþykkja athugasemdir, takk fyrir.

Heimild: www.habr.com

Bæta við athugasemd