تراکنش های Mimblewimble توضیح داده شده است

نمای کلی سطح بالا

Mimblewimble یک فناوری رمزنگاری مبتنی بر حریم خصوصی است. در برخی زمینه های کلیدی با بیت کوین متفاوت است:

  • بدون آدرس مفهوم آدرس های Mimblewimble وجود ندارد.
  • کاملا خصوصی هر معامله محرمانه است.
  • بلاک چین فشرده Mimblewimble از مجموعه ای متفاوت از ضمانت های امنیتی برای بیت کوین استفاده می کند که منجر به یک بلاک چین بسیار فشرده تر می شود.

معاملات توضیح داده شده است

معاملات محرمانه [1] توسط دکتر آدام بک اختراع شد و در چندین پروژه ارزهای دیجیتال، از جمله Monero و Tari - از طریق Mimblewimble به کار گرفته شد.

دریافت کنندگان Tari کلیدهای خصوصی را برای دریافت سکه در پرواز ایجاد می کنند. بنابراین آنها باید در ساخت یک معامله تاری مشارکت داشته باشند.

این لزوماً به این معنی نیست که گیرندگان باید آنلاین باشند. با این حال، آنها باید قادر به برقراری ارتباط باشند، خواه از طریق ایمیل، پیام‌رسانی فوری (IM) یا کبوتر حامل.

معامله اساسی

ما توضیح خواهیم داد که چگونه آلیس می تواند Tari را با استفاده از یک پروتکل دو طرفه برای Mimblewimble برای باب بفرستد. تراکنش های چند طرفه مشابه هستند، اما جریان اطلاعات کمی متفاوت است و در دورهای ارتباطی اضافی انجام می شود.

فرض کنید آلیس 300 µT دارد و می‌خواهد 200 µT برای باب بفرستد.

این تراکنش اساسی است:

ورودی هاخروجی
3002009010
آلیس UTXOبه بابتغییر دادنپرداخت

اگر این را به عنوان یک معادله ریاضی بنویسیم، که در آن خروجی ها مثبت و ورودی ها منفی است، باید بتوانیم چیزها را متعادل کنیم تا هیچ سکه ای از هوا ایجاد نشود:

$$ -300 + 200 + 90 + 10 = 0 $$

این اساساً اطلاعاتی است که در بلاک چین بیت کوین وجود دارد. هر کسی می‌تواند تراکنش‌های دیگران را به سادگی با بازرسی تاریخچه تراکنش‌های دفتر کل جهانی بررسی کند. این برای حفظ حریم خصوصی عالی نیست.

اینجاست که تراکنش‌های محرمانه وارد می‌شوند. می‌توانیم با ضرب هر دو طرف معادله قبلی در یک نقطه مولد شروع کنیم. H در مورد منحنی بیضوی (برای مقدمه ای بر ریاضیات منحنی بیضوی مراجعه کنید این ارائه):

$$ 300.H = 200.H + 90.H + 10.H ​$$

پس از H یک ثابت است، ریاضی بالا همچنان پابرجاست، بنابراین با بررسی آن می توانیم تأیید کنیم که آلیس دزدی نمی کند

$$(3.H) - (2.H) - (1.H) - (fH) \ معادل 0.H = 0 $$

توجه کنید که ما فقط کلیدهای عمومی را ببینید و بنابراین مقادیر پنهان می شوند. سرد!

از نظر فنی، فقط مقادیر عدد صحیح اسکالر برای ضرب منحنی بیضوی معتبر هستند. به همین دلیل است که ما از μT در تراکنش ها استفاده می کنیم تا مبالغ همیشه اعداد صحیح باشند.
با این حال یک گرفتاری وجود دارد. اگر _H_ ثابت و شناخته شده است (همین است)، آیا کسی نمی تواند $nH$ را برای همه مقادیر معقول _n_ از قبل محاسبه کند و زنجیره بلوکی را برای آن کلیدهای عمومی اسکن کند؟[^a]

به طور خلاصه، بله. پس ما هنوز تمام نشده ایم.

1

به این حمله قبل از تصویر می گویند.

عوامل کور کننده

برای جلوگیری از نابینایی تمام مقادیر در تراکنش‌های Tari توسط یک حمله پیش‌تصویر، باید به هر ورودی و خروجی تصادفی اضافه کنیم. ایده اصلی این است که این کار را با افزودن یک کلید عمومی دوم به خروجی هر تراکنش انجام دهیم.

بنابراین اگر ورودی ها و خروجی ها را به صورت زیر بازنویسی کنیم:

$$ C_i = n_i.H + k_i.G $$

جایی که G یک ژنراتور دیگر در همان منحنی است، این کاملاً پرده ورودی ها و خروجی ها به گونه ای که هیچ حمله پیش تصویری ممکن نباشد. این فرمول a نامیده می شود تعهد پدرسن [3].

دو مولد _H_ و _G_ باید به گونه ای انتخاب شوند که تبدیل مقادیر از یک ژنراتور به دیگری غیرممکن باشد [[2]]. به طور خاص، اگر _G_ مولد پایه باشد، پس مقداری _k_ وجود دارد که $$ H = kG $$

اگه کسی میتونه اینو بفهمه k، کل امنیت معاملات محرمانه از بین می رود. به عنوان تمرینی برای خواننده باقی می ماند تا دلیل آن را دریابد.

برای معرفی نیمه ملایم این مفاهیم، ​​مقاله آدام گیبسون در مورد این موضوع بسیار عالی است [5].

آلیس یک معامله را آماده می کند

آلیس اکنون می تواند شروع به ساخت یک تراکنش کند.

نوعفرمولنام
ورودی$$ -300.H - k_1.G $$C1
خروجی را تغییر دهید$$90.H + k_2.G $$C2
پرداخت$$ 10.H + 0.G $$f
جمع هزینه$$ 200.H + 0.G $$C*
مجموع$$ 0.H + (k_2-k_1).G $$X

مقادیر \( k_i \)، \(k_1، k_2\) کلیدهای هزینه برای آن خروجی ها هستند.

_تنها اطلاعاتی که برای خرج کردن خروجی‌های Tari نیاز دارید، کلید خرج کردن (که عامل کورکننده نیز نامیده می‌شود) و ارزش مرتبط با آن است.

بنابراین برای این تراکنش، کیف پول آلیس که تمام خروجی‌های تاری مصرف‌نشده او را ردیابی می‌کند، عامل کورکننده و مقدار "300" را برای تکمیل تعهد ارائه می‌دهد. C1.

توجه داشته باشید که وقتی همه ورودی‌ها و خروجی‌ها جمع می‌شوند (از جمله هزینه)، تمام مقادیر به صفر می‌رسند، همانطور که باید. همچنین توجه کنید که تنها عبارت باقی مانده در نقطه ضرب می شود G. همه H شرایط از بین رفته است ما به این مجموع می گوییم افراط عمومی برای بخشی از معامله آلیس.

تعریف می کنیم مازاد از معامله باشد

$$ x_s = k_2 - k_1 $$

یک راه ساده برای آلیس برای محاسبه مازاد خود (و نحوه انجام این کار توسط نرم افزار کیف پول Tari) این است که عوامل کور کننده خروجی و منهای مجموع عوامل کور کننده ورودی خود را جمع کند.

فرض کنید آلیس سعی می کرد مقداری پول برای خود ایجاد کند و تغییر را به جای 100 میکروT 90 انجام داد. در این مثال، مجموع خروجی ها و ورودی ها لغو نمی شود. H و ما باید

$$X^* = 10.H + x_s.G$$

بعداً خواهیم دید که پروتکل Mimblewimble چگونه آلیس را در صورتی که سعی کند اینگونه هشیاری ها را انجام دهد، جلب می کند.

آلیس در واقع برای هر خروجی یک محدوده اثبات تهیه می کند، که گواه این است که مقدار خروجی بین صفر تا 2^64 µT است. بدون اثبات دامنه، آلیس می‌توانست مقادیر منفی را برای مردم بفرستد، خود را غنی کند و هیچ یک از حسابداری تاری را زیر پا نگذارد.
در Tari و Grin، ارزش اضافی در واقع برای حفظ حریم خصوصی به دو مقدار تقسیم می شود. تیم Grin توضیح خوبی در مورد اینکه چرا این مقدار «offset» ضروری است [[4]] دارد. ما این مرحله را رها می کنیم تا توضیح را ساده نگه داریم (r).

آلیس نیز تصادفی را انتخاب می کند پیک,

$$ r_a $$

و غیر عمومی مربوطه را محاسبه می کند،

$$ R_a = r_a.G $$

سپس آلیس اطلاعات زیر را برای باب می فرستد:

میدانارزش
ورودی هاC1
خروجیC2
پرداخت10
مبلغ پرداختی به باب200
غیر عمومی$$ R_a $$
افراط عمومیX
متادادهm

فراداده پیام برخی از بیت های اضافی اطلاعاتی است که به تراکنش مربوط می شود (مانند زمانی که خروجی می تواند خرج شود).

باب پاسخ خود را آماده می کند

باب این اطلاعات را دریافت می کند و سپس شروع به تکمیل بخشی از تراکنش خود می کند.

اول، او می تواند تأیید کند که آلیس اطلاعات صحیح را با بررسی اینکه آیا مازاد عمومی ارسال کرده است، X، با پیروی از همان روشی که آلیس برای محاسبه آن در بالا استفاده کرد صحیح است. این مرحله کاملاً ضروری نیست، زیرا او در این مرحله اطلاعات کافی برای کشف هرگونه تقلب را ندارد.

او سپس تعهدی را از آن ایجاد می کند amount فیلدی که آلیس برای او می فرستد:

$$ C_b = 200.H + k_b.G $$

جایی که \(k_b\) کلید خرج خصوصی باب است. او محاسبه می کند

$$P_b = k_b.G$$

و یک اثبات محدوده برای تعهد ایجاد می کند.

سپس باب باید امضا کند که خوشحال است که همه چیز برای رضایت او کامل شده است. او جزئی ایجاد می کند امضای Schnorr با چالش،

$$ e = H(R_a + R_b \ Vert X + P_b \ Vert f \ Vert m) $$

و امضا توسط

$$ s_b = r_b + ek_b $$

باب پس می فرستد

میدانارزش
خروجی (تعهد و مقاوم در برابر برد)$$C_b$$
غیر عمومی$$R_b$$
امضا$$s_b$$
کلید عمومی$$P_b$$

آلیس تراکنش را تکمیل و پخش می کند

پس از شنیدن پاسخ باب، آلیس می تواند همه چیز را جمع بندی کند.

اول، او اکنون می تواند از nonce عمومی و کلید عمومی باب برای محاسبه مستقل چالشی که باب امضا کرده است استفاده کند:

$$ e = H(R_a + R_b \ Vert X + P_b \ Vert f \ Vert m) $$

سپس آلیس هر دو امضای جزئی خود را ایجاد می کند،

$$ s_a = r_a + e.x_s $$

و امضای مجموع، $$ s = s_a + s_b، R = R_a + R_b $$.

آلیس اکنون می تواند این تراکنش را در شبکه پخش کند. تراکنش نهایی به صورت زیر است:

هسته تراکنش
افراط عمومی$$ X + P_b $$
امضا$$ (s, R) $$
پرداخت10
فراداده تراکنشm
بدنه معامله
ورودی هایی با اثبات محدوده$$[C_1]$$
خروجی هایی با ضریب برد$$[C_2، C_B]$$

تایید تراکنش و انتشار

هنگامی که یک گره کامل تراکنش آلیس را دریافت می کند، باید قبل از ارسال آن به همتایان خود، بررسی کند که در سطح است. گره می خواهد موارد زیر را بررسی کند:

  1. همه ورودی ها از مجموعه UTXO فعلی می آیند

    تمام گره های کامل مجموعه خروجی های مصرف نشده را پیگیری می کنند، بنابراین گره آن را بررسی می کند C1 در آن لیست است

  2. همه خروجی ها دارای یک برد معتبر هستند

    اثبات برد در برابر تعهد مطابقت آن تأیید می شود.

  3. ارزش ها تعادل دارند

    در این چک، گره می خواهد مطمئن شود که هیچ سکه ای در تراکنش ایجاد یا از بین نمی رود. اما اگر مقادیر کور شده باشند، چگونه می تواند این کار را انجام دهد؟

    به یاد بیاورید که در یک معامله صادقانه، تمام مقادیر (که در H) لغو کنید، و مجموع کلیدهای عمومی خروجی ها منهای کلیدهای عمومی ورودی ها باقی می ماند. این غیر تصادفی همان مقداری است که به عنوان مقدار اضافی عمومی در هسته ذخیره می شود.

    غیر عمومی های جمع شده، R همچنین در هسته ذخیره می شوند، بنابراین به گره اجازه می دهد تا امضا را با بررسی موارد زیر تأیید کند، جایی که چالش e مانند قبل محاسبه می شود:

$$ sG \stackrel{?}{=} R + e(X + P_b) $$

  1. امضای موجود در هسته معتبر است

    بنابراین با تأیید امضای هسته، به خود نیز ثابت می کنیم که حسابداری معاملات صحیح است.

  2. بررسی های مختلف اجماع دیگر

    مانند اینکه آیا کارمزد بیشتر از حداقل است.

اگر همه این بررسی ها انجام شود، گره تراکنش را به همتایان خود ارسال می کند و در نهایت استخراج می شود و به بلاک چین اضافه می شود.

توقف کلاهبرداری

حالا فرض کنید آلیس سعی کرد یواشکی باشد و از \( X^* \) به عنوان زیاده روی خود استفاده کرد. جایی که او به جای 100 میکروT به خودش 90 میکروT پول داد. اکنون ارزش ها متعادل نمی شوند. مجموع خروجی ها، ورودی ها و کارمزدها چیزی شبیه به این خواهد بود:

$$ 10.H + (x_s + k_b).G $$

بنابراین اکنون وقتی یک گره کامل امضا را بررسی می کند:

$$ \begin{align} R + e(X^* + P_b) &\stackrel{?}{=} sG \\ R + e(10.H + x_s.G + P_b) &\stackrel{?}{ =} (r_a + r_b + e(x_s + k_b)).G \\ R + e(10.H + X + P_b) &\stackrel{?}{=} (r_a + r_b).G + e(x_s + k_b).G \\ \mathbf{10e.H} + R + e(X + P_b) &\stackrel{?}{=} R + e(X + P_b) \\ \end{تراز کردن} $$

امضا تایید نمی کند! گره نمی‌تواند دقیقاً تشخیص دهد که چه مشکلی در تراکنش وجود دارد، اما می‌داند که مشکلی وجود دارد، و بنابراین تراکنش را بی‌صدا رها می‌کند و به زندگی خود ادامه می‌دهد.

خلاصه تراکنش

به طور خلاصه: یک تراکنش Tari/MimbleWimble شامل موارد زیر است:

  • از آلیس، مجموعه‌ای از ورودی‌ها که به مجموعه‌ای از خروجی‌های قبلی اشاره می‌کنند و مصرف می‌کنند.
  • از آلیس و باب، مجموعه ای از خروجی های جدید، از جمله:
    • یک مقدار و یک عامل کور (که فقط یک کلید خصوصی جدید است).
    • اثبات محدوده ای که نشان می دهد مقدار غیر منفی است.
  • کارمزد معامله، به صورت واضح،
  • مازاد عمومی، که مجموع همه عوامل کورکننده استفاده شده در معامله است.
  • فراداده تراکنش
  • مقدار بیش از حد کور که به عنوان کلید خصوصی برای امضای پیامی که متاداده تراکنش را تأیید می کند، و مازاد عمومی استفاده می شود.

منابع

[1] "معاملات محرمانه بیت کوین چیست؟" [آنلاین.] موجود: https://www.mycryptopedia.com/what-are-confidential-transactions/ تاریخ دسترسی: 2019-04-09.

[2] "Nothing-Up-My_Sleeve Number" [آنلاین].
در دسترس: https://en.wikipedia.org/w/index.php?title=Nothing-up-my-sleeve_number&oldid=889582749. تاریخ دسترسی: 2019-04-09.

[3] ویکی پدیا: "طرح تعهد" [آنلاین]. در دسترس: https://en.wikipedia.org/wiki/Commitment_scheme. تاریخ دسترسی: 2019-04-09.

[4] "تغییرهای هسته، در مقدمه ای بر MimbleWimble and Grin" [آنلاین]. در دسترس: https://github.com/mimblewimble/grin/blob/master/doc/intro.md#kernel-offsets. تاریخ دسترسی: 2019-04-09.

[5] A. Gibson، "از صفر (دانش) تا ضد گلوله" [آنلاین]. در دسترس: https://joinmarket.me/static/FromZK2BPs_v1.pdf. تاریخ دسترسی: 2019-04-10.

همکاران