Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով

Մենք շարունակում ենք մեր շարքը Monero բլոկչեյնի մասին, և այսօրվա հոդվածը կկենտրոնանա RingCT (Ring Confidential Transactions) արձանագրության վրա, որը ներկայացնում է գաղտնի գործարքներ և նոր օղակաձև ստորագրություններ: Ցավոք, համացանցում քիչ տեղեկություններ կան այն մասին, թե ինչպես է այն աշխատում, և մենք փորձեցինք լրացնել այս բացը:

Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով

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

Քանի որ այս արձանագրությունը Monero-ի ամենաբարդ տեխնոլոգիաներից մեկն է, ընթերցողին կպահանջվի այս բլոկչեյնի նախագծման հիմնական գիտելիքները և էլիպսային կորի գաղտնագրության անցողիկ գիտելիքները (այս գիտելիքը խորացնելու համար կարող եք կարդալ մեր գրքի առաջին գլուխները: մասին նախորդ հոդվածը բազմաստորագրություններ).

RingCT արձանագրություն

Կրիպտոնոտ արժույթների վրա հնարավոր հարձակումներից մեկը բլոկչեյն վերլուծությունն է՝ հիմնված ուղարկված գործարքի գումարի և ժամանակի իմացության վրա։ Սա թույլ է տալիս զգալիորեն նեղացնել որոնման տարածքը հարձակվողին հետաքրքրող ելքերի համար: Նման վերլուծություններից պաշտպանվելու համար Monero-ն ներդրել է անանուն գործարքների արձանագրություն, որն ամբողջությամբ թաքցնում է ցանցում փոխանցումների գումարները։

Հարկ է նշել, որ գումարները թաքցնելու գաղափարը նորություն չէ։ Bitcoin Core-ի մշակող Գրեգ Մաքսվելն առաջիններից մեկն էր, ով նկարագրեց այն իր գրքում article Գաղտնի գործարքներ. RingCT-ի ներկայիս ներդրումը նրա մոդիֆիկացումն է՝ օղակային ստորագրություններ օգտագործելու հնարավորությամբ (լինի առանց դրանց), և այդպես էլ այն ստացել է իր անվանումը՝ Ring Confidential Transactions:

Ի թիվս այլ բաների, արձանագրությունն օգնում է ազատվել փոշու ելքերի խառնման հետ կապված խնդիրներից՝ փոքր քանակությամբ ելքեր (սովորաբար ստացվում են գործարքներից փոփոխության տեսքով), որոնք ավելի շատ խնդիրներ են ստեղծում, քան արժեն:

2017 թվականի հունվարին տեղի ունեցավ Monero ցանցի կոշտ պատառաքաղ՝ թույլ տալով կամընտիր օգտագործել գաղտնի գործարքները: Եվ արդեն նույն տարվա սեպտեմբերին, 6-րդ տարբերակով hard fork-ով, նման գործարքները դարձան միակ թույլատրվածը ցանցում։

RingCT-ն օգտագործում է միանգամից մի քանի մեխանիզմներ՝ բազմաշերտ կապակցված ինքնաբուխ անանուն խմբերի ստորագրություններ (Բազմաշերտ կապակցված ինքնաբուխ անանուն խմբի ստորագրություն, այսուհետ՝ MLSAG), պարտավորությունների սխեմա (Pedersen պարտավորություններ) և տիրույթի ապացույցներ (այս տերմինը չունի հաստատված թարգմանություն ռուսերեն): .

RingCT արձանագրությունը ներկայացնում է երկու տեսակի անանուն գործարքներ՝ պարզ և ամբողջական: Դրամապանակն առաջացնում է առաջինը, երբ գործարքն օգտագործում է մեկից ավելի մուտքեր, երկրորդը` հակառակ իրավիճակում: Դրանք տարբերվում են գործարքների գումարների և MLSAG ստորագրությամբ ստորագրված տվյալների վավերացումով (այս մասին ավելին կխոսենք ստորև): Ավելին, լրիվ տիպի գործարքները կարող են գեներացվել ցանկացած քանակի մուտքերով, հիմնարար տարբերություն չկա: Գրքում «Զրո Մոներոյին» Այս առնչությամբ ասվում է, որ ամբողջական գործարքները մեկ մուտքով սահմանափակելու որոշումը կայացվել է հապճեպ և կարող է փոխվել ապագայում։

MLSAG ստորագրությունը

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

Մուտքը հղում է կատարում մի քանի ելքերի, բայց ծախսում է միայն մեկը՝ այդպիսով ստեղծելով «ծխածածկույթ», որը դժվարացնում է թարգմանության պատմությունը վերլուծելը: Եթե ​​գործարքն ունի մեկից ավելի մուտք, ապա այդպիսի կառուցվածքը կարող է ներկայացվել որպես մատրիցա, որտեղ տողերը մուտքերն են, իսկ սյունակները՝ խառը ելքերը: Ցանցին ապացուցելու համար, որ գործարքը ճիշտ է ծախսում իր ելքերը (գիտի դրանց գաղտնի բանալիները), մուտքերը ստորագրվում են օղակաձև ստորագրությամբ: Նման ստորագրությունը երաշխավորում է, որ ստորագրողը գիտեր սյուններից որևէ մեկի բոլոր տարրերի գաղտնի բանալիները:

Գաղտնի գործարքներն այլևս չեն օգտագործում դասականները ծպտյալ օղակաձև ստորագրություններ, դրանք փոխարինվեցին MLSAG-ով` նմանատիպ միաշերտ օղակաձև ստորագրությունների տարբերակ, որը հարմարեցված է բազմաթիվ մուտքերի համար, LSAG.

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

Եկեք նայենք, թե ինչպես է ձևավորվում օղակաձև ստորագրություն՝ օգտագործելով գործարքի օրինակը, որը ծախսում է 2 իրական ելք և օգտագործում է m - 1 պատահական բլոկչեյնից խառնվելու համար: Եկեք նշենք այն արդյունքների հանրային բանալիները, որոնք մենք ծախսում ենք որպես
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով, և համապատասխանաբար նրանց համար հիմնական պատկերները. Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով Այսպիսով, մենք ստանում ենք չափի մատրիցա 2 x մ. Նախ, մենք պետք է հաշվարկենք այսպես կոչված մարտահրավերները յուրաքանչյուր զույգ արդյունքի համար.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Մենք սկսում ենք հաշվարկները ելքերից, որոնք ծախսում ենք՝ օգտագործելով դրանց հանրային բանալիները.Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններովև պատահական թվերԳաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններովԱրդյունքում մենք ստանում ենք հետևյալ արժեքները.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով, որը մենք օգտագործում ենք մարտահրավերը հաշվարկելու համար
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններովհաջորդ զույգ ելքերը (որ ավելի հեշտ լինի հասկանալ, թե որտեղ ենք մենք փոխարինում, մենք առանձնացրել ենք այս արժեքները տարբեր գույներով): Հետևյալ բոլոր արժեքները հաշվարկվում են շրջանագծի մեջ՝ օգտագործելով առաջին նկարում տրված բանաձևերը: Վերջին բանը, որ պետք է հաշվարկել, մարտահրավերն է զույգ իրական արդյունքների համար:

Ինչպես տեսնում ենք, բոլոր սյունակները, բացառությամբ իրական արդյունքներ պարունակող սյունակների, օգտագործում են պատահականորեն ստեղծված թվերԳաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով: Համար π- սյունակ մեզ նույնպես պետք կգան: Եկեք փոխակերպվենքԳաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններովի s:Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Ստորագրությունն ինքնին այս բոլոր արժեքների բազմակն է.

Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով

Այս տվյալները այնուհետև գրվում են գործարքի մեջ:

Ինչպես տեսնում ենք, MLSAG-ը պարունակում է միայն մեկ մարտահրավեր c0, որը թույլ է տալիս խնայել ստորագրության չափը (ինչն արդեն շատ տեղ է պահանջում): Ավելին, ցանկացած տեսուչ, օգտագործելով տվյալներըԳաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով, վերականգնում է c1,…, cm արժեքները և ստուգում է դաԳաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով. Այսպիսով, մեր օղակը փակված է, իսկ ստորագրությունը՝ ստուգված։

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

Պեդերսենի պարտավորությունները

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

Monero-ի պարտավորություններն օգտագործվում են փոխանցումների գումարները թաքցնելու և ամենատարածված տարբերակն օգտագործելու համար՝ Պեդերսենի պարտավորությունները: Ի դեպ, հետաքրքիր փաստ. սկզբում մշակողները առաջարկում էին գումարները թաքցնել սովորական խառնելով, այսինքն՝ ավելացնել կամայական գումարների ելքեր՝ անորոշություն մտցնելու համար, բայց հետո անցան պարտավորությունների (փաստ չէ, որ խնայել են. գործարքի չափը, ինչպես կտեսնենք ստորև):
Ընդհանուր առմամբ, պարտավորությունն այսպիսի տեսք ունի.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններովՈրտեղ C - ինքնին պարտավորության իմաստը, a - թաքնված գումար, H ֆիքսված կետ է էլիպսային կորի վրա (լրացուցիչ գեներատոր), և x — ինչ-որ կամայական դիմակ, պատահականորեն առաջացած թաքնված գործոն: Դիմակն այստեղ անհրաժեշտ է, որպեսզի երրորդ կողմը պարզապես չկարողանա կռահել պարտավորության արժեքը:

Երբ ստեղծվում է նոր արդյունք, դրամապանակը հաշվարկում է պարտավորությունը դրա համար, և երբ ծախսվում է, վերցնում է կամ գեներացման ընթացքում հաշվարկված արժեքը կամ վերահաշվարկում է այն՝ կախված գործարքի տեսակից:

RingCT պարզ

Պարզ RingCT գործարքների դեպքում, որպեսզի ապահովվի, որ գործարքը ելք է ստեղծում մուտքերի քանակին հավասար քանակությամբ (օդից փող չի արտադրում), անհրաժեշտ է, որ առաջինի և երկրորդի պարտավորությունների գումարը. դրանք նույնն են, այսինքն.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Պարտավորությունների հանձնաժողովները դա մի փոքր այլ կերպ են դիտարկում՝ առանց դիմակի.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններովՈրտեղ a — միջնորդավճարի չափը, այն հասանելի է հանրությանը:

Այս մոտեցումը թույլ է տալիս մեզ ապացուցել վստահված կողմին, որ մենք օգտագործում ենք նույն գումարները՝ առանց դրանք բացահայտելու:

Ամեն ինչ ավելի պարզ դարձնելու համար եկեք նայենք մի օրինակի: Ենթադրենք, գործարքը ծախսում է երկու ելք (նշանակում է, որ դրանք դառնում են մուտքեր) 10 և 5 XMR և առաջացնում է երեք ելք՝ 12 XMR արժեքով. 3, 4 և 5 XMR: Միաժամանակ նա վճարում է միջնորդավճար 3 XMR: Այսպիսով, ծախսված գումարը գումարած գոյացած գումարը և միջնորդավճարը հավասար է 15 XMR-ի: Փորձենք հաշվարկել պարտավորությունները և դիտել դրանց գումարների տարբերությունը (հիշեք մաթեմատիկան).

Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Այստեղ մենք տեսնում ենք, որ հավասարման համընկնման համար մեզ անհրաժեշտ է, որ մուտքային և ելքային դիմակների գումարները լինեն նույնը: Դա անելու համար դրամապանակը պատահականորեն առաջանում է x1, y1, y2 և y3, իսկ մնացածը x2 հաշվարկում է այսպես.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Օգտագործելով այս դիմակները՝ մենք կարող ենք ցանկացած ստուգողին ապացուցել, որ մենք չենք ստեղծում ավելի շատ միջոցներ, քան ծախսում ենք՝ առանց գումարի չափը բացահայտելու։ Օրիգինալ, չէ՞:

RingCT-ը լի է

Ամբողջական RingCT գործարքներում փոխանցման գումարների ստուգումը մի փոքր ավելի բարդ է: Այս գործարքներում դրամապանակը չի վերահաշվարկում պարտավորությունները մուտքերի համար, այլ օգտագործում է դրանք, որոնք հաշվարկվել են, երբ դրանք ստեղծվել են: Այս դեպքում պետք է ենթադրել, որ մենք այլևս չենք ստանա զրոյի հավասար գումարների տարբերությունը, այլ փոխարենը.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Այստեղ z - տարբերությունը մուտքային և ելքային դիմակների միջև: Եթե ​​հաշվի առնենք zG որպես հանրային բանալի (ինչը դե ֆակտո է), ապա z մասնավոր բանալին է: Այսպիսով, մենք գիտենք հանրային և համապատասխան մասնավոր բանալիները: Ձեռքի տակ ունենալով այս տվյալները՝ մենք կարող ենք այն օգտագործել MLSAG օղակի ստորագրության մեջ՝ խառնվող ելքերի հանրային բանալիների հետ միասին.
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Այսպիսով, վավերական զանգի ստորագրությունը կապահովի, որ մենք գիտենք սյունակներից մեկի բոլոր մասնավոր բանալիները, և մենք կարող ենք իմանալ միայն վերջին շարքի մասնավոր բանալին, եթե գործարքը չի առաջացնում ավելի շատ գումար, քան ծախսում է: Ի դեպ, ահա «ինչու պարտավորությունների չափերի տարբերությունը չի բերում զրոյի» հարցի պատասխանը. zG = 0, ապա մենք կընդլայնենք սյունակը իրական ելքերով։

Ինչպե՞ս է գումար ստացողը գիտի, թե որքան գումար է իրեն ուղարկվել։ Այստեղ ամեն ինչ պարզ է. գործարքի ուղարկողը և ստացողը փոխանակում են բանալիները՝ օգտագործելով Diffie-Hellman արձանագրությունը, օգտագործելով գործարքի բանալին և ստացողի դիտման բանալին և հաշվարկել ընդհանուր գաղտնիքը: Ուղարկողը գործարքի հատուկ դաշտերում գրում է տվյալներ ելքային գումարների մասին՝ գաղտնագրված այս ընդհանուր բանալիով:

Շրջանակի ապացույցներ

Ի՞նչ կլինի, եթե որպես պարտավորությունների գումար օգտագործեք բացասական թիվ: Սա կարող է հանգեցնել լրացուցիչ մետաղադրամների առաջացման: Այս արդյունքն անընդունելի է, ուստի մենք պետք է երաշխավորենք, որ մեր օգտագործած գումարները բացասական չեն (իհարկե, առանց այդ գումարների բացահայտման, հակառակ դեպքում այդքան շատ աշխատանք կա և ամեն ինչ ապարդյուն): Այսինքն՝ պետք է ապացուցենք, որ գումարը գտնվում է միջակայքում [0, 2n - 1].

Դա անելու համար յուրաքանչյուր ելքի գումարը բաժանվում է երկուական թվերի և պարտավորությունը հաշվարկվում է յուրաքանչյուր թվի համար առանձին: Ավելի լավ է տեսնել, թե ինչպես է դա տեղի ունենում օրինակով:

Ենթադրենք, որ մեր գումարները փոքր են և տեղավորվում են 4 բիթերի մեջ (գործնականում սա 64 բիթ է), և մենք ստեղծում ենք 5 XMR արժողությամբ արդյունք: Մենք հաշվարկում ենք պարտավորությունները յուրաքանչյուր կատեգորիայի համար և ընդհանուր պարտավորությունը ամբողջ գումարի համար.Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններով
Հաջորդը, յուրաքանչյուր պարտավորություն խառնվում է փոխարինողի հետ (Ci-2iH) և զույգերով ստորագրված է Borromeo-ի մատանի ստորագրությամբ (այլ մատանի ստորագրություն), որն առաջարկվել է Գրեգ Մաքսվելի կողմից 2015 թվականին (կարող եք ավելին կարդալ դրա մասին այստեղ):
Գաղտնի գործարքներ Monero-ում կամ ինչպես փոխանցել անհայտ իրերը անհայտ ուղղություններովՄիասին, սա կոչվում է միջակայքի ապացույց և թույլ է տալիս համոզվել, որ պարտավորությունները օգտագործում են միջակայքում գտնվող գումարները [0, 2n - 1].

Ինչ հաջորդ?

Ընթացիկ ներդրման դեպքում միջակայքի ապացույցները մեծ տեղ են զբաղեցնում՝ 6176 բայթ մեկ ելքի համար: Սա հանգեցնում է ավելի մեծ գործարքների և, հետևաբար, ավելի բարձր վճարների: Monero գործարքի չափը նվազեցնելու համար մշակողները Borromeo-ի ստորագրությունների փոխարեն ներկայացնում են փամփուշտներ՝ միջակայքը պաշտպանելու մեխանիզմ՝ առանց բիթային պարտավորությունների: Ըստ որոշ գնահատականների, նրանք ի վիճակի են նվազեցնել միջակայքի ապացույցի չափը մինչև 94%: Ի դեպ, հուլիսի կեսերին տեխնոլոգիան անցավ աուդիտ Kudelski Security-ից, որը ոչ մի էական թերություն չի հայտնաբերել ո՛չ բուն տեխնոլոգիայի, ո՛չ դրա ներդրման մեջ։ Տեխնոլոգիան արդեն կիրառվում է փորձարկման ցանցում, և նոր կոշտ պատառաքաղով այն հավանաբար կարող է տեղափոխվել հիմնական ցանց։

Տվեք ձեր հարցերը, առաջարկեք թեմաներ կրիպտոարժույթի ոլորտում տեխնոլոգիաների մասին նոր հոդվածների համար, ինչպես նաև բաժանորդագրվեք մեր խմբին facebookմեր իրադարձություններին և հրապարակումներին տեղեկացված լինելու համար:

Source: www.habr.com

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