Հաշվի վրա հիմնված բլոկչեյններում անանունության մասին

Մեզ վաղուց է հետաքրքրում կրիպտոարժույթներում անանունության թեման և փորձում ենք հետևել այս ոլորտում տեխնոլոգիաների զարգացմանը։ Մեր հոդվածներում մենք արդեն մանրամասն քննարկել ենք շահագործման սկզբունքները գաղտնի գործարքներ Մոներոյում, ինչպես նաև իրականացվել է համեմատական ​​ակնարկ այս ոլորտում առկա տեխնոլոգիաները։ Այնուամենայնիվ, այսօր բոլոր անանուն կրիպտոարժույթները կառուցված են տվյալների մոդելի վրա, որն առաջարկվում է Bitcoin-ի կողմից՝ Unspent Transaction Output (այսուհետ՝ UTXO): Հաշվի վրա հիմնված բլոկչեյնների համար, ինչպիսին է Ethereum-ը, գոյություն ունեցող լուծումներն անանունության և գաղտնիության իրականացման համար (օրինակ. Մոբիուս կամ Ազտեկ) փորձել է կրկնօրինակել UTXO մոդելը խելացի պայմանագրերում:

2019 թվականի փետրվարին Ստենֆորդի համալսարանի և Visa Research-ի մի խումբ հետազոտողներ ազատ է արձակվել նախնական տպագրություն «Zether. Դեպի գաղտնիություն խելացի պայմանագրերի աշխարհում»: Հեղինակները առաջինն էին, որ առաջարկեցին հաշվի վրա հիմնված բլոկչեյններում անանունությունը ապահովելու մոտեցում և ներկայացրեցին խելացի պայմանագրի երկու տարբերակ՝ գաղտնի (թաքցնելով մնացորդները և փոխանցման գումարները) և անանուն (ստացողին և ուղարկողին թաքցնելը) գործարքների համար: Առաջարկվող տեխնոլոգիան մեզ հետաքրքիր է և ցանկանում ենք կիսվել դրա դիզայնով, ինչպես նաև խոսել այն մասին, թե ինչու է անանունության խնդիրը հաշվի վրա հիմնված բլոկչեյններում համարվում շատ դժվար, և արդյոք հեղինակներին հաջողվել է լուծել այն ամբողջությամբ:

Այս տվյալների մոդելների կառուցվածքի մասին

UTXO մոդելում գործարքը բաղկացած է «մուտքերից» և «ելքներից»: «Արդյունքների» ուղղակի անալոգը ձեր դրամապանակի թղթադրամներն են. յուրաքանչյուր «ելք» ունի որոշակի անվանական արժեք: Երբ որևէ մեկին վճարում եք (գործարք եք կազմում), դուք ծախսում եք մեկ կամ մի քանի «ելք», որի դեպքում դրանք դառնում են գործարքի «մուտքեր», և բլոկչեյնը նշում է դրանք որպես ծախսված: Այս դեպքում ձեր վճարման ստացողը (կամ դուք ինքներդ, եթե փոփոխության կարիք ունեք) ստանում է նոր առաջացած «ելքերը»: Սա սխեմատիկորեն կարելի է ներկայացնել այսպես.

Հաշվի վրա հիմնված բլոկչեյններում անանունության մասին

Հաշվի վրա հիմնված բլոկչեյնները կառուցված են շատ նման ձեր բանկային հաշվին: Նրանք գործ ունեն միայն ձեր հաշվի գումարի և փոխանցման գումարի հետ: Երբ ձեր հաշվից ինչ-որ գումար եք փոխանցում, դուք չեք այրում որևէ «ելք», ցանցը կարիք չունի հիշելու, թե որ մետաղադրամներն են ծախսվել, որոնք՝ ոչ: Ամենապարզ դեպքում, գործարքի ստուգումը հանգում է ուղարկողի ստորագրության և նրա հաշվեկշռի գումարի ստուգմանը.

Հաշվի վրա հիմնված բլոկչեյններում անանունության մասին

Տեխնոլոգիաների վերլուծություն

Հաջորդը, մենք կխոսենք այն մասին, թե ինչպես է Zether-ը թաքցնում գործարքի գումարը, ստացողին և ուղարկողին: Երբ մենք նկարագրում ենք դրա գործունեության սկզբունքները, մենք նկատում ենք գաղտնի և անանուն տարբերակների տարբերությունները: Քանի որ հաշիվների վրա հիմնված բլոկչեյններում գաղտնիությունն ապահովելը շատ ավելի հեշտ է, անանունացման միջոցով դրված որոշ սահմանափակումներ տեղին չեն լինի տեխնոլոգիայի գաղտնի տարբերակի համար:

Թաքցնել մնացորդները և փոխանցման գումարները

Կոդավորման սխեման օգտագործվում է Zether-ում մնացորդները գաղտնագրելու և գումարները փոխանցելու համար Էլ Գամալ. Այն աշխատում է հետևյալ կերպ. Երբ Ալիսը ցանկանում է ուղարկել Բոբին b մետաղադրամներ ըստ հասցեի (դրա հանրային բանալին) Y, նա ընտրում է պատահական թիվ r և կոդավորում է գումարը՝

Հաշվի վրա հիմնված բլոկչեյններում անանունության մասին
որտեղ C - կոդավորված գումար, D - այս գումարը վերծանելու համար անհրաժեշտ օժանդակ արժեք, G - էլիպսային կորի վրա ֆիքսված կետ, երբ գաղտնի բանալիով բազմապատկվում է, ստացվում է հանրային բանալին:

Երբ Բոբը ստանում է այս արժեքները, նա պարզապես դրանք ավելացնում է իր գաղտնագրված հաշվեկշռին նույն կերպ, ինչի պատճառով այս սխեման հարմար է։

Նմանապես, Ալիսը հանում է նույն արժեքները իր հաշվեկշռից, միայն թե Y օգտագործում է ձեր հանրային բանալին:

Թաքցնել ստացողին և ուղարկողին

UTXO-ում «արդյունքների» խառնումը գալիս է կրիպտոարժույթների վաղ օրերից և օգնում է թաքցնել ուղարկողին: Դա անելու համար ուղարկողն ինքը, փոխանցում կատարելիս, պատահական «ելքեր» է հավաքում բլոկչեյնում և խառնում իր սեփականի հետ։ Այնուհետև նա ստորագրում է «ելքերը» օղակաձև ստորագրությամբ՝ գաղտնագրման մեխանիզմ, որը թույլ է տալիս համոզել ստուգողին, որ ուղարկողի մետաղադրամները առկա են «ելքերի» մեջ: Խառը մետաղադրամներն իրենք, իհարկե, չեն ծախսվում։

Այնուամենայնիվ, մենք չենք կարողանա կեղծ արդյունքներ ստեղծել՝ հասցեատիրոջը թաքցնելու համար: Հետևաբար, UTXO-ում յուրաքանչյուր «ելք» ունի իր ուրույն հասցեն, և այն գաղտնագրորեն կապված է այդ մետաղադրամների ստացողի հասցեի հետ: Այս պահին ոչ մի կերպ հնարավոր չէ բացահայտել կապը եզակի ելքային հասցեի և ստացողի հասցեի միջև՝ առանց դրա գաղտնի բանալիները իմանալու:

Հաշվի վրա հիմնված մոդելում մենք չենք կարող օգտագործել մեկանգամյա հասցեներ (հակառակ դեպքում այն ​​արդեն կլինի «ելքի» մոդել): Հետևաբար, ստացողը և ուղարկողը պետք է խառնվեն բլոկչեյնի այլ հաշիվների հետ: Այս դեպքում կոդավորված 0 մետաղադրամները գանձվում են խառը հաշիվներից (կամ ավելացվում է 0, եթե ստացողը խառնված է), առանց իրականում փոխելու դրանց իրական հաշվեկշիռը:

Քանի որ և՛ ուղարկողը, և՛ ստացողը միշտ ունեն մշտական ​​հասցե, նույն հասցեներին փոխանցելիս անհրաժեշտ է դառնում օգտագործել նույն խմբերը խառնելու համար։ Ավելի հեշտ է սրան նայել օրինակով:

Ենթադրենք, Ալիսը որոշում է ներդրում ունենալ Բոբի բարեգործության մեջ, բայց նախընտրում է, որ փոխանցումը մնա անանուն արտաքին դիտորդի համար: Այնուհետև ուղարկողի դաշտում քողարկվելու համար նա մտնում է նաև Ադամի և Ադելի հաշիվները։ Իսկ Բոբին թաքցնելու համար ստացողի դաշտում ավելացրեք Բենի և Բիլի հաշիվները: Հաջորդ ներդրումը կատարելով՝ Ալիսը որոշեց իր կողքին գրել Ալեքսն ու Ամանդան, իսկ Բոբի կողքին՝ Բրյուսն ու Բենջենը։ Այս դեպքում այս երկու գործարքներում բլոկչեյնը վերլուծելիս կա միայն մեկ հատվող զույգ՝ Ալիսը և Բոբը, որն անանունացնում է այդ գործարքները:

Հաշվի վրա հիմնված բլոկչեյններում անանունության մասին

Գործարքների մրցավազք

Ինչպես արդեն նշեցինք, հաշվի վրա հիմնված համակարգերում ձեր մնացորդը թաքցնելու համար օգտատերը գաղտնագրում է իր մնացորդը և փոխանցման գումարը: Միաժամանակ նա պետք է ապացուցի, որ իր հաշվի մնացորդը մնում է ոչ բացասական։ Խնդիրն այն է, որ գործարք ստեղծելիս օգտատերը ապացույց է ստեղծում իր ընթացիկ հաշվի կարգավիճակի վերաբերյալ: Ի՞նչ կլինի, եթե Բոբը գործարք ուղարկի Ալիսին, և այն ընդունվի Ալիսի կողմից ուղարկվածից առաջ: Այնուհետև Ալիսի գործարքը կհամարվի անվավեր, քանի որ հաշվեկշռի ապացույցը ստեղծվել է մինչև Բոբի գործարքի ընդունումը։

Հաշվի վրա հիմնված բլոկչեյններում անանունության մասին

Առաջին որոշումը, որը գալիս է նման իրավիճակում, հաշիվը սառեցնելն է մինչև գործարքի իրականացումը։ Բայց այս մոտեցումը հարմար չէ, քանի որ բացի բաշխված համակարգում նման խնդրի լուծման բարդությունից, անանուն սխեմայով պարզ չի լինի, թե ում հաշիվն արգելափակել:

Այս խնդիրը լուծելու համար տեխնոլոգիան առանձնացնում է մուտքային և ելքային գործարքները՝ ծախսերն անմիջապես ազդում են հաշվեկշռի վրա, իսկ մուտքերը՝ ուշացած։ Դրա համար ներկայացվում է «դարաշրջան» հասկացությունը՝ ֆիքսված չափի բլոկների խումբ: Ներկայիս «դարաշրջանը» որոշվում է բլոկի բարձրությունը խմբի չափով բաժանելով: Գործարքը մշակելիս ցանցն անմիջապես թարմացնում է ուղարկողի մնացորդը և պահում է ստացողի միջոցները պահեստում: Կուտակված միջոցները հասանելի են դառնում վճարողին միայն այն ժամանակ, երբ սկսվում է նոր «դարաշրջանը»:

Արդյունքում օգտատերը կարող է գործարքներ ուղարկել՝ անկախ նրանից, թե որքան հաճախ են ստացվում միջոցները (իհարկե, որքանով թույլ է տալիս նրա հաշվեկշիռը)։ Դարաշրջանի չափը որոշվում է՝ ելնելով այն բանից, թե որքան արագ են բլոկները տարածվում ցանցում և որքան արագ են գործարքը մտնում բլոկ:

Այս լուծումը լավ է աշխատում գաղտնի փոխանցումների դեպքում, սակայն անանուն գործարքների դեպքում, ինչպես հետագայում կտեսնենք, այն լուրջ խնդիրներ է ստեղծում։

Պաշտպանություն կրկնվող հարձակումներից

Հաշվի վրա հիմնված բլոկչեյններում յուրաքանչյուր գործարք ստորագրվում է ուղարկողի անձնական բանալիով, որը ստուգողին համոզում է, որ գործարքը չի փոփոխվել և ստեղծվել է այս բանալի սեփականատիրոջ կողմից: Բայց ի՞նչ կլինի, եթե հարձակվողը, ով լսում էր հաղորդման ալիքը, ընդհատի այս հաղորդագրությունը և ուղարկի ճիշտ նույն երկրորդը: Ստուգողը կստուգի գործարքի ստորագրությունը և կհամոզվի դրա հեղինակության մեջ, և ցանցը նույն գումարը նորից դուրս կգրի ուղարկողի մնացորդից:

Այս հարձակումը կոչվում է կրկնվող հարձակում: UTXO մոդելում նման հարձակումները տեղին չեն, քանի որ հարձակվողը կփորձի օգտագործել ծախսված արդյունքները, որոնք ինքնին վավեր չեն և մերժվում են ցանցի կողմից:

Որպեսզի դա տեղի չունենա, գործարքի մեջ ներկառուցվում է պատահական տվյալներ ունեցող դաշտ, որը կոչվում է նոնս կամ պարզապես «աղ»: Սալթով գործարքը նորից ներկայացնելիս, ստուգիչը նայում է, թե արդյոք նոնսը նախկինում օգտագործվել է, և եթե ոչ, գործարքը վավեր է համարում: Որպեսզի չպահվի օգտատերերի նոնսների ողջ պատմությունը բլոկչեյնում, սովորաբար առաջին իսկ գործարքի ժամանակ այն հավասարվում է զրոյի, այնուհետև ավելանում է մեկով։ Ցանցը կարող է միայն ստուգել, ​​որ նոր գործարքի ոչ լինելը տարբերվում է նախորդից:

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

Zether-ի հեղինակներն առաջարկում են նոնսեն գաղտնագրորեն գեներացնել՝ կախված «դարաշրջանից»։ Օրինակ:

Հաշվի վրա հիմնված բլոկչեյններում անանունության մասին
Այստեղ x ուղարկողի գաղտնի բանալին է, և Գեպոչ — դարաշրջանի հավելյալ գեներատոր, որը ստացվում է «Zether +» ձևի տողը հաշելու միջոցով: Այժմ խնդիրը կարծես թե լուծված է. մենք չենք բացահայտում ուղարկողի նոնսը և չենք միջամտում չներգրավված մասնակիցներին: Բայց այս մոտեցումը լուրջ սահմանափակում է դնում. մեկ հաշիվը կարող է ուղարկել ոչ ավելի, քան մեկ գործարք մեկ «դարաշրջանում»: Այս խնդիրը, ցավոք, մնում է չլուծված, և ներկայումս Zether-ի անանուն տարբերակը, մեր կարծիքով, դժվար թե հարմար է դարձնում օգտագործման համար:

Զրո գիտելիքի ապացույցների բարդությունը

UTXO-ում ուղարկողը պետք է ապացուցի ցանցին, որ ինքը բացասական գումար չի ծախսում, հակառակ դեպքում հնարավոր է դառնում օդից նոր մետաղադրամներ ստեղծել (ինչու է դա հնարավոր, գրել ենք նախորդներից մեկում. Հոդվածներ) Եվ նաև ստորագրեք «մուտքերը» մատանի ստորագրությամբ՝ ապացուցելու համար, որ խառնվող մետաղադրամների մեջ կան իրեն պատկանող դրամական միջոցներ։

Հաշվի վրա հիմնված բլոկչեյնի անանուն տարբերակում ապացույցների արտահայտությունները շատ ավելի բարդ են: Ուղարկողը ապացուցում է, որ.

  1. Ուղարկված գումարը դրական է.
  2. Մնացորդը մնում է ոչ բացասական;
  3. Ուղարկողը ճիշտ է գաղտնագրել փոխանցման գումարները (ներառյալ զրո);
  4. Հաշվեկշռի մնացորդը փոխվում է միայն ուղարկողի և ստացողի համար.
  5. Ուղարկողին է պատկանում իր հաշվի մասնավոր բանալին, և նա իրականում գտնվում է ուղարկողների ցուցակում (ներգրավվածների թվում);
  6. Գործարքում օգտագործված Nonce-ը ճիշտ է կազմված:

Նման բարդ ապացույցի համար հեղինակները օգտագործում են խառնուրդ bulletproof (հեղինակներից մեկն, ի դեպ, մասնակցել է դրա ստեղծմանը) և Սիգմա արձանագրություն, որոնք կոչվում են Սիգմա-փամփուշտներ։ Նման հայտարարության պաշտոնական ապացույցը բավականին բարդ խնդիր է, և այն մեծապես սահմանափակում է տեխնոլոգիան կիրառելու պատրաստ մարդկանց թիվը:

Արդյունքը:

Մեր կարծիքով, Zether-ի այն մասը, որը գաղտնիություն է բերում հաշիվների վրա հիմնված բլոկչեյններին, կարող է օգտագործվել հենց հիմա: Սակայն այս պահին տեխնոլոգիայի անանուն տարբերակը լուրջ սահմանափակումներ է դնում դրա կիրառման, իսկ բարդության վրա՝ դրա իրականացման համար: Սակայն պետք չէ զեղչել, որ հեղինակներն այն թողարկել են ընդամենը մի քանի ամիս առաջ, և գուցե մեկ ուրիշը լուծում գտնի այսօր առկա խնդիրներին։ Չէ՞ որ գիտությունն այսպես է արվում։

Source: www.habr.com

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