Zoufälleg Orakel baséiert op digitaler Ënnerschrëft am Blockchain

Vun Iddi bis Implementatioun: Mir änneren déi existent elliptesch Curve digital Ënnerschrëft Schema sou datt et deterministesch ass, a baséiert op et gi mir Funktiounen fir Pseudo-zoufälleg Zuelen ze kréien, déi bannent der Blockchain verifizéierbar sinn.

Zoufälleg Orakel baséiert op digitaler Ënnerschrëft am Blockchain

Idea

Am Hierscht 2018 huet de Waves Blockchain abegraff éischt Smart Kontrakter aktivéiert, d'Fro stellt sech direkt iwwert d'Méiglechkeet ze kréien pseudorandom Zuelendatt Dir vertrauen kann.

Puzzelen iwwer dës Fro, sinn ech endlech zu der Conclusioun komm: all Blockchain ass eng Zell; et ass onméiglech eng zouverléisseg Quell vun Entropie an engem zouene System ze kréien.

Mä ech hunn nach eng Iddi gefall: wann zoufälleg Orakel wäert Benotzerdaten mat engem deterministeschen Algorithmus ënnerschreiwen, da wäert de Benotzer ëmmer fäeg sinn esou eng Ënnerschrëft mat dem ëffentleche Schlëssel z'iwwerpréiwen, a wäert sécher sinn datt de resultéierende Wäert eenzegaarteg ass. Den Orakel, egal wéi schwéier et wëll, ass näischt ze änneren; den Algorithmus produzéiert en eendeitegt Resultat. Wesentlech notéiert de Benotzer d'Resultat, awer weess et net bis den Orakel et publizéiert. Et stellt sech eraus datt Dir den Orakel guer net vertraue kënnt, awer d'Resultat vu senger Aarbecht iwwerpréift. Dann, am Fall vun erfollegräicher Verifizéierung, kann esou eng Ënnerschrëft als Quell vun der Entropie fir eng pseudorandom Zuel ugesi ginn.

D'Waves Blockchain Plattform benotzt en Ënnerschrëftschema EdDSA Optioun Ed25519. An dësem Schema besteet d'Ënnerschrëft aus de Wäerter R a S, wou R vun engem zoufällege Wäert hänkt, an S gëtt berechent op Basis vun der ënnerschriwwen Noriicht, dem private Schlëssel an der selwechter zoufälleger Zuel wéi R. Et stellt sech eraus datt et gëtt keng eenzegaarteg Ofhängegkeet fir déi selwecht Et gi vill valabel Ënnerschrëfte fir e Benotzer Message.

Natierlech, a senger reiner Form, kann esou eng Ënnerschrëft net als Quell vu pseudo-zoufälleg Zuelen benotzt ginn, well se net-deterministesch ass an dofir einfach vum Orakel manipuléiert ka ginn.

Awer, wéi et sech erausstellt, ass et tatsächlech méiglech et deterministesch ze maachen.

Ech hat grouss Hoffnungen fir verifizéierbar zoufälleg Funktioun (VRF), awer nodeems ech d'Hardware studéiert hunn, hunn ech dës Optioun missen opginn. Och wann VRF eng deterministesch Versioun vun der Ënnerschrëft a säi Beweis bitt, gëtt et eng komesch Plaz am Algorithmus, deen e schwaarzt Lach fir d'Manipulatioun vum Orakel opmaacht. Nämlech, wann Dir de Wäert vun k (Sektioun 5.1) gëtt e private Schlëssel benotzt, deen dem Benotzer onbekannt bleift, dat heescht datt de Benotzer d'Korrektheet vun der Berechnung vu k net verifizéiere kann, dat heescht datt den Orakel all Wäert vu k benotze kann deen et brauch a gläichzäiteg eng Datebank vu Korrespondenz erhalen vun k an déi ënnerschriwwen Donnéeën fir ëmmer fäeg sinn dat richtegt Resultat aus der Siicht vun der VRF ze berechnen. Wann Dir eng Zeechnung baséiert op VRF gesitt ouni de private Schlëssel ze verëffentlechen, kënnt Dir intelligent sinn: gitt de Besoin fir entweder de Schlëssel z'entdecken oder se aus der Berechnung vu k auszeschléissen, da wäert de private Schlëssel automatesch opdecken wann déi éischt Ënnerschrëft erschéngt . Am Allgemengen, wéi scho gesot, e komeschen Schema fir en zoufälleg Orakel.

No e bësse Gedanken an d'Ënnerstëtzung vu lokalen Analysten, ass de VECRO Aarbechtsschema gebuer.

VECRO ass eng Ofkierzung fir Verifiable Elliptic Curve Random Oracle, dat op Russesch heescht verifizéierbar zoufälleg Orakel op elliptesch Kéiren.

Alles huet sech als relativ einfach erausgestallt; fir Determinismus z'erreechen, musst Dir de Wäert vum R fixéieren ier de Message fir z'ënnerschreiwen erschéngt. Wann R engagéiert ass an en Deel vum Message ass, deen ënnerschriwwe gëtt, wat weider garantéiert datt R am Message ënnerschriwwe gëtt, gëtt de Wäert vun S eenzegaarteg duerch de Message vum Benotzer bestëmmt a kann dofir als Quell fir pseudorandom Zuelen benotzt ginn.

An esou engem Schema ass et egal wéi R fixéiert ass; dëst bleift d'Verantwortung vum Orakel. Et ass wichteg datt S eenzegaarteg vum Benotzer bestëmmt gëtt, awer säi Wäert ass onbekannt bis den Orakel et publizéiert. Alles wat mir wollten!

Apropos fixen R, notéiert dat weiderbenotzt R wann Dir verschidde Messagen ënnerschreift, weist et eenzegaarteg de private Schlëssel am EdDSA Schema. Et gëtt extrem wichteg fir de Besëtzer vum Orakel d'Méiglechkeet ze eliminéieren fir R ze benotzen fir verschidde Benotzermeldungen z'ënnerschreiwen. Dat ass, mat all Manipulatioun oder Kollusioun riskéiert den Orakel ëmmer säi private Schlëssel ze verléieren.

Am Ganzen muss den Orakel de Benotzer zwou Funktiounen ubidden: Initialiséierung, déi de Wäert R fixéiert, an d'Ënnerschrëft, déi de Wäert S zréckkënnt. An dësem Fall ass de Pair R, S déi üblech verifizéierbar Ënnerschrëft vun engem Benotzermeldung mat engem fixen Wäert R an arbiträr Benotzer Daten.

Et kann argumentéiert ginn datt dëst Schema fir de Blockchain näischt méi wéi normal ass engagéieren-erweideren Schema. Wesentlech, jo, dëst ass et. Awer et gi verschidde Nuancen. Als éischt funktionnéiert d'Orakel ëmmer mam selwechte Schlëssel an all Operatiounen, zum Beispill ass dëst bequem fir a Kontrakter ze benotzen. Zweetens ass et e Risiko datt den Orakel de private Schlëssel verléiert wann et sech falsch behuelen, zum Beispill, den Orakel erlaabt Iech Proben vum Resultat ze maachen, da geet et duer nëmmen zwee Tester ze maachen fir de private Schlëssel erauszefannen a voll ze gewannen Zougang zu de Portemonnaie. Drëttens, eng Ënnerschrëft déi nativ verifizéierbar ass op der Blockchain an eng Quell vun Zoufall ass schéin.

Fir sechs Méint huet d'Iddi vun der Implementatioun a mengem Kapp gekacht, bis endlech d'Motivatioun an der Form erschéngt Subventioun vu Waves Labs. Mat enger grousser Subventioun kënnt grouss Verantwortung, sou datt de Projet do ass!

Ëmsetzung

Also, an dësem Projet VECRO gouf ëmgesat op de Waves Blockchain am Ufro-Äntwert Modus mat Transfertransaktiounen tëscht dem Benotzer an dem Orakel. Zur selwechter Zäit gëtt e Skript op dem Orakelkonto installéiert, deen d'Aarbecht strikt am Aklang mat der uewen beschriwwener Logik kontrolléiert. Oracle Transaktioune ginn verifizéiert an déi ganz Kette vu Benotzerinteraktioun gëtt restauréiert. All véier Transaktioune sinn an der Verifizéierung vum Finale Wäert involvéiert; de Smart Kontrakt setzt se zesummen mat engem strikte Verifizéierungs thread, kontrolléiert all Wäerter Schrëtt fir Schrëtt a léisst kee Raum fir all Manipulatioun.

Nach eng Kéier, fir et op der Säit ze setzen a méi kloer ze maachen. Den Orakel funktionnéiert net nëmmen no dem proposéierte Schema. Seng Aarbecht ass komplett um Blockchain Niveau vun der etabléierter kontrolléiert enk mat engem Smart Kontrakt. Schrëtt no lénks an d'Transaktioun geet einfach net duerch. Also, wann eng Transaktioun am Blockchain abegraff ass, brauch de Benotzer net emol eppes ze iwwerpréiwen; Honnerte vun Netzknäppchen hunn alles fir hien iwwerpréift.

De Moment gëtt et ee VECRO um Waves Mainnet lafen (Dir kënnt Ären eegene lafen, et ass net schwéier, just huelt e Bléck op d'Konfiguratioun Beispill). Den aktuelle Code leeft an PHP (on WavesKit, iwwer déi Ech hunn Iech virdru gesot).

Fir den Oracle Service ze benotzen musst Dir:

  • Fix R;
    • Schéckt op d'mannst 0.005 Wellen op Oracle alias init@vecr;
    • Kritt den R-Code am Uschlossfeld am Transfert vun 1 R-vecr Token vum Orakel zum Benotzer;
  • Kréien eng Ënnerschrëft;
    • Schéckt op d'mannst 0.005 Wellen un den Orakel alias random@vecr, a MUSS och de virdru kritt R-Code an zousätzlech Benotzerdaten am Uschlossfeld uginn;
    • Kritt den S-Code am Uschlossfeld beim Transfer vun 1 S-vecr Token vum Orakel zum Benotzer;
  • Benotzt S-Code als Quell vun pseudo-zoufälleg Zuel.

Nuancen vun der aktueller Ëmsetzung:

  • Wellen, déi un den Orakel geschéckt ginn, ginn als Kommissioun fir d'Retourtransaktioun un de Benotzer benotzt, bis zu engem Maximum vun 1 Wellen;
  • R-Code ass d'Concatenation vun engem Byte vum 'R' Charakter an engem 32-Byte base58-kodéierte R Wäert;
  • R-Code am Uschloss soll éischt sinn, Benotzer Daten kommen no R-Code;
  • S-Code ass d'Concatenation vun engem Byte vum Charakter 'S' an engem 32-Byte base58-kodéierte Wäert vun S;
  • S ass d'Resultat vun der Modulo Divisioun, sou datt Dir S net als voll 256-Bit pseudorandom Zuel benotze kann (dës Zuel kann als maximal 252-Bit pseudorandom Zuel ugesi ginn);
  • Déi einfachst Optioun ass den S-Code Hash als pseudo-zoufälleg Zuel ze benotzen.

Beispill fir S-Code ze kréien:

Aus enger technescher Siicht ass den Orakel komplett prett fir ze schaffen, Dir kënnt et sécher benotzen. Aus der Siicht vun der Notzung vum duerchschnëttleche Benotzer feelt et un enger praktescher grafescher Interface; dëst muss waarden.

Ech wäert frou Froen ze äntweren an Kommentaren akzeptéieren, merci.

Source: will.com

Setzt e Commentaire