Sissejuhatus
function getAbsoluutseltJuhuslikArv() {
return 4; \/\/ tagastab tÀiesti juhusliku arvu!
}Nii nagu tĂ€iesti vastupidava krĂŒptograafilise ĆĄifri kontseptsiooni puhul, pĂŒĂŒavad tegelikud "Avalikult Kontrollitavad Juhuslikud Beaconid" (edaspidi PVRB) vĂ”imalikult lĂ€hedale ideaalsetele skeemidele, kuna reaalses vĂ”rgus ei saa neid puhtal kujul rakendada: tuleb kokku leppida rangelt ĂŒhes bitis, ringe peab olema palju ja kĂ”ik sĂ”numid peavad olema ideaalselt kiirelt edastatavad. Loomulikult ei ole see reaalses vĂ”rgus nii. Seega, PVRB kavandamisel konkreetsete ĂŒlesannete jaoks tĂ€napĂ€eva plokiahelates, lisaks juhuslike numbrite kontrollimise ja krĂŒptograafilise vastupidavuse vĂ”imatusele, esineb veel palju puhtalt arhitektuurilisi ja tehnilisi probleeme.
Ise plokiahel on PVRB jaoks sisuliselt suhtluskeskkond, kus sĂ”numid = tehingud. See vĂ”imaldab osaliselt abstraheerida vĂ”rgu probleemidest, sĂ”numite mitte-tarnimisest, vahepealse tarkvara probleemidest â kĂ”ik need riskid vĂ”tab enda peale detsentraliseeritud vĂ”rk, ja selle peamine vÀÀrtus PVRB jaoks â ei ole vĂ”imalik tagasi vĂ”tta vĂ”i rikkuda juba saadetud tehingut â see ei vĂ”imalda osalistel loobuda protokollist, kui nad ei ole edukalt konsensust rĂŒnnanud. Selline turvalisuse tase on vastuvĂ”etav, seetĂ”ttu peab PVRB olema vastupidav osaliste vandenĂ”udele tĂ€pselt samamoodi nagu pĂ”hiblokiahela. See vihjab ka sellele, et PVRB peab olema osa konsensusest, kui vĂ”rk on kokku leppinud pĂ”hiblokiahela, siis peaks ta samaaegselt kokku leppima ka ainulaadses Ă”iglaselt tulemuses juhuslikus. VĂ”i, PVRB on lihtsalt iseseisev protokoll, mis on rakendatud nutilepinguna, töötades asĂŒnkroonselt plokiahela ja blokkide suhtes. MĂ”lemal meetodil on oma eelised ja puudused, ning valik nende vahel on ÀÀrmiselt keeruline.
Kaks PVRB rakendamise viisi
Kirjeldame lĂ€hemalt kaht PVRB rakendamise vĂ”imalust â iseseisvat versiooni, mis töötab sĂ”ltumatu plokiahelast nutilepinguga, ja konsensusintegratsiooniga â protokolliga, mille kohaselt vĂ”rk lepib kokku plokiahela ja hĂ”lmatud tehingutes. KĂ”igil juhtudel mĂ”tlen ma populaarsetele plokiahela mootoritele: Ethereum, EOS ja kĂ”ik, mis sarnaneb nendele nutilepingute paigutamise ja töötlemise viisil.
Iseseisev leping
Selles variandis esindab PVRB nutileping, mis aktsepteerib random-producerâite (edaspidi RP) tehinguid, töötleb neid, kombineerib tulemusi ning jĂ”uab lĂ”puks mĂ”nele vÀÀrtusele, mille vĂ”ib saada mistahes kasutaja sellest lepingust. See vÀÀrtus ei pruugi lepingus otse olla talletatud, vaid see vĂ”ib olla esitatud ainult andmetena, mille pĂ”hjal saab mÀÀratult kĂ€tte ĂŒhe ja ainus tulemuse. Selles skeemis on RP plokiahela kasutajad, ja protsessis osalemiseks vĂ”ib lubada kedagi.
Iseseisva lepinguga variant on hea:
- ĂŒlekantavuse tĂ”ttu (lepingud saab tĂ”sta ĂŒhest plokiahelast teise)
- lihtsuse tÔttu rakendamisel ja testimisel (lepingu loomine ja testimine on mugav)
- mugavuse tÔttu majanduslike skeemidega (oma tokeni loomine, mille loogika teenib PVRB eesmÀrke, on lihtne)
- vÔimaluse tÔttu töötada juba olemasolevates plokiahelates
Sellega on ka puuduseid:
- tugevad piirangud ressurssidele arvutustes, tehingu maht ja salvestus (lihtsamalt öeldes cpu/mem/io)
- piirangud lepingus toimuvale tegevusele (kĂ”iki kĂ€ske ei ole saadaval, keeruline on vĂ€liste teeki ĂŒhendamine)
- ei ole vÔimalik korraldada sÔnumite vahetust kiiremini, kui tehingud lisatakse plokiahelasse
See variant sobib PVRB rakendamiseks, mis peab olema kĂ€ivitatud juba olemasolevas vĂ”rgus, mis ei sisalda keerulist krĂŒptograafiat ja ei nĂ”ua suurt hulka interaktsioone.
Konsensuse integreeritud
Selles variandis on PVRB rakendatud plokiahela sĂ”lmede koodis, integreeritud vĂ”i töötavad plokiahela sĂ”lmede vahelises sĂ”numivahetuses paralleelselt. Protokolli tulemused salvestatakse kohe loodavatesse blokki, samal ajal kui protokolli sĂ”numid saadetakse p2p vĂ”rgu kaudu sĂ”lmede vahel. Kuna protokollil on tulemuseks numbrid, mis tuleb salvestada blokkidesse, peab vĂ”rk nende osas konsensuseni jĂ”udma. See tĂ€hendab, et PVRB sĂ”numid, nagu ka tehingud, peavad olema sĂ”lmede poolt valideeritud ja lisatud blokkidesse, et iga vĂ”rgu osaleja saaks PVRB protokolli vastavust valideerida. See viib meid automaatselt ilmse lahenduse juurde â kui vĂ”rk lepib kokku konsensusest bloki ja selle tehingute osas, peab PVRB olema osa konsensusest, mitte eraldi protokoll. Vastasel juhul vĂ”ib juhtuda, et blokk on konsensuse seisukohalt kehtiv, kuid PVRB protokolli ei ole jĂ€rgitud, mistĂ”ttu PVRB seisukohalt ei saa blokk olla aktsepteeritud. Seega, kui valitakse âkonsensuse-integratsioonigaâ variant, muutub PVRB oluliseks osaks konsensusest.
Kirjeldades PVRB implementeerimisi konsensuse tasandil vĂ”rgus, ei tohi mingil juhul mööda vaadata lĂ”puleviimise kĂŒsimustest. LĂ”puleviimine on mehhanism, mida kasutatakse mÀÀratletud konsensustes, mis fikseerib bloki (ja ahela, mis viib sinna), mis on lĂ”plik ja mida kunagi ei visata vĂ€lja, isegi kui ilmub paralleelne fork. NĂ€iteks Bitcoinis sellist mehhanismi ei ole â kui avaldada keerukam ahel, asendab see iga vĂ€hem keeruka, sĂ”ltumata ahelate pikkusest. EOSes on nĂ€iteks viimased pöördumatud plokid, mis ilmuvad keskmiselt iga 432 ploki jĂ€rel (12*21 + 12*15, eelhÀÀlestamine + eelkomitee). See protsess on sisuliselt 2/3 allkirjade ootamine blokki tootvatelt tootjatelt (edasi BP). Kui ilmnevad forkid, mis on vanemad kui viimane LIB, visatakse need lihtsalt kĂ”rvale. See mehhanism vĂ”imaldab garantii anda, et tehing on plokiahelas ja seda ei tĂŒhistata, sĂ”ltumata sellest, kui palju ressursse rĂŒndajal on. Samuti on lĂ”plikud plokid need, mis on allkirjastatud 2/3 BP poolt Hyperledgeris, Tendermintis ja muudes pBFT-pĂ”histes konsensustes. Samuti on mĂ”istlik, et protokoll lĂ”puleviimise tagamiseks oleks konsensuse kohalduseks, kuna see vĂ”ib töötada asĂŒnkroonselt plokkide tootmise ja avaldamisega. Ethereum'i lĂ”plikkus.
LĂ”plikkus on ĂŒlioluline kasutajatele, kes vĂ”ivad ilma selleta sattuda "topeltkulutamise" rĂŒnnaku ohvriks, kui BP "hoiab" plokke ja avaldab need pĂ€rast seda, kui vĂ”rk on nĂ€inud head tehingut. Kui lĂ”plikkust ei ole, asendab avaldatud fork ploki, kus on "hea" tehing, teisega, "halva" forki, kus need samad vahendid kantakse rĂŒndaja aadressile. PVRB puhul on nĂ”uded lĂ”plikkuse osas veelgi pingestatud, kuna PVRB jaoks forki ehitamine tĂ€hendab rĂŒndaja vĂ”imalust valmistada ette mitu varianti juhuslikkuse saamiseks, et avaldada talle kĂ”ige kasulikum, ja piirata rĂŒnnaku aega - hea lahendus.
SeetĂ”ttu on parim variant ĂŒhendada PVRB ja lĂ”plikkus ĂŒhte protokolli - siis on lĂ”plik plokk = lĂ”plik juhuslikkus, ja see on tĂ€pselt see, mida tuli saavutada. NĂŒĂŒd saavad mĂ€ngijad garanteeritud juhuslikkuse N sekundi jooksul ja vĂ”ivad olla kindlad, et seda ei saa tagasi vĂ”tta ega mĂ€ngida uuesti.
Konsensus-integratsiooni variant on hea:
- vĂ”imalus asĂŒnkroonseks rakendamiseks plokkide tootmise osas - plokid toodetakse nagu tavaliselt, kuid selle kĂ”rvale vĂ”ib töötada PVRB protokoll, mis genereerib juhuslikkust mitte iga ploki puhul
- vĂ”imalus rakendada isegi keerukat krĂŒptograafiat, ilma piiranguteta, mida kehtestavad nutilepingud
- vÔimalus organiseerida sÔnumite vahetust kiiremini, kui tehingud lisatakse plokiahelasse, nÀiteks osa protokollist vÔib töötada node'ide vahelilma sÔnumite levitamiseta vÔrgus
Sellega on ka puuduseid:
- kompleksus testimisel ja arendamisel - tuleb emuleerida vÔrgu vigu, kadunud node'e, vÔrgu kÔvad fork'id
- rakenduse vead nÔuavad vÔrgu kÔva forki
MĂ”lemad PVRB rakendamise viisid on elujĂ”ulised, kuid nutilepingute rakendamine kaasaegsetes plokiahelates on siiski arvutusressurssidest suuresti piiratud ja tĂ”sistele krĂŒptograafiale ĂŒleminek on tihti lihtsalt vĂ”imatu. TĂ”sine krĂŒptograafia on vajalik, nagu nĂ€idatakse hiljem. Kuigi see probleem on selgelt ajutine, on tĂ”sine krĂŒptograafia lepingutes vajalik paljude ĂŒlesannete lahendamiseks ning see ilmub jĂ€rk-jĂ€rgult (nĂ€iteks sĂŒsteemi lepingud zkSNARKs jaoks Ethereumis).
Plokia, mis tagab lĂ€bipaistva ja usaldusvÀÀrse suhtluskanali protokollis, ei ole tasuta. Iga detsentraliseeritud protokoll peab arvestama Sybil-rĂŒnnaku vĂ”imalusega; iga tegevust saab teha kooskĂ”lastatud rĂŒhmade kaudu paljude kontode abil, seetĂ”ttu tuleb projekteerimisel arvesse vĂ”tta rĂŒndajate vĂ”imet luua suvaline arv osalejaid protokollis, kes tegutsevad koostöös.
PVRB ja ploki muutujad.
Ma ei valetanud, kui ĂŒtlesin, et head PVRB-d, mida on testinud paljud hasartmĂ€ngu rakendused, ei ole plokiahelates seni keegi rakendanud. Kust siis nii palju hasartmĂ€ngu rakendusi Ethereumis ja EOS-is? See ĂŒllatab mind sama palju kui teid; kuidas on tĂ€iesti mÀÀramatutes tingimustes leitud nii palju "kestĂ€vaid" juhuslikkuseid?
Levinud viis juhuslikkuse saamiseks plokiahelas on vĂ”tta mingit "ennustamatuks" peetavat teavet plokist ja selle pĂ”hjal genereerida juhuslikkust â lihtsalt hajutada ĂŒhe vĂ”i mitu vÀÀrtust. Hea artikkel nende skeemide probleemidest. . VĂ”ib vĂ”tta mĂ”ne "ennustamatuks" peetava vÀÀrtuse plokist, nĂ€iteks ploki hash, tehingute arv, vĂ”rgu raskusaste ja muud, etteaimamatud vÀÀrtused. SeejĂ€rel hajutatakse need, ĂŒks vĂ”i mitu, ja idee kohaselt peaksid need andma ehtsat juhuslikkust. VĂ”ite isegi oma whitepaperis mĂ€rkida, et teie skeem on "postkvantitootes turvaline" (sest eksisteerivad kvantitehnoloogia tĂ”estatud hash-funktsioonid :)).
Aga isegi postkvantitootes turvalise hash'i puhul on seda kahjuks liiga vÀhe. Saladus peitub nÔuetes PVRB-le; meenutan neid eelmisest artiklist:
- Tulemus peab olema tĂ”estatud ĂŒhtlaselt jaotunud, s.t. pĂ”hinev tĂ”estatud krĂŒptograafial.
- Mitte ĂŒhtegi tulemust bitist ei saa kontrollida. SeetĂ”ttu ei saa tulemust ette ennustada.
- Protokolli genereerimist ei saa saboteerida, osalemat protokollis vĂ”i koormates vĂ”rku rĂŒndavate sĂ”numitega.
- KĂ”ik ĂŒlalnimetatud peab olema vastupidav lubatud arvu ebaausate protokolli osalejate (nĂ€iteks 1/3 osalejat) koostööle.
Antud juhul jĂ€rgitakse ainult nĂ”uet 1 ja nĂ”ue 2 ei ole tĂ€idetud. Hashides ettearvamatuid vÀÀrtusi plokist, saame me ĂŒhtlase ja hea juhuslikkuse. Kuid BP-l on vĂ€hemalt vĂ”imalus "plokki avaldada vĂ”i mitte". Seega suudab BP vĂ€hemalt valida kahe juhuslikkuse variandi vahel: "oma" ja selle, mis tuleb, kui ploki avaldab keegi teine. BP saab eelnevalt "piiluda", mis juhtub, kui ta ploki avaldab, ja lihtsalt otsustada, kas teha seda vĂ”i mitte. NĂ€iteks mĂ€ngides "paaritud-ĂŒhtlane" vĂ”i "punane/must" rulett, vĂ”ib ta ploki avaldada ainult siis, kui nĂ€eb vĂ”itu. See muudab ka tulevaste plokkide hash'i kasutamise strateegia ebatĂ”husaks, nĂ€iteks öeldakse, et "kasutatakse juhuslikkust, mis tuleneb praeguste andmete ja tulevase ploki hash'ist, mille kĂ”rgus on nĂ€iteks N + 42, kus N on praegune ploki kĂ”rgus. See veidi tugevdab skeemi, kuid vĂ”imaldab BP-l, isegi tulevikus, valida, kas plokk kinni hoida vĂ”i avaldada.
BP tarkvara keerukus suureneb antud juhul, kuid mitte oluliselt. Lihtsalt tehingu valideerimise ja plokki lisamise kĂ€igus toimub kiire kontroll, kas vĂ”it on vĂ”imalik, ja vĂ”ib-olla ĂŒhe tehingu parameetri mÀÀramine, et saavutada kĂ”rge tĂ”enĂ€osus vĂ”itmiseks. Samuti on keeruline tabada nutikat BP-d, kes selliste manipulatsioonide kaudu toimib, iga kord saab kasutada uusi aadresse ja vĂ”ita natuke, kahtlusi tekitamata.
Seega pole plokist saadud teabe kasutamise meetodid sobivad universaalse PVRB rakenduse jaoks. Piiratud variandis, mis hĂ”lmab panuste suuruse, mĂ€ngijate arvu ja/vĂ”i KYC registreerimise piiranguid (et vĂ€ltida ĂŒhe mĂ€ngija vĂ”imalust kasutada mitut aadressi), vĂ”ivad need skeemid töötada vĂ€ikeste mĂ€ngude jaoks, kuid mitte rohkem.
PVRB ja commit-reveal.
Noh, aitĂ€h hashingule ja vĂ€hemalt ploki ja teiste muutujate suhtelisele ettearvamatusele. Kui lahendada minerite front-running probleem, peaks tulema midagi paremat. Lisame sellesse skeemi kasutajad - lase neil samuti mĂ”jutada juhuslikkust: iga tehnilise toe töötaja ĂŒtleb teile, et IT-sĂŒsteemides on kĂ”ige juhuslikumad just kasutajate tegevused đ
Lihtne skeem, kus kasutajad saadavad lihtsalt juhuslikke numbreid ja tulemus arvutatakse nĂ€iteks nende summa hajutamise kaudu, ei sobi. Sellisel juhul vĂ”ib viimane mĂ€ngija, valides oma juhuse, kontrollida, milline tulemus saab olema. SeetĂ”ttu kasutatakse laialdaselt mustrit commit-reveal. Osalised saadavad esmalt oma juhuslikest numbritest hajutused (commit-id), seejĂ€rel avavad oma juhuslikud numbrid (reveal-id). âRevealâ faas algab alles pĂ€rast seda, kui vajalikud commit-id on kogutud, seega saavad osalised saata tĂ€pselt selle juhusliku numbri, mille hajutus nad varem saatsid. NĂŒĂŒd sidume kĂ”ik selle ploki parameetritega, olles parem minevikust (juhuslik number on vĂ”imalik teada saada ainult mĂ”nes tulevases plokis), ja voilĂ â juhuslik number on valmis! NĂŒĂŒd mĂ”jutab iga mĂ€ngija tulemuseks olevat juhuslikku numbrit ja suudab âvĂ”itaâ kurja BP-d, asendades tema juhusliku numbri oma, eelnevalt teadmata juhusliku numbriga... Samuti on vĂ”imalik lisada kaitse protokolli sabotaaĆŸi vastu, mitte avades reveal etapis â nĂ”udes commit-i kĂ€igus tehingule teatavat summat â tagatissummat, mis naaseb ainult reveal protseduuri ajal. Sel juhul oleks commit teha ja mitte reveal mitte kasumlik.
See oli hea katse, ja sellised skeemid on ka mĂ€ngu DApp-ides olemas, kuid kahjuks sellest ei piisa. NĂŒĂŒd saab tulemust mĂ”jutada mitte ainult kaevandaja, vaid ka iga protokolli osaline. Kontrollida saab endiselt vÀÀrtust, kuid vĂ€hem variatiivselt ja tasu eest, kuid nagu ka kaevandaja puhul, kui loosimise tulemused on vÀÀrtuslikumad kui osalustasu PVRB protokollis, siis random-producer (RP) vĂ”ib otsustada, kas teha reveal ja vĂ”ib endiselt valida vĂ€hemalt kahest juhuslikust numbrist.
Kuid nĂŒĂŒd on tekkinud vĂ”imalus karistada neid, kes teevad commit ja ei tee reveal, ning see skeem osutub veel vajalikuks. Selle lihtsus on tĂ”sine eelis - tĂ”sisemad protokollid nĂ”uavad palju vĂ”imsamat arvutust.
PVRB ja deterministlikud allkirjad.
On veel ĂŒhte viisi, kuidas sundida RP-d esitama pseudojuhuslikku arvu, millele ta ei saa mĂ”ju avaldada, kui talle antakse "prototĂŒĂŒp" â see on determinantne allkiri. NĂ€iteks on selline allkiri RSA ja see ei ole ECS. Kui RP-l on vĂ”tmepaar: RSA ja EĐĄC, ja ta allkirjastab oma privaatsĂ”numiga mingi vÀÀrtuse, siis RSA puhul saab ta ĂHE JA AINUS ALLKIRJA, kuid ECS puhul saab ta luua mis tahes arvu erinevaid kehtivaid allkirju. See juhtub seetĂ”ttu, et ECS allkirja loomisel kasutatakse juhuslikku numbrit, mille valib allkirjastaja, ja seda vĂ”ib valida nagu soovitakse, andes allkirjastajale vĂ”imaluse valida ĂŒhe mitmest allkirjast. RSA puhul: "ĂŒks sisendvÀÀrtus" + "ĂŒks vĂ”tmepaar" = "ĂŒks allkiri". Ei saa ennustada, milline allkiri teise RP juures tuleb, seetĂ”ttu vĂ”ib PVRB-d koos determinantsete allkirjadega korraldada mitme osalise RSA allkirjade kombineerimise kaudu, kes on allkirjastanud sama vÀÀrtuse. NĂ€iteks â eelmine juhuslik number. Sellises skeemis sÀÀstetakse palju ressursse, kuna allkirjad on samal ajal ka tĂ”endiks protokolli nĂ”uetekohasele kĂ€itumisele ja juhuslike numbrite allikaks.
Kuid isegi determinantsete allkirjade korral jÀÀb skeem endiselt vastuvĂ”tlikuks "viimase osalise" probleemile. Viimane osaline vĂ”ib endiselt otsustada, kas avaldada allkiri vĂ”i mitte, kontrollides seega tulemust. Tuleb skeemi tĂ€iendada, lisada sinna ploki hash-e, luua voorusid, et tulemusi ei saaks ette ennustada, kuid kĂ”ik need meetodid, isegi arvestades arvukalt tĂ€iustusi, jĂ€tavad siiski lahendamata ĂŒhe osalise mĂ”ju kollektiivsele tulemusele usaldamatutes tingimustes ja vĂ”ivad toimida vaid majanduslike ja ajapiirangute korral. Lisaks on RSA vĂ”tmete suurus (1024 ja 2048 bitti) ĂŒsna suur, samas kui plokiahela tehingute suurus on ÀÀrmiselt oluline parameeter. Tundub, et probleemi lihtne lahendamine ei Ă”nnestu, liigume edasi.
PVRB ja saladuse jagamise skeemid
KrĂŒptograafias on olemas skeeme, mis vĂ”imaldavad vĂ”rgul kokku leppida ĂŒhesainus PVRB vÀÀrtuses, samas, kui need skeemid taluvad iga osalise pahatahtlikke tegevusi. Ăks kasulik protokoll, millega tasub tutvuda, on Shamir'i saladuse jagamise skeem. See teenib saladuse (nĂ€iteks salajase vĂ”tme) jagamiseks mitmeks osaks ja nende jagamiseks N osalisele. Saladus jagatakse nii, et selle taastamiseks on vajalik M osa N-st, kusjuures need vĂ”ivad olla mis tahes M osa. Lihtsustatult öeldes, olles teadmata funktsiooni graafik, vahetavad osalised punkte graafikul ning pĂ€rast M punkti saamist on kogu funktsioon taastatav.
Hea seletus on toodud ja selle pÔhjal katsetamine praktikas, et protokolli peas lÀbi mÀngida on kasulik lehel.
Kui FSSS (Fiat-Shamir Salajase Jagamise Skeem) rakendataks puhtal kujul â oleks see hĂ€vitamatu PVRB. Lihtsaim variand protokollist vĂ”iks vĂ€lja nĂ€ha jĂ€rgmiselt:
- Iga osaline genereerib oma vale ja jagab selle osakusi teistele osalistele
- Iga osaline avab oma osa teiste osaliste saladustest
- Kui osalisele on kogunenud rohkem M osakusi, saab tema number arvutada ning see on ainus, sÔltumata avanenud osalistest
- Avatud vale kombinatsioon on otsitav PVRB
Siin ei mĂ”juta ĂŒksik osaline protokolli tulemusi, vĂ€lja arvatud juhul, kui tema poolt sĂ”ltub threshold'i saavutamine vale avalikustamiseks. SeetĂ”ttu töötab see protokoll, kui on olemas vajalik osakaal protokolli jĂ€rgijaid ja kĂ€ttesaadavaid RP, tĂ€ites krĂŒptograafilise vastupidavuse nĂ”udeid ja olles vastupidav "viimase osalise" probleemile.
See vĂ”iks olla ideaalne variant, see PVRB skeem Fiat-Shamir'i saladuse jagamise alusel on kirjeldatud nĂ€iteks artiklis. Kuid nagu eelnevalt öeldud, kui proovida seda rakendada otse plokiahelas, tekivad juba tehnilised piirangud. Siin on nĂ€ide protokolli testrakendusest EOS-i nutilepingus ja selle kĂ”ige olulisem osa â osalise avaldatud osa kontrollimine: Koodist on nĂ€ha, et proof'i valideerimine nĂ”uab mitmeid skalaarseid korrutamisi ning kasutatavad numbrid on vĂ€ga suured. Samuti peab aru saama, et plokiahelas toimub valideerimine hetkel, kui block-producer töötleb tehingut, ja iga osaleja peab hĂ”lpsasti kontrollima protokolli Ă”igsust, seetĂ”ttu on valideerimise funktsiooni kiirus nĂ”udmistele vĂ€ga tĂ”sine. Antud variatiivne lahendus osutus mittefunktsionaalseks, kuna valideerimine ei mahtunud tehingu piirangusse (0,5 sek).
Valideerimise efektiivsus on ĂŒks tĂ€htsamaid nĂ”udeid mis tahes edasijĂ”udnud krĂŒptograafiliste skeemide kasutamiseks plokiahelas. Proof'ide loomine, sĂ”numite ettevalmistamine â neid protseduure saab viia off-chain ja teostada kĂ”rgjĂ”udlike arvutite abil, kuid valideerimist ei saa vĂ€ltida â see on veel ĂŒks oluline nĂ”ue PVRB-le.
PVRB ja threshold allkirjad
Tutvudes saladuse jagamise skeemiga, avastasime kogu klass protokolle, mis on seotud vĂ”tmesĂ”naga "threshold". Kui teatud teabe avamiseks on vajalik M ausa osaleja osalemine N-st, ja ausate osalejate komplekt vĂ”ib olla N-i mis tahes alamkogum, rÀÀgitakse "threshold" skeemidest. Need skeemid vĂ”imaldavad lahendada "viimase tegija" probleemi; nĂŒĂŒd, kui rĂŒndaja ei ava oma osa saladusest, teeb seda tema eest mĂ”ni teine, aus osaleja. Need skeemid vĂ”imaldavad saavutada ĂŒheainsa vÀÀrtuse kokkuleppe, isegi kui osa osalejatest saboteerib protokolli.
Deterministlike allkirjade ja threshold-skeemide ĂŒhendamine on vĂ”imaldanud vĂ€lja töötada vĂ€ga mugava ja paljulubava skeemi PVRB rakendamiseks â need on deterministlikud threshold-allkirjad. Siin on erinevad rakendused threshold-allkirjadest, ja siin on veel ĂŒks hea nĂ€ide Dash'ilt.
Viimases artiklis kĂ€sitletakse BLS allkirju (BLS tĂ€hendab Boneh-Lynn-Shacham, artikkel ), mis omavad programmerijate jaoks vĂ€ga olulist ja ÀÀrmiselt mugavat omadust â avalikud, salajased, avalikud vĂ”tmed ja BLS allkirjad saavad omavahel lihtsate matemaatiliste operatsioonide abil kombineerida, jÀÀdes samal ajal kehtivateks vĂ”tmeteks ja allkiri, vĂ”imaldades hĂ”lpsasti koguda palju allkirju ĂŒhte ja palju avalikke vĂ”tmeid ĂŒheks. Neil on samuti deterministlikkus ning samade sisendandmete puhul annavad nad sama tulemuse. TĂ€nu sellele omadusele on BLS allkirjade kombinatsioonid ise kehtivad vĂ”tmed, mis vĂ”imaldab rakendada varianti, kus M osa N osalistest genereerib ĂŒhe ja ainulaadse allkirja, mis on deterministlik, avalikult kontrollitav ja ennustamatu kuni M-nda osalise paljastamiseni.
Threshold BLS allkirjade skeemis allkirjastab iga osaline BLS abil midagi (nĂ€iteks eelmine juhuslik number), ja kogutud threshold-allkiri ongi soovitud juhuslik number. BLS allkirjade krĂŒptograafilised omadused vastavad juhuslikkuse kvaliteedi nĂ”uetele, threshold-osa kaitseb âviimase tegijaâ vastu, ning ainulaadne vĂ”tmete kombineeritavus vĂ”imaldab ellu viia veel palju huvitavaid algoritme, mis vĂ”imaldavad nĂ€iteks tĂ”husalt koguda protokolli sĂ”numeid.
Nii et kui ehitate PVRB oma plokiahelas, jÔuate tÔenÀoliselt BLS threshold allkirjade skeemini, mida kasutavad juba mitmed projektid. NÀiteks DFinity ( benchmark, mis rakendab skeemi, ja nÀide rakendamisest verifiable secret sharing), vÔi Keep.network (siin on nende juhuslik beacon , aga smart contract, mis teenindab protokolli).
PVRB rakendamine
Kahjuks ei ole me endiselt nĂ€inud valmis PVRB protokolli, mis oleks rakendatud plokiahelates ja tĂ”estanud oma turvalisust ning vastupidavust. Kuigi protokollid on tehniliselt valmis, on nende rakendamine olemasolevates lahendustes keeruline. Keskustatud sĂŒsteemide jaoks pole PVRB mĂ”ttekas, samas kui detsentraliseeritud lahendused on piiratud kĂ”ikides arvutusressurssides: CPU, mĂ€lu, salvestamine, I/O. PVRB-i projekteerimine eeldab erinevate protokollide kombineerimist, et luua midagi, mis vastab vĂ€hemalt mingitele elujĂ”uliste plokiahelate nĂ”udmistele. Ăks protokoll arvutab efektiivsemalt, kuid vajab RP-de vahel rohkem sĂ”numeid, teine nĂ”uab ÀÀrmiselt vĂ€he sĂ”numeid, kuid tĂ”endi loomine vĂ”ib vĂ”tta kĂŒmneid minuteid vĂ”i isegi tunde.
Loetlen tegurid, mida peate arvesse vÔtma kvaliteetse PVRB valimisel:
- KrĂŒptograafiline vastupidavus. Teie PVRB peab olema rangelt unbiasable, ilma vĂ”imaluseta ĂŒhe bitti kontrollida. MĂ”nedes skeemides see ei ole nii, seega kutsuge krĂŒptograaf.
- Viimase tegija probleem. Teie PVRB peab olema vastupidav rĂŒnnakutele, kus rĂŒndaja, kes kontrollib ĂŒhte vĂ”i mitut RP-d, vĂ”ib valida kahe tulemuse variandi vahel.
- Protokolli sabotaaĆŸ. Teie PVRB peab olema vastupidav rĂŒnnakutele, kus rĂŒndaja, kes kontrollib ĂŒhte vĂ”i mitut RP-d, otsustab, kas olla juhuslik vĂ”i mitte ning vĂ”ib garanteeritult vĂ”i mÀÀratud tĂ”enĂ€osusega sellele mĂ”ju avaldada.
- SĂ”numite arv. Teie RP-d peaksid saatma plokiahelasse minimaalselt sĂ”numeid ja maksimaalselt vĂ€ltima sĂŒnkrone tegevusi, nagu olukorrad "saatsin mingi teabe, ootan vastust konkreetsele osale". P2P vĂ”rkudes, eriti geograafiliselt hajutatud, ei tasu loota kiirele vastusele.
- Arvutusalane keerukus. Iga etapi kontrollimine PVRB on-chain peaks olema ÀÀrmiselt lihtne, kuna seda teevad kÔik vÔrgu tÀisklientide. Kui rakendus kasutatakse nutilepinguna, on kiirusnÔuded vÀga ranged.
- Saadavus ja aktiivsus. Teie PVRB peab pĂŒĂŒdma jÀÀda vastupidavaks olukordadele, kus osa vĂ”rku on ajutiselt kĂ€ttesaamatu ja osa RP-dest lihtsalt lakka toimimast.
- UsaldusvÀÀrse seadistamise ja algsete vĂ”tmete jaotamise probleem. Kui teie PVRB kasutab esmase seadistuse protokolli, on see eraldi suur ja tĂ”sine lugu. Siin on . Kui osalejad peavad enne protokolli algust ĂŒksteisele oma vĂ”tmeid teatama â on see ka probleem, kui osalejate koosseis muutub
- Arendusprobleemid. Raamatukogude olemasolu vajalikes keeltes, nende turvalisus ja jÔudlus, avalikkus, keerulised testid jne.
NĂ€iteks threshold BLS allkirjade puhul on olemas mĂ€rkimisvÀÀrne probleem â enne tööle asumist peavad osalejad kindlasti ĂŒksteisele vĂ”tmeid jagama, korraldades rĂŒhma, mille raames threshold töötab. See tĂ€hendab, et vĂ€hemalt ĂŒks ringide vahetus detsentraliseeritud vĂ”rgus tuleb oodata, ja arvestades, et genereeritud juhuslik number on nĂ€iteks mĂ€ngudes praktiliselt reaalajas vajalik, tĂ€hendab see, et protokolli saboteerimine on vĂ”imalik sel etapil, ja threshold skeemi eelised kaovad. See probleem on juba lihtsam kui eelmine, kuid nĂ”uab ikkagi eraldi menetluse vĂ€ljatöötamist threshold-gruppide moodustamiseks, mida tuleb majanduslikult kaitsta, kasutades tagatisi ja osalejatelt, kes protokolli ei jĂ€rgita, vahendite Ă€ravĂ”tmist (slashing). Samuti ei mahu BLS-i verifitseerimine vastuvĂ”etava turvalisuse tasemega nĂ€iteks EOS-i vĂ”i Ethereumâi standardse tehingu aega â lihtsalt ei piisa ajast verifitseerimiseks. Lepingu kood on WebAssembly vĂ”i EVM, seda tĂ€idab virtuaalne masin. KrĂŒptograafilised funktsioonid ei ole natiivsed (praegu), ja töötavad kĂŒmneid kordi aeglasemalt kui tavalised krĂŒptograafia raamatukogud. Paljud protokollid ei sobi nĂ”uete tĂ”ttu lihtsalt vĂ”tmete mahu tĂ”ttu, nĂ€iteks RSA puhul 1024 ja 2048 bitti, see on 4-8 korda rohkem kui standardne tehingu allkiri Bitcoinâis ja Ethereumâis.
MĂ€ngib rolli ka rakenduste olemasolu erinevates programmeerimiskeeltes â neid on vĂ€he, eriti uute protokollide jaoks. Integreerimise variandiga konsensuses peab protokoll olema kirjutatud platvormi keeles, seega tuleb otsida koodi Go jaoks geth, Rustâi jaoks Parity, C++âi jaoks EOS. KĂ”ik peavad otsima JavaScripti koodi, ja kuna JavaScript ja krĂŒptograafia ei ole just parimad sĂ”brad, aitab WebAssembly, mis pretenderib nĂŒĂŒd juba kindlasti jĂ€rgmise tĂ€htsa internetistandardi rolli.
KokkuvÔte
Loodan, et eelnevas Mul on Ă”nnestunud veenda teid, et juhuslike arvude genereerimine plokiahelal on hĂ€davajalik paljude detsentraliseeritud vĂ”rkude elu aspektide jaoks. Selle artikliga nĂ€itasin, et see ĂŒlesanne on ÀÀrmiselt ambitsioonikas ja keeruline, kuid olemas on juba head lahendused. LĂ”plik protokolli disain on vĂ”imalik alles pĂ€rast pĂ”hjalikke teste, mis arvesse vĂ”tavad kĂ”iki aspekte alates seadistamisest kuni rikkeemulatsioonini, seega ei leia te tĂ”enĂ€oliselt valmis retsepte meeskondade whitepaper'itest ega artiklitest, ja meie ei hakka kindlasti jĂ€rgmise aasta vĂ”i kahe jooksul kirjutama "tehke nii, nii on kindlasti Ă”ige".
Praegu, meie PVRB jaoks arendatavas plokiahelas , oleme peatunud threshold BLS allkirjade kasutamisel, plaanime rakendada PVRB konsensuse tasemel, kuna smart lepingutes tĂ”husa taseme ohutusega verifitseerimine ei ole praegu vĂ”imalik. VĂ”imalik, et kasutame korraga kahte skeemi: alguses kallist saladuse jagamise meetodit pikaajalise random_seed loomiseks, ning kasutame seda seejĂ€rel alusena kĂ”rgsageduslike juhuslike arvude genereerimiseks kindlaksmÀÀratud threshold BLS allkirjade abil, kuigi vĂ”ib-olla piirdume vaid ĂŒhe skeemi kasutamisega. Kahjuks ei ole vĂ”imalik ette öelda, milline protokoll vĂ€lja kujuneb, rÔÔmuks on aga see, et nagu teaduses, on ka inseneritehnilistes ĂŒlesannetes negatiivne tulemus samuti tulemus, ja iga uus katse probleemi lahendada on uus aste kĂ”igi uurijate jaoks, kes seda kĂŒsimust kĂ€sitlevad. Ări nĂ”uete tĂ€itmiseks lahendame konkreetset praktilist ĂŒlesannet â mĂ€ngu rakenduste kindla entropiaallika tagamine, seetĂ”ttu peame samuti pöörama tĂ€helepanu plokiahelale, sealhulgas ahela lĂ”plikkuse ja vĂ”rgu haldamise kĂŒsimustele.
Ja kuigi me ei nĂ€e veel plokiahelates tĂ”estatud usaldusvÀÀrset PVRB-d, mida oleks piisavalt kaua kasutatud, et see taluks reaalseid rakendusi, mitmeid auditeid, koormusi ja loomulikult ka reaalsetest rĂŒnnakutest, siis olemasolevate vĂ”imalike teede arv kinnitab, et lahendus eksisteerib, ja mĂ”ni neist algoritmidest lahendab lĂ”puks probleemi. Jagame hea meelega tulemusi ja tĂ€name teisi meeskondi, kes samuti selle kĂŒsimusega tegelevad, artiklite ja koodi eest, mis vĂ”imaldavad inseneridel mitte astuda kaks korda samadele kivitĂ”kkele.
Nii et kui kohtate programmeerijat, kes disainib detsentraliseeritud juhuslikkust, olge ettevaatlik ja hooliv, pakkudes vajadusel psĂŒhholoogilist abi đ
Allikas: habr.com
