Մեզ վաղուց է հետաքրքրում կրիպտոարժույթներում անանունության թեման և փորձում ենք հետևել այս ոլորտում տեխնոլոգիաների զարգացմանը։ Մեր հոդվածներում մենք արդեն մանրամասն քննարկել ենք շահագործման սկզբունքները
2019 թվականի փետրվարին Ստենֆորդի համալսարանի և Visa Research-ի մի խումբ հետազոտողներ
Այս տվյալների մոդելների կառուցվածքի մասին
UTXO մոդելում գործարքը բաղկացած է «մուտքերից» և «ելքներից»: «Արդյունքների» ուղղակի անալոգը ձեր դրամապանակի թղթադրամներն են. յուրաքանչյուր «ելք» ունի որոշակի անվանական արժեք: Երբ որևէ մեկին վճարում եք (գործարք եք կազմում), դուք ծախսում եք մեկ կամ մի քանի «ելք», որի դեպքում դրանք դառնում են գործարքի «մուտքեր», և բլոկչեյնը նշում է դրանք որպես ծախսված: Այս դեպքում ձեր վճարման ստացողը (կամ դուք ինքներդ, եթե փոփոխության կարիք ունեք) ստանում է նոր առաջացած «ելքերը»: Սա սխեմատիկորեն կարելի է ներկայացնել այսպես.
Հաշվի վրա հիմնված բլոկչեյնները կառուցված են շատ նման ձեր բանկային հաշվին: Նրանք գործ ունեն միայն ձեր հաշվի գումարի և փոխանցման գումարի հետ: Երբ ձեր հաշվից ինչ-որ գումար եք փոխանցում, դուք չեք այրում որևէ «ելք», ցանցը կարիք չունի հիշելու, թե որ մետաղադրամներն են ծախսվել, որոնք՝ ոչ: Ամենապարզ դեպքում, գործարքի ստուգումը հանգում է ուղարկողի ստորագրության և նրա հաշվեկշռի գումարի ստուգմանը.
Տեխնոլոգիաների վերլուծություն
Հաջորդը, մենք կխոսենք այն մասին, թե ինչպես է Zether-ը թաքցնում գործարքի գումարը, ստացողին և ուղարկողին: Երբ մենք նկարագրում ենք դրա գործունեության սկզբունքները, մենք նկատում ենք գաղտնի և անանուն տարբերակների տարբերությունները: Քանի որ հաշիվների վրա հիմնված բլոկչեյններում գաղտնիությունն ապահովելը շատ ավելի հեշտ է, անանունացման միջոցով դրված որոշ սահմանափակումներ տեղին չեն լինի տեխնոլոգիայի գաղտնի տարբերակի համար:
Թաքցնել մնացորդները և փոխանցման գումարները
Կոդավորման սխեման օգտագործվում է Zether-ում մնացորդները գաղտնագրելու և գումարները փոխանցելու համար
որտեղ C - կոդավորված գումար, D - այս գումարը վերծանելու համար անհրաժեշտ օժանդակ արժեք, G - էլիպսային կորի վրա ֆիքսված կետ, երբ գաղտնի բանալիով բազմապատկվում է, ստացվում է հանրային բանալին:
Երբ Բոբը ստանում է այս արժեքները, նա պարզապես դրանք ավելացնում է իր գաղտնագրված հաշվեկշռին նույն կերպ, ինչի պատճառով այս սխեման հարմար է։
Նմանապես, Ալիսը հանում է նույն արժեքները իր հաշվեկշռից, միայն թե Y օգտագործում է ձեր հանրային բանալին:
Թաքցնել ստացողին և ուղարկողին
UTXO-ում «արդյունքների» խառնումը գալիս է կրիպտոարժույթների վաղ օրերից և օգնում է թաքցնել ուղարկողին: Դա անելու համար ուղարկողն ինքը, փոխանցում կատարելիս, պատահական «ելքեր» է հավաքում բլոկչեյնում և խառնում իր սեփականի հետ։ Այնուհետև նա ստորագրում է «ելքերը» օղակաձև ստորագրությամբ՝ գաղտնագրման մեխանիզմ, որը թույլ է տալիս համոզել ստուգողին, որ ուղարկողի մետաղադրամները առկա են «ելքերի» մեջ: Խառը մետաղադրամներն իրենք, իհարկե, չեն ծախսվում։
Այնուամենայնիվ, մենք չենք կարողանա կեղծ արդյունքներ ստեղծել՝ հասցեատիրոջը թաքցնելու համար: Հետևաբար, UTXO-ում յուրաքանչյուր «ելք» ունի իր ուրույն հասցեն, և այն գաղտնագրորեն կապված է այդ մետաղադրամների ստացողի հասցեի հետ: Այս պահին ոչ մի կերպ հնարավոր չէ բացահայտել կապը եզակի ելքային հասցեի և ստացողի հասցեի միջև՝ առանց դրա գաղտնի բանալիները իմանալու:
Հաշվի վրա հիմնված մոդելում մենք չենք կարող օգտագործել մեկանգամյա հասցեներ (հակառակ դեպքում այն արդեն կլինի «ելքի» մոդել): Հետևաբար, ստացողը և ուղարկողը պետք է խառնվեն բլոկչեյնի այլ հաշիվների հետ: Այս դեպքում կոդավորված 0 մետաղադրամները գանձվում են խառը հաշիվներից (կամ ավելացվում է 0, եթե ստացողը խառնված է), առանց իրականում փոխելու դրանց իրական հաշվեկշիռը:
Քանի որ և՛ ուղարկողը, և՛ ստացողը միշտ ունեն մշտական հասցե, նույն հասցեներին փոխանցելիս անհրաժեշտ է դառնում օգտագործել նույն խմբերը խառնելու համար։ Ավելի հեշտ է սրան նայել օրինակով:
Ենթադրենք, Ալիսը որոշում է ներդրում ունենալ Բոբի բարեգործության մեջ, բայց նախընտրում է, որ փոխանցումը մնա անանուն արտաքին դիտորդի համար: Այնուհետև ուղարկողի դաշտում քողարկվելու համար նա մտնում է նաև Ադամի և Ադելի հաշիվները։ Իսկ Բոբին թաքցնելու համար ստացողի դաշտում ավելացրեք Բենի և Բիլի հաշիվները: Հաջորդ ներդրումը կատարելով՝ Ալիսը որոշեց իր կողքին գրել Ալեքսն ու Ամանդան, իսկ Բոբի կողքին՝ Բրյուսն ու Բենջենը։ Այս դեպքում այս երկու գործարքներում բլոկչեյնը վերլուծելիս կա միայն մեկ հատվող զույգ՝ Ալիսը և Բոբը, որն անանունացնում է այդ գործարքները:
Գործարքների մրցավազք
Ինչպես արդեն նշեցինք, հաշվի վրա հիմնված համակարգերում ձեր մնացորդը թաքցնելու համար օգտատերը գաղտնագրում է իր մնացորդը և փոխանցման գումարը: Միաժամանակ նա պետք է ապացուցի, որ իր հաշվի մնացորդը մնում է ոչ բացասական։ Խնդիրն այն է, որ գործարք ստեղծելիս օգտատերը ապացույց է ստեղծում իր ընթացիկ հաշվի կարգավիճակի վերաբերյալ: Ի՞նչ կլինի, եթե Բոբը գործարք ուղարկի Ալիսին, և այն ընդունվի Ալիսի կողմից ուղարկվածից առաջ: Այնուհետև Ալիսի գործարքը կհամարվի անվավեր, քանի որ հաշվեկշռի ապացույցը ստեղծվել է մինչև Բոբի գործարքի ընդունումը։
Առաջին որոշումը, որը գալիս է նման իրավիճակում, հաշիվը սառեցնելն է մինչև գործարքի իրականացումը։ Բայց այս մոտեցումը հարմար չէ, քանի որ բացի բաշխված համակարգում նման խնդրի լուծման բարդությունից, անանուն սխեմայով պարզ չի լինի, թե ում հաշիվն արգելափակել:
Այս խնդիրը լուծելու համար տեխնոլոգիան առանձնացնում է մուտքային և ելքային գործարքները՝ ծախսերն անմիջապես ազդում են հաշվեկշռի վրա, իսկ մուտքերը՝ ուշացած։ Դրա համար ներկայացվում է «դարաշրջան» հասկացությունը՝ ֆիքսված չափի բլոկների խումբ: Ներկայիս «դարաշրջանը» որոշվում է բլոկի բարձրությունը խմբի չափով բաժանելով: Գործարքը մշակելիս ցանցն անմիջապես թարմացնում է ուղարկողի մնացորդը և պահում է ստացողի միջոցները պահեստում: Կուտակված միջոցները հասանելի են դառնում վճարողին միայն այն ժամանակ, երբ սկսվում է նոր «դարաշրջանը»:
Արդյունքում օգտատերը կարող է գործարքներ ուղարկել՝ անկախ նրանից, թե որքան հաճախ են ստացվում միջոցները (իհարկե, որքանով թույլ է տալիս նրա հաշվեկշիռը)։ Դարաշրջանի չափը որոշվում է՝ ելնելով այն բանից, թե որքան արագ են բլոկները տարածվում ցանցում և որքան արագ են գործարքը մտնում բլոկ:
Այս լուծումը լավ է աշխատում գաղտնի փոխանցումների դեպքում, սակայն անանուն գործարքների դեպքում, ինչպես հետագայում կտեսնենք, այն լուրջ խնդիրներ է ստեղծում։
Պաշտպանություն կրկնվող հարձակումներից
Հաշվի վրա հիմնված բլոկչեյններում յուրաքանչյուր գործարք ստորագրվում է ուղարկողի անձնական բանալիով, որը ստուգողին համոզում է, որ գործարքը չի փոփոխվել և ստեղծվել է այս բանալի սեփականատիրոջ կողմից: Բայց ի՞նչ կլինի, եթե հարձակվողը, ով լսում էր հաղորդման ալիքը, ընդհատի այս հաղորդագրությունը և ուղարկի ճիշտ նույն երկրորդը: Ստուգողը կստուգի գործարքի ստորագրությունը և կհամոզվի դրա հեղինակության մեջ, և ցանցը նույն գումարը նորից դուրս կգրի ուղարկողի մնացորդից:
Այս հարձակումը կոչվում է կրկնվող հարձակում: UTXO մոդելում նման հարձակումները տեղին չեն, քանի որ հարձակվողը կփորձի օգտագործել ծախսված արդյունքները, որոնք ինքնին վավեր չեն և մերժվում են ցանցի կողմից:
Որպեսզի դա տեղի չունենա, գործարքի մեջ ներկառուցվում է պատահական տվյալներ ունեցող դաշտ, որը կոչվում է նոնս կամ պարզապես «աղ»: Սալթով գործարքը նորից ներկայացնելիս, ստուգիչը նայում է, թե արդյոք նոնսը նախկինում օգտագործվել է, և եթե ոչ, գործարքը վավեր է համարում: Որպեսզի չպահվի օգտատերերի նոնսների ողջ պատմությունը բլոկչեյնում, սովորաբար առաջին իսկ գործարքի ժամանակ այն հավասարվում է զրոյի, այնուհետև ավելանում է մեկով։ Ցանցը կարող է միայն ստուգել, որ նոր գործարքի ոչ լինելը տարբերվում է նախորդից:
Անանուն փոխանցման սխեմայում առաջանում է գործարքների չնախատեսումների վավերացման խնդիր: Մենք չենք կարող հստակորեն կապել նոնսը ուղարկողի հասցեին, քանի որ, ակնհայտորեն, դա անանունացնում է փոխանցումը: Մենք նաև չենք կարող որևէ մեկը ավելացնել բոլոր մասնակցող հաշիվների մեջ, քանի որ դա կարող է հակասել մշակվող այլ փոխանցումների հետ:
Zether-ի հեղինակներն առաջարկում են նոնսեն գաղտնագրորեն գեներացնել՝ կախված «դարաշրջանից»։ Օրինակ:
Այստեղ x ուղարկողի գաղտնի բանալին է, և Գեպոչ — դարաշրջանի հավելյալ գեներատոր, որը ստացվում է «Zether +» ձևի տողը հաշելու միջոցով: Այժմ խնդիրը կարծես թե լուծված է. մենք չենք բացահայտում ուղարկողի նոնսը և չենք միջամտում չներգրավված մասնակիցներին: Բայց այս մոտեցումը լուրջ սահմանափակում է դնում. մեկ հաշիվը կարող է ուղարկել ոչ ավելի, քան մեկ գործարք մեկ «դարաշրջանում»: Այս խնդիրը, ցավոք, մնում է չլուծված, և ներկայումս Zether-ի անանուն տարբերակը, մեր կարծիքով, դժվար թե հարմար է դարձնում օգտագործման համար:
Զրո գիտելիքի ապացույցների բարդությունը
UTXO-ում ուղարկողը պետք է ապացուցի ցանցին, որ ինքը բացասական գումար չի ծախսում, հակառակ դեպքում հնարավոր է դառնում օդից նոր մետաղադրամներ ստեղծել (ինչու է դա հնարավոր, գրել ենք նախորդներից մեկում.
Հաշվի վրա հիմնված բլոկչեյնի անանուն տարբերակում ապացույցների արտահայտությունները շատ ավելի բարդ են: Ուղարկողը ապացուցում է, որ.
- Ուղարկված գումարը դրական է.
- Մնացորդը մնում է ոչ բացասական;
- Ուղարկողը ճիշտ է գաղտնագրել փոխանցման գումարները (ներառյալ զրո);
- Հաշվեկշռի մնացորդը փոխվում է միայն ուղարկողի և ստացողի համար.
- Ուղարկողին է պատկանում իր հաշվի մասնավոր բանալին, և նա իրականում գտնվում է ուղարկողների ցուցակում (ներգրավվածների թվում);
- Գործարքում օգտագործված Nonce-ը ճիշտ է կազմված:
Նման բարդ ապացույցի համար հեղինակները օգտագործում են խառնուրդ
Արդյունքը:
Մեր կարծիքով, Zether-ի այն մասը, որը գաղտնիություն է բերում հաշիվների վրա հիմնված բլոկչեյններին, կարող է օգտագործվել հենց հիմա: Սակայն այս պահին տեխնոլոգիայի անանուն տարբերակը լուրջ սահմանափակումներ է դնում դրա կիրառման, իսկ բարդության վրա՝ դրա իրականացման համար: Սակայն պետք չէ զեղչել, որ հեղինակներն այն թողարկել են ընդամենը մի քանի ամիս առաջ, և գուցե մեկ ուրիշը լուծում գտնի այսօր առկա խնդիրներին։ Չէ՞ որ գիտությունն այսպես է արվում։
Source: www.habr.com