Ideest reaalsuseni: muuda olemasolevat digitaalset allkirjastamise skeemi elliptilisel kÔveral, et see oleks mÀÀratletud, ning pakume selle alusel funktsioone usaldusvÀÀrsete plokiahela raames genereeritud pseudojuhtumiste arvude hankimiseks.

Idee
2018. aasta sĂŒgisel aktiveeriti Waves'i plokiahas , kohe kerkis kĂŒsimus, kas on vĂ”imalik saada , millele saab usaldada.
MĂ”eldes selle kĂŒsimuse ĂŒle, jĂ”udsin lĂ”puks jĂ€reldusele: iga plokiahel on rakk, usaldusvÀÀrse entropia allika saamine suletud sĂŒsteemis on vĂ”imatu.
Aga ĂŒks idee meeldis mulle siiski: kui allkirjastab kasutajaandmed mÀÀratletud algoritmiga, siis saab kasutaja alati kontrollida sellist allkirja avaliku vĂ”tme kaudu ja on kindel, et saadud vÀÀrtus on ainulaadne. Oraakel ei suuda midagi muuta, algoritm annab ĂŒheselt mĂ”istetava tulemuse. Sisuliselt kinnitab kasutaja tulemuse, kuid ei tea seda kuni oraakel selle avalikustab. Selgub, et oraakel ei pruugi ĂŒldse olla usaldusvÀÀrne, kuid saab kontrollida selle töö tulemust. Seega, edu korral sellise kontrollimise juures vĂ”ib sellist allkirja pidada usaldusvÀÀrseks entropia allikaks pseudojuhtumiste arvu jaoks.
Waves'i plokiahelas kasutatakse allkirjastamise skeemi variant . Antud skeemis koosneb allkiri R ja S vÀÀrtustest, kus R sĂ”ltub juhuslikust vÀÀrtusest ja S arvutatakse allkirjastatava sĂ”numi, privaatvĂ”tme ja sama juhusliku arvu pĂ”hjal, mis on R. Selgub, et ĂŒheselt mÀÀratletud sĂ”ltuvust ei ole, sama kasutaja sĂ”numi puhul eksisteerib mitu kehtivat allkirja.
On ilmselge, et puhtal kujul ei saa sellist allkirja kasutada pseudojuhtumiste arvu allikana, kuna see on mÀÀratlemata ja seega vÔib see olla hÔlpsasti oraakli manipulatsioonide objektiks.
Aga nagu selgus, on vÔimalik muuta see tegelikult mÀÀratletuks.
Mul olid suured lootused , kuid pĂ€rast materjali pĂ”hjalikku uurimist pidin sellest variandist loobuma. Kuigi VRF pakub deterministlikku allkirjastamise ja selle tĂ”estamise varianti, sisaldab algoritm kummalist kohta, mis avab orakli manipuleerimise jaoks musta augu. Nimelt, k vÀÀrtuse arvutamisel () kasutatakse salajast vĂ”tit, mis jÀÀb kasutajale teadmata, seega ei saa kasutaja k arvutamise Ă”igsust kontrollida, mis tĂ€hendab, et orakel vĂ”ib kasutada mis tahes vajalikku k vÀÀrtust ja samal ajal pidada k ja allkirjastatavate andmete vastavuste andmebaasi, et alati saaks uuesti arvutada VRF-i seisukohalt Ă”ige tulemuse. Kui nĂ€ete VRF-i pĂ”hjal korraldatud loosimist ilma salajase vĂ”tme avalikustamiseta, vĂ”ite targutada: osutada vajadusele kas avada vĂ”tme vĂ”i jĂ€tta see k arvutamisest vĂ€lja, siis salajane vĂ”ti avaldub automaatselt, kui ilmub esimene allkiri. ĂhesĂ”naga, nagu juba öeldud, on see kummaline skeem juhuslikule oraklile.
Veidi mĂ”tlemini ja kohalike analĂŒĂŒtikute toetuse saades sĂŒndis VECRO töö skeem.
VECRO on lĂŒhend Verifiable Elliptic Curve Random Oracle, mis tĂ€hendab eesti keeles kontrollitavat juhuslikku oraklit elliptiliste kĂ”verate pĂ”hjal.
KĂ”ik osutus ĂŒsna lihtsaks, et saavutada deterministlikkust, tuleb fikseerida R vÀÀrtus enne allkirjastatava sĂ”numi ilmumist. Kui R on fikseeritud ja see on osa allkirjastatavast sĂ”numist, mis lisaks tagab R fikseerimise allkirjastatavas sĂ”numis, mÀÀratakse S vÀÀrtus ainulaadselt kasutaja sĂ”numi pĂ”hjal ja seega saab seda kasutada pseudo-juhuslike numbrite allikana.
Sellises skeemis pole oluline, kuidas R fikseeritakse, see jÀÀb orakli kohustuseks. Oluline on, et S mÀÀratakse ainulaadselt kasutaja poolt, kuid selle vÀÀrtus on teadmata, kuni orakel selle avalikustab. Just nagu me soovisime!
R fikseerimise kohta rÀÀkides, pöörake tÀhelepanu sellele, et Erinevate sÔnumite allkirjastamisel toob EdDSA skeem kindlasti vÀlja privaatvÔtme. Oraakli omaniku jaoks on ÀÀrmiselt oluline vÀlistada R-i taaskasutamise vÔimalus erinevate kasutaja sÔnumite allkirjastamiseks. See tÀhendab, et igasuguste manipulatsioonide vÔi kokkulepete korral riskib oraakel alati oma privaatvÔtme kaotamisega.
KokkuvÔttes peab oraakel kasutajatele pakkuma kahte funktsiooni: initsialiseerimist, mis fikseerib R vÀÀrtuse, ja allkirjastamist, mis tagastab S vÀÀrtuse. Siinkohal on R, S paar tavaline kontrollitav allkiri kasutaja sÔnumist, mis sisaldab fikseeritud R vÀÀrtust ja kasutaja suvalisi andmeid.
VĂ”ib vaielda, et see skeem blockchain'ile on mitte midagi muud kui tavaline Sisuliselt on see tĂ”si. Kuid siin on mĂ”ned nĂŒansid. Esiteks, oraakel töötab alati kĂ”igis toimingutes ĂŒhe ja sama vĂ”tmega, nĂ€iteks on see mugav lepingutes. Teiseks, oraakli privaatvĂ”tme kaotamise risk on olemas vale kĂ€itumise korral, nĂ€iteks, kui oraakel lubab tulemust proovima, piisab vaid kahest proovist, et teada saada privaatvĂ”ti ja saada tĂ€ielik juurdepÀÀs rahakotile. Kolmandaks, blockchain'is natiivset kontrollitav allkiri, mis on juhuslikkuse allikas - see on ilus.
Pool aastat kĂŒpses idee teostamine peas, kuni lĂ”puks tuli motivatsioonina Suure grantiga kaasnevad suured vastutused, seega on projekt teoks saamas!
Rakendamine
Nii et selles projektis Waves blockchain'is pĂ€ring-vastus reĆŸiimis kasutaja ja oraakli vahel ĂŒlekannete abil. Selle kĂ€igus on oraakli kontol skript, mis kontrollib tööde teostamist rangelt eelnevalt kirjeldatud loogika jĂ€rgi. Oraakli tehingud lĂ€bivad kontrollimise, taastades kogu suhtlusahela kasutajaga. LĂ”ppvÀÀrtuse kontrollimisel osaleb kĂ”ikides neljas tehingus, nutileping liidab need rangelt kontrolliva niidi kĂŒlge, kontrollides samm-sammu haaval kĂ”iki vÀÀrtusi ja jĂ€ttes kohtadele manipulatsioonide jaoks.
Korduseks, et jÀÀks selgeks. Oraakel ei tööta lihtsalt ettepanekud skeemi jÀrgi. Tema töö on tÀielikult kontrollitud blockchain'i tasandil. . Samm vasakule ja tehing lihtsalt ei toimu. Seega, kui tehing on plokiahelasse jÔudnud, ei pea kasutaja isegi midagi kontrollima, kÔik on juba kontrollitud sadade vÔrgu sÔlmede poolt.
Praegu on Wavesi peavĂ”rgus kĂ€ivitatud ĂŒks VECRO (sa saad ka oma kĂ€ivitada, see ei ole keeruline, lihtsalt ). Praegune kood töötab PHP-s (sid , millest ).
Oraakelteenuse kasutamiseks tuleb:
- Kinni panna R;
- Saada vÀhemalt 0.005 Waves orakli aliasele init@vecr;
- Saada R-kood manuses ĂŒlekandel 1 R-vecr tokeni oraklilt kasutajale;
- Saada allkiri;
- Saada vÀhemalt 0.005 Waves orakli aliasele random@vecr ja kindlasti mÀrkida manuses varasem R-kood ning lisainformatsioon kasutajalt;
- Saada S-kood manuses ĂŒlekandel 1 S-vecr tokeni oraklilt kasutajale;
- Kasuta S-koodi pseudo-juhusliku numbri allikana.
Praeguse teostuse nĂŒansid:
- Oraklile saadetud Wavesi kasutatakse kasutajale tagasitehingu tasuna, kuni maksimaalselt 1 Waves;
- R-kood on sĂŒmboli 'R' ja 32-baidise R vÀÀrtuse konkateneerimine base58 kodeeringus;
- R-kood manuses peab olema esimesena, kasutajate andmed tulevad pÀrast R-koodi;
- S-kood on sĂŒmboli 'S' ja 32-baidise S vÀÀrtuse konkateneerimine base58 kodeeringus;
- S on jÀÀgi mooduli jagamise tulemus, seetÔttu ei saa S-d kasutada tÀis 256-bitise pseudo-juhusliku numbrina (seda numbrit vÔib pidada maksimaalselt 252-bitiseks pseudo-juhuslikuks numbriks);
- Lihtsaim variant on kasutada S-koodi hash'i pseudo-juhusliku numbrina.
S-koodi saamise nÀide:
- Algatamine:
- R-koodi saamine:
- R-koodi ja kasutajandmete 'random' allkirja tulemuse pÀrimine:
- S-koodi saamine:
Tehniliselt on oraakel tÀielikult töövalmis, vÔid julgelt seda kasutada. Tavaolekuses kasutaja jaoks puudub mugav graafiline liides, seda tuleb veel oodata.
Olen valmis vastama kĂŒsimustele ja vĂ”tma vastu mĂ€rkuseid, aitĂ€h.
Allikas: habr.com
