Պատահական օրակուլ՝ հիմնված թվային ստորագրության վրա բլոկչեյնում
Գաղափարից մինչև իրականացում. մենք փոփոխում ենք գոյություն ունեցող էլիպսային կորի թվային ստորագրության սխեման, որպեսզի այն լինի որոշիչ, և դրա հիման վրա մենք տրամադրում ենք գործառույթներ բլոկչեյնում ստուգվող կեղծ պատահական թվեր ստանալու համար:
Այս հարցի շուրջ տարակուսելով՝ ես վերջապես հանգեցի եզրակացության՝ ցանկացած բլոկչեյն բջիջ է, փակ համակարգում անհնար է էնտրոպիայի վստահելի աղբյուր ստանալ:
Բայց ինձ դեռ մի միտք դուր եկավ՝ եթե պատահական օրակուլ կստորագրի օգտատիրոջ տվյալները դետերմինիստական ալգորիթմով, այնուհետև օգտատերը միշտ կկարողանա ստուգել նման ստորագրությունը՝ օգտագործելով հանրային բանալին և վստահ կլինի, որ ստացված արժեքը եզակի է: Օրակուլը, որքան էլ ուզենա, ի վիճակի չէ որևէ բան փոխել, ալգորիթմը միանշանակ արդյունք է տալիս: Ըստ էության, օգտվողը գրանցում է արդյունքը, բայց չգիտի այն, քանի դեռ Oracle-ը չի հրապարակել այն: Պարզվում է, որ կարելի է ընդհանրապես չվստահել օրակլին, այլ ստուգել նրա աշխատանքի արդյունքը։ Այնուհետև, հաջող ստուգման դեպքում, նման ստորագրությունը կարող է համարվել կեղծ պատահական թվի էնտրոպիայի աղբյուր։
Waves բլոկչեյն հարթակն օգտագործում է ստորագրության սխեմա EdDSA տարբերակը Edxnumx. Այս սխեմայում ստորագրությունը բաղկացած է R և S արժեքներից, որտեղ R-ը կախված է պատահական արժեքից, իսկ S-ը հաշվարկվում է ստորագրվող հաղորդագրության, անձնական բանալիի և R-ի նույն պատահական համարի հիման վրա: Ստացվում է, որ նույնի համար եզակի կախվածություն չկա. Օգտատիրոջ հաղորդագրության համար կան բազմաթիվ վավեր ստորագրություններ:
Ակնհայտ է, որ իր մաքուր ձևով նման ստորագրությունը չի կարող օգտագործվել որպես կեղծ պատահական թվերի աղբյուր, քանի որ այն ոչ դետերմինիստական է և, հետևաբար, կարող է հեշտությամբ շահարկվել օրակլի կողմից:
Բայց, ինչպես պարզվեց, դա իրականում հնարավոր է դարձնել դետերմինիստական։
Ես մեծ հույսեր էի կապում ստուգելի պատահական ֆունկցիա (VRF), բայց սարքավորումն ուսումնասիրելուց հետո ես ստիպված էի հրաժարվել այս տարբերակից։ Չնայած VRF-ն առաջարկում է ստորագրության և դրա ապացույցի դետերմինիստական տարբերակ, ալգորիթմում կա տարօրինակ տեղ, որը բացում է սև անցք՝ մանիպուլյացիայի համար: Մասնավորապես, k-ի արժեքը հաշվարկելիս (բաժին 5.1) օգտագործվում է մասնավոր բանալի, որն անհայտ է մնում օգտագործողի համար, ինչը նշանակում է, որ օգտվողը չի կարող ստուգել k-ի հաշվարկի ճիշտությունը, ինչը նշանակում է, որ Oracle-ը կարող է օգտագործել k-ի ցանկացած արժեք, որն իրեն անհրաժեշտ է և միևնույն ժամանակ պահպանել համապատասխանությունների տվյալների բազա։ k-ի և ստորագրված տվյալների համար, որպեսզի միշտ կարողանանք ճիշտ արդյունքը վերահաշվարկել VRF-ի տեսանկյունից: Եթե տեսնում եք VRF-ի վրա հիմնված գծագիր՝ առանց անձնական բանալին բացահայտելու, կարող եք խելացի լինել. նշեք բանալին բացելու անհրաժեշտությունը, կամ բացառելու այն k-ի հաշվարկից, այնուհետև մասնավոր բանալին ինքնաբերաբար կբացահայտվի, երբ հայտնվի առաջին ստորագրությունը: . Ընդհանուր առմամբ, ինչպես արդեն նշվեց, պատահական օրակլի համար տարօրինակ սխեմա:
Մի փոքր մտածելուց և տեղացի վերլուծաբանների աջակցությունը ստանալուց հետո ծնվեց VECRO աշխատանքային սխեման:
VECRO-ն Verifiable Elliptic Curve Random Oracle-ի հապավումն է, որը ռուսերեն նշանակում է ստուգելի պատահական օրակուլ էլիպսաձեւ կորերի վրա:
Ամեն ինչ պարզվեց՝ դետերմինիզմի հասնելու համար անհրաժեշտ է ֆիքսել R-ի արժեքը՝ նախքան ստորագրվող հաղորդագրությունը հայտնվելը։ Եթե R-ը պարտավորված է և ստորագրվող հաղորդագրության մի մասն է, ինչը հետագայում երաշխավորում է, որ R-ը ստորագրվում է ստորագրվող հաղորդագրության մեջ, S-ի արժեքը եզակիորեն որոշվում է օգտագործողի հաղորդագրությամբ և, հետևաբար, կարող է օգտագործվել որպես կեղծ պատահական թվերի աղբյուր:
Նման սխեմայի դեպքում կարևոր չէ, թե ինչպես է R-ն ամրագրված, սա մնում է օրակլի պատասխանատվությունը: Կարևոր է, որ S-ը եզակիորեն որոշվի օգտագործողի կողմից, բայց դրա արժեքը անհայտ է մինչև Oracle-ը հրապարակի այն: Այն ամենը, ինչ մենք ուզում էինք:
Խոսելով ֆիքսված R-ի մասին, նշեք, որ վերօգտագործված Ռ տարբեր հաղորդագրություններ ստորագրելիս այն եզակի կերպով բացահայտում է անձնական բանալին EdDSA սխեմայում: Oracle-ի սեփականատիրոջ համար չափազանց կարևոր է դառնում վերացնել R-ի վերօգտագործման հնարավորությունը՝ օգտվողների տարբեր հաղորդագրություններ ստորագրելու համար: Այսինքն, ցանկացած մանիպուլյացիայի կամ դավաճանության դեպքում oracle-ը միշտ վտանգի է ենթարկվելու կորցնելու իր անձնական բանալին:
Ընդհանուր առմամբ, Oracle-ը պետք է օգտագործողներին տրամադրի երկու գործառույթ՝ սկզբնավորում, որը ֆիքսում է R արժեքը և ստորագրություն, որը վերադարձնում է S արժեքը: Այս դեպքում, R, S զույգը ֆիքսված պարունակող հաղորդագրության սովորական ստուգելի ստորագրությունն է: արժեքը R և կամայական օգտագործողի տվյալները:
Կարելի է պնդել, որ բլոկչեյնի համար այս սխեման ոչ այլ ինչ է, քան սովորական commit-expand scheme. Ըստ էության, այո, դա նա է: Բայց կան մի քանի նրբերանգներ. Նախ, oracle-ը միշտ աշխատում է նույն բանալիով բոլոր գործողություններում, օրինակ, դա հարմար է պայմանագրերում օգտագործելու համար: Երկրորդ, կա վտանգ, որ Oracle-ը կորցնի անձնական բանալին, եթե այն սխալ է վարվում, օրինակ, Oracle-ը թույլ է տալիս արդյունքի նմուշներ պատրաստել, ապա բավական է ընդամենը երկու թեստ անել մասնավոր բանալին պարզելու և ամբողջական ստանալու համար: մուտք դեպի դրամապանակ. Երրորդ, ստորագրությունը, որը բնիկորեն ստուգելի է բլոկչեյնում և պատահականության աղբյուր է, գեղեցիկ է:
Վեց ամիս շարունակ մտքումս թխում էր իրականացման գաղափարը, մինչև վերջապես մոտիվացիան հայտնվեց ձևի մեջ դրամաշնորհ Waves Labs-ից. Մեծ դրամաշնորհը մեծ պատասխանատվություն է կրում, ուստի նախագիծը կլինի այնտեղ:
Իրականացման
Այսպիսով, այս նախագծում VECRO-ն իրականացվել է Waves բլոկչեյնի վրա հարցում-պատասխան ռեժիմում՝ օգտագործելով փոխանցման գործարքներ օգտագործողի և Oracle-ի միջև: Միևնույն ժամանակ, Oracle հաշվի վրա տեղադրվում է սցենար, որը վերահսկում է աշխատանքը խստորեն վերը նկարագրված տրամաբանությանը համապատասխան: Oracle-ի գործարքները ստուգվում են, և օգտատերերի փոխգործակցության ողջ շղթան վերականգնվում է: Բոլոր չորս գործարքները ներգրավված են վերջնական արժեքի ստուգման մեջ, խելացի պայմանագիրը դրանք կապում է խիստ ստուգման թելի հետ՝ քայլ առ քայլ ստուգելով բոլոր արժեքները և որևէ մանիպուլյացիայի տեղ չի թողնում:
Եվս մեկ անգամ մի կողմ դնելու և ավելի պարզ դարձնելու համար։ Oracle-ն աշխատում է ոչ միայն առաջարկված սխեմայի համաձայն: Դրա աշխատանքը լիովին վերահսկվում է բլոկչեյնի մակարդակով հաստատվածների կողմից սերտորեն խելացի պայմանագրով. Քայլեք դեպի ձախ և գործարքը պարզապես չի իրականացվի: Այսպիսով, եթե գործարքը ներառված է բլոկչեյնում, օգտատերը նույնիսկ կարիք չունի որևէ բան ստուգելու, ցանցի հարյուրավոր հանգույցներ արդեն ստուգել են նրա համար ամեն ինչ:
Ներկայումս Waves մայրցանցում աշխատում է մեկ VECRO (դուք կարող եք գործարկել ձեր սեփականը, դա դժվար չէ, պարզապես նայեք կազմաձևման օրինակին) Ընթացիկ կոդը աշխատում է PHP-ում (միացված WavesKit, որի մասին Ես ձեզ ավելի վաղ ասացի).
Oracle ծառայությունից օգտվելու համար դուք պետք է.
Ուղղել R;
Ուղարկեք առնվազն 0.005 ալիքներ Oracle alias-ին init@vecr;
Ուղարկեք առնվազն 0.005 ալիք oracle alias random@vecr-ին, ինչպես նաև ՊԱՐՏԱԴԻՐ նշի նախկինում ստացված R-կոդը և օգտատիրոջ լրացուցիչ տվյալները հավելվածի դաշտում.
Օգտագործեք S-կոդը որպես կեղծ պատահական թվի աղբյուր:
Ընթացիկ իրականացման նրբությունները.
Oracle-ին ուղարկված ալիքները օգտագործվում են որպես միջնորդավճար օգտագործողին վերադարձնելու գործարքի համար, մինչև առավելագույնը 1 Waves;
R-կոդը «R» նիշի բայթի և 32 բայթ բազայի 58 կոդավորված R արժեքի միացումն է.
R-կոդը հավելվածում պետք է լինի առաջինը, օգտվողի տվյալները գալիս են R-կոդից հետո;
S-կոդը «S» նիշի բայթի և S-ի 32 բայթ բազային58 կոդավորված արժեքի միացումն է.
S-ը մոդուլային բաժանման արդյունք է, ուստի դուք չեք կարող օգտագործել S-ը որպես ամբողջական 256-բիթանոց կեղծ պատահական թիվ (այս թիվը կարելի է համարել առավելագույնը 252-բիթանոց կեղծ պատահական թիվ);
Ամենապարզ տարբերակը S-code hash-ը որպես կեղծ պատահական թիվ օգտագործելն է:
Տեխնիկական տեսանկյունից Oracle-ը լիովին պատրաստ է աշխատանքի, դուք կարող եք ապահով օգտագործել այն: Սովորական օգտագործողի կողմից օգտագործման տեսանկյունից կա հարմար գրաֆիկական ինտերֆեյսի բացակայություն, դա պետք է սպասել:
Ուրախ կլինեմ պատասխանել հարցերին և ընդունել մեկնաբանություններ, շնորհակալություն։