Sinadura digitalean oinarritutako ausazko orakulua blockchain-en

Ideiatik inplementaziora: dagoen kurba eliptikoko sinadura digitalaren eskema aldatzen dugu, determinista izan dadin, eta horretan oinarrituta bloke-katearen barruan egiazta daitezkeen zenbaki sasi-ausazkoak lortzeko funtzioak eskaintzen ditugu.

Sinadura digitalean oinarritutako ausazko orakulua blockchain-en

Idea

2018ko udazkenean, Waves blokea barne lehen kontratu adimendunak aktibatu dira, berehala sortu zen lortzeko aukerari buruzko galdera sasi-ausazko zenbakiakfida zaitezkeela.

Galdera hau harrituta, azkenean ondoriora iritsi nintzen: edozein bloke-kate zelula bat da; ezinezkoa da sistema itxi batean entropia-iturri fidagarri bat lortzea.

Baina oraindik ideia bat gustatu zitzaidan: bada ausazko orakulua erabiltzailearen datuak algoritmo deterministiko batekin sinatuko ditu, orduan erabiltzaileak beti egiaztatu ahal izango du halako sinadura bat gako publikoa erabiliz, eta ziurtatuko du ondoriozko balioa bakarra dela. Orakuluak, nahi bezain gogor, ezin du ezer aldatu; algoritmoak emaitza anbiguo bat sortzen du. Funtsean, erabiltzaileak emaitza grabatzen du, baina ez du ezagutzen orakuluak argitaratu arte. Bihurtzen da ezin duzula orakuluaz batere fidatu, baina egiaztatu bere lanaren emaitza. Orduan, egiaztapen arrakastatsua izanez gero, sinadura hori pseudoausazko zenbaki baten entropia iturritzat har daiteke.

Waves blockchain plataformak sinadura eskema bat erabiltzen du EdDSA aukera Ed25519. Eskema honetan, sinadura R eta S balioek osatzen dute, non R ausazko balio baten araberakoa den, eta S sinatzen den mezuaren, gako pribatuaren eta R-ren ausazko zenbaki beraren arabera kalkulatzen da. ez dago berarekiko menpekotasun esklusiborik. Baliozko sinadura asko dago erabiltzaile-mezu baterako.

Jakina, bere forma hutsean, sinadura hori ezin da erabili sasi-ausazko zenbakien iturri gisa, ez-deterministikoa baita eta, beraz, orakuluak erraz manipula dezakeelako.

Baina, ondorioztatu denez, benetan posible da determinista bihurtzea.

Itxaropen handiak nituen ausazko funtzio egiaztagarria (VRF), baina hardwarea aztertu ondoren, aukera hau alde batera utzi behar izan nuen. VRF-k sinaduraren eta haren frogaren bertsio deterministikoa eskaintzen badu ere, algoritmoan toki arraro bat dago orakulua manipulatzeko zulo beltz bat irekitzen duena. Hots, k-ren balioa kalkulatzean (5.1 atala) gako pribatu bat erabiltzen da, erabiltzailearentzat ezezaguna izaten jarraitzen duena, hau da, erabiltzaileak ezin du k-ren kalkuluaren zuzena egiaztatu, hau da, orakuluak k behar duen edozein balio erabil dezake eta, aldi berean, korrespondentzia datu-base bat mantendu dezake. k eta sinatutako datuak, beti VRFren ikuspuntutik emaitza zuzena berriro kalkulatu ahal izateko. VRFn oinarritutako marrazki bat ikusten baduzu gako pribatua ezagutzera eman gabe, adimenduna izan zaitezke: adierazi gakoa agerian utzi behar dela edo k kalkulutik baztertu, orduan gako pribatua automatikoki agertuko da lehen sinadura agertzen denean. . Oro har, esan bezala, ausazko orakulu baterako eskema bitxi bat.

Pixka bat pentsatu eta tokiko analisten laguntza lortu ondoren, VECRO lan eskema sortu zen.

VECRO kurba eliptiko egiaztagarriaren ausazko orakuluaren laburdura da, errusieraz kurba eliptikoetan ausazko orakulu egiaztagarria esan nahi duena.

Dena nahiko sinplea izan zen; determinismoa lortzeko, sinatu beharreko mezua agertu baino lehen R-ren balioa konpondu behar duzu. R konprometituta badago eta sinatzen ari den mezuaren parte bada, eta horrek are gehiago ziurtatzen du sinatzen den mezuan R konprometituta dagoela, S-ren balioa erabiltzailearen mezuak zehazten du modu esklusiboan eta, beraz, sasi-ausazko zenbakien iturri gisa erabil daiteke.

Halako eskema batean, berdin du R nola finkatu den; hori orakuluaren ardura izaten jarraitzen du. Garrantzitsua da S erabiltzaileak soilik zehaztea, baina bere balioa ezezaguna da orakuluak argitaratzen duen arte. Nahi genuen guztia!

R finkoaz hitz egitean, kontutan izan R berrerabili hainbat mezu sinatzean, EdDSA eskeman gako pribatua modu berezian erakusten du. Orakuluaren jabearentzat oso garrantzitsua da R berrerabiltzeko aukera ezabatzea erabiltzaile-mezu desberdinak sinatzeko. Hau da, edozein manipulazio edo elkarlanarekin, orakuluak beti izango du bere gako pribatua galtzeko arriskua.

Guztira, orakuluak bi funtzio eman behar ditu erabiltzaileei: hasieratzea, R balioa finkatzen duena, eta sinadura, S balioa itzultzen duena. Kasu honetan, R, S bikotea finko bat duen erabiltzaile-mezu baten ohiko sinadura egiaztagarria da. R balioa eta erabiltzailearen datu arbitrarioak.

Esan daiteke blockchain-erako eskema hau arrunta baino ez dela konpromiso-zabaldu eskema. Funtsean, bai, bera da. Baina hainbat Γ±abardura daude. Lehenik eta behin, orakuluak beti gako berarekin funtzionatzen du eragiketa guztietan, adibidez, hori erosoa da kontratuetan erabiltzeko. Bigarrenik, orakuluak gako pribatua galtzeko arriskua dago gaizki jokatzen badu, adibidez, orakuluak emaitzaren laginak egiteko aukera ematen du, orduan nahikoa da bi proba bakarrik egitea gako pribatua ezagutzeko eta osoa lortzeko. zorrorako sarbidea. Hirugarrenik, bloke-katean natiboki egiazta daitekeen eta ausazkotasunaren iturri den sinadura ederra da.

Sei hilabetez inplementatzeko ideia sutan egon zen nire buruan, azkenean motibazioa formularioan agertu zen arte Waves Labs-en beka. Beka handi batekin ardura handia dakar, beraz, proiektua hor egongo da!

Inplementazioa

Beraz, proiektu honetan VECRO ezarri zen Waves blockchain-en eskaera-erantzun moduan erabiltzailearen eta orakuluaren arteko transferentzia-transakzioak erabiliz. Aldi berean, goian deskribatutako logikaren arabera lana zorrozki kontrolatzen duen oracle kontuan script bat instalatzen da. Oracle-ko transakzioak egiaztatzen dira eta erabiltzaileen interakzio-kate osoa berrezartzen da. Lau transakzioek azken balioa egiaztatzen parte hartzen dute; kontratu adimendunak egiaztapen-hari zorrotz batekin lotzen ditu, balio guztiak urratsez urrats egiaztatuz eta inolako manipulaziorako lekurik utzi gabe.

Beste behin, alde batera utzi eta argiago uzteko. Orakuluak ez du soilik proposatutako eskemaren arabera funtzionatzen. Bere lana erabat kontrolatzen du blockchain mailan ezarritakoak kontratu adimendunarekin estu. Urratu ezkerrera eta transakzioa ez da besterik gabe egingo. Beraz, transakzio bat bloke-katean sartzen bada, erabiltzaileak ez du ezer egiaztatu beharrik ere; sareko ehunka nodok dagoeneko egiaztatu dute dena.

Gaur egun, Waves sare nagusian VECRO bat dago martxan (zure exekutatu dezakezu, ez da zaila, besterik gabe begiratu konfigurazio adibideari). Uneko kodea PHPn exekutatzen da (on WavesKit, horri buruz Lehenago esan dizut).

Oracle zerbitzua erabiltzeko:

  • Konpondu R;
    • Bidali gutxienez 0.005 Waves oracle aliasera init@vecr;
    • Jaso R-kodea eranskinaren eremuan 1 R-vecr token transferentzian orakulutik erabiltzailearengana;
  • Lortu sinadura;
    • Bidali gutxienez 0.005 Waves oracle alias random@vecr, eta, gainera, aldez aurretik jasotako R-kodea eta erabiltzaile-datu osagarriak adierazi BEHAR DU eranskinaren eremuan;
    • Jaso S-kodea eranskinaren eremuan 1 S-vecr token transferentzian orakulutik erabiltzailearengana;
  • Erabili S kodea zenbaki sasi-ausazko iturri gisa.

Egungo ezarpenaren Γ±abardurak:

  • Orakulura bidalitako uhinak erabiltzaileari itzultzeko transakziorako komisio gisa erabiltzen dira, gehienez 1 Waves;
  • R-kodea 'R' karakterearen byte baten eta 32 byteko base58 kodetutako R balio baten kateamendua da;
  • Eranskineko R-kodeak lehena izan behar du, erabiltzailearen datuak R-kodearen ondoren datoz;
  • S-kodea 'S' karakterearen byte baten eta S-ren 32 byte-ko base58 balioaren kateamendua da;
  • S modulo zatiketaren emaitza da, beraz, ezin duzu S 256 biteko pseudoausazko zenbaki oso gisa erabili (zenbaki hau gehienez 252 biteko pseudoausazko zenbakitzat har daiteke);
  • Aukerarik errazena S-kode hash-a sasi-ausazko zenbaki gisa erabiltzea da.

S kodea jasotzearen adibidea:

Ikuspuntu teknikotik, orakulua lanerako guztiz prest dago, segurtasunez erabil dezakezu. Erabiltzaile arruntaren erabileraren ikuspuntutik, interfaze grafiko erosoa falta da; honek itxaron beharko du.

Pozik erantzungo ditut galderak eta iruzkinak onartzen, eskerrik asko.

Iturria: www.habr.com

Gehitu iruzkin berria