Orakulli rastësor në bazë të nënshkrimit digjital në blockchain

Nga ideja në realizim: ne modifikojmë skemën ekzistuese të nënshkrimit digjital në kurbën ellipti që të jetë e caktuar dhe ofrojmë mbi të funksione për të marrë numra pseudo-rastësorë të verifikueshëm brenda bllokçain.

Orakulli rastësor në bazë të nënshkrimit digjital në blockchain

Ideja

NĂ« vjeshtĂ«n e vitit 2018 nĂ« bllokçain Waves u aktivizuan kontratat e para inteligjente, menjĂ«herĂ« u shfaq pyetja pĂ«r mundĂ«sinĂ« e marrjes numrave pseudo-rastĂ«sorĂ«, tĂ« cilĂ«ve mund t’u besohet.

Duke thyer kokën mbi këtë çështje, përfundimisht arrita në përfundimin: çdo bllokçain është një kafaz, është e pamundur të marrësh një burim të besueshëm entropi në një sistem të mbyllur.

Por një ide më pëlqeu: nëse një orakull rastësor do të nënshkruante të dhënat e përdoruesit me një algoritëm të caktuar, atëherë përdoruesi gjithmonë do të mund të verifikonte atë nënshkrim me çelësin publik dhe do të ishte i sigurt se vlera e marrë është unike. Orakulli, sa do të donte, nuk është në gjendje të ndryshojë asgjë; algoritmi jep një rezultat të qartë. Në thelb, përdoruesi regjistron rezultatin, por nuk e di atë deri sa orakulli ta publikojë. Kështu, rezulton se mund të mos i besosh fare orakullit, por të verifikosh rezultatin e punës së tij. Atëherë, në rast të verifikimit të suksesshëm, një nënshkrim i tillë mund të konsiderohet një burim entropie për numrin pseudo-rastësor.

Në platformën bllokçain Waves përdoret një skemë nënshkrimi EdDSA një variant Ed25519. Në këtë skemë nënshkrimi përbëhet nga vlerat R dhe S, ku R varet nga një vlerë rastësore, ndërsa S llogaritet mbi bazën e mesazhit të nënshkruar, çelësit privat dhe të njëjtat numra rastësorë si R. Kështu, nuk ka një varësi të qartë; për një mesazh të njëjtë përdoruesi ekzistojnë shumë nënshkrime valide.

ËshtĂ« e qartĂ« se njĂ« nĂ«nshkrim i tillĂ« nĂ« formĂ«n e pastĂ«r nuk mund tĂ« pĂ«rdoret si burim numrash pseudo-rastĂ«sorĂ«, sepse Ă«shtĂ« jodeterminist dhe, si rezultat, mund tĂ« jetĂ« lehtĂ«sisht e ekspozuar ndaj manipulimeve nga ana e orakullit.

Por, siç doli, është e mundur ta bësh atë të caktuar në të vërtetë.

Shpresat e mëdha i kam pasur për funkcionin e rastësisë të verifikueshëm (VRF), por pasi studimi të materialeve, u detyruam të heqim dorë nga ky variant. Edhe pse VRF ofron një variant të caktuar të nënshkrimit dhe provës së tij, algoritmi përmban një vend të çuditshëm që hap një vrimë të zezë për manipulimin nga orakulli. Saktësisht, gjatë llogaritjes së vlerës k (seksioni 5.1) përdoret një çelës privat, i cili mbetet i panjohur për përdoruesin, që do të thotë se përdoruesi nuk mund ta verifikojë saktësinë e llogaritjes së k, që do të thotë se orakulli mund të përdorë çdo vlerë k që dëshiron dhe njëkohësisht të mbajë një bazë të dhënash për përputhjet e k dhe të dhënave të nënshkruara, për të qenë në gjendje të ri-llogarisë gjithmonë rezultatin e saktë sipas VRF. Nëse shihni një lojë të bazuar në VRF pa zbuluar çelësin privat, mund të ndiheni inteligjentë: të theksoni nevojën për të zbuluar çelësin ose për ta përjashtuar atë nga llogaritja e k, atëherë çelësi privat do të zbulohet automatikisht me nënshkrimin e parë. Në përgjithësi, siç është thënë më parë, një skemë e çuditshme për një orakull të rastësishëm.

Pas disa reflektimeve dhe mbështetjes nga analistët lokalë, lindi skema e funksionimit të VECRO.

VECRO është një akronim për Verifiable Elliptic Curve Random Oracle, që në shqip do të thotë orakull i rastësishëm i verifikueshëm mbi kurba eliptike.

Gjithçka rezultoi mjaft e thjeshtë; për të arritur determinimin, është e nevojshme të fijosh vlerën R para shfaqjes së mesazhit të nënshkruar. Nëse R është fijuar dhe është pjesë e mesazhit të nënshkruar, që garanton gjithashtu fijimin e R në vetë mesazhin e nënshkruar, vlera S përcaktohet qartazi nga mesazhi i përdoruesit dhe, për pasojë, mund të përdoret si një burim për numra pseudo-rastësorë.

Në një skemë të tillë, nuk ka rëndësi si e fiksoni R, kjo mbetet në përgjegjësinë e orakullit. E rëndësishme është që S përcaktohet qartazi nga përdoruesi, por vlera e tij mbetet e panjohur derisa orakulli ta publikojë. Ashtu siç dëshiruam!

Duke folur për R të fiksuar, vini re se R i përdorur më parë në nënshkrimin e mesazheve të ndryshme, ky proces përkufizon qartë çelësin e fshehtë në skemën EdDSA. Për pronarin e orakullit, është thelbësore të përjashtojë mundësinë e ripërdorimit të R për nënshkrimin e mesazheve të ndryshme nga përdoruesi. Kështu, në çdo manipulim ose marrëveshje, orakulli gjithmonë do të rrezikojë humbjen e çelësit të tij të fshehtë.

Pra, orakulli duhet t'u ofrojë përdoruesve dy funksione: inicializimin që regjistron vlerën R, dhe nënshkrimin që kthen vlerën S. Në këtë mënyrë, çifti R, S është një nënshkrim i verifikueshëm i mesazhit të përdoruesit që përmban vlerën e fiksuar R dhe të dhëna të rastësishme nga përdoruesi.

Mund tĂ« argumentohet se kjo skemĂ« pĂ«r blockchain nuk Ă«shtĂ« asgjĂ« tjetĂ«r pĂ«rveçse njĂ« skemĂ« angazhim-zbulesĂ«. NĂ« thelb, po, kjo Ă«shtĂ« ajo. Por ka disa nuanca. SĂ« pari, orakulli gjithmonĂ« punon me tĂ« njĂ«jtin çelĂ«s nĂ« tĂ« gjitha operacionet, pĂ«r shembull, kjo Ă«shtĂ« e lehtĂ« pĂ«r t'u pĂ«rdorur nĂ« kontrata. SĂ« dyti, ekziston rreziku nga humbja e çelĂ«sit tĂ« fshehtĂ« nga orakulli nĂ« rast tĂ« njĂ« sjelljeje tĂ« papĂ«rshtatshme, pĂ«r shembull, nĂ«se orakulli lejon tĂ« bĂ«hen mostra tĂ« rezultatit, atĂ«herĂ« mjafton tĂ« bĂ«hen vetĂ«m dy mostra pĂ«r tĂ« zbuluar çelĂ«sin e fshehtĂ« dhe pĂ«r tĂ« marrĂ« qasje tĂ« plotĂ« nĂ« portofol. SĂ« treti, nĂ«nshkrimi qĂ« Ă«shtĂ« natyrshĂ«m i verifikueshĂ«m nĂ« blockchain, i cili Ă«shtĂ« burimi i rastĂ«sisĂ« — Ă«shtĂ« e bukur.

Për gjashtë muaj, ideja e realizimit u zhvillua në mendje, derisa më në fund u shfaq motivimi në formën e një granti nga Waves Labs. Me një grant të madh vjen një përgjegjësi e madhe, pra projekti do të ekzistojë!

Implementimi

Kështu, në këtë projekt VECRO u realizua në blockchain Waves në modin kërkesë-përgjigje përmes transaksioneve të transferit mes përdoruesit dhe orakullit. Në këtë rast, në llogarinë e orakullit është instaluar një skenar që kontrollon punën në përputhje të ngushtë me logjikën e përshkruar më sipër. Transaksionet e orakullit kalojnë një verifikim me rifitimin e gjithë zinxhirin e ndërveprimit me përdoruesin. Në verifikimin e vlerës përfundimtare marrin pjesë të katra transaksion, smart kontrata i lidh ato në një vijë verifikimi strikte, hap pas hapi duke kontrolluar të gjitha vlerat dhe duke mos lënë hapësirë për ndonjë manipulim.

Një herë tjetër, që të mbetet e qartë dhe të jetë më e kuptueshme. Orakulli nuk punon thjesht sipas skemës së propozuar. Puna e tij kontrollohet plotësisht në nivelin e blockchain nga një sistem i vendosur. kontrakt i menaxhuar nga një smart kontratë. Një hap në të majtë, dhe transaksioni thjesht nuk do të kalojë. Prandaj, nëse transaksioni ka hyrë në blockchain, përdoruesi nuk ka nevojë të kontrollojë asgjë, sepse gjithçka është verifikuar tashmë nga qindra nyje të rrjetit.

Aktualisht në rrjetin kryesor të Waves është aktiv një VECRO (mund të filloni të tuajin, nuk është e vështirë, thjesht shikoni një shembull konfigurimi). Kodi aktual funksionon në PHP (në WavesKit, për të cilin kam folur më parë).

Për të përdorur shërbimin e orakullit duhet:

  • TĂ« regjistroni R;
    • DĂ«rgoni minimum 0.005 Waves nĂ« alias-in e orakullit init@vecr;
    • Merrni R-code nĂ« fushĂ«n e bashkĂ«ngjitjes nĂ« transferimin e 1 R-vecr tokenit nga orakulli pĂ«r pĂ«rdoruesin;
  • Merrni nĂ«nshkrimin;
    • DĂ«rgoni minimum 0.005 Waves nĂ« alias-in e orakullit random@vecr, dhe gjithashtu TË JETË OBLIGUAR tĂ« tregoni nĂ« fushĂ«n e bashkĂ«ngjitjes R-code tĂ« marrĂ« mĂ« parĂ« dhe tĂ« dhĂ«na tĂ« tjera pĂ«rdoruesi;
    • Merrni S-code nĂ« fushĂ«n e bashkĂ«ngjitjes nĂ« transferimin e 1 S-vecr tokenit nga orakulli pĂ«r pĂ«rdoruesin;
  • PĂ«rdorni S-code si burim tĂ« numrit pseudo-tĂ« rastĂ«sishĂ«m.

Detajet e realizimit aktual:

  • Waves e dĂ«rguar orakullit pĂ«rdoret si komision pĂ«r transferimin e kundĂ«rt te pĂ«rdoruesi, deri nĂ« maksimum 1 Waves;
  • R-code Ă«shtĂ« bashkimi i bajtit tĂ« simbolit ‘R’ dhe vlerĂ«s 32-bajt R nĂ« kodimin base58;
  • R-code nĂ« bashkĂ«ngjitje duhet tĂ« jetĂ« i pari, tĂ« dhĂ«nat e pĂ«rdoruesit vijnĂ« pas R-code;
  • S-code Ă«shtĂ« bashkimi i bajtit tĂ« simbolit ‘S’ dhe vlerĂ«s 32-bajt S nĂ« kodimin base58;
  • S Ă«shtĂ« rezultati i ndarjes modulo, prandaj nuk mund tĂ« pĂ«rdoret S si njĂ« numĂ«r pseudo-tĂ« rastĂ«sishĂ«m 256-bitĂ«sh i plotĂ« (ky numĂ«r mund tĂ« konsiderohet maksimum 252-bitĂ«sh si numĂ«r pseudo-tĂ« rastĂ«sishĂ«m);
  • MĂ«nyra mĂ« e thjeshtĂ« Ă«shtĂ« tĂ« pĂ«rdorni hash-in nga S-code si njĂ« numĂ«r pseudo-tĂ« rastĂ«sishĂ«m.

Shembulli i marrjes së S-code:

Nga pikëpamja teknike, orakulli është plotësisht i gatshëm për t'u përdorur, mund ta përdorni pa frikë. Nga këndvështrimi i përdoruesit të zakonshëm, mungon një ndërfaqe grafike e përshtatshme, për këtë do të duhet të presim.

Do të isha i lumtur të përgjigjem në pyetje dhe të pranoja vërejtje, faleminderit.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster