Nasumično proročanstvo temeljeno na digitalnom potpisu u blockchainu

Od ideje do implementacije: modificiramo postojeću shemu digitalnog potpisa eliptične krivulje tako da bude deterministička i na temelju nje osiguravamo funkcije za dobivanje pseudoslučajnih brojeva provjerljivih unutar blockchaina.

Nasumično proročanstvo temeljeno na digitalnom potpisu u blockchainu

Ideja

U jesen 2018. uključen je Waves blockchain aktivirani prvi pametni ugovori, odmah se postavilo pitanje o mogućnosti dobivanja pseudoslučajni brojeviu koje možete vjerovati.

Muteći se oko ovog pitanja, konačno sam došao do zaključka: svaki blockchain je ćelija; nemoguće je dobiti pouzdan izvor entropije u zatvorenom sustavu.

Ali ipak mi se svidjela jedna ideja: ako slučajno proročište potpisat će korisničke podatke determinističkim algoritmom, tada će korisnik uvijek moći provjeriti takav potpis pomoću javnog ključa, te će biti siguran da je rezultirajuća vrijednost jedinstvena. Proročište, ma koliko to željelo, ne može ništa promijeniti, algoritam daje nedvosmislen rezultat. U biti, korisnik bilježi rezultat, ali ga ne zna sve dok ga proročište ne objavi. Ispada da uopće ne možete vjerovati proročištu, već provjeriti rezultat njegova rada. Zatim, u slučaju uspješne provjere, takav se potpis može smatrati izvorom entropije za pseudoslučajni broj.

Waves blockchain platforma koristi shemu potpisa EdDSA opcija 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 poruke koja se potpisuje, privatnog ključa i istog slučajnog broja kao R. Ispada da ne postoji jedinstvena ovisnost za istu Postoji mnogo važećih potpisa za korisničku poruku.

Očito, u svom čistom obliku, takav potpis se ne može koristiti kao izvor pseudo-nasumičnih brojeva, budući da je nedeterministički i, stoga, njime proročište može lako manipulirati.

Ali, kako se pokazalo, zapravo ga je moguće učiniti determinističkim.

Imao sam velike nade slučajna funkcija koja se može provjeriti (VRF), ali nakon proučavanja hardvera, morao sam napustiti ovu opciju. Iako VRF nudi determinističku verziju potpisa i njegovog dokaza, postoji čudno mjesto u algoritmu koje otvara crnu rupu za manipulaciju proročišta. Naime, pri izračunavanju vrijednosti k (odjeljak 5.1) koristi se privatni ključ koji ostaje nepoznat korisniku, što znači da korisnik ne može provjeriti točnost izračuna k, što znači da Oracle može koristiti bilo koju vrijednost k koja mu je potrebna i istovremeno održavati bazu podataka korespondencija od k i potpisanih podataka kako bi se uvijek mogao ponovno izračunati točan rezultat sa stajališta VRF-a. Ako vidite crtež koji se temelji na VRF-u bez otkrivanja privatnog ključa, možete biti pametni: označite potrebu da se otkrije ključ ili ga isključite iz izračuna k, tada će se privatni ključ automatski otkriti kada se pojavi prvi potpis . Općenito, kao što je već spomenuto, čudna shema za slučajno proročište.

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

VECRO je skraćenica za Verifiable Elliptic Curve Random Oracle, što na ruskom znači provjerljivo slučajno proročanstvo na eliptičnim krivuljama.

Sve se pokazalo prilično jednostavnim; da biste postigli determinizam, morate popraviti vrijednost R prije nego što se pojavi poruka koju treba potpisati. Ako je R predan i dio je poruke koja se potpisuje, što dodatno osigurava da je R predan u poruci koja se potpisuje, vrijednost S je jedinstveno određena porukom korisnika i stoga se može koristiti kao izvor za pseudoslučajne brojeve.

U takvoj shemi, nije važno kako je R fiksiran; to ostaje odgovornost proročišta. Važno je da je S jednoznačno određen od strane korisnika, ali je njegova vrijednost nepoznata dok je orakul ne objavi. Sve što smo htjeli!

Govoreći o fiksnom R, imajte na umu da ponovno korišten R prilikom potpisivanja raznih poruka jedinstveno otkriva privatni ključ u EdDSA shemi. Vlasniku orakula postaje iznimno važno eliminirati mogućnost ponovne uporabe R-a za potpisivanje različitih korisničkih poruka. To jest, s bilo kakvom manipulacijom ili tajnim dogovorom, proročište će uvijek riskirati gubitak svog privatnog ključa.

