Պատահական օրակուլ՝ հիմնված թվային ստորագրության վրա բլոկչեյնում

Գաղափարից մինչև իրականացում. մենք փոփոխում ենք գոյություն ունեցող էլիպսային կորի թվային ստորագրության սխեման, որպեսզի այն լինի որոշիչ, և դրա հիման վրա մենք տրամադրում ենք գործառույթներ բլոկչեյնում ստուգվող կեղծ պատահական թվեր ստանալու համար:

Պատահական օրակուլ՝ հիմնված թվային ստորագրության վրա բլոկչեյնում

Գաղափար

2018 թվականի աշնանը Waves բլոկչեյնը ներառեց առաջին խելացի պայմանագրերն ակտիվացվել են, անմիջապես հարց առաջացավ ձեռք բերելու հնարավորության մասին կեղծ պատահական թվերոր կարող ես վստահել:

Այս հարցի շուրջ տարակուսելով՝ ես վերջապես հանգեցի եզրակացության՝ ցանկացած բլոկչեյն բջիջ է, փակ համակարգում անհնար է էնտրոպիայի վստահելի աղբյուր ստանալ:

Բայց ինձ դեռ մի միտք դուր եկավ՝ եթե պատահական օրակուլ կստորագրի օգտատիրոջ տվյալները դետերմինիստական ​​ալգորիթմով, այնուհետև օգտատերը միշտ կկարողանա ստուգել նման ստորագրությունը՝ օգտագործելով հանրային բանալին և վստահ կլինի, որ ստացված արժեքը եզակի է: Օրակուլը, որքան էլ ուզենա, ի վիճակի չէ որևէ բան փոխել, ալգորիթմը միանշանակ արդյունք է տալիս: Ըստ էության, օգտվողը գրանցում է արդյունքը, բայց չգիտի այն, քանի դեռ 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;
    • Ստացեք R-կոդը հավելվածի դաշտում՝ Oracle-ից օգտվողին փոխանցելու 1 R-vecr նշան;
  • Ստացեք ստորագրություն;
    • Ուղարկեք առնվազն 0.005 ալիք oracle alias random@vecr-ին, ինչպես նաև ՊԱՐՏԱԴԻՐ նշի նախկինում ստացված R-կոդը և օգտատիրոջ լրացուցիչ տվյալները հավելվածի դաշտում.
    • Ստացեք S-կոդը հավելվածի դաշտում՝ Oracle-ից օգտվողին փոխանցելու 1 S-vecr նշան;
  • Օգտագործեք S-կոդը որպես կեղծ պատահական թվի աղբյուր:

Ընթացիկ իրականացման նրբությունները.

  • Oracle-ին ուղարկված ալիքները օգտագործվում են որպես միջնորդավճար օգտագործողին վերադարձնելու գործարքի համար, մինչև առավելագույնը 1 Waves;
  • R-կոդը «R» նիշի բայթի և 32 բայթ բազայի 58 կոդավորված R արժեքի միացումն է.
  • R-կոդը հավելվածում պետք է լինի առաջինը, օգտվողի տվյալները գալիս են R-կոդից հետո;
  • S-կոդը «S» նիշի բայթի և S-ի 32 բայթ բազային58 կոդավորված արժեքի միացումն է.
  • S-ը մոդուլային բաժանման արդյունք է, ուստի դուք չեք կարող օգտագործել S-ը որպես ամբողջական 256-բիթանոց կեղծ պատահական թիվ (այս թիվը կարելի է համարել առավելագույնը 252-բիթանոց կեղծ պատահական թիվ);
  • Ամենապարզ տարբերակը S-code hash-ը որպես կեղծ պատահական թիվ օգտագործելն է:

S-կոդ ստանալու օրինակ.

Տեխնիկական տեսանկյունից Oracle-ը լիովին պատրաստ է աշխատանքի, դուք կարող եք ապահով օգտագործել այն: Սովորական օգտագործողի կողմից օգտագործման տեսանկյունից կա հարմար գրաֆիկական ինտերֆեյսի բացակայություն, դա պետք է սպասել:

Ուրախ կլինեմ պատասխանել հարցերին և ընդունել մեկնաբանություններ, շնորհակալություն։

Source: www.habr.com

Добавить комментарий