نبرد برای حریم خصوصی بلاکچین: مونرو

بلاکچین‌هایی مانند بلاکچین بیت کوین یک مشکل اساسی دارند، این که هرکس می‌تواند بلاکچین را مطالعه کرده و تراکنش‌ها و موجودی‌ها را ببیند. اما رمز ارزهایی وجود دارند که هدف آن‌ها پنهان‌سازی تراکنش‌های انجام شده و جلوگیری از سو استفاده‌های احتمالی با استفاده از پنهان‌سازی فرستنده، گیرنده و مبلغ تراکنش است. در این مقاله به تکنیکی می‌پردازیم که رمز ارز مونرو از طریق آن این کار را انجام می‌دهد.

0 154

مونرو

در حال حاضر مونرو پادشاه دنیای حریم خصوصی است. چرا؟ زیرا فناوری زیربنایی آن یکی از موفق‌ترین پیشینه‌ها را دارد و همچنین به این دلیل که این سکه در میان سکه‌های حریم خصوصی، بیشترین ارزش بازاری را جذب کرده است.

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

تاریخچه‌ای کوتاه:

داستان مونرو در سال ۲۰۱۲ با توسعه پروتکل CryptoNote آغاز می‌شود. CryptoNote یکی از اولین پروتکل‌های بلاکچین حریم خصوصی محور بود و زمینه را برای تعدادی از رمز ارز‌های آینده مهیا کرد. این پروتکل در دسامبر سال ۲۰۱۲ و زمانی ایجاد شد که نیکلاس فان سابرهاگن (Nicolas Van Saberhagen) وایت‌پیپر CryptoNote ۱٫۰ را منتشر کرد. همانند بنیان‌گذار معروف بیت کوین ساتوشی ناکاموتو، نیکلاس فان سابرهاگن نیز یک نام مستعار است. در حالی که حدس و گمان‌های بسیاری در مورد هویت واقعی وی وجود دارد، کسی تاکنون ادعای مالکیت آن مقاله را مطرح نکرده است.

CryptoNote ۱٫۰ به چند دلیل یک وایت‌پیپر انقلابی بود. اول این که این مقاله روشی برای پنهان‌سازی هویت ارسال‌کننده تراکنش (با استفاده از امضاهای حلقه‌ای) و دریافت‌کننده تراکنش (با استفاده از نشانی‌های مخفی) را شرح می‌داد. به علاوه، در این مقاله یک سازوکار گواه بر کار به نام «CryptoNight» شرح داده شده بود که در برابر استفاده از مدارهای مجتمع با کاربرد خاص یا ASIC مقاوم است. اگر قبلا این عبارت را نشنیده‌اید، ASIC یک دستگاه گران‌قیمت است که می‌تواند سریع‌تر از CPU‌ها و GPU‌های سنتی بیت کوین استخراج کند. استفاده از این دستگاه‌ها در شبکه بیت کوین منجر به تمرکز استخراج بیت کوین در دست عملیاتی شد که از سرمایه بالایی برخوردار بودند، که تا حدی باعث متمرکز شدن این شبکه غیرمتمرکز شد. با بکارگیری CryptoNight، پروتکل CryptoNote تلاش کرد تا از فعالیت‌های متمرکز استخراج دوری کردن و سیستم بساز که بیشتر در راستای آرمان یک CPU یک رأی باشد که در وایت‌پیپر اولیه بیت کوین توسط ساتوشی ناکاموتو پیشنهاد شده بود. چند ماه بعد، در اکتبر ۲۰۱۳، نیکلاس فان سابرهاگن یک نسخه بروزرسانی شده از آن وایت‌پیپر به نام CryptoNote نسخه ۲٫۰ را منتشر کرد؛ اما این مقاله به‌روزسانی شده تغییرات قابل توجهی را به همراه نداشت.

CryptoNote

تاریخچه‌ای از رمز ارز‌های مبتنی بر CryptoNote منبع: ویکیپدیا

چیزی که باید در اینجا به آن توجه شود این است که در حالی که وایت‌پیپر یک پروتکل حریم خصوصی محور پیشگامانه را شرح می‌داد، تنها یک سند مکتوب بود. هیچ‌گاه شبکه CryptoNote یا یک سکه CryptoNote به وجود نیامد. این سخن ما را به مرحله دوم تاریخ مونرو می‌رساند: بایت‌کوین.

بایت‌کوین اولین رمز ارزی بود که حقیقتا از پروتکل CryptoNote استفاده می‌کرد. بایت‌کوین در نوامبر ۲۰۱۳ عرضه شد، زمانی که تیم هسته بایت‌کوین کد اولیه خود را در Github قرار دادند. چند ماه بعد در مارس ۲۰۱۴، آن‌ها باقی کد را نیز تکمیل کردند و پروتکل به کار افتاد. به نظر می‌رسد که قصه سرراست باشد مگر نه؟ خیر. متاسفانه مانند بسیاری از موارد در کریپتو، توسعه بایت‌کوین پشت مقداری رمز و راز و تعداد زیادی علامت خطر پوشیده است. بیایید تا به برخی از نگرانی‌های اصلی بپردازیم.

  1. تمامی محققان اصلی بایت‌کوین و CryptoNote اشخاص ناشناس بودند. هیچ یک از آن‌ها هیچ نظر یا مقاله‌ای را پیش از آن در اینترنت منتشر نکرده بودند، و این نشان می‌دهد که آن‌ها یا با یک نام مستعار فعالیت می‌کردند و یا پیش از آن تجربه محدودی در فضای کریپتو داشتند. هر دوی این احتمالات علامت خطر بودند.
  2. وایت‌پیپر اصلی CryptoNote که گفته می‌شود در سال ۲۰۱۲ عرضه شده بود، به پستی اشاره می‌کرد که تا سال ۲۰۱۳ منتشر نشده بود. به علاوه، بعدها کشف شد که امضای الکترونیکی وایت‌پیپر به صورتی ایجاد شده بود که می‌توانست دستکاری شود، و این در زمان واقعی مقاله را زیر سوال می‌برد.
  3. شبکه بایت‌کوین تا زمانی که «به طور اتفاقی» توسط دو نفر کشف شد، دو نفری که همزمان از یک داستان را در دو انجمن آنلاین جداگانه استفاده کردند، و این امر باعث شد که برخی به این باور برسند که این «کشف اتفاقی» تنها یک پست آنلاین توسط اعضای تیم بایت‌کوین بوده است.
  4. در آخر، مهم‌ترین مشکل این بود که بیش از ۸۰٪ بایت‌کوین از پیش استخراج شده بود، یعنی اکثریت بزرگی از این رمز ارز در اختیار توسعه‌دهندگان سکه آن قرار داشت. در نتیجه، این سکه به شدت متمرکز بود و توسعه‌دهندگان ارشد آن مترصد استفاده از اکثریت سودی بودند که در صورت افزایش ارزش آن حاصل می‌شد.

این مشکل باعث شد تا عده‌ای تصور کنند که یک گروه از توسعه‌دهندگان پروتکل CryptoNote و رمز ارز بایت‌کوین را به طور همزمان خلق کرده است. آن‌ها باور دارند که این گروه توسعه‌دهنده عموم را فریب دادند که تا باور کنند که وایت‌پیپرهای CryptoNote در سال ۲۰۱۲ منتشر شده بود، در حال که در واقعیت در سال ۲۰۱۴ منتشر شده بودند. آن‌ها با این کار مفاهیم CryptoNote زیربنایی را «معتبر» کردند و به پروژه بایت‌کوین مشروعیت بخشیدند که به آن‌ها امکان می‌داد بسیار از ۸۰٪ از پیش استخراج شده خود سود ببرند.

فارغ از صحت این داستان، مشخص بود که در حالی که فناوری زیربنایی CryptoNote قدرتمند بود، پیش استخراج قابل توجه مشکلات بلندمدتی را برای این ارز به وجود می‌آورد. در نتیجه، برخی از گروه‌های رقیب تصمیم به فورک، یا راه‌اندازی مجدد گرفتند. مربوط‌ترین این گروه‌ها (حداقل به داستان ما) می‌خواست تا یک سکه جدید به نام bitMonero ایجاد کند. این گروه امیدوار بود که bitMonero تعدادی از مشکلات پروتکل زیربنایی بایت‌کوین، در رابطه با پاداش‌های بلاک، زمان‌های بلاک، و انتشار گازها را حل کند. متاسفانه، رهبر گروه یا فردی که تحت نام thankful_for_today فعالیت می‌کرد، آنقدر برای راه‌اندازی bitMonero عجله داشت که به طور کلی این مسایل کلیدی را نادیده گرفت. او در ۱۸ آوریل ۲۰۱۴ کدبیس بایت‌کوین را فورک کرد و سپس ناپدید شد. پس از thankful_for_today، جامعه bitMonero تصمیم گرفتند که بهتر است پروژه را به دست بگیرند. بنابراین، تنها ۵ روز پس از عرضه اولیه bitMonero،‌ این گروه کدبیس bitMonero را فورک کرد و با bit را از نام آن، سکه جدیدی به نام Monero عرضه کرد. از آن زمان، تیم مونرو به پیشنهاد و پیاده‌سازی ارتقاءهای مهم در سیستم ادامه می‌دهد. به طور برجسته، آن‌ها تراکنش‌های محرمانه حلقه‌ای را در سال ۲۰۱۶ برای پنهان‌سازی ابعاد تراکنش‌های به کار گرفتند و اخیرا از ضدگلوله‌ها برای کاهش قابل توجه کارمزد تراکنش استفاده می‌کنند. به علاوه، مونرو در فرآیند توسعه Kovri است. یک فناوری که به کاربران اجازه می‌دهد تا نشانی IP و موقعیت جغرافیایی خود را پنهان کنند.

مونرو از زمان تاسیس خود بسیار خود عمل کرده است و در اوج خود به ارزش بازار ۷٫۶ میلیارد دلار رسیده است. بازار خرسی کریپتو اما ارزش بازاری آن را در ۴ دسامبر ۲۰۱۸ به حدود ۷۱۶ میلیون دلار کاهش داد، اما در هر حا این سکه هنوز هم به گفته CoinMarketCap هجدهمین رمز ارز بزرگ است.

پروتکل

اکنون که به درک مناسبی از تاریخ مونرو رسیده‌ایم، بیایید در مورد نحوه کارکرد پروتکل آن صحبت کنیم. در حالی که تعدادی ویژگی مانند ابعاد متغیر بلاک، یک سازوکار داخلی تورم و سازوکار‌های اجماع CryptoNight ضد ASIC وجود دارند که باعث تمایز پروتکل مونرو می‌شوند، ما به طور خاص بر روی ویژگی‌های مربوط به حریم‌ خصوصی آن صحبت خواهیم کرد. پروتکل مونرو از طریق به ‌کارگیری سه تکنیک هسته‌ای رمزنگارانه، برای کاربران حریم خصوصی به ارمغان می‌آورد: (۱) نشانی‌های مخفی، (۲) امضاهای حلقه‌ای و (۳) تراکنش‌های محرمانه. این تکنیک‌ها به ترتیب فرستنده، گیرنده و مبلغ را پنهان می‌کنند. بگذارید هر یک را باز کرده و بررسی کنیم.

نشانی‌های مخفی

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

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

chart

نمونه یک منحنی بیضوی

مونرو از یک منحنی بیضوی بسیار خاص به نام منحنی Edwards25519 استفاده می‌کند. نقاط روی این منحنی را می‌توان از روی دیگر نقاط منحنی اضافه و حذف کرد. زمانی که دو نقطه را روی یک منحنی حذف یا اضافه می‌کنید، نتیجه نقطه سومی روی منحنی خواهد بود. به علاوه،‌ هر نقطه روی منحنی می‌تواند «مقیاس» شود، به این معنی که می‌تواند x بار به خود اضافه شود (x یک کمیت اسکالر است). به عنوان مثال، اگر تمایل داشته باشدی تا نقطه A را ۳ برابر بزرگ کنید، تنها نیاز خواهید داشت تا A + A + A را محاسبه کنید.

  • تحمل داشته باشید، دیگر چیزی نمانده! تنها باید ۳ صفت منحنی بیضوی را که آن را در خلق نشانی‌های مخفی سودمند می‌سازند به طور گذرا بررسی کنیم.
  • اول، روی منحنی نقطه‌ای به نام G وجود دارد که به عنوان نقطه پایه شناخته می‌شود. می‌توانید G را به عنوان عدد ۱۲ روی یک ساعت در نظر بگیرید. این نقطه عموما نقطه آغازین محاسبات و همچنین نقطه‌ای خواهد بود که منحنی‌ها در آنجا یک نقطه را کامل می‌کنند.
  • دوم،‌ یک کمیت اسکالر منحصر به فرد به نام L وجود دارد که نماینده عددی است که G باید پیش از آن که منحنی یک حلقه را کامل کند به آن اندازه بزرگ شود. به عبارت دیگر، اگر شما G را به تعداد L بار به خودش اضافه کنید‌، یک باز حلقه را طی کرده و به G بازخواهید گشت. این مشابه گذشت یک ساعت کامل و بازگشت به عدد ۱۲ است.
  • سوم، در رمزنگاری منحنی بیضوی، هر کاربر ۴ کلید دارد. هر کاربر یک کلید خرج عمومی، یک کلید خرج خصوصی،‌ یک کلید مشاهده عمومی و یک کلید مشاهده خصوصی دارد. کلیدهای خصوصی نماینده مقادیر اسکالر و کلیدهای عمومی نماینده نقاط روی منحنی هستند. نکته جالب این است که کلیدهای عمومی در حقیقت با استفاده از کلیدها خصوصی محاسبه می‌گردند. کلیدهای عمومی تنها همان کلیدهای خصوصی (کمیت اسکالر) ضرب در نقطه پایه (G) هستند. برای مثال، اگر کلید خصوصی خرج شما ۳ باشد، کلید عمومی خرج شما ۳×G یا G+G+G خواهد بود. باید توجه داشت که با وجود این که استفاده از کلید خصوصی برای رسیدن به کلید عمومی نسبتا آسان است، برای مقادیر بزرگ اسکالر محاسبه کلید خصوصی از روی کلید عمومی از لحاظ رایانشی امکان‌پذیر نیست.
  • تبریک می‌گویم! شما اکنون از حداقل دانش در مورد ECC برای درک نشانی‌های مخفی برخوردارید. همانطور که در بالا اشاره شد، نشانی‌های مخفی کلیدهای یک بار مصرفی هستند که توسط ارسال‌کننده ایجاد می‌شوند و غیرقابل پیوند به کلید عمومی حقیقی گیرنده هستند. این کلیدها با استفاده از یک تبادل دیفی هلمن (Diffie Hellman) منحنی بیضوی ایجاد می‌شوند، که تنها روشی برای تبادل یک راز مشترک در یک شبکه ناامن است. راحت‌ترین راه برای درک فرآیند خلق نشانی مخفی دنبال کردن قدم به قدم یک مثال است. پس بیایید تصور کنیم که جان (John) می‌خواهد به سو (Sue) مونرو بفرستد. برای این کار، جان باید مراحل زیر را انجام دهد.
  • ابتدا، جان باید یک مقدار اسکالر تصادفی r انتخاب کند، که چیزی بین ۰ و L است (بیشترین اسکالر پیش از آن که منحنی به G بازگردد). جان می‌تواند از آن مقدار تصادفی برای تولید کلید عمومی مربوطه استفاده کند. R = rG.
  • دوم، جان r را در کلید عمومی سو یعنی S ضرب می‌کند تا به rS برسد. باید توجه داشت که تنها کسانی که می‌توانند این مقدار را محاسبه کنند جان و سو هستند. این نتیجه سومین صفتی است که در بالا در مورد آن صحبت شد. از آن‌جایی که کلیدهای عمومی تنها کلیدهای خصوصی × نقطه پایه G هستند، می‌دانیم که rS = rsG = rGs = Rs. بنابراین، سو می‌تواند مقدار مورد نظر را با ضرب کلید محرمانه خود s در کلید عمومی R که به طور تصادفی تولید شده است به دست آورد و جان نیز می‌تواند این مقدار را با ضرب کلید مخفی r در کلید عمومی سو یعنی S به دست آورد. هیچ شخص دیگر نمی‌تواند این عدد را محاسبه کند،‌ چرا که به جز این دو نفر کسی به این کلیدهای محرمانه دسترسی ندارد.
  • سوم، جان هش rS را محاسبه می‌کند تا بتواند یک مقدار اسکالر جدید بسازد. در این مرحله از فرآیند تراکنش غیر قابل پیوند می‌گردد.
  • چهارم، پس از محاسبه مقدار اسکالر جدید، جان آن را در نقطه پایه G ضرب می‌کند تا با استفاده از نشانه ریاضیاتی F = H(rS)*G نقطه‌ای جدید روی منحنی به نام F تولید کند.
  • پنجم، در نهایت جان می‌تواند با افزودن F به کلید عمومی سو نشانی مخفی را (که آن را P می‌نامیم) تولید کند. مجددا، از اگر نشانه ریاضیاتی استفاده کنیم نتیجه به این شکل خواهد بود: P = F + S که در آن S نماینده کلید عمومی سو است.

با خلق کلید عمومی به این روش، سو می‌تواند بی‌نام بودن خود را حفظ کند. به علاوه، او هنوز می‌تواند تراکنش‌هایی را که به نشانی عمومی وی ارسال شده‌اند را شناسایی کند. چگونه؟ او قادر است تا تراکنش‌های ارسال شده به کلید عمومی خود را با اسکن کردن مداوم شبکه و اساسا مهندسی مجدد فرآیند جان برای هر تراکنش معوقه شناسایی کند. در عمل، این یعنی کیف پول سو شبکه را اسکن کرده، یک تراکنش معوقه یافته، کلید عمومی R آن تراکنش را در نظر گرفته، آن را در کلید خصوصی او s ضرب کرد، هش آن را محاسبه کرده، خروجی هش را به کلید عمومی او S اضافه کرده، و کنترل می‌کند که آیا نشانی مخفی به دست آمده با نشانی مخفی تراکنش یکی است یا خیر. در این صورت او می‌داند که تراکنش به او تعلق دارد. در غیر این صورت، کیف پول وی به سراغ تراکنش بعدی خواهد رفت.

اکنون می‌دانیم که چگونه یک نشانی عمومی یک‌بارمصرف ایجاد کنیم و می‌دانیم که سو چگونه می‌تواند تراکنش‌هایی را که برای وی ارسال شده شناسایی کند. اما سو چگونه می‌تواند خروجی آن تراکنش‌ها را خرج کند؟ برای صرف خروجی تراکنش‌ها، او باید کلید خصوصی یک‌بارمصرف تراکنش را محاسبه کند. نکته جالب این است که او می‌تواند حقیقتا کلید خصوصی یک‌بارمصرف را هم از کلید عمومی یک‌بارمصرف R و هم از کلید خصوصی خود s محاسبه کند. برای محاسبه کلید خصوصی یک‌بارمصرف (که آن را x می‌نامیم)، کافی است او کلید خصوصی خود را به هش Rs (خروجی مرحله ۳ بالا) اضافه کند. با استفاده از نشانه ریاضیاتی، نتیجه به این شکل خواهد بود: x = s + H(Rs) سپس او می‌تواند از این کلید خصوصی برای امضای یک تراکنش جدید با یک امضای حلقه‌ای استفاده کند، که در بخش بعد مفصلا به آن خواهیم پرداخت.

chart

امضاهای حلقه‌ای

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

این امر برای ما یک چالش جالب به همراه دارد. اگر به طور کامل هویت فرستنده را پنهان کنیم، چگونه می‌توانیم مطمئن باشیم که مونرو قبلا ارسال نشده است؟ به عبارت دیگر، چگونه می‌توانیم مشکل خرج مضاعف را حل کنیم اگر ندانیم کدام کلید عمومی تراکنش را آغاز کرده است؟ خوشبختانه، مونرو این مشکل احتمالی را با استفاده از چیزی به نام یک تصویر کلیدی حل کرده است. اساسا، یک تصویر کلیدی به هر تراکنش منسوب شده است. تصویر کلیدی با ضرب کلید خصوصی یک‌بارمصرف x در هش کلید عمومی یک‌بار مصرف محاسبه می‌گردد. با نشانه ریاضیاتی، این امر به این شکل خواهد بود: I = x * H(P). با محاسبه یک تصویر کلیدی به این صورت، تعیین این که کدام کلید عمومی برای تولید یک تصویر کلیدی استفاده شده است برای یک شخص ثالث ناممکن خواهد بود و به این صورت بی‌نام بودن فرستنده حفظ خواهد شد. در عین حال، برای هر ترکیب کلید عمومی/خصوصی یک‌بارمصرف تنها یک بار امکان تولید یک تصویر کلیدی وجود دارد و در این صورت احتمال خرج مضاعف از میان خواهد رفت.

بسیار خب، حال به درکی پایه از مفهوم امضاهای حلقه‌ای رسیده‌ایم و می‌دانیم که این امضاها با استفاده از تصاویر کلیدی از مشکل احتمالی خرج مضاعف جلوگیری می‌کنند. اما چگونه باید یک امضای حلقه‌ای ایجاد کرد؟ چگونه سو از کلید خصوصی یک بار مصرف برای صرف خروجی ارسال شده توسط جان استفاده می‌کند؟ امضاهای حلقه‌ای از طریق چیزی به نام «اثبات دانایی صفر غیرتعاملی» یا به طور خلاصه NIZKP ایجاد می‌شوند. این عبارات احتمالا مبهم/پیچیده به نظر می‌آید، پس لطفا با من همراه شویم تا نگاه کوتاهی به اثبات دانایی صفر داشته باشیم.

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

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

این توضیح کمی انتزاعی بود، پس بیایید یک مثال ساده را مرور کنیم. توجه داشته باشید که مونرو از این ZKP استفاده نمی‌کند. بسیار خب، تصور کنید که سو یک کلید یک‌بار مصرف خصوصی x و کلید عمومی مربوطه P را در اختیار دارد. او می‌خواهد بدون افشای مقدار واقعی x، اثبات کند که آن را می‌داند. برای این کار، او یک کلید خصوصی تصادفی ایجاد می‌کند که آن را q می‌نامیم. او q را در G ضرب می‌کند تا به کلید عمومی مربوطه Q برسد، که می‌تواند آن را برای باب (Bob) ارسال کند. باب نیز در پاسخ یک چالش می‌فرستد، که یک اسکالر تصادفی دیگر به نام c است. سو سپس می‌تواند محاسبه زیر را انجام داد و به یک کلید خصوصی جدید برسد:

s = x*c + a.

یعنی او می‌تواند x را به وسیله c و a تبدیل کند. این روش به او اجازه می‌دهد تا بدون آن که x را لو دهد، اثبات کند که آن را می‌داند. سپس او کلیدها خصوصی جدید را به باب ارسال می‌کند. باب سپس می‌تواند اثبات کند که سو کلید خصوصی x را می‌داند، چرا که می‌تواند کنترل کند که کلید عمومی جدید S (که با استفاده از S تولید می‌کند) برابر P*c + A است، به عبارت دیگر، حتی با وجود این که او x یا a را نمی‌داند، می‌داند که اگر S = Pc+A، سپس سو باید به دلیل معادله زیر x را بداند:

Pc + A = x*G*c + a*G = (x*c)*G + a*G = (x*c + a) * G = S

با صدور چند چالش‌، او بدون شک ثابت می‌کند که سو x را می‌داند. این یک اثبات دانایی صفر تعاملی است چرا که سو و با چند چالش/پاسخ را با هم رد و بدل می‌کنند. اما چه می‌شود اگر باب حضور نداشته باشد و سو بخواهد اثبات کند که x را می‌داند؟ در این صورت، او می‌تواند از یک اثبات دانایی صفر غیر تعاملی استفاده کند. یک NIZKP مشابه یک اثبات تعاملی است، با این تفاوت که اگر باب را با یک عملکرد هش جایگزین می‌کند. پس به جای این که باب به طور تصادفی چالش را انتخاب کند، سو می‌توان هش A را در نظر گرفته و آن را به عنوان چالش x استفاده کند. همچنین، اگر سو بخواهد پیامی را در یک اثبات مشمول کند، او می‌تواند پیش از اعمال هش آن پیام را به A الحاق کند. این به سو اجازه می‌دهد تا دقیقا همان اثبات را بدون نیاز به یک تایید کننده انجام دهد. او همچنین می‌تواند آن اثبات را به هر کسی که آن را بخواهد ارسال کند.

  • اکنون می‌دانیم ZNKها چگونه کار می‌کنند، اما ارتباط آن‌ها به امضاهای حلقه‌ای چیست؟ امضاهای حلقه‌ای از NIZKPها برای تولید و تایید حلقه استفاده می‌کنند. اساسا، اگر سو قصد داشته باشد تا مونرویی که از جان دریافت کرده است را ارسال کند، باید مراحل زیر را انجام دهد:
  • ابتدا، او باید چند ورودی مورد استفاده در NIZKP را جمع‌آوری کند. این ورودی‌ها شامل تصویر کلیدی، کلید خصوصی یک‌بار مصرف x، کلید عمومی یک‌بار مصرف P، و تعدادی کلید عمومی مربوط به خروجی‌های تراکنش اتفاقی در شبکه هستند. همانطور که پیش‌تر اشاره کردیم، این کلیدهای عمومی اتفاقی به عنوان تله عمل می‌کنند. با اضافه کردن این کلیدها به تراکنش‌ها به عنوان ورودی، هر کلید عمومی یک متساویا احتمال دارد که کلید عمومی حقیقی باشد، در نتیجه برای یک شخص ثالث غیر ممکن است که تعیین کند چه کسی حقیقتا تراکنش را آغاز کرده است.
  • دوم، او برای هر کلید عمومی در حلقه دو مقدار تصادفی انتخاب می‌کند (q و w). او سپس آن مقادیر تصادفی را گرفته و با قرار دادن آن‌ها در چند معادله نسبتا پیچیده از آن‌ها برای تبدیل کلیدهای عمومی استفاده می‌کند. اگر تمایل دارید می‌توانید این معادلات را در وایت‌پیپر ببینید! پس از تبدیل هریک از آن کلید‌های عمومی، او یک رشته جدید از مقادیر خواهد داشت.
  • سوم، او آن رشته از مقادیر را هش می‌کند تا چالش غیرتعاملی c را بسازد.
  • چهارم،‌ مشابه اولین مثال، او از این چالش برای محاسبه دو رشته جدید استفاده می‌کند (c و r). سپس او این دو رشته را ترکیب کرده و تصویر کلیدی را برای ایجاد امضای حلقه‌ای لحاظ می‌کند. خروجی امضای حلقه‌ای به شکل زیر خواهد بود: (σ = (I, c1, . . . , cn, r1, . . . , rn مجددا، می‌توانید معادلات استفاده شده برای محاسبه این رشته را در وایت‌پیپر اولیه ببینید.
  • در آخر، پس از محاسبه این امضای حلقه‌ای، یک تایید کنند می‌تواند از مقادیر r و c مرحله ۴ استفاده کند تا خروجی تولید شده در مرحله ۲ را تایید کند. اگر خروجی مطابقت داشته باشد،‌ امضای حلقه‌ای معتبر خواهد بود. در غیر این صورت، تایید کننده می‌تواند امضای حلقه‌ای را رد کند.

شاید این تمام جزئیاتی بود که شما می‌خواستید، اما مهم‌ترین نکات عبارت‌اند از: (۱) امضاهای حلقه‌ای هویت فرستنده را با ترکیب کلید عمومی وی در تعدادی از کلیدهای تصادفی اخذ شده از بلاکچین پنهان می‌کنند، (۲) آن‌ها این کار را با استفاده از پیاده‌سازی یک اثبات دانایی صفر غیرتعاملی انجام می‌دهند و (۳) آن‌ها تصاویر کلیدی منحصر به فردی را برای هر تراکنش تولید می‌کنند، که این کار از خرج مضاعف جلوگیری می‌کند. پس از ذکر این نکته‌ها، بیایید به سراغ سومین و آخرین تکنیک استفاده شده در پروتکل مونرو برویم: تراکنش‌های محرمانه حلقه‌ای.

تراکنش‌های محرمانه حلقه‌ای

تراکنش‌های محرمانه حلقه‌ای (یا به طول خلاصه Ring CT) آخرین قطعه پازل حریم خصوصی برای مونرو هستند. Ring CT به پروتکل مونرو اجازه می‌دهد تا مبلغ تراکنش را پنهان کند. تکنیک استفاده شده در اصل توسط توسعه‌دهنده هسته بیت کوین به نام گئورگی ماکسول (Gregory Maxwell) خلق شد و کمی پس از آن در مونرو پیاده‌سازی شد.

حال که شرکت‌کنندگان در تراکنش را پنهان کرده‌ایم، چرا باید مبلغ تراکنش را پنهان کنیم؟ پنهان کردن مبلغ تراکنش‌ها اهمیت دارد چرا که یک شخص ثالث بداندیش می‌تواند از مبلغ تراکنش استفاده کرده و به تاریخچه کامل تراکنش دست پیدا کند. برای مثال، در اولین مثالی که مطرح کردیم، اگر جان ۴٫۳۲ مونرو به سو بفرستند و سو از آن ۴٫۳۲ مونرو برای پرداخت به باب استفاده کند، شخص دیگری می‌تواند این سرنخ را دنبال کرده و سو را به تراکنش‌های قبلی او ارتباط دهد. این مطلب خصوصا زمانی که کاربران مبالغ غیرعادی را جابجا می‌کنند صحت دارد. پس از بکارگیری Ring CT، مونرو این مشکل را با تقسیم تراکنش‌ها با قسمت‌های رایج حل می‌کرد. برای مثال،‌ سیستم ۴٫۳۲ مونرو را به ۴٫۰۰، ۳٫۰۰ و ۰٫۰۲ XMR تقسیم می‌کرد. سپس تراکنش‌های قبلی با دقیقا همان مبلغ در امضای حلقه‌ای ترکیب می‌شدند. این روش بسیار خوب عمل می‌کرد اما چند مشکل داشت. با این روش «خاک»‌ زیادی در بلاکچین ایجاد می‌شد. مقصود از خاک تراکنش‌های کوچک مانند ۰٫۰۲ در مثال بالا است،‌ که بیش از آن چیزی که ارزش دارند در بلاکچین فضا اشغال می‌کنند. به علاوه، با الزام فرستنده به ترکیب ورودی‌ها با ورودی‌های دقیقا به همان اندازه، تعداد ترکیبات احتمالی به میزان قابل توجهی کاهش پیدا کرد، و این باعث شد که ساخت یک حلقه در اندازه مناسب در برخی مواقع چالش‌برانگیز باشد. خوشبختانه، Ring CT این مشکل را با پنهان کردن مبلغ تراکنش برطرف کرد. اما این کار چگونه انجام می‌شود؟

این کار با استفاده از تعهدات پدرسون (Pederson) انجام می‌شود. تعهدات پدرسون در حقیقت یک تراکنش را به نحوی رمزگذاری می‌کنند که تنها فرستنده و گیرنده آن میزان حقیقی تراکنش را می‌دانند. در عین حال، سایز حاضران در شبکه می‌توانند اثبات کننده که جمع ورودی‌ها برابر جمع خروجی‌ها است، و اطمینان حاصل می‌گردد که سکه‌ها از ناکجاآباد به وجود نیامده‌اند. بیایید این موضوع را با مثالی بسیار ساده نمایش دهیم. تصور کنید که برای یک تراکنش سه ورودی دارید: ۱ و ۳ و ۵. همچنین سه خروجی نیز از یک تراکنش دارید: ۱ و ۲ و ۶. می‌دانید که مجموع ورودی‌ها و خروجی‌ها مشابه است چرا که:
1+3+5 = 9 = 1+2+6. به منظور پنهان کردن مقادیر ورودی و خروجی در حالی که یا تایید کننده بتواند تساوی را اثبات کند، می‌تواند هر دو معادله را به وسیله یک مقدار (مثلا A) تبدیل کنید:

نتیجه به این شکل خواهد بود: 1A + 3A + 5A = 1A + 2A + 6A.

که هم معنی تساوی زیر خواهد بود: (A(1+3+5) = A(1+2+6

پیاده‌سازی مونرو کمی پیچیده‌تر است، اما این مثال نحوه کار آن را به شما نشان می‌دهد. یک نکته جالب این است که طبق تعریف، شخصی می‌تواند از یک خروجی منفی برای خلق مونرو از ناکجاآباد استفاده کند. برای مثال می‌توانید بگویید که:
1+3+5=-100+109 برای از میان برداشتن این احتمال، Ring CT از اثبات‌های محدوده‌ای استفاده می‌کند تا اطمینان حاصل شود که کاربران نمی‌توانند با استفاده از مقادیر منفی ورودی یا خروجی سیستم را فریب دهند.

مزایا و معایب

واضح است که مونور تکنیک‌های خلاقانه‌ای را برای پنهان کردن هویت تراکنش‌ها به کار گرفته است. اما در مقابل سایر رمز ارز‌های حریم خصوصی‌محور چگونه عمل می‌کند؟ بیایید تا نگاهی کوتاه به مزایا و معایب آن داشته باشیم.

مزایا

مهم‌ترین مزیت مونرو این است که به طور پیش‌فرض خصوصی است. این یعنی اگر شما تراکنشی را در بلاکچین مونرو ارسال کند، این‌کار به صورت بی‌نام انجام می‌شود. این با سایر سکه‌های حریم خصوصی‌محور مانند ZCash متفاوت است که ویژگی‌های حریم شخصی را به شکل گزینه‌ای قابل انتخاب در نظر گرفته‌اند. چرا این موضوع اهمیت دارد؟ جالب است که اگر حریم شخصی را برای همه کاربران الزام نکنید، شخصی می‌تواند از روش‌های تحلیل پیشرفته بلاکچین برای نفوذ به بی‌نام بودن کاربرانی استفاده کند که ویژگی‌های مربوط به حریم شخصی را انتخاب کرده‌اند. به علاوه، اثبات شده است که اگر ویژگی‌های مربوط به حریم شخصی به شکل یک انتخاب مطرح باشند، درصد خیلی کمی از کاربران آن را انتخاب می‌کنند. این موضوع ابعاد استخر پنهان‌شده‌ها را محدود می‌کند و مزایای حریم خصوصی شبکه را بیش از پیش کاهش می‌دهد. اگر تمایل دارید بیشتر در مورد این موضوع مطالعه کنید، مقاله توسط محققان دانشگاه لندن در این مورد نوشته شده است. در این مقاله نتیجه‌گیری شده است که:

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

یک مزیت دیگر این است که مونرو از سایر پروتکل‌های حریم شخصی از بسیاری از جهات غیرمتمرکزتر است. اولا، مونرو متکی به اشخاص معتمد مانند خدمات ترکیب سکه یا نودهای مورد اعتماد (مانند دش) نیست و در عوض تکنیک‌های حریم خصوصی را مستقیما در پروتکل خود ادغام کرده است. دوم، هیچ شخصیت مرکزی وجود ندارد که از طرف شبکه تصمیم‌گیری کند. در حالی که تیم هسته‌ای مسئول نگهداری از کدبیس و هدایت پروتکل در مسیر صحیح هستند، تصمیم نهایی با آن‌ها نیست. این مستقیما در تضاد با ZCash است که در آن شرکت ZCash کنترل شدیدی برای روند توسعه پروتکل دارد. سوم، سازوکار اجماع CryptoNight مونرو به آن امکان داده است تا نسبت به عملیات استخراج متمرکز مقاوم باشد. رمز ارز‌هایی مانند ZCash که سازوکارهای اجماع خود را به روزرسانی نکرده‌اند ممکن است با مشکلات استخراج متمرکز روبرو شوند.

معایب

آیا مونرو معایبی هم دارد؟ بله. بزرگترین مشکل پیش روی مونرو مقیاس پذیری است. با وجود این که این مشکل برای اکثر رمز ارز‌ها وجود دارد، این مساله به طور خاص برای مونرو مشکل‌ساز است. چرا که تمام تله‌های استفاده شده در امضاهای حلقه‌ای مونرو باید در تراکنش لحاظ شوند، که به شکلی معنی‌دار ابعاد میانگین تراکنش را افزایش می‌دهد. خوشبختانه، مونور اخیرا ضدگلوله‌ها را پیاده‌سازی کرده است که به شکلی قابل توجهی ابعاد تراکنش را کاهش داده‌اند. اما ابعاد میانگین تراکنش‌های مونرو هنوز هم بسیار بیش‌تر از میانگین تراکنش‌های بیت کوین است. به علاوه،‌ این احتمال وجود دارد که مونرو در آینده ویژگی‌های مربوط به حریم شخصی بیشتری را به کار گیرد (مانند ابعاد بزرگ‌تر حلقه‌ها) که بیش از پیش ابعاد تراکنش‌ها را افزایش خواهد داد. این مشکلی است که جامعه مونرو از آن آگاه است، پس انتظار می‌رود که این مشکل به زودی چاره‌اندیشی شود، البته راهکار کوتاه مدتی وجود ندارد.

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

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