Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish

Biz Monero blokcheyni haqidagi seriyamizni davom ettiramiz va bugungi maqola maxfiy tranzaktsiyalar va yangi ring imzolarni taqdim etadigan RingCT (Ring Confidential Transactions) protokoliga qaratiladi. Afsuski, Internetda uning qanday ishlashi haqida juda kam ma'lumot mavjud va biz bu bo'shliqni to'ldirishga harakat qildik.

Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish

Tarmoq ushbu protokol yordamida o'tkazma summalarini qanday yashirishi, nima uchun ular klassik kriptonote ring imzolaridan voz kechganligi va bu texnologiya qanday rivojlanishi haqida gaplashamiz.

Ushbu protokol Monero-dagi eng murakkab texnologiyalardan biri bo'lganligi sababli, o'quvchiga ushbu blokcheyn dizayni bo'yicha asosiy bilim va elliptik egri kriptografiya bo'yicha o'tkinchi bilim kerak bo'ladi (bu bilimlarni to'ldirish uchun siz bizning maqolamizning birinchi boblarini o'qishingiz mumkin. haqida oldingi maqola multisignatures).

RingCT protokoli

Kriptonot valyutalariga mumkin bo'lgan hujumlardan biri yuborilgan tranzaksiya miqdori va vaqti haqidagi bilimga asoslangan blokcheyn tahlilidir. Bu imkon beradi tajovuzkorni qiziqtirgan chiqishlar uchun qidiruv maydonini sezilarli darajada toraytiring. Bunday tahlillardan himoyalanish uchun Monero tarmoqdagi oβ€˜tkazmalar summalarini butunlay yashiradigan anonim tranzaksiya protokolini joriy qildi.

Shuni ta'kidlash kerakki, summalarni yashirish g'oyasi yangi emas. Bitcoin Core ishlab chiqaruvchisi Greg Maksvell buni birinchilardan bo'lib o'z kitobida tasvirlab bergan maqola Maxfiy operatsiyalar. RingCT ning joriy tatbiq etilishi uning qo'ng'iroq imzolaridan foydalanish imkoniyati bilan o'zgartirilishi (ularsiz ham) va shuning uchun u o'z nomini oldi - Ring Confidential Transactions.

Boshqa narsalar qatorida, protokol changni aralashtirish bilan bog'liq muammolardan xalos bo'lishga yordam beradi - oz miqdorda (odatda tranzaktsiyalardan o'zgarish shaklida olinadi), bu qiymatdan ko'ra ko'proq muammolarni keltirib chiqardi.

2017 yil yanvar oyida Monero tarmog'ining qattiq forki bo'lib o'tdi, bu maxfiy tranzaktsiyalardan ixtiyoriy foydalanish imkonini beradi. Va o'sha yilning sentyabr oyida, hard forkning 6-versiyasi bilan bunday operatsiyalar tarmoqda ruxsat etilgan yagona operatsiyalarga aylandi.

RingCT bir vaqtning o'zida bir nechta mexanizmlardan foydalanadi: ko'p qatlamli bog'langan spontan anonim guruh imzolari (Ko'p qatlamli bog'langan o'z-o'zidan anonim guruh imzosi, bundan keyin MLSAG deb yuritiladi), majburiyat sxemasi (Pedersen majburiyatlari) va diapazonni tasdiqlovchi hujjatlar (bu atamaning rus tiliga o'rnatilgan tarjimasi yo'q). .

RingCT protokoli anonim operatsiyalarning ikki turini taqdim etadi: oddiy va to'liq. Hamyon birinchisini tranzaktsiyada bir nechta kirishdan foydalanganda, ikkinchisini - qarama-qarshi vaziyatda hosil qiladi. Ular tranzaksiya summalarini va MLSAG imzosi bilan imzolangan ma'lumotlarni tasdiqlashda farqlanadi (bu haqda quyida ko'proq gaplashamiz). Bundan tashqari, to'liq turdagi operatsiyalar har qanday miqdordagi kirishlar bilan yaratilishi mumkin, hech qanday asosiy farq yo'q. Kitobda "Moneroga nol" Shu munosabat bilan aytilishicha, toβ€˜liq tranzaksiyalarni bitta kiritish bilan cheklash haqidagi qaror shoshqaloqlik bilan qabul qilingan va kelajakda oβ€˜zgarishi mumkin.

MLSAG imzosi

Imzolangan tranzaksiya ma'lumotlari nima ekanligini eslaylik. Har bir tranzaksiya ma'lum mablag'larni sarflaydi va hosil qiladi. Mablag'larning paydo bo'lishi tranzaksiya natijalarini yaratish orqali amalga oshiriladi (to'g'ridan-to'g'ri o'xshashlik - bu veksellar) va tranzaksiya sarflagan mahsulot (haqiqiy hayotda biz banknotlarni sarflaymiz) kirishga aylanadi (ehtiyot bo'ling, chalkashib ketish juda oson) Bu yerga).

Kirish bir nechta chiqishlarga havola qiladi, lekin faqat bittasini sarflaydi va shu bilan tarjima tarixini tahlil qilishni qiyinlashtirish uchun β€œtutun ekrani” yaratadi. Agar tranzaktsiyada bir nechta kirish bo'lsa, unda bunday tuzilmani matritsa sifatida ko'rsatish mumkin, bu erda qatorlar kirishlar va ustunlar aralash chiqishlardir. Tarmoqqa tranzaktsiya o'z natijalarini aniq sarflashini isbotlash uchun (ularning maxfiy kalitlarini biladi), kirishlar qo'ng'iroq imzosi bilan imzolanadi. Bunday imzo imzolovchining har qanday ustunning barcha elementlari uchun maxfiy kalitlarni bilishini kafolatlaydi.

Maxfiy operatsiyalar endi klassiklardan foydalanmaydi kriptonot qo'ng'iroq imzolari, ular MLSAG bilan almashtirildi - bir nechta kirish uchun moslashtirilgan shunga o'xshash bir qatlamli halqali imzolarning versiyasi, LSAG.

Ular ko'p qatlamli deb ataladi, chunki ular bir vaqtning o'zida bir nechta kirishlarni imzolaydilar, ularning har biri bir nechta boshqalar bilan aralashtiriladi, ya'ni bitta qator emas, balki matritsa imzolanadi. Keyinchalik ko'rib chiqamiz, bu imzo hajmini tejashga yordam beradi.

Keling, 2 ta haqiqiy chiqishni sarflaydigan va aralashtirish uchun blokcheyndan m - 1 ta tasodifiy bo'lganlarni ishlatadigan tranzaksiya misolidan foydalanib, halqa imzosi qanday shakllanishini ko'rib chiqaylik. Biz sarflaydigan natijalarning ochiq kalitlarini belgilaylik
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish, va shunga mos ravishda ular uchun asosiy tasvirlar: Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish Shunday qilib, biz kattalik matritsasini olamiz 2 x m. Birinchidan, har bir chiqish juftligi uchun qiyinchiliklar deb ataladigan narsalarni hisoblashimiz kerak:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
Biz hisob-kitoblarni ularning ochiq kalitlari yordamida sarflagan natijalar bilan boshlaymiz:Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazishva tasodifiy raqamlarMonero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazishNatijada biz quyidagi qiymatlarni olamiz:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish, biz qiyinchilikni hisoblash uchun foydalanamiz
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazishkeyingi chiqish juftligi (qaerga nimani almashtirayotganimizni tushunishni osonlashtirish uchun biz ushbu qiymatlarni turli xil ranglarda ajratib ko'rsatdik). Quyidagi barcha qiymatlar birinchi rasmda keltirilgan formulalar yordamida aylana bo'ylab hisoblanadi. Hisoblash uchun oxirgi narsa - bu bir juft haqiqiy chiqish uchun qiyinchilik.

Ko'rib turganimizdek, haqiqiy natijalardan tashqari barcha ustunlar tasodifiy yaratilgan raqamlardan foydalanadiMonero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish. uchun Ο€- ustun bizga ham kerak bo'ladi. Keling, aylantiraylikMonero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazishs ichida:Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
Imzoning o'zi bu barcha qiymatlarning to'plamidir:

Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish

Keyinchalik bu ma'lumotlar tranzaksiyaga yoziladi.

Ko'rib turganimizdek, MLSAG faqat bitta muammoni o'z ichiga oladi c0, bu sizga imzo hajmini tejash imkonini beradi (bu allaqachon ko'p joy talab qiladi). Bundan tashqari, har qanday inspektor ma'lumotlardan foydalanadiMonero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish, c1,…, sm qiymatlarini tiklaydi va buni tekshiradiMonero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish. Shunday qilib, bizning ring yopildi va imzo tasdiqlandi.

To'liq turdagi RingCT tranzaktsiyalari uchun aralash natijalarga ega matritsaga yana bitta qator qo'shiladi, ammo biz bu haqda quyida gaplashamiz.

Pedersen majburiyatlari

Majburiyat sxemalari (inglizcha commitments atamasi ko'proq ishlatiladi) bir tomon ma'lum bir sirni (raqamni) oshkor qilmasdan bilishini isbotlashi uchun ishlatiladi. Misol uchun, siz ma'lum bir raqamni zarga aylantirasiz, majburiyatni ko'rib chiqing va uni tasdiqlovchi tomonga topshirasiz. Shunday qilib, maxfiy raqamni oshkor qilish paytida, tekshiruvchi majburiyatni mustaqil ravishda hisoblab chiqadi va shu bilan siz uni aldamaganingizga ishonch hosil qiladi.

Monero majburiyatlari transferlar miqdorini yashirish va eng keng tarqalgan variant - Pedersen majburiyatlaridan foydalanish uchun ishlatiladi. Aytgancha, qiziqarli fakt - dastlab ishlab chiquvchilar oddiy aralashtirish orqali miqdorlarni yashirishni, ya'ni noaniqlikni keltirib chiqarish uchun o'zboshimchalik miqdori uchun natijalarni qo'shishni taklif qilishdi, ammo keyin ular majburiyatlarga o'tishdi (ular tejaganliklari haqiqat emas. tranzaksiya hajmi, biz quyida ko'rib chiqamiz).
Umuman olganda, majburiyat quyidagicha ko'rinadi:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazishQaerda C - majburiyatning o'zi, a - yashirin miqdor, H elliptik egri chizig'idagi sobit nuqta (qo'shimcha generator) va x - qandaydir o'zboshimchalik niqobi, tasodifiy yaratilgan yashirish omili. Niqob bu erda kerak, shunda uchinchi tomon majburiyatning qiymatini taxmin qila olmaydi.

Yangi mahsulot ishlab chiqarilganda, hamyon buning uchun majburiyatni hisoblab chiqadi va sarflanganda, u ishlab chiqarish paytida hisoblangan qiymatni oladi yoki tranzaktsiya turiga qarab uni qayta hisoblab chiqadi.

RingCT oddiy

Oddiy RingCT tranzaktsiyalari bo'lsa, tranzaktsiya kirishlar miqdoriga teng bo'lgan natijalarni yaratishini ta'minlash uchun (pulni havodan chiqarmagan), birinchi va ikkinchi majburiyatlarning yig'indisi bo'lishi kerak. xuddi shunday, ya'ni:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
Majburiyat komissiyalari buni biroz boshqacha ko'rib chiqadi - niqobsiz:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazishqayerda a β€” komissiya miqdori, u hamma uchun ochiqdir.

Ushbu yondashuv bizga ishonuvchi tomonga bir xil miqdordan foydalanayotganimizni ularni oshkor qilmasdan isbotlash imkonini beradi.

Hamma narsani aniqroq qilish uchun keling, bir misolni ko'rib chiqaylik. Aytaylik, tranzaksiya 10 va 5 XMR dan iborat ikkita chiqishni sarflaydi (ya'ni ular kirishga aylanadi) va 12 XMR qiymatiga teng uchta chiqish hosil qiladi: 3, 4 va 5 XMR. Shu bilan birga, u 3 XMR komissiyasini to'laydi. Shunday qilib, sarflangan pul miqdori plus hosil qilingan miqdor va komissiya 15 XMR ga teng. Keling, majburiyatlarni hisoblashga harakat qilaylik va ularning miqdoridagi farqni ko'rib chiqaylik (matematikani eslang):

Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
Bu erda biz tenglamaning birlashishi uchun kirish va chiqish niqoblarining yig'indilari bir xil bo'lishi kerakligini ko'ramiz. Buning uchun hamyon tasodifiy hosil qiladi x1, y1, y2 va y3, va qolganlari x2 quyidagicha hisoblaydi:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
Ushbu niqoblardan foydalanib, biz har qanday tekshiruvchiga sarflaganimizdan ko'proq mablag' ishlab chiqarmasligimizni, summani oshkor qilmasdan isbotlashimiz mumkin. Original, to'g'rimi?

RingCT toΚ»la

To'liq RingCT tranzaksiyalarida o'tkazma summalarini tekshirish biroz murakkabroq. Ushbu tranzaktsiyalarda hamyon kirishlar bo'yicha majburiyatlarni qayta hisoblamaydi, lekin ular yaratilganda hisoblanganlardan foydalanadi. Bunday holda, biz endi nolga teng summalardagi farqni olmaymiz, deb taxmin qilishimiz kerak, lekin buning o'rniga:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
u z β€” kirish va chiqish maskalari orasidagi farq. Agar hisobga olsak zG ochiq kalit sifatida (bu de-fakto), keyin z shaxsiy kalit hisoblanadi. Shunday qilib, biz umumiy va tegishli shaxsiy kalitlarni bilamiz. Ushbu ma'lumotlar qo'lda bo'lsa, biz uni MLSAG ring imzosida, shuningdek aralashtirilayotgan chiqishlarning ochiq kalitlari bilan ishlatishimiz mumkin:
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
Shunday qilib, haqiqiy qo'ng'iroq imzosi biz ustunlardan birining barcha shaxsiy kalitlarini bilishimizni ta'minlaydi va biz faqat oxirgi qatordagi shaxsiy kalitni bilishimiz mumkin, agar tranzaksiya sarflaganidan ko'proq mablag' hosil qilmasa. Aytgancha, bu erda "nega majburiyatlar miqdoridagi farq nolga olib kelmaydi" degan savolga javob - agar zG = 0, keyin biz ustunni haqiqiy natijalar bilan kengaytiramiz.

Mablag'larni oluvchi unga qancha pul yuborilganini qayerdan biladi? Bu erda hamma narsa oddiy - tranzaksiyani jo'natuvchi va oluvchi almashish kalitlari Diffie-Hellman protokoli yordamida, tranzaksiya kaliti va qabul qiluvchining ko'rish kaliti yordamida va umumiy sirni hisoblab chiqadi. Yuboruvchi tranzaktsiyaning maxsus maydonlarida ushbu umumiy kalit bilan shifrlangan chiqish summalari haqidagi ma'lumotlarni yozadi.

Diapazonni isbotlash

Agar majburiyatlar miqdori sifatida salbiy raqamdan foydalansangiz nima bo'ladi? Bu qo'shimcha tangalarning paydo bo'lishiga olib kelishi mumkin! Bu natija qabul qilinishi mumkin emas, shuning uchun biz foydalanadigan miqdorlar salbiy emasligiga kafolat berishimiz kerak (bu miqdorlarni oshkor qilmasdan, albatta, aks holda juda ko'p ish bor va barchasi behuda). Boshqacha qilib aytganda, yig'indining intervalda ekanligini isbotlashimiz kerak [0, 2n - 1].

Buning uchun har bir chiqishning yig'indisi ikkilik raqamlarga bo'linadi va majburiyat har bir raqam uchun alohida hisoblanadi. Bu qanday sodir bo'lishini bir misol bilan ko'rish yaxshiroqdir.

Faraz qilaylik, bizning miqdorlarimiz kichik va 4 bitga to'g'ri keladi (amalda bu 64 bit) va biz 5 XMR qiymatiga ega chiqishni yaratamiz. Biz har bir toifa uchun majburiyatlarni va butun summa uchun umumiy majburiyatni hisoblaymiz:Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazish
Keyinchalik, har bir majburiyat surrogat bilan aralashtiriladi (Ci-2iH) va 2015 yilda Greg Maksvell tomonidan taklif qilingan Borromeo uzuk imzosi (boshqa uzuk imzosi) bilan juftlikda imzolangan (bu haqda ko'proq o'qishingiz mumkin) shu yerda):
Monero-da maxfiy operatsiyalar yoki noma'lum narsalarni noma'lum joylarga qanday o'tkazishBirgalikda, bu diapazonni isbotlash deb ataladi va majburiyatlar diapazondagi miqdorlardan foydalanishiga ishonch hosil qilish imkonini beradi [0, 2n - 1].

Keyin nima?

Joriy amalga oshirishda diapazonni isbotlash juda ko'p joy egallaydi - har bir chiqish uchun 6176 bayt. Bu kattaroq tranzaktsiyalarga olib keladi va shuning uchun yuqori to'lovlar. Monero tranzaksiyasining hajmini kamaytirish uchun ishlab chiquvchilar Borromeo imzolari o'rniga o'q o'tkazmaydigan qurilmalarni joriy qilmoqdalar - bitli majburiyatlarsiz diapazonni isbotlovchi mexanizm. Ba'zi taxminlarga ko'ra, ular diapazonni isbotlash hajmini 94% gacha kamaytirishga qodir. Aytgancha, iyul oyining o'rtalarida texnologiya o'tdi audit Kudelski Security kompaniyasidan, bu texnologiyaning o'zida ham, uni amalga oshirishda ham sezilarli kamchiliklarni aniqlamadi. Texnologiya allaqachon sinov tarmog'ida qo'llanilgan va yangi qattiq vilka bilan u, ehtimol, asosiy tarmoqqa o'tishi mumkin.

Savollaringizni bering, kriptovalyuta sohasidagi texnologiyalar haqida yangi maqolalar uchun mavzularni taklif qiling, shuningdek bizning guruhimizga obuna bo'ling Facebookvoqealarimiz va nashrlarimizdan xabardor bo'lish.

Manba: www.habr.com

a Izoh qo'shish