Ukupno, Oracle mora pružiti korisnicima dvije funkcije: inicijalizaciju, koja fiksira vrijednost R, i potpis, koji vraća vrijednost S. U ovom slučaju, par R, S je uobičajeni provjerljivi potpis korisničke poruke koja sadrži fiksni vrijednost R i proizvoljne korisničke podatke.

Može se tvrditi da ova shema za blockchain nije ništa više od obične commit-expand shema. U biti, da, to je ona. Ali postoji nekoliko nijansi. Prvo, proročanstvo uvijek radi s istim ključem u svim operacijama, na primjer, ovo je zgodno koristiti u ugovorima. Drugo, postoji rizik da Oracle izgubi privatni ključ ako se ponaša neispravno, na primjer, Oracle vam dopušta da napravite uzorke rezultata, tada je dovoljno napraviti samo dva testa da biste saznali privatni ključ i dobili puni pristup novčaniku. Treće, potpis koji je izvorno provjerljiv na blockchainu i izvor je slučajnosti je prekrasan.

Šest mjeseci tinjala mi je u glavi ideja o implementaciji, dok se konačno u formi nije pojavila motivacija grant od Waves Labs. Uz veliku potporu dolazi i velika odgovornost, pa će projekt biti tu!

Provedba

Dakle, u ovom projektu Implementiran je VECRO na Waves blockchainu u načinu zahtjeva-odgovora korištenjem prijenosnih transakcija između korisnika i oraclea. Istodobno se na oracle račun instalira skripta koja kontrolira rad strogo u skladu s gore opisanom logikom. Oracle transakcije se provjeravaju i cijeli lanac korisničke interakcije se obnavlja. Sve četiri transakcije uključene su u provjeru konačne vrijednosti; pametni ugovor povezuje ih uz strogu verifikacijsku nit, provjeravajući sve vrijednosti korak po korak i ne ostavljajući prostora za bilo kakve manipulacije.

Još jednom, da ostavimo po strani i da bude jasnije. Proročište ne radi samo prema predloženoj shemi. Njegov rad je u potpunosti kontroliran na razini blockchaina od strane uspostavljenih usko s pametnim ugovorom. Zakoračite ulijevo i transakcija jednostavno neće proći. Dakle, ako je transakcija uključena u blockchain, korisnik čak i ne treba ništa provjeravati; stotine mrežnih čvorova već su sve provjerile umjesto njega.

Trenutno postoji jedan VECRO koji radi na glavnoj mreži Wavesa (možete pokrenuti vlastiti, nije teško, samo pogledajte primjer konfiguracije). Trenutačni kôd radi u PHP-u (na WavesKit, o kojem Rekao sam ti ranije).

Kako biste koristili oracle uslugu morate:

  • Popravi R;
    • Pošalji najmanje 0.005 valova na oracle alias init@vecr;
    • Primite R-kod u polje za privitak u prijenosu 1 R-vecr tokena od oraclea do korisnika;
  • Dobiti potpis;
    • Pošaljite najmanje 0.005 Wavesa na oracle alias random@vecr, a također MORATE navesti prethodno primljeni R-kod i dodatne korisničke podatke u polju za privitak;
    • Primite S-kod u polje za privitak u prijenosu 1 S-vecr tokena od oraclea do korisnika;
  • Koristite S-kod kao izvor pseudoslučajnog broja.

Nijanse trenutne implementacije:

  • Valovi poslani orakulu koriste se kao provizija za povratnu transakciju korisniku, do maksimalno 1 valova;
  • R-kod je spoj bajta znaka 'R' i 32-bajtne R vrijednosti kodirane base58;
  • R-kod u privitku treba biti prvi, korisnički podaci dolaze nakon R-koda;
  • S-kod je spoj bajta znaka 'S' i 32-bajtne base58-kodirane vrijednosti S;
  • S je rezultat modulo dijeljenja, tako da ne možete koristiti S kao puni 256-bitni pseudoslučajni broj (ovaj broj se može smatrati maksimalnim 252-bitnim pseudoslučajnim brojem);
  • Najjednostavnija opcija je koristiti hash S-koda kao pseudoslučajni broj.

Primjer primanja S-koda:

S tehničkog gledišta, proročište je potpuno spremno za rad, možete ga sigurno koristiti. Sa stajališta korištenja od strane prosječnog korisnika, postoji nedostatak prikladnog grafičkog sučelja; ovo će morati pričekati.

Rado ću odgovoriti na pitanja i prihvatiti komentare, hvala.

Izvor: www.habr.com

Dodajte komentar