Sissejuhatus
function getAbsoluutseltJuhuslikNumber() {
return 4; // tagastab tÀiesti juhusliku numbri!
}Nagu ka tĂ€iesti vastupidava krĂŒptograafia kontseptsiooni puhul, pĂŒĂŒavad reaalsed "Avalikult Kontrollitavad Juhuslikku Tuli" (edaspidi PVRB) protokollid vĂ”imalikult lĂ€hedale ideaalsetele skeemidele, kuna reaalsetes vĂ”rkudes ei ole puhtal kujul see rakendatav: kokkulepped peavad puudutama rangelt ĂŒht bitti, ringe peab olema palju ning kĂ”ik sĂ”numid peavad olema ideaalselt kiired ja alati kohaletoimetatud. Loomulikult ei ole see reaalses elus nii. SeetĂ”ttu, kui projekteerida PVRB konkreetsete ĂŒlesannete jaoks kaasaegsetes plokiahelates, lisaks juhusliku arvu ja krĂŒptograafilise vastupidavuse kontrollimise vĂ”imatusele, tekib palju puhtalt arhitektuurilisi ja tehnilisi probleeme.
Blockchain on PVRB essentially serves as a communication environment where messages represent transactions. This allows for partial abstraction from network issues, message delivery failures, and problems with intermediary software â all these risks are managed by the decentralized network. The primary value for PVRB lies in the impossibility of retracting or corrupting a transaction once it has been sent, which prevents participants from opting out of the protocol unless they have successfully executed an attack on consensus. This level of security is acceptable, thus PVRB must be resilient against collusion among participants to the same degree as the main blockchain. Furthermore, this implies that PVRB should be part of the consensus if the network has reached an agreement on the main block chain, and it should negotiate a single fair resulting randomness at the same time. Alternatively, PVRB can function as a standalone protocol, implemented through a smart contract, operating asynchronously in relation to the blockchain and the blocks. Both methods have their own advantages and disadvantages, and choosing between them is quite non-trivial.
Kaks vÔimalust PVRB rakendamiseks
Kirjeldame lĂ€hemalt kahte PVRB rakenduse varianti â iseseisev versioon, mis töötab sĂ”ltumatult plokiahela nutilepinguga, ja konsensusintegratsiooni â sĂŒsteemi, mille kohaselt nĂ”ustub vĂ”rk plokkide ahelate ja kaasatud tehingutega. KĂ”igis nendes juhtudel mĂ”tlen ma populaarsetele plokiahela mootoritele: Ethereum, EOS ja kĂ”ik sellele sarnased nutilepingute paigutamise ja töötlemise viisid.
Iseseisev leping
Selles PVRB variandis on tegemist nutilepinguga, mis vĂ”tab vastu juhuslike tootjate (edaspidi RP) tehingud, töötleb neid, kombineerib tulemusi ning jĂ”uab lĂ”ppkokkuvĂ”ttes teatud vÀÀrtuseni, mille igal kasutajal on vĂ”imalik sellest lepingust saada. See vÀÀrtus ei pruugi lepingus otse olla salvestatud, vaid vĂ”ib olla esindatud ainult andmetena, millest saab deterministlikult tuletada ĂŒhe ja ainsa tulemuse juhuslikkuse. Selles skeemis on RP plokiahela kasutajad, ja protsessi genereerimises vĂ”ivad osaleda kĂ”ik soovijad.
Iseseisva lepingu variant on hea:
- ĂŒlekantavuse (lepingud saab ĂŒle kanda plokiahelast plokiahelasse)
- lihtsuse rakendamisel ja testimisel (lepinguid on mugav kirjutada ja testida)
- mugavuse osas majanduslike skeemide rakendamisel (on lihtne luua oma token, mille loogika teenib PVRB eesmÀrke)
- vÔimaluse osas kÀivitamiseks juba töötavates plokiahelates
Kuid sellel on ka puudused:
- suured piirangud ressursside osas arvutustes, tehingu maht ja salvestus (lihtsalt öeldes cpu/mem/io)
- piirangud operatsioonidele lepingus (kĂ”ik kĂ€sud ei ole saadaval, keeruline on ĂŒhendada vĂ€liseid teeke)
- vÔimetus korraldada sÔnumite vahetust kiiremini, kui tehingud plokiahelasse sisestatakse
See valik sobib PVRB rakendamiseks, mille tuleb kĂ€ivitada juba olemasolevas vĂ”rgus, mis ei sisalda keerulist krĂŒptograafiat ja ei nĂ”ua suurt suhtlemiste arvu.
Konsensuse integreeritud
Selles variandis on PVRB rakendatud plokiahela sĂ”lme koodis, integreeritud vĂ”i töötades paralleelselt sĂ”lmede vahelise sĂ”numivahetusega. Protokolli tulemused salvestatakse otse genereeritud plokkidesse ja protokolli sĂ”numid saadetakse p2p-vĂ”rgus sĂ”lmede vahel. Kuna protokoll toodab numbreid, mis peavad olema plokkidesse kirjutatud, peab vĂ”rgustik nende osas konsensusele jĂ”udma. See tĂ€hendab, et PVRB sĂ”numid, nagu ka tehingud, peavad olema sĂ”lmede poolt valideeritud ja plokkidesse lisatud, et iga vĂ”rgu osaleja saaks PVRB protokolli jĂ€rgimist valideerida. See viib meid automaatselt ilmse lahenduse juurde: kui vĂ”rk jĂ”uab konsensusele ploki ja selles olevate tehingute osas, peab PVRB olema osa konsensusest, mitte eraldi protokoll. Vastasel juhul on vĂ”imalik olukord, kus plokk on kehtiv konsensuse seisukohalt, kuid PVRB protokolli ei jĂ€rgita, ja PVRB seisukohalt ei saa plokki aktsepteerida. Seega, kui valitakse âconsensus-integratedâ variant, muutub PVRB oluliseks osaks konsensusest.
KonsensusvĂ”rgus PVRB rakenduste kirjeldamisel ei tohiks jĂ€tta tĂ€helepanuta lĂ”plikkuse teemasid. LĂ”plikkus on mehhanism, mida kasutatakse deterministlikes konsensusprotsessides, et fikseerida plokk (ja sellele viiv ahel), mis on lĂ”plik ja ei saa kunagi tagasi lĂŒkatud, isegi kui ilmneb paralleelne haru. NĂ€iteks Bitcoinis sellist mehhanismi ei ole â kui postitada keerukama ahelaga plokk, asendab see mistahes vĂ€hem keeruka, sĂ”ltumata ahelate pikkusest. EOS-is, nĂ€iteks, on lĂ”plikud nii nimetatud viimane pöördumatu plokk (Last Irreversible Blocks), mis ilmnevad keskmiselt iga 432 ploki jĂ€rel (12*21 + 12*15, eelhÀÀlestus + eelkomiteerimine). See protsess on pĂ”himĂ”tteliselt 2/3 allkirjade (block-producers, edaspidi BP) ootamine. Harude puhul, mis on vanemad kui viimane LIB, lihtsalt kĂ”rvaldakse need. See mehhanism tagab, et tehing on kindlalt kinnitatud plokikahelasse ja ei saa kunagi tagasi vĂ”etud, sĂ”ltumata rĂŒndaja ressurssidest. Samuti on lĂ”plikud plokid need, mis on allkirjastatud 2/3 BP Hyperledgeris, Tendermintis ja muudes pBFT-pĂ”histes konsensusprotsessides. Samuti on mĂ”istlik teha finantseerimise protokoll konsensusmehhanismi kohal, kuna see saab töötada asĂŒnkroonselt plokkide tootmise ja avaldamisega. See on hea Ethereum'i lĂ”plikkusest.
LĂ”plikkus on ĂŒlioluline kasutajatele, kes vĂ”ivad selle puudumisel sattuda 'double spend' rĂŒnnaku ohvriks, kus BP 'hoiab' blokke kinni ja avaldab need pĂ€rast seda, kui vĂ”rk on nĂ€inud head tehingut. Kui lĂ”plikkust pole, asendab avaldatud fork bloki 'heas' tehingus 'halva' forki omaga, kus samad vahendid kantakse rĂŒndaja aadressile. PVRB puhul muutuvad nĂ”uded lĂ”plikkusele veelgi rangemaks, kuna PVRB forki loomine tĂ€hendab, et rĂŒndajal on vĂ”imalus valmistada mitmeid variatsioone, et avaldada enda jaoks kĂ”ige soodsam, ning piirata rĂŒnnaku vĂ”imalust â hea lahendus.
Seega on parim variant ĂŒhendada PVRB ja lĂ”plikkus ĂŒhte protokolli â siis on lĂ”plik blok = lĂ”plik juhus, ja see on tĂ€pselt see, mida pidi saavutama. NĂŒĂŒd saavad mĂ€ngijad garanteeritud juhuse N sekundi jooksul ja vĂ”ivad olla kindlad, et seda ei saa tagasi kerida ega uuesti mĂ€ngida.
Konsensusintegratsiooni variant on hea:
- asĂŒnkroonse elluviimise vĂ”imalus plokkide tootmise osas â plokid valmivad nagu tavaliselt, kuid samal ajal vĂ”ib töötada PVRB protokoll, mis genereerib mitte iga ploki puhul juhuslikke elemente.
- vĂ”imalus rakendada isegi keerulist krĂŒptograafiat ilma piiranguteta, mida smart-lepingud peale panevad.
- vÔimalus korraldada sÔnumivahetust kiiremini, kui tehingud plokkidesse lisatakse; nÀiteks vÔib osa protokollist töötada sÔlmede vahel juhul, kui sÔnumeid ei edastata kogu vÔrgus.
Kuid sellel on ka puudused:
- keerukus testimisel ja arendamisel â tuleb emuleerida vĂ”rguvead, kadunud sĂ”lmed, vĂ”rgu hard-forkid.
- rakendamises esinevad vead nÔuavad vÔrgu hard-forki.
MĂ”lemad PVRB rakendusviisid on Ă”igustatud, kuid nutilepingute kasutamine tĂ€napĂ€eva plokiahelates on siiski tugevalt piiratud arvutusressursside osas, mistĂ”ttu on tĂ”sise krĂŒptograafia kasutamine sageli lihtsalt vĂ”imatu. TĂ”sine krĂŒptograafia on vajalik, nagu allpool demonstreeritakse. Kuigi see probleem on ilmselgelt ajutine, on tĂ”sine krĂŒptograafia lepingutes vajalik paljude ĂŒlesannete lahendamiseks ja see ilmub jĂ€rk-jĂ€rgult (nĂ€iteks sĂŒsteemilepingud zkSNARKide jaoks Ethereumis).
Plokiahel, mis tagab protokolli jaoks lĂ€bipaistva ja usaldusvÀÀrse sĂ”numivahetuse kanali, ei tee seda tasuta. Iga detsentraliseeritud protokoll peab arvestama Sybil-rĂŒnnaku vĂ”imalustega; iga tegevust on vĂ”imalik teha kooskĂ”lastatud tegevuste abil paljude kontode kaudu, seetĂ”ttu tuleb projekteerimisel arvestada ka rĂŒndajate vĂ”imalusega luua meelevaldne arv osalisi protokolli liikmeid, kes tegutsevad kokkuleppes.
PVRB ja ploki muutujad.
Ma ei valetanud, kui ĂŒtlesin, et head PVRB-d, mille on kinnitanud mitmed hasartmĂ€ngu rakendused, ei ole plokiahelates praegu rakendatud. Kust siis tuleb nii palju hasartmĂ€ngu rakendusi Ethereumis ja EOS-is? Mind imestab see samuti nagu teid, aga kust on tĂ€iesti deterministlikus keskkonnas niisugust âstabiilsetâ juhuslikkust leidnud?
Lemmikmeetod juhuslikkuse saamiseks plokiahelas on vĂ”tta mĂ”ni âennustamatuâ teave plokist ja selle pĂ”hjal juhuslikkust genereerida â lihtsalt hashides ĂŒhe vĂ”i mitu vÀÀrtust. Hea artikkel selliste skeemide probleemidest. VĂ”ib vĂ”tta mĂ”ne âennustamatuâ vÀÀrtuse plokis, nĂ€iteks ploki hash, tehingute arv, vĂ”rgutaseme keerukus ja muud, eelnevalt teadmata vÀÀrtused. Siis hashida need, ĂŒks vĂ”i mitu, ja idee kohaselt peaks tulemuseks olema pĂ€ris juhuslikkus. VĂ”ib isegi lisada whitepaperisse, et teie skeem on âpost-quantum secureâ (kuna olemas on kvantitĂ”endavad hash-funktsioonid :)).
Aga isegi post-quantum secure hash'id ei ole piisavad, kahjuks. Saladus peitub nÔudmistes PVRB suhtes, meenutan neid eelmisest artiklist:
- Tulemus peab olema tĂ”estatult ĂŒhtlaselt jaotatud, st pĂ”hineda tĂ”estatult tugevatel krĂŒptograafiatel.
- Ăkski tulemusbit ei saa olla kontrollitav. SeetĂ”ttu ei saa tulemust eelnevalt ennustada.
- Protokolli genereerimist ei saa saboteerida, osaledes protokollis vĂ”i koormates vĂ”rgustikku rĂŒndavate teadetega.
- KÔik eelpooltoodud peab olema vastupidav kokkulepetele lubatud arvu ebaausate osaliste osas (nt 1/3 osalistest).
Sellisel juhul jĂ€rgib sĂŒsteem ainult nĂ”uet 1, kuid ei jĂ€rgi nĂ”uet 2. Hashides ettearvamatuid vÀÀrtusi plokkidest, saame ĂŒhtlase jaotuse ja head juhuslikkust. Kuid BP-l on vĂ€hemalt vĂ”imalus "plokki avaldada vĂ”i mitte". Seega saab BP valida vĂ€hemalt KAHES variandis juhuslikkuse: "oma" ja selle, mis tekib, kui ploki avaldab keegi teine. BP vĂ”ib eelnevalt "vaadata", mis juhtub, kui ta avaldab ploki, ja lihtsalt otsustada, kas seda teha vĂ”i mitte. Nii et nĂ€iteks mĂ€ngides "paar-ĂŒks" vĂ”i "punane/must" ruletti, vĂ”ib ta ploki avaldada ainult siis, kui ta nĂ€eb vĂ”itu. See muudab ka ebaefektiivseks strateegia, mis kasutab ploki "tuleviku" hash'i. Sellisel juhul rÀÀgitakse, et "kasutatakse juhuslikkust, mis saadakse praeguste andmete ja tulevase ploki, nĂ€iteks kĂ”rgusega N + 42 hash'ist, kus N on praeguse ploki kĂ”rgus. See veidi tugevdab skeemi, kuid vĂ”imaldab siiski BP-l tulevikus valida, kas plokki kinni hoida vĂ”i avaldada.
BP tarkvara muutub selles osas keerukamaks, kuid mitte oluliselt. Lihtsalt valideerimise ja tehingu lisamise kĂ€igus plokki toimub kiire kontroll, kas vĂ”it on vĂ”imalik, ja vĂ”ib-olla ĂŒhe tehingu parameetri valimine, et saavutada kĂ”rge tĂ”enĂ€osus vĂ”itmiseks. Samuti on peaaegu vĂ”imatu pĂŒĂŒda nutikat BP-d, kuna selliste manipulatsioonide jaoks vĂ”ib igal korral kasutada uusi aadresse ja vĂ”ita vĂ€hehaaval, kahtlust Ă€ratamata.
SeetĂ”ttu ei sobi ploki teabega kasutatavad meetodid PVRB universaalse rakenduse jaoks. Piiratud varianti, kus on piirmÀÀrad panuste suurusele, mĂ€ngijate arvu piirangud ja/vĂ”i KYC registreerimine (et mitte lubada ĂŒhel mĂ€ngijal kasutada mitut aadressi), vĂ”ivad need skeemid töötada vĂ€ikeste mĂ€ngude jaoks, kuid mitte rohkemaks.
PVRB ja commit-reveal.
Noh, aitĂ€h, et hashimine ja vĂ€hemalt suhteline ettearvamatus ploki hashis ja muudes muutujates. Kui lahendada kaevandajate eesjooksu probleem, peaks tulemus olema midagi paremat. Lisame sellesse skeemi kasutajad â las nadki mĂ”jutavad juhuslikkust: iga tehnilise toe töötaja ĂŒtleb teile, et IT-sĂŒsteemides on kĂ”ige juhuslikum kasutajate tegevus đ
Lihtne skeem, kus kasutajad saadavad lihtsalt juhuslikke numbreid ning tulemus arvutatakse nĂ€iteks nende summa hash'ina, ei sobi. Sellisel juhul saab viimane mĂ€ngija, valides oma juhuslikkuse, kontrollida, milline tulemus saadakse. SeetĂ”ttu kasutatakse laialdaselt kasutatavat mustrit commit-reveal. Osalejad saadavad esmalt oma juhuslikest (commitâid) hashâid ja avavad seejĂ€rel juhuslikud arvud (revealâid). âRevealâ faas algab alles pĂ€rast seda, kui vajalikud commitâid on kogutud, seega saavad osalejad saata tĂ€pselt selle juhuslikkuse, mille hashâi nad varem saatsid. NĂŒĂŒd ĂŒhendame kĂ”ik selle ploki parameetritega, eelistatult tulevikust vĂ”etud (juhuslikkust saab teada alles ĂŒhes tulevastes plokkides), ja voilĂ â juhuslikkus on valmis! NĂŒĂŒd mĂ”jutab iga mĂ€ngija lĂ”plikku juhuslikkust ja vĂ”ib âvĂ”itaâ pahatahtliku BP, blokeerides tema juhuslikkuse oma, eelnevalt teadmata, juhuslikkusega... Samuti vĂ”ib lisada kaitse protokolli saboteerimise eest, nĂ”udes commit'e ajal tehingule teatavat summat â kindlustusdeposiiti, mis tagastatakse ainult revealâi protseduuri kĂ€igus. Sellisel juhul on commit tegemine ja reveal mitte tegemine ebasoodsad.
See oli hea katse, ja sellised skeemid on samuti mĂ€ngu DApp-ides olemas, kuid kahjuks on seda jĂ€lle vĂ€he. NĂŒĂŒd vĂ”ivad tulemusele mĂ”ju avaldada mitte ainult kaevandajad, vaid ka iga protokolli osaleja. VÀÀrtust saab endiselt kontrollida, kuid vĂ€iksema varieerumise astmega ja raha eest. Kuid nagu ka kaevandaja puhul, kui jagamise tulemused on vÀÀrtuslikumad kui osalustasu PVRB-protokollis, vĂ”ib random-producer (RP) otsustada, kas teha reveal, ja tal on endiselt vĂ”imalus valida vĂ€hemalt kahe juhuslikkuse variandi vahel.
KĂŒll aga on tekkinud vĂ”imalus karistada neid, kes teevad commitâi, kuid ei tee revealâi, ja see skeem osutub veel kasulikuks. Selle lihtsus on tĂ”sine eelis â tĂ”sisemad protokollid nĂ”uavad palju vĂ”imsamaid arvutusi.
PVRB ja deterministlikud allkirjad.
On veel veel vĂ”imalusi, kuidas panna RP esitama pseudojuhuslikku arvu, millele ta ei saa mĂ”jutada, kui talle antakse 'mudel' â see on deterministlik allkiri. NĂ€iteks on selliseks allkirjaks RSA, mitte ECS. Kui RP-l on vĂ”tmepaar: RSA ja ECC, ja ta allkirjastab oma privaatvĂ”tmega mingi vÀÀrtuse, siis RSA puhul on tal ĂKS JA AINUĂKS allkiri, aga ECS puhul vĂ”ib ta genereerida mitmeid erinevaid kehtivaid allkirju. See juhtub seetĂ”ttu, et ECS allkirjade loomisel kasutatakse juhuslikku numbrit, mille valib allkirjastaja, ja see vĂ”ib olla valitud kuidas iganes, andes allkirjastajale vĂ”imaluse valida mitme allkirja vahel. RSA puhul: 'ĂŒks sisendvÀÀrtus' + 'ĂŒhe vĂ”tmepaar' = 'ĂŒhe allkiri'. EttenĂ€gemine, milline allkiri teisel RP-l on, ei ole vĂ”imalik, seetĂ”ttu vĂ”ib PVRB-d deterministlike allkirjadega korraldada, kombineerides RSA allkirju mitmelt osaliselt, kes on allkirjastanud sama vÀÀrtuse. NĂ€iteks â eelmine juhuslik number. Sellises skeemis sÀÀstetakse palju ressursse, kuna allkirjad on samal ajal nii protokolli kĂ€itumise Ă”iguspĂ€rasuse kinnitamine kui ka juhuslikkuse allikas.
Kuid isegi mÀÀratud allkirjadega on skeem endiselt haavatav âviimase osalejaâ probleemi suhtes. Viimane osaleja vĂ”ib endiselt otsustada, kas avaldada oma allkiri vĂ”i mitte, seega kontrollides tulemust. Skeemi on vĂ”imalik tĂ€iustada, lisades sinna plokkide hash'id, korraldades voorud, et tulemust ei saaks ette ennustada, kuid kĂ”ik need tehnikad, isegi arvestades mitmeid tĂ€iustusi, ei lahenda siiski probleemi, kus ĂŒks osaleja mĂ”jutab kollektiivset tulemust usaldamatutes keskkondades ja need vĂ”ivad toimida ainult majanduslike ja ajakohaste piirangute korral. Lisaks on RSA vĂ”tmete suurus (1024 ja 2048 bitti) ĂŒsna suur ning plokiahela tehingute jaoks on suurus ÀÀrmiselt oluline parameeter. Ilmselt ei saa me probleemi lihtsalt lahendada, liigume edasi.
PVRB ja saladuse jagamise skeemid
KrĂŒptograafias on olemas skeeme, mis vĂ”imaldavad vĂ”rgul kokku leppida ĂŒhes ja ainukeses PVRB vÀÀrtuses, olles samas igasuguste osaliste pahatahtlike tegevuste suhtes vastupidavad. Ăks kasulik protokoll, millega tasub tutvuda, on Shamir'i saladuse jagamise skeem. See on mĂ”eldud saladuse (nĂ€iteks salajase vĂ”tme) jagamiseks mitmeks osaks ja nende jagamiseks N osalisele. Saladus jagatakse niimoodi, et selle taastamiseks piisab M osast N-st, kusjuures need vĂ”ivad olla ĂŒkskĂ”ik millised M osa. Lihtsalt öeldes, omades tundmatu funktsiooni graafikut, jagavad osalised punktid graafikul, ja pĂ€rast M punkti saamist on kogu funktsiooni taastamine vĂ”imalik.
Hea seletus on toodud ja praktiliselt sellega mĂ€ngida, et protokolli meelest lĂ€bi töötada, on kasulik lehekĂŒljel.
Kui FSSS (Fiat-Shamir Secrets Sharing) skeem oleks rakendatav puhtal kujul â oleks see hĂ€vitamatu PVRB. Lihtsaimas variandis vĂ”iks protokoll vĂ€lja nĂ€ha jĂ€rgmiselt:
- Iga osaline genereerib oma random ja jagab selle jagamisi ĂŒlejÀÀnud osalistele.
- Iga osaleja paljastab oma osa teiste osalejate saladustest.
- Kui osalejal on rohkem kui M aktsiat, siis saab selle osaleja numbri arvutada, ja see on ainus, olenemata paljastatud osalejatest.
- Paljastatud juhuslike numbrite kombinatsioon on otsitav PVRB.
Siin ei mĂ”juta eraldi osaleja protokolli tulemusi, vĂ€lja arvatud juhul, kui tema sĂ”ltub juhuslike numbrite paljastamise kĂŒnnise saavutamine. SeetĂ”ttu toimib see protokoll, kui olemas on vajalik osa protokolliga töötajatest ja ligipÀÀsetavad RP, rahuldades krĂŒptograafia tugevuse nĂ”udeid ning olles vastupidav 'viimase tegija' probleemile.
See vĂ”iks olla ideaalne variant, see PVRB skeem, mis pĂ”hineb Fiat-Shamiri saladuse jagamisel, on kirjeldatud nĂ€iteks. artiklis. Kuid nagu eelnevalt mainitud, kui proovida seda otse rakendada plokiahelas, siis tulevad esile tehnilised piirangud. Siin on nĂ€ide protokolli katsetamisest EOS-i nutilepingus ja selle kĂ”ige olulisem osa â osaleja avaldatud aktsia kontrollimine: . Koodi pĂ”hjal on nĂ€ha, et proofâi valideerimine nĂ”uab mitmeid skalaarsed korrutamised ning kasutatavad numbrid on ĂŒlimalt suured. Samuti tuleb mĂ”ista, et blokikaevandamise protsessis toimub verify hetkel, kui block-producer töötleb tehingut, ning iga osalist peab olema lihtne protokolli Ă”igsust kontrollida, seega on nĂ”uded verify funktsiooni kiirusel ÀÀrmiselt ranged. Antud variandi puhul osutus see mitte toimivaks, kuna valideerimine ei mahtunud tehingu piirangusse (0.5 sek).
Valideerimise efektiivsus on ĂŒks olulisemaid nĂ”udeid mis tahes edasijĂ”udnud krĂŒptograafiliste skeemide kasutamiseks plokiahelas. Proofâide loomine, sĂ”numite ettevalmistamine â need protseduurid saab viia off-chain ning tĂ€ita kĂ”rge jĂ”udlusega arvutites, kuid valideerimist ei Ă”nnestu mööda minna â see on veel ĂŒks oluline nĂ”ue PVRB-le.
PVRB ja threshold signatures
Tutvudes saladuse jagamise sĂŒsteemiga, avasime terve klass protokolle, mida ĂŒhendab vĂ”tmesĂ”na âthresholdâ. Kui teatud teabe avamiseks on vaja M ausat osalejat N-st, ning ausate osalejate kogum vĂ”ib olla N-st valitud mis tahes alamhulka, rÀÀgitakse âthresholdâ skeemidest. Need vĂ”imaldavad lahendada probleemi âviimane tegijaâ, kuna kui rĂŒndaja ei ava oma osa saladusest, teeb seda tema eest teine, aus osaleja. Need skeemid lubavad kokku leppida ĂŒhes ja ainsas vÀÀrtuses, isegi kui osa osalejatest protokolli saboteerib.
Deterministlike allkirjade ja threshold-skeemide ĂŒhendamine vĂ”imaldas vĂ€lja töötada vĂ€ga mugava ja paljutĂ”otava skeemi PVRB rakendamiseks â need on deterministlikud threshold-allkirjad. Siin on erinevad threshold-allkiri rakendused, ning siin on veel ĂŒks hea nĂ€ide Dashilt.
Viimases artiklis kirjeldatakse BLS allkirju (BLS lahti seletamine on Boneh-Lynn-Shacham, artikkel), millel on vĂ€ga oluline ja ÀÀrmiselt mugav kvaliteet programmeerijatele â BLS-i avalikke, privaatseid, avalikke vĂ”tmeid ja allkirju saab omavahel kombineerida lihtsate matemaatiliste toimingute abil, samal ajal kui nende kombinatsioonid jÀÀvad kehtivateks vĂ”tmeteks ja allkirjadeks, vĂ”imaldades kergesti palju allkirju kokku koguda ĂŒhte ja palju avalikke vĂ”tmeid ĂŒhte. Need omadused on samuti deterministlikud, ning sama sisendi puhul annavad nad alati sama tulemuse. TĂ€nu sellele omadusele on BLS allkirjade kombinatsioonid ise kehtivad vĂ”tmed, mis vĂ”imaldab rakendada varianti, kus M N-st osalejat teeb ĂŒhe ja ainulaadse allkirja, mis on deterministlik, avalikult kontrollitav ja ettearvamatu kuni selle hetkeni, mil M-s osaleja avab selle.
BLS threshold allkirjade skeemis allkirjastab iga osaleja BLS-i abil midagi (nĂ€iteks eelneva juhusliku numbri), ning kogutud threshold-allkiri ongi soovitud juhuslik number. BLS allkirjade krĂŒptograafilised omadused vastavad juhuslikkuse kvaliteedi nĂ”uetele, threshold-osa kaitseb 'last-actor' rĂŒnnakute eest ning ainulaadne vĂ”tmete kombineerimise vĂ”imalus vĂ”imaldab ellu viia veel palju huvitavaid algoritme, mis nĂ€iteks vĂ”imaldavad tĂ”husalt koondada protokolli sĂ”numeid.
Nii et kui sa ehitad PVRB-d oma plokiahelas, siis jÔuad tÔenÀoliselt BLS threshold allkirjade skeemini, mida kasutab juba mitu projekti. NÀiteks DFinity ( benchmark, mis rakendab skeemi, ning nÀide verifiable secret sharing'i rakendamisest), vÔi Keep.network (siin on nende random beacon , aga nutileping, mis teenindab protokolli).
PVRB rakendamine
Kahjuks ei ole me siiani nĂ€inud valmis, PVRB plokiahelates rakendatud protokolli, mis tĂ”estaks oma turvalisust ja vastupidavust. Kuigi protokollid on tehniliselt valmis, on nende rakendamine olemasolevates lahendustes keeruline. Kesksete sĂŒsteemide jaoks pole PVRB mĂ”tet, samas kui detsentraliseeritud lahendused on kĂ”igis arvutusressurssides rangelt piiratud: CPU, mĂ€lu, salvestus, I/O. PVRB projekteerimine hĂ”lmab erinevate protokollide ĂŒhendamist, et luua lĂ”puks midagi, mis sobib vĂ€hemalt ĂŒhe elujĂ”ulise plokiahela kĂ”igile nĂ”udmistele. Ăks protokoll arvutab efektiivsemalt, kuid vajab rohkem teateid RP vahel, samas kui teine vajab ÀÀrmiselt vĂ€he teateid, kuid proof'i loomine vĂ”ib olla ĂŒlesanne, mis kestab kĂŒmneid minuteid vĂ”i koguni tunde.
Loetlen tegurid, mida peate arvestama kvaliteetse PVRB valimisel:
- KrĂŒptograafiline vastupidavus. Teie PVRB peab olema rangelt unbiasable, ilma vĂ”imaluseta kontrollida ĂŒhtegi bitti. MĂ”nedes skeemides ei ole see nii, seega kutsuge krĂŒptograaf.
- Probleem "last actor". Teie PVRB peaks olema rĂŒnnakute suhtes vastupidav, kui rĂŒndaja, kes kontrollib ĂŒhte vĂ”i mitut RP-d, vĂ”ib valida kahe tulemuse vahel.
- Protokolli saboteerimise probleem. Teie PVRB peab olema vastupidav rĂŒnnakutele, kui rĂŒndaja, kes kontrollib ĂŒhte vĂ”i mitut RP-d, otsustab, kas olla juhuslik vĂ”i mitte, ja vĂ”ib garanteeritult vĂ”i kindla tĂ”enĂ€osusega selle ĂŒle mĂ”jutada.
- SĂ”numite arvukuse probleem. Teie RP-d peavad saadma plokiahelasse minimaalselt sĂ”numeid ja vĂ€ltima maksimaalselt sĂŒmbiootilisi toiminguid nagu 'olen saatnud teavet, ootan vastust konkreetselt osalejalt'. P2P vĂ”rkudes, eriti geograafiliselt hajutatud, ei tasu loota kiirele vastusele.
- Arvutusliku keerukuse probleem. Iga PVRB etapi on-chain kinnitamine peaks olema ÀÀrmiselt lihtne, kuna seda teevad kÔik vÔrgu tÀis kliendid. Kui rakendamine toimub nutilepinguga, on kiirusnÔuded vÀga ranged.
- KĂ€ttesaadavuse ja elujĂ”u probleem. Teie PVRB peaks pĂŒĂŒdma olla rĂŒnnakute suhtes vastupidav olukordades, kus osa vĂ”rgust on teatud aja jooksul kĂ€ttesaamatu ja osa RP-d on lihtsalt lĂ”petanud töötamise.
- UsaldusvÀÀrse seadistuse ja algsete vĂ”tmete jaotamise probleem. Kui teie PVRB kasutab protokolli esmast seadistust, siis on see eraldi suur ja tĂ”sine teema. Siin . Kui osalejad peavad protokolli alustamiseks omavahel oma vĂ”tmeid jagama â on see samuti probleem, kui osalejate koosseis muutub
- Arendamise probleemid. Raamatukogude olemasolu vajalikus keeles, nende turvalisus ja jÔudlus, avalikkus, keerulised testid jne.
NĂ€iteks on threshold BLS allkiri peamine probleem - enne töö alustamist peavad osalejad tingimata ĂŒksteisele vĂ”tmed jagama, moodustades rĂŒhma, milles threshold toimib. See tĂ€hendab, et vĂ€hemalt ĂŒhe vahetuse vooru peab ootama detsentraliseeritud vĂ”rgus, ja arvestades, et genereeritud juhuslik number, nĂ€iteks, on mĂ€ngudes vajalik praktiliselt reaalajas, tĂ€hendab see, et protokolli sabotaaĆŸ on selles etapis vĂ”imalik, ja threshold skeemi eelised kaovad. See probleem on juba lihtsam eelmistest, kuid vajab ikkagi eraldi protseduuri arendamist threshold-rĂŒhmade moodustamiseks, mille kaitseks tuleb rakendada majanduslikke meetmeid, nĂ€iteks hoiuseid ja osalejate vahendite Ă€ravĂ”tmist (slashing), kes ei jĂ€rgita protokolli. Samuti ei mahu BLS-iga tĂ”endamine vastuvĂ”etava turvalisuse tasemega nĂ€iteks standardse EOS vĂ”i Ethereum tehingusse - lihtsalt ei ole piisavalt aega tĂ”endamiseks. Lepingu kood on WebAssembly vĂ”i EVM, mida tĂ€idab virtuaalne masin. KrĂŒptograafilised funktsioonid ei ole veel natiivsetena rakendatud ja töötavad kĂŒmneid kordi aeglasemalt kui tavalised krĂŒptograafilised raamatukogud. Paljud protokollid ei vasta nĂ”uetele lihtsalt vĂ”tmete mahu tĂ”ttu, nĂ€iteks RSA jaoks on see 1024 ja 2048 bitti, mis on 4-8 korda rohkem kui tavaline allkirjastamise tehing Bitcoinis ja Ethereumis.
MĂ€ngib rolli ja eri programmeerimiskeelte rakenduste olemasolu â neid on vĂ€he, eriti uute protokollide puhul. Integreerimise variant konsensuses nĂ”uab protokolli kirjutamist platvormi keeles, seetĂ”ttu tuleb Go jaoks otsida koodi geth'le, Rust'i jaoks Parity jaoks, C++ jaoks EOS'ile. JavaScript'i koodi tuleb kĂ”igil otsida ja kuna JavaScript ja krĂŒptograafia ei ole just parimad sĂ”brad, aitab WebAssembly, mis nĂŒĂŒd juba kindlasti pretendeerib jĂ€rgmise olulise internetistandardi rollile.
KokkuvÔte
Loodan, et eelnevas suutsin veenda teid, et juhuslike arvude genereerimine plokiahelas on kriitilise tĂ€htsusega paljude detsentraliseeritud vĂ”rkude eluaspektide jaoks, ja selle artikli kaudu nĂ€itasin, et see ĂŒlesanne on ÀÀrmiselt ambitsioonikas ja keeruline, kuid head lahendused juba eksisteerivad. Ăldiselt on lĂ”plik protokollide disain vĂ”imalik ainult pĂ€rast ulatuslikke teste, mis arvestavad kĂ”iki aspekte alates seadistamisest kuni tĂ”rgete simuleerimiseni, seetĂ”ttu te ei leia tĂ”enĂ€oliselt valmis retsepte meeskondade whitepaper'itest ja artiklitest, ja me jĂ€rgmise aasta-kahe jooksul kindlasti ei julge kirjutada, et âtehke nii, nii on kindlasti Ă”igeâ.
Praegu, meie PVRB jaoks vĂ€lja arendatavas plokiahelas , me oleme keskendunud threshold BLS allkirjade kasutamisele ja kavatseme rakendada PVRB konsensuse tasemel, kuna smart lepingutes on vastuvĂ”etava turbelisuse tasemega autentimine praegu veel vĂ”imalik. VĂ”imalik, et vĂ”tame kasutusele kaks skeemi: esmalt kuluka saladuse jagamise meetodi pikaajalise random_seed'i genereerimiseks, mida hiljem kasutame kĂ”rge sagedusega juhuslikkuse genereerimiseks mÀÀratletud threshold BLS allkirjade abil, vĂ”ivad piirangud jÀÀda ka ainult ĂŒhe skeemi juurde. Kahjuks ei ole vĂ”imalik eelnevalt öelda, milliseks protokolliks see kujuneb, kuid rÔÔmustav on see, et nagu teaduses, on inseneritegevuses negatiivne tulemus samuti tulemus, ja iga uus katse probleemi lahendamiseks on jĂ€rgmine samm kĂ”ikidele, kes tegelevad selle probleemiga. ĂrinĂ”udmiste tĂ€itmiseks lahendame konkreetset praktilist ĂŒlesannet - mĂ€ngurakenduste varustamine usaldusvÀÀrse entropiaallikaga, seetĂ”ttu peame pöörama tĂ€helepanu ka plokiahela enda probleemidele, sealhulgas ahela lĂ”puleviimisele ja vĂ”rgu juhtimisele.
Ja kuigi me ei nĂ€e praegu plokiahelates tĂ”eliselt usaldusvÀÀrset PVRB-d, mis oleks piisavalt kaua kasutusel olnud, et lĂ€bida reaalseid rakenduste teste, mitmekordseid auditeid, koormusi ja loomulikult ka reaalseid rĂŒnnakuid, nĂ€itab vĂ”imalikute tee arv, et lahendus eksisteerib ja mĂ”ni neist algoritmidest lĂ”puks probleemi lahendab. Jagame meeleldi tulemusi ja tĂ€name teisi meeskondi, kes samuti selle kĂŒsimusega tegelevad artiklite ja koodide eest, mis aitavad inseneridel mitte astuda sama rikkaid mune kaks korda.
Nii et kui kohtate programmeerijat, kes projekteerib detsentraliseeritud juhuslikkust, olge ettevaatlikud ja hoolivad, pakkudes vajadusel psĂŒhholoogilist abi đ
Allikas: habr.com
