Random nga orakulo base sa digital signature sa blockchain

Gikan sa ideya hangtod sa pagpatuman: giusab namo ang kasamtangan nga elliptic curve digital signature scheme aron kini deterministiko, ug base niini naghatag kami og mga gimbuhaton alang sa pagkuha sa pseudo-random nga mga numero nga mapamatud-an sulod sa blockchain.

Random nga orakulo base sa digital signature sa blockchain

Ideya

Sa tinghunlak sa 2018, ang Waves blockchain naglakip gi-activate ang unang mga smart contract, mitungha dayon ang pangutana bahin sa posibilidad nga makuha pseudorandom nga mga numeronga imong masaligan.

Nalibog sa kini nga pangutana, sa katapusan nakahinapos ako: bisan unsang blockchain usa ka cell; imposible nga makakuha usa ka kasaligan nga gigikanan sa entropy sa usa ka sirado nga sistema.

Apan ganahan gihapon ko sa usa ka ideya: kung random nga orakulo mopirma sa data sa user gamit ang deterministikong algorithm, unya ang user kanunay makahimo sa pagmatuod sa maong pirma gamit ang public key, ug makasiguro nga ang resulta nga bili talagsaon. Ang orakulo, bisan unsa pa ka lisud ang gusto niini, dili makabag-o sa bisan unsa; ang algorithm nagpatunghag dili klaro nga sangputanan. Sa tinuud, girekord sa tiggamit ang resulta, apan wala mahibal-an kini hangtod nga gimantala kini sa orakulo. Kini nahimo nga dili ka makasalig sa orakulo, apan susiha ang resulta sa trabaho niini. Dayon, sa kaso sa malampuson nga pag-verify, ang ingon nga pirma mahimong isipon nga tinubdan sa entropy alang sa usa ka pseudorandom nga numero.

Ang Waves blockchain plataporma naggamit ug signature scheme EdDSA kapilian Ed25519. Niini nga laraw, ang pirma naglangkob sa mga kantidad nga R ug S, diin ang R nagdepende sa usa ka random nga kantidad, ug ang S gikalkulo base sa mensahe nga gipirmahan, ang pribadong yawe ug ang parehas nga random nga numero sama sa R. Kini nahimo nga walay talagsaon nga pagsalig alang sa sama Adunay daghang balido nga mga pirma alang sa usa ka mensahe sa user.

Dayag nga, sa lunsay nga porma niini, ang ingon nga pirma dili magamit ingon usa ka gigikanan sa pseudo-random nga mga numero, tungod kay kini dili deterministiko ug, busa, dali nga mamanipula sa orakulo.

Apan, ingon nga kini nahimo, posible nga himuon kini nga deterministiko.

Dako ang akong paglaom mapamatud-an nga random function (VRF), apan human sa pagtuon sa hardware, kinahanglan nakong biyaan kini nga opsyon. Bisan kung ang VRF nagtanyag usa ka deterministiko nga bersyon sa pirma ug ang pamatuod niini, adunay usa ka katingad-an nga lugar sa algorithm nga nagbukas sa usa ka itom nga lungag alang sa pagmaniobra sa orakulo. Sa ato pa, kung gikalkula ang kantidad sa k (seksyon 5.1) gigamit ang usa ka pribado nga yawe, nga nagpabilin nga wala mahibal-an sa tiggamit, nga nagpasabut nga ang tiggamit dili mapamatud-an ang pagkahusto sa pagkalkula sa k, nga nagpasabut nga ang orakulo makagamit sa bisan unsang kantidad sa k nga kinahanglan niini ug sa samang higayon magpadayon sa usa ka database sa mga sulat. sa k ug ang gipirmahan nga datos aron kanunay nga ma-compute pag-usab ang husto nga resulta gikan sa punto sa panglantaw sa VRF. Kung nakakita ka usa ka drowing nga gibase sa VRF nga wala ibutyag ang pribado nga yawe, mahimo ka nga maalamon: ipakita ang panginahanglan nga ipadayag ang yawe, o ibulag kini gikan sa pagkalkula sa k, unya ang pribado nga yawe awtomatiko nga ipadayag sa iyang kaugalingon kung makita ang una nga pirma. . Sa kinatibuk-an, ingon sa nahisgotan na, usa ka katingad-an nga laraw alang sa usa ka random nga orakulo.

Human sa gamay nga paghunahuna ug pagpangayo sa suporta sa mga lokal nga analista, ang pamaagi sa pagtrabaho sa VECRO natawo.

Ang VECRO usa ka minubo sa Verifiable Elliptic Curve Random Oracle, nga sa Russian nagpasabot nga verifiable random oracle sa elliptic curves.

Ang tanan nahimo nga yano ra; aron makab-ot ang determinismo, kinahanglan nimo nga ayohon ang kantidad sa R ​​sa wala pa makita ang mensahe nga pirmahan. Kung ang R nahimo ug usa ka bahin sa mensahe nga gipirmahan, nga labi nga nagsiguro nga ang R nahimo sa mensahe nga gipirmahan, ang kantidad sa S talagsaon nga gitino sa mensahe sa tiggamit ug busa magamit ingon usa ka gigikanan sa mga pseudorandom nga numero.

Sa ingon nga laraw, dili igsapayan kung giunsa pag-ayo ang R; kini nagpabilin nga responsibilidad sa orakulo. Importante nga ang S talagsaon nga gitino sa tiggamit, apan ang bili niini wala mahibal-i hangtud nga ang orakulo nagmantala niini. Tanan nga gusto namon!

Naghisgot bahin sa fixed R, timan-i kana gigamit pag-usab R sa pagpirma sa lain-laing mga mensahe, kini talagsaon nga nagpadayag sa pribado nga yawe sa EdDSA scheme. Kini nahimong hilabihan ka importante alang sa tag-iya sa orakulo sa pagwagtang sa posibilidad sa paggamit pag-usab R sa pagpirma sa lain-laing mga mensahe user. Sa ato pa, sa bisan unsang pagmaniobra o panagkunsabo, ang orakulo kanunay nga peligro nga mawad-an sa iyang pribadong yawe.

Sa kinatibuk-an, ang orakulo kinahanglan maghatag sa mga tiggamit og duha ka mga gimbuhaton: pagsugod, nga nag-ayo sa bili R, ug pirma, nga nagbalik sa bili S. Sa kini nga kaso, ang pares R, S mao ang naandan nga mapamatud-an nga pirma sa usa ka mensahe sa user nga adunay usa ka fixed. bili R ug arbitraryong datos sa tiggamit.

Mahimong ipangatarungan nga kini nga laraw alang sa blockchain dili labaw sa ordinaryo commit-expand scheme. Sa esensya, oo, siya kini. Apan adunay daghang mga nuances. Una, ang orakulo kanunay nga nagtrabaho sa parehas nga yawe sa tanan nga mga operasyon, pananglitan, kini dali gamiton sa mga kontrata. Ikaduha, adunay peligro nga ang orakulo mawad-an sa pribado nga yawe kung kini molihok nga dili husto, pananglitan, gitugotan ka sa orakulo nga maghimo mga sampol sa resulta, nan igo na nga maghimo lang duha ka pagsulay aron mahibal-an ang pribado nga yawe ug makuha ang bug-os. access sa pitaka. Ikatulo, ang usa ka pirma nga natural nga mapamatud-an sa blockchain ug usa ka gigikanan sa randomness matahum.

Sulod sa unom ka bulan ang ideya sa pagpatuman nag-anam sa akong ulo, hangtod sa katapusan ang pagdasig nagpakita sa porma grant gikan sa Waves Labs. Uban sa usa ka dako nga grant moabut dako nga responsibilidad, mao nga ang proyekto anaa didto!

Pagpatuman

Busa, sa niini nga proyekto Gipatuman ang VeCRO sa Waves blockchain sa request-response mode gamit ang mga transaksyon sa pagbalhin tali sa user ug sa orakulo. Sa parehas nga oras, usa ka script ang gi-install sa oracle account nga nagkontrol sa trabaho nga higpit nga nahiuyon sa lohika nga gihulagway sa ibabaw. Ang mga transaksyon sa Oracle gipamatud-an ug ang tibuok nga kadena sa interaksyon sa tiggamit gipahiuli. Ang tanan nga upat ka mga transaksyon nalangkit sa pag-verify sa katapusang kantidad; ang intelihente nga kontrata nagdugtong kanila sa usa ka higpit nga hilo sa pag-verify, pagsusi sa tanan nga mga kantidad sa lakang ug wala’y gibilin nga lugar alang sa bisan unsang pagmaniobra.

Sa makausa pa, aron ibutang kini sa gawas ug himoon kini nga mas klaro. Ang orakulo dili lang molihok sumala sa gisugyot nga laraw. Ang trabaho niini hingpit nga kontrolado sa lebel sa blockchain sa natukod hugot sa usa ka smart contract. Lakang sa wala ug ang transaksyon yano nga dili moagi. Busa, kung ang usa ka transaksyon gilakip sa blockchain, ang tiggamit dili na kinahanglan nga magsusi bisan unsa; gatusan ka mga network node ang nakasusi na sa tanan alang kaniya.

Sa pagkakaron, adunay usa ka VECRO nga nagdagan sa Waves mainnet (mahimo nimong ipadagan ang imong kaugalingon, dili kini lisud, tan-awa ang panig-ingnan sa pag-configure). Ang kasamtangan nga code nagdagan sa PHP (on WavesKit, mahitungod sa unsa Gisultihan ko ikaw kaniadto).

Aron magamit ang serbisyo sa oracle kinahanglan nimo:

  • Ayuhon R;
    • Magpadala ug labing menos 0.005 Waves sa oracle alias init@vecr;
    • Dawata ang R-code sa attachment field sa pagbalhin sa 1 R-vecr token gikan sa orakulo ngadto sa user;
  • Pagkuha og pirma;
    • Ipadala ang labing menos 0.005 nga mga Waves sa oracle alias random@vecr, ug KINAHANGLAN usab nga ipakita ang nadawat kaniadto nga R-code ug dugang nga datos sa tiggamit sa natad sa kalakip;
    • Dawata ang S-code sa attachment field sa pagbalhin sa 1 S-vecr token gikan sa orakulo ngadto sa user;
  • Gamita ang S-code isip tinubdan sa pseudo-random nga numero.

Mga nuances sa kasamtangan nga pagpatuman:

  • Ang mga balud nga gipadala sa orakulo gigamit ingon usa ka komisyon alang sa pagbalik sa transaksyon sa tiggamit, hangtod sa labing taas nga 1 Mga Waves;
  • Ang R-code mao ang concatenation sa usa ka byte sa 'R' nga karakter ug usa ka 32-byte base58-encoded R value;
  • R-code sa attachment kinahanglan nga una, user data moabut human sa R-code;
  • Ang S-code mao ang concatenation sa usa ka byte sa karakter nga 'S' ug usa ka 32-byte base58-encoded value sa S;
  • Ang S mao ang resulta sa modulo division, mao nga dili nimo magamit ang S isip usa ka bug-os nga 256-bit pseudorandom nga numero (kini nga numero mahimong isipon nga maximum sa 252-bit pseudorandom nga numero);
  • Ang pinakasimple nga kapilian mao ang paggamit sa S-code hash isip pseudo-random nga numero.

Pananglitan sa pagdawat sa S-code:

Gikan sa teknikal nga punto sa panglantaw, ang orakulo hingpit nga andam alang sa trabaho, mahimo nimo kini luwas nga gamiton. Gikan sa punto sa pagtan-aw sa paggamit sa kasagaran nga tiggamit, adunay kakulang sa usa ka kombenyente nga graphical interface; kini kinahanglan nga maghulat.

Malipay ko sa pagtubag sa mga pangutana ug pagdawat sa mga komentaryo, salamat.

Source: www.habr.com

Idugang sa usa ka comment