Slučajni orakl temeljen na digitalnom potpisu u blockchainu

Od ideje do realizacije: prilagodimo postojeću shemu digitalnog potpisa na eliptičnoj krivulji kako bi bila deterministička i na osnovu nje pružimo funkcije za generiranje provjerljivih pseudo slučajnih brojeva u okviru blockchaina.

Slučajni orakl temeljen na digitalnom potpisu u blockchainu

Ideja

U jesen 2018. blockchain Waves je imao aktivirane prve pametne ugovore, odmah se postavilo pitanje o mogućnosti dobivanja pseudo slučajnih brojeva, kojima se može vjerovati.

Razmišljajući o ovom pitanju, konačno sam došao do zaključka: svaki blockchain je kavez, dobiti pouzdan izvor entropije u zatvorenom sustavu je nemoguće.

Ali jedna ideja mi se ipak svidjela: ako slučajni orakl potpisuje korisničke podatke pomoću determinističkog algoritma, tada korisnik može uvijek provjeriti takav potpis javnim ključem i biti siguran da je dobivena vrijednost jedinstvena. Orakl, ma koliko se trudio, ne može ništa promijeniti, algoritam daje jednoznačan rezultat. U suštini, korisnik fiksira rezultat, ali ga ne zna sve dok ga orakl ne objavi. Tako ispada da se oraklu uopće ne mora vjerovati, ali se može provjeriti rezultat njegovog rada. Tada, u slučaju uspješne provjere, takav potpis može se smatrati izvorom entropije za pseudo slučajan broj.

U blockchain platformi Waves koristi se shema potpisa EdDSA varijantu Ed25519. U ovoj shemi potpis se sastoji od vrijednosti R i S, gdje R ovisi o slučajnoj vrijednosti, a S se izračunava na temelju potpisivane poruke, privatnog ključa i iste slučajne brojke koja je i R. Tako ispada da ne postoji jednoznačna ovisnost, za istu korisničku poruku postoji više valjanih potpisa.

Očigledno je da se u čistom obliku takav potpis ne može koristiti kao izvor pseudo slučajnih brojeva, budući da je nedeterminisana i, samim tim, može biti lako podložna manipulacijama od strane orakla.

Ali, kako se ispostavilo, moguće je učiniti ga determinističnim.

Imam velike nade u provjerljivu slučajnu funkciju (VRF), ali nakon proučavanja materijala, od ove mogućnosti je odlučeno odustati. Iako VRF nudi determinističku verziju potpisa i njegovih dokaza, u algoritmu postoji čudno mjesto koje otvara crnu rupu za manipulacije oraklom. Naime, prilikom izračuna vrijednosti k (odjeljak 5.1) koristi se tajni ključ, koji ostaje nepoznat korisniku, što znači da korisnik ne može provjeriti ispravnost izračuna k, pa orakl može koristiti bilo koju potrebnu vrijednost k i istovremeno voditi bazu podataka odgovarajućih k i potpisanih podataka, kako bi uvijek mogao ponovo izračunati ispravni rezultat s obzirom na VRF. Ako vidite izvlačenje temeljen na VRF bez otkrivanja tajnog ključa, možete pametovati: ukazati na potrebu da se ili otkrije ključ ili isključi iz izračuna k, tada će se tajni ključ automatski otkriti na prvoj potpisanoj verziji. Ukratko, kao što je već rečeno, čudna shema za slučajnog orakla.

Nakon malo razmišljanja i uz podršku lokalnih analitičara, rođena je shema rada VECRO.

VECRO je akronim za Verifiable Elliptic Curve Random Oracle, što na hrvatskom znači provodivi slučajni orakl na eliptičnim krivuljama.

Sve se pokazalo prilično jednostavnim, za postizanje determinističnosti potrebno je fiksirati vrijednost R prije pojave potpisane poruke. Ako je R fiksirano i dio je potpisane poruke, što dodatno osigurava fiksaciju R u samoj potpisanoj poruci, vrijednost S se jednoznačno određuje korisničkom porukom i, stoga, može se koristiti kao izvor za pseudonarandome.

U takvoj shemi nije važno na koji način se fiksira R, to ostaje odgovornost orakla. Važno je da S jednoznačno određuje korisnik, ali njegova vrijednost ostaje nepoznata sve dok ga orakl ne objavi. Sve kako smo željeli!

Govoreći o fiksnom R, obratite pažnju da ponovno korišteno R Potpisivanje različitih poruka jasno otkriva tajni ključ u EdDSA shemi. Za vlasnika orakla izuzetno je važno isključiti mogućnost ponovne upotrebe R za potpisivanje različitih korisničkih poruka. To znači da, prilikom bilo kakvih manipulacija ili dogovora, orakl uvijek riskira gubitak svog tajnog ključa.

Dakle, orakl mora pružiti korisnicima dvije funkcije: inicijalizaciju koja fiksira vrijednost R i potpisivanje koja vraća vrijednost S. Pri tome, par R, S predstavlja uobičajen provjerljiv potpis korisničke poruke koja sadrži fiksiranu vrijednost R i proizvoljne podatke korisnika.

Može se prigovoriti da je ova shema za blockchain ništa drugo nego obična shema komit-otkrivanje. Suštinski, da, to jest. No, postoje nekoliko nijansi. Prvo, orakl uvijek radi s istim ključem u svim operacijama, na primjer, to je praktično za korištenje u ugovorima. Drugo, postoji rizik gubitka tajnog ključa od strane orakla zbog nepravilnog ponašanja, na primjer, orakl omogućava uzimanje uzoraka rezultata, pa je dovoljno uzeti samo dva uzorka da se otkrije tajni ključ i dobije potpuni pristup novčaniku. Treće, nativno provjerljiv potpis u blockchainu, koji predstavlja izvor slučajnosti — to je lijepo.

Pol godine ideja o realizaciji bila je u glavi, dok napokon nije došla motivacija u obliku granta od Waves Labs. S velikim grantom dolazi velika odgovornost, što znači da projekt mora biti realiziran!

Implementacija

Dakle, u ovom projektu VECRO je realiziran na Waves blockchainu u režimu zahtjev-odgovor putem transfer transakcija između korisnika i orakla. Pritom je na računu orakla postavljen skript koji rigorozno kontrolira rad u skladu s gore opisanim logičkim okvirom. Transakcije orakla prolaze provjeru uz obnovu cijelog lanca interakcije s korisnikom. U provjeri konačne vrijednosti sudjeluje svih četiri transakcije, pametan ugovor ih povezuje na strogu provjeru, korak po korak provjeravajući sve vrijednosti i ne ostavljajući mjesta za bilo kakve manipulacije.

Još jednom, da se to upamti i bude jasnije. Orakl ne radi samo prema predloženoj shemi. Njegov rad je potpuno kontroliran na razini blockchaina postavljenom smrtnim pametnim ugovorom. Korak ulijevo, i transakcija jednostavno neće proći. Tako da, ako je transakcija ušla u blockchain, korisnik čak ni ne mora ništa provjeravati, sve su već provjerili stotine čvorova mreže.

Trenutno je u glavnoj mreži Waves pokrenut jedan VECRO (možete pokrenuti svoj, to nije teško, samo pogledajte primjer konfiguracije). Trenutni kod radi na PHP-u (o WavesKit, o kojem sam pričao ranije).

Da biste koristili uslugu oracle, potrebno je:

  • Fiksirati R;
    • Poslati minimalno 0.005 Waves na alias oracle-a init@vecr;
    • Dobiti R-code u polju attachment u transferu 1 R-vecr tokena od oracle-a korisniku;
  • Dobiti potpis;
    • Poslati minimalno 0.005 Waves na alias oracle-a random@vecr, te OBAVEZNO navesti u polju attachment prethodno dobiveni R-code i dodatne korisničke podatke;
    • Dobiti S-code u polju attachment u transferu 1 S-vecr tokena od oracle-a korisniku;
  • Koristiti S-code kao izvor pseudojasnog broja.

Situlacije trenutne realizacije:

  • Poslani Waves oracle-u koriste se kao provizija za povratnu transakciju korisniku, do maksimalnih 1 Waves;
  • R-code je konkatenacija bajta simbola ‘R’ i 32-bajtne vrijednosti R u base58 kodiranju;
  • R-code u attachmentu mora biti prve, korisnički podaci idu nakon R-code;
  • S-code je konkatenacija bajta simbola ‘S’ i 32-bajtne vrijednosti S u base58 kodiranju;
  • S je rezultat modula, pa se ne može koristiti S kao potpuno 256-bitno pseudojasno broj (ovaj broj može biti maksimalno 252-bitno pseudojasno broj);
  • Najjednostavnija opcija je koristiti hash od S-code kao pseudojasni broj.

Primjer dobivanja S-code:

Sa tehničkog aspekta, oracle je potpuno spreman za rad, možete ga slobodno koristiti. Sa stajališta korištenja od strane običnog korisnika, nedostaje prikladno grafičko sučelje, na to će se morati čekati.

Bit ću rado dostupan za odgovore na pitanja i primanje komentara, hvala.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster