Blockchain'i digitaalallkirja pÔhinev juhuslik oraakel

Ideest teostuseni: muudetakse olemasolevat elliptilise kÔvera digitaalallkirja skeemi nii, et see oleks determinantne ning selle alusel pakume vÀlja blokeeritud kontrollitavate pseudojuhuslike numbrite genereerimise funktsioone.

Blockchain'i digitaalallkirja pÔhinev juhuslik oraakel

Idee

2018. aasta sĂŒgisel aktiviseeriti Waves'i plokiahelas esimesed nutilepingud, millele jĂ€rgnes kohe kĂŒsimus usaldusvÀÀrsete pseudojuhuslike numbritesaamise vĂ”imaluse kohta.

Pea vaeva selle kĂŒsimuse ĂŒle mĂ”eldes, jĂ”udsin lĂ”puks jĂ€reldusele: iga plokiahel on rakend, suletud sĂŒsteemis on usaldusvÀÀrse entropia allika saamine vĂ”imatu.

Kuid ĂŒks idee meeldis mulle siiski: kui juhuslik oraakel kui kasutaja allkirjastab kasutajaandmeid deterministliku algoritmiga, suudab ta alati sellist allkirja kontrollida avatud vĂ”tmega ning olla kindel, et saadud vÀÀrtus on ainulaadne. Oraakel ei suuda, olenemata soovist, midagi muuta, algoritm annab selge tulemuse. Sisuliselt fikseerib kasutaja tulemuse, kuid ei tea seda enne, kuni oraakel selle avaldab. Tulemuseks on, et oraaklile ei saa tĂ€ielikult usaldada, kuid tema tööd saab tulemust kontrollida. SeetĂ”ttu vĂ”ib sellist allkirja, kui kontrollimine on edukas, pidada pseudojuhusliku arvu entropia allikaks.

Blockchain-platvormil Waves kasutatakse allkirjastamisskeemi EdDSA variant Ed25519. Antud skeemis koosneb allkiri vÀÀrtustest R ja S, kus R sĂ”ltub juhuslikust vÀÀrtusest ning S arvutatakse allkirjastatava sĂ”numi, privaatvĂ”tme ja selle sama juhusliku numbri pĂ”hjal, mis on R. Seega ei ole ĂŒhemĂ”ttelist sĂ”ltuvust, ĂŒhe ja sama kasutaja sĂ”numi jaoks eksisteerib palju kehtivaid allkirju.

On selge, et sellist allkirja ei saa puhtal kujul kasutada pseudojuhuslike arvude allikana, kuna see on mÀÀramatud ja seetÔttu vÔib see olla kergesti manipuleeritav oraakli poolt.

Kuid nagu selgus, on selle mÀÀratlemine tegelikult vÔimalik.

Mul oli suured lootused kontrollitava juhusliku funktsiooni (VRF) suhtes, kuid uurides teoreetilisi aluseid, pidin sellest variandist loobuma. Kuigi VRF pakub mÀÀratletud allkirja ja selle tĂ”endite varianti, sisaldab algoritm kummalist kohta, mis avab musta augu oraakli manipuleerimiseks. Nimelt, k vÀÀrtuse arvutamisel (jaotis 5.1) kasutatakse suletud vĂ”tme, mis jÀÀb kasutajale teadmata, tĂ€hendab see, et kasutaja ei saa k-kalkulatsiooni Ă”igsust kontrollida, seega vĂ”ib oraakel kasutada mistahes vajalikke k-vÀÀrtusi ning samal ajal pidada andmebaasi vastavuste k ja allkirjastatavate andmete kohta, et alati suuta uuesti arvutada VRF-i seisukohast Ă”iget tulemust. NĂ€ete VRF-i pĂ”hine loosimine ilma suletud vĂ”tme avaldamiseta, vĂ”ite targutada: mĂ€rkida vajadust kas vĂ”tme avalikustamise vĂ”i selle k-kalkulatsioonist vĂ€listamise osas, siis suletud vĂ”ti avastatakse automaatselt esimese allkirja ilmumisega. Üldiselt, nagu juba öeldud, on see kummaline skeem juhuslikule oraaklile.

Veidi mĂ”eldes ja kohalike analĂŒĂŒtikute toel, sĂŒndis VECRO tööreĆŸiim.

VECRO on lĂŒhend Verifiable Elliptic Curve Random Oracle, mis vene keeles tĂ€hendab kontrollitavat juhuslikku oraaklit elliptiliste kĂ”verate pĂ”hjal.

KĂ”ik osutus ĂŒsna lihtsaks: determinatiivsete tulemuste saavutamiseks tuleb R vÀÀrtus fikseerida enne allkirjastatava sĂ”numi ilmumist. Kui R on fikseeritud ja on osa allkirjastatavast sĂ”numist, mis lisaks tagab R fikseerimise allkirjastatavas sĂ”numis, siis S vÀÀrtus on ĂŒheselt mÀÀratletud kasutaja sĂ”numiga ja seega vĂ”ib seda kasutada pseudojuhuslike numbrite allikana.

Sellises skeemis ei oma tĂ€htsust, kuidas R fikseeritakse, see jÀÀb oraakli vastutusele. Oluline on, et S on ĂŒheselt mÀÀratletud kasutaja poolt, kuid selle vÀÀrtus jÀÀb teadmata, kuni oraakel selle avaldab. Just nagu me tahtsime!

R fikseerimise kohta tasub tĂ€helepanu pöörata sellele, et uuesti kasutatud R eri sĂ”numite allkirjastamise puhul paljastab EdDSA skeemis ĂŒheselt privaatse vĂ”tme. Oraakli jaoks on ÀÀrmiselt oluline vĂ€listada R uuesti kasutamise vĂ”imalus erinevate kasutaja sĂ”numite allkirjastamiseks. See tĂ€hendab, et iga manipuleerimise vĂ”i kokkuleppe korral riskib oraakel alati oma privaatvĂ”tme kaotamisega.

Sel juhul peab oraakel kasutajatele pakkuma kahte funktsiooni: initsialiseerimist, mis kinnitab vÀÀrtust R, ja allkirja, mis tagastab vÀÀrtuse S. Sellisel juhul on paar R, S tavaline kontrollitav allkiri kasutaja teadete kohta, mis sisaldavad fikseeritud vÀÀrtust R ja kasutaja meelevaldseid andmeid.

VĂ”ib vaielda, et see skeem plokiahelas on midagi muud kui tavaline commit-reveal skeem.TĂ”epoolest on see nii. Kuid siin on mĂ”ned nĂŒansid. Esiteks töötab oraakel alati sama vĂ”tmega kĂ”igis toimingutes, mis on mugav kasutada lepingutes. Teiseks on oht, et oraakel kaotab oma privaatvĂ”tme vale kĂ€itumise tĂ”ttu; nĂ€iteks kui oraakel vĂ”imaldab tulemuse proovimist, piisab kahe proovi tegemisest, et teada saada privaatvĂ”ti ja saada tĂ€ielik juurdepÀÀs rahakotile. Kolmandaks, plokiahelas natiivset kontrollitavat allkirja, mis on juhuslikkuse allikas — see on ilus.

Pool aastat oli idee elluviimisest peas, kuni lÔpuks ilmus motivatsioon Waves Labsi poolt antud toetuse nÀol.. Suure toetusega kaasneb suur vastutus, seega projekt peab olema!

Rakendus

Nii et antud projektis VECRO on teostatud Waves plokiahelal pĂ€ring-vastus reĆŸiimis kasutades ĂŒlekannetega tehingute vahel kasutaja ja oraakli vahel. Samuti on oraakli kontol skript, mis kontrollib tööd rangelt vastavalt eespool kirjeldatud loogikale. Oraakli tehingud lĂ€bisid kontrolli, taastades kogu interaktsiooni ahela kasutajaga. LĂ”pliku vÀÀrtuse kontrollis osalevad kĂ”ik neli tehingut, nutileping pĂ€rib need rangesse kontrollihelvesse, sama samm-sammult kontrollides kĂ”iki vÀÀrtusi ja jĂ€ttes mingisugusteks manipulatsioonideks ruumi.

Veel kord, et see selgeks jÀÀks. Oraakel ei toimi lihtsalt esitatud skeemi kohaselt. Tema töö on tÀielikult kontrollitud plokiahela tasemel kehtestatud tÔuklemisega nutilepinguga. Samm vasakule, ja tehing lihtsalt ei toimi. Nii et kui tehing jÔuab plokiahelasse, ei pea kasutaja isegi midagi kontrollima, kÔik on juba kontrollitud sadu vÔrgusÔlmes.

Praegu on Wavesi pĂ”hivĂ”rgus aktiivne ĂŒks VECRO (vĂ”ite kĂ€ivitada ka enda oma, see ei ole keeruline, lihtsalt vaadake konfiguratsiooni nĂ€idet). Praegune kood töötab PHP-l ( WavesKit, millest rÀÀkisin varem).

Orakliteenuse kasutamiseks on vajalik:

  • Fikseerida R;
    • Saada vĂ€hemalt 0.005 Waves orakli aliasele init@vecr;
    • Saada R-kood manuses 1 R-vecr tokeni ĂŒlekande poolt oraklilt kasutajale;
  • Saada allkiri;
    • Saada vĂ€hemalt 0.005 Waves orakli aliasele random@vecr, ja kindlasti mĂ€rkida manuses varem saadud R-kood ja tĂ€iendavad kasutaja andmed;
    • Saada S-kood manuses 1 S-vecr tokeni ĂŒlekande poolt oraklilt kasutajale;
  • Kasutada S-koodi kui pseudojuhusliku arvu allikat.

Praeguse rakenduse detailid:

  • Oraklile saadetud Wavesi kasutatakse kasutajale tagasiĂŒlekande komisjonitasuna, kuni maksimaalselt 1 Waves;
  • R-kood on sĂŒmbolit ‘R’ sisaldava mobi(s) ja 32-baidise R vÀÀrtuse konkateneerimine base58 kodeeringus;
  • R-kood manuses peab olema esimesena, kasutaja andmed lĂ€hevad R-koodist edasi;
  • S-code on 'S' sĂŒmboli ja 32-bitisest S vÀÀrtuse base58 kodeerimise kombinatsioon;
  • S on modulaarsuse jagamise tulemus, seetĂ”ttu ei saa S-d kasutada tĂ€is 256-bitise pseudojuhusliku numbrina (seda arvu vĂ”ib pidada maksimaalselt 252-bitise pseudojuhusliku numbrina);
  • Lihtsaim lahendus on kasutada pseudojuhusliku arvuna S-code hash'i.

NĂ€ide S-code saamisest:

Tehnilisest vaatepunktist on oraakel tÀielikult töökorras, seda on tÀiesti ohutu kasutada. Kuid lÔppkasutaja pilguga vaadates on mugav graafiline liides puudu, seda peab veel ootama.

Olen rÔÔmus vastama kĂŒsimustele ja vĂ”tma vastu ettepanekuid, aitĂ€h.

Allikas: habr.com

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