Nakala ya mazungumzo kulingana na saini ya dijiti kwenye blockchain

Kuanzia wazo hadi utekelezaji: tunarekebisha mpango wa sahihi wa kidijitali wa curve iliyopo ili iweze kubainishwa, na kwa kuzingatia hilo tunatoa utendakazi wa kupata nambari bandia za nasibu zinazoweza kuthibitishwa ndani ya blockchain.

Nakala ya mazungumzo kulingana na saini ya dijiti kwenye blockchain

Wazo

Katika msimu wa joto wa 2018, blockchain ya Waves ilijumuishwa mikataba ya kwanza mahiri imeanzishwa, swali liliondoka mara moja kuhusu uwezekano wa kupata nambari za pseudorandomkwamba unaweza kuamini.

Kwa kutatanisha juu ya swali hili, hatimaye nilifikia hitimisho: blockchain yoyote ni seli; haiwezekani kupata chanzo cha kuaminika cha entropy katika mfumo uliofungwa.

Lakini bado nilipenda wazo moja: ikiwa oracle bila mpangilio itatia saini data ya mtumiaji kwa algorithm ya kubainisha, kisha mtumiaji ataweza kuthibitisha saini hiyo kila wakati kwa kutumia ufunguo wa umma, na atakuwa na uhakika kwamba thamani inayotokana ni ya kipekee. Oracle, haijalishi inataka sana, haiwezi kubadilisha chochote; algorithm hutoa matokeo dhahiri. Kimsingi, mtumiaji anarekodi matokeo, lakini hajui hadi oracle itakapochapisha. Inatokea kwamba huwezi kuamini oracle hata kidogo, lakini angalia matokeo ya kazi yake. Kisha, katika kesi ya uthibitishaji wa mafanikio, saini hiyo inaweza kuchukuliwa kuwa chanzo cha entropy kwa nambari ya pseudorandom.

Jukwaa la Waves blockchain linatumia mpango wa saini EdDSA chaguo Ed25519. Katika mpango huu, saini ina maadili R na S, ambapo R inategemea thamani ya nasibu, na S huhesabiwa kulingana na ujumbe unaotiwa saini, ufunguo wa kibinafsi na nambari sawa na R. Inabadilika kuwa hakuna utegemezi wa kipekee kwa sawa Kuna sahihi nyingi halali za ujumbe wa mtumiaji.

Kwa wazi, katika hali yake safi, saini kama hiyo haiwezi kutumika kama chanzo cha nambari za bahati nasibu, kwani sio ya kuamua na, kwa hivyo, inaweza kubadilishwa kwa urahisi na oracle.

Lakini, kama ilivyotokea, inawezekana kuifanya iwe ya kuamua.

Nilikuwa na matumaini makubwa kazi ya nasibu inayoweza kuthibitishwa (VRF), lakini baada ya kusoma vifaa, ilibidi niachane na chaguo hili. Ingawa VRF inatoa toleo la kuamua la sahihi na uthibitisho wake, kuna mahali pa kushangaza katika algoriti ambayo hufungua shimo jeusi kwa kudanganywa kwa chumba cha ndani. Yaani, wakati wa kuhesabu thamani ya k (sehemu ya 5.1) ufunguo wa kibinafsi unatumiwa, ambao bado haujulikani kwa mtumiaji, ambayo ina maana kwamba mtumiaji hawezi kuthibitisha usahihi wa hesabu ya k, ambayo ina maana chumba cha ndani kinaweza kutumia thamani yoyote ya k inayohitaji na wakati huo huo kudumisha hifadhidata ya mawasiliano. ya k na data iliyotiwa saini ili kuwa na uwezo wa kukokotoa tena matokeo sahihi kutoka kwa mtazamo wa VRF . Ukiona mchoro kulingana na VRF bila kufichua ufunguo wa faragha, unaweza kuwa mwerevu: onyesha hitaji la kufichua ufunguo, au uiondoe kwenye hesabu ya k, kisha ufunguo wa faragha utajidhihirisha kiotomati wakati sahihi ya kwanza itaonekana. . Kwa ujumla, kama ilivyotajwa tayari, mpango wa kushangaza wa oracle isiyo ya kawaida.

Baada ya kufikiria kidogo na kuomba msaada wa wachambuzi wa ndani, mpango wa kazi wa VECRO ulizaliwa.

VECRO ni kifupisho cha Verifiable Elliptic Curve Random Oracle, ambayo kwa Kirusi inamaanisha chumba cha ndani kinachoweza kuthibitishwa kwenye mikondo ya duaradufu.

Kila kitu kiligeuka kuwa rahisi sana; ili kufikia uamuzi, unahitaji kurekebisha thamani ya R kabla ya ujumbe kusainiwa kuonekana. Ikiwa R imejitolea na ni sehemu ya ujumbe unaotiwa saini, ambayo inahakikisha zaidi kwamba R imejitolea katika ujumbe unaotiwa saini, thamani ya S inabainishwa kipekee na ujumbe wa mtumiaji na kwa hivyo inaweza kutumika kama chanzo cha nambari za uwongo.

Katika mpango kama huo, haijalishi jinsi R imewekwa; hii inabaki kuwa jukumu la chumba cha kulala. Ni muhimu kwamba S iamuliwe kipekee na mtumiaji, lakini thamani yake haijulikani hadi chumba cha ndani kitakapoichapisha. Kila kitu tulichotaka!

Akizungumza ya fasta R, kumbuka kuwa kutumika tena R wakati wa kusaini ujumbe mbalimbali, hufichua kwa njia ya kipekee ufunguo wa faragha katika mpango wa EdDSA. Inakuwa muhimu sana kwa mmiliki wa chumba cha ndani kuondoa uwezekano wa kutumia tena R kusaini ujumbe tofauti wa watumiaji. Hiyo ni, kwa udanganyifu wowote au kula njama, chumba cha ndani kitahatarisha kupoteza ufunguo wake wa faragha kila wakati.

Kwa jumla, chumba cha ndani lazima kipe watumiaji kazi mbili: uanzishaji, ambao hurekebisha thamani R, na sahihi, ambayo hurejesha thamani S. Katika hali hii, jozi R, S ni sahihi ya kawaida ya kuthibitishwa ya ujumbe wa mtumiaji iliyo na fasta. thamani R na data ya kiholela ya mtumiaji.

Inaweza kusema kuwa mpango huu wa blockchain sio kitu zaidi ya kawaida fanya-kupanua mpango. Kimsingi, ndio, hii ndio. Lakini kuna nuances kadhaa. Kwanza, chumba cha ndani kila wakati hufanya kazi na ufunguo sawa katika shughuli zote, kwa mfano, hii ni rahisi kutumia katika mikataba. Pili, kuna hatari ya chumba cha kulia kupoteza ufunguo wa kibinafsi ikiwa kitafanya vibaya, kwa mfano, oracle hukuruhusu kufanya sampuli za matokeo, basi inatosha kufanya vipimo viwili tu ili kujua ufunguo wa kibinafsi na kupata kamili. upatikanaji wa mkoba. Tatu, saini ambayo inaweza kuthibitishwa kwa asili kwenye blockchain na ni chanzo cha bahati nasibu ni nzuri.

Kwa muda wa miezi sita wazo la utekelezaji lilikaa kichwani mwangu, hadi hatimaye motisha ilionekana katika fomu ruzuku kutoka kwa Waves Labs. Kwa ruzuku kubwa huja wajibu mkubwa, hivyo mradi utakuwa pale!

Utekelezaji

Kwa hivyo, katika mradi huu VECRO ilitekelezwa kwenye blockchain ya Waves katika hali ya kujibu ombi kwa kutumia shughuli za uhamishaji kati ya mtumiaji na chumba cha ndani. Wakati huo huo, script imewekwa kwenye akaunti ya oracle ambayo inadhibiti kazi madhubuti kwa mujibu wa mantiki iliyoelezwa hapo juu. Shughuli za Oracle zinathibitishwa na mlolongo mzima wa mwingiliano wa watumiaji hurejeshwa. Shughuli zote nne zinahusika katika kuthibitisha thamani ya mwisho; mkataba mahiri huziunganisha pamoja na uzi wa uthibitishaji, ukiangalia thamani zote hatua kwa hatua na bila kuacha nafasi ya udanganyifu wowote.

Kwa mara nyingine tena, kuiweka kando na kuifanya iwe wazi zaidi. Oracle haifanyi kazi tu kulingana na mpango uliopendekezwa. Kazi yake inadhibitiwa kabisa katika ngazi ya blockchain na imara tightly na mkataba smart. Hatua ya kushoto na muamala hautapitia. Kwa hivyo, ikiwa shughuli imejumuishwa kwenye blockchain, mtumiaji haitaji hata kuangalia chochote; mamia ya nodi za mtandao tayari zimemkagua kila kitu.

Hivi sasa, kuna VECRO moja inayoendesha kwenye mainnet ya Waves (unaweza kuendesha yako mwenyewe, sio ngumu, tu. angalia mfano wa usanidi) Nambari ya sasa inaendesha katika PHP (on WavesKit, kuhusu Nilikuambia mapema).

Ili kutumia huduma ya oracle lazima:

  • Rekebisha R;
    • Tuma angalau Mawimbi 0.005 kwa oracle alias init@vecr;
    • Pokea msimbo wa R katika uwanja wa kiambatisho katika uhamisho wa tokeni 1 ya R-vecr kutoka kwa chumba cha ndani hadi kwa mtumiaji;
  • Pata saini;
    • Tuma angalau Mawimbi 0.005 kwa chumba cha ndani lakabu random@vecr, na pia LAZIMA ionyeshe msimbo wa R uliopokelewa hapo awali na data ya ziada ya mtumiaji katika sehemu ya kiambatisho;
    • Pokea msimbo wa S katika uga wa kiambatisho katika uhamishaji wa tokeni 1 ya S-vecr kutoka kwa chumba cha ndani hadi kwa mtumiaji;
  • Tumia msimbo wa S kama chanzo cha nambari bandia za nasibu.

Nuances ya utekelezaji wa sasa:

  • Mawimbi yaliyotumwa kwenye chumba cha ndani hutumiwa kama tume ya shughuli ya kurudi kwa mtumiaji, hadi upeo wa Mawimbi 1;
  • Msimbo wa R ni muunganisho wa baiti ya herufi 'R' na thamani ya msingi ya baiti 32 ya msingi58 iliyosimbwa;
  • Msimbo wa R katika kiambatisho unapaswa kuwa wa kwanza, data ya mtumiaji inakuja baada ya R-code;
  • Msimbo wa S ni muunganisho wa baiti ya herufi 'S' na thamani ya baiti 32 ya msingi58 ya S;
  • S ni matokeo ya mgawanyiko wa modulo, kwa hivyo huwezi kutumia S kama nambari ya uwongo ya biti 256 kamili (nambari hii inaweza kuchukuliwa kuwa nambari ya uwongo ya biti 252);
  • Chaguo rahisi ni kutumia heshi ya msimbo wa S kama nambari isiyo ya kawaida.

Mfano wa kupokea S-code:

Kutoka kwa mtazamo wa kiufundi, oracle iko tayari kabisa kwa kazi, unaweza kuitumia kwa usalama. Kwa mtazamo wa matumizi ya mtumiaji wa kawaida, kuna ukosefu wa kiolesura cha picha kinachofaa; hii italazimika kusubiri.

Nitafurahi kujibu maswali na kukubali maoni, asante.

Chanzo: mapenzi.com

Kuongeza maoni