مفهوم دو بار خرج کردن ارز دیجیتال
همانطور که میدانید ریسک دو بار خرج کردن یا دابل اسپندینگ (Double Spending) در ارز دیجیتال همیشه وجود داشته، اما بیت کوین توانسته با استفاده از بلاک چین، آن را تا حدودی رفع کند.
یکی از مشکلات مرسوم در سیستمهای پولی اکترونیکی، دو بار خرج کردن است. اگرچه بیت کوین به واسطه ویژگیهای منحصر به فرد خود مانند استفاده از فناوریهای بلاک چین و اثبات کار، تا حد زیادی موفق به غلبه بر این مشکل شده، اما تاکنون بارها در مورد ارزهای دیجیتال با قدرت شبکه پایینتر، شاهد بروز Double Spending از طریق حمله 51 درصدی بودهایم. اما دو بار خرج کردن چگونه انجام میشود و راهکار مقابله با آن چیست؟
دو بار خرج کردن چیست؟
Double Spending مسئله بالقوهای در یک سیستم پول دیجیتال بوده که در آن یک دارایی مشخص به صورت همزمان برای دو گیرنده هزینه میشود. در یک سیستم معتبر، كاربران باید نسبت به اینكه وجهی كه دریافت كردهاند قبلاً در جاهای دیگر خرج نشده باشد، اطمینان حاصل کنند.
میدانیم که اطمینان از عدم امکان تکثیر واحدهای ارز دیجیتال از اهمیت فوقالعادهای برخوردار است. اگر آلیس بتواند 10 واحد از یک ارز رمز ارز را دریافت کند، 10 مرتبه آنها را کپی میکند و بدین صورت مالک 100 واحد میشود، اتفاقی که بر اثر آن کل سیستم آسیب میبیند. همچنین اگر آلیس بتواند 10 واحد دریافتی خود را به صورت همزمان برای باب و کارول ارسال کند، چنین سیستمی هیچ کارایی نخواهد داشت. بنابراین، برای عملکرد مناسب پول دیجیتال، باید مکانیزمهایی برای جلوگیری از این اتفاقات وجود داشته باشد.
رویکرد متمرکز در مقابله با Double Spending
اجرای مدل متمرکز نسبت به گزینههای غیر متمرکز بسیار آسانتر است. به صورت معمول، این روش شامل یک ناظر بر مدیریت سیستم و کنترل صدور و توزیع واحدها است. یک مثال خوب در مورد راه حل متمرکز برای مشکل دو بار خرج کردن، سیستم پول دیجیتال دیوید چوم (David Chaum’s eCash) است. برای استفاده از داراییهای دیجیتالی که از وجوه نقد الگوبرداری کردهاند (امکان تبادل ناشناس داشته و همتا به همتا هستند)، یک بانک میتواند از امضاهای کور (Blind signatures) استفاده کند.
در خصوص این مطلب دیوید چوم، در مقاله خود در سال 1982 تحت عنوان “امضای کور برای پرداختهای غیرقابل ردیابی”، به توضیح این سیستم پرداخته است.
در چنین شرایطی، اگر کاربری بخواهد 100 دلار پول نقد دیجیتال دریافت کند، لازم است ابتدا درخواست خود را به بانک اعلام کند. با داشتن موجودی در حساب خود، کاربر برای خرج آن، یک عدد تصادفی (یا تعداد زیادی برای قسمتهای کوچکتر که از این به بعد به آنها قبض میگوییم) تولید میکند. فرض کنید او پنج عدد قبض تولید میکند و به هر کدام 20 دلار اختصاص میدهد. برای جلوگیری از ردیابی هر یک از این قبضها توسط بانک، کاربر اعداد تصادفی را با اضافه کردن یک عامل کور به هر یک، پنهان میکند.سپس او این دادهها را به بانک تحویل میدهد و 100 دلار از حساب او کسر و پیامهایی را امضا میکند که گواهی بازخرید هر یک از 5 قبض را به ارزش 20 دلار میدهد. کاربر اکنون میتواند وجوه صادر شده توسط بانک را خرج کند. او به رستوران میرود و سفارش غذایی به ارزش 40 دلار میدهد. کاربر میتواند عامل کور کردن را حذف کند تا عدد تصادفی مرتبط با هر “قبض” پول نقد دیجیتال مشخص شود، که این عدد به عنوان یک شناسه منحصر به فرد برای هر قبض عمل میکند (دقیقاً مانند یک شماره سریال). کاربر دو عدد از این قبضها را به رستوران میدهد، و صاحب رستوران باید بلافاصله آنها را در بانک بازخرید کند تا مانع از دو بار خرج کردن آنها شود. بانک معتبر بودن امضاها را بررسی کرده و اگر همه چیز درست به نظر برسد، به حساب رستوران 40 دلار اعتبار اضافه میکند. قبضهای استفاده شده اکنون سوزانده شده و اگر رستوران بخواهد پول جدید خود را به همین روش خرج کند، باید قبضهای جدیدی صادر شود.
با وجود اینکه سیستم دیوید چوم ممکن است برای نقل و انتقالات خصوصی ارزشمند باشد، اما این سیستم در رابطه با استقلال حرفی برای گفتن ندارد، زیرا بانک نقطه مرکزی شکست است. اسکناس صادر شده به خودی خود هیچ ارزشی ندارد، زیرا ارزش آن صرفاً از تمایل بانک به مبادله آن با دلار حاصل میشود. مشتریان در سایه بانک هستند و برای عملکرد پول باید به حسن نیت آن اعتماد کنند. این دقیقاً مشکلی است که ارز رمزنگاری شده برای رفع آن تلاش می کند.
رویکرد غیر متمرکز در مقابله با دو بار خرج کردن
اطمینان از اینکه در اکوسیستمی که هیچ هماهنگکننده مرکزی در آن وجود ندارد، نتوان وجوه را دو بار خرج کرد، یقینا چالش بسیار بزرگتری است. قوانین در چنین سیستمی باید به گونهای تنظیم شوند که شرکتکنندگان قدرتی برابر داشته و مشوقهای لازم برای عملکرد درست و به دور از تقلب وجود داشته باشد.بزرگترین نوآوری ارائه شده در وایت پیپر بیت کوین، راه حلی برای مشکل دو بار خرج کردن بود. اگرچه از این زاویه به کار ساتوشی ناکاموتو (Satoshi Nakamoto)، خالق Bitcoin، توجه نشده است، اما او ساختار دادهای را که اکنون به طور گسترده به عنوان بلاک چین شناخته میشود، ارائه داد.
در واقع بلاک چین فقط یک پایگاه داده با برخی خصوصیات منحصر به فرد است. شرکتکنندگان در شبکه که به آنها گره (Node) گفته میشودT نرمافزار اختصاصی شبکه بیت کوین را اجرا میکنند. این نرمافزار به آنها امکان میدهد نسخه خود از پایگاه داده را با سایر شرکتکنندگان هماهنگ کنند. نتیجه این است که کل شبکه میتواند تاریخچه تراکنشها را تا نخستین بلاک زنجیره به عقب برگشته و بررسی کند. با مشاهده بلاک چین به صورت عمومی، تشخیص و جلوگیری از فعالیتهای متقلبانه، مانند تراکنشهایی که سعی در دو بار خرج کردن دارند، آسان است.
نهایتا وقتی کاربر تراکنشی را ارسال میکند، بلافاصله به بلاک چین اضافه نمیشود. ابتدا باید از طریق استخراج در یک بلاک گنجانده شود. به این ترتیب، گیرنده فقط باید تراکنش را پس از اضافه شدن بلاک حاوی آن تراکنش به بلاک چین معتبر بداند. زیرا فرستنده میتواند همان کوینها را در جای دیگر خرج کند. پس از تأیید تراکنش، نمیتوان کوینها را دوباره خرج کرد، زیرا مالکیت آنها به یک کاربر جدید اختصاص داده شده و کل شبکه، کاربر جدید را به عنوان مالک جدید کوینها میشناسد. به همین دلیل است که توصیه میشود قبل از پذیرش پرداخت، منتظر کامل شدن تاییدها باشید. ایجاد هر بلاک جدید در بلاک چین میزان هش ریت مورد نیاز برای تغییر در بلاکهای زنجیره را به شدت افزایش داده و در نتیجه احتمال حمله 51% کاهش مییابد.
همانطور که میدانید بیت کوین با دقت بالایی طراحی شده تا در مواقعی که مطابق قوانین پروتکل از آن استفاده شود، از حملات دو بار خرج کردن جلوگیری کند. به این معنا که اگر افراد منتظر تأیید تراکنشها در یک بلاک باشند، ارسال کننده هیچ راهی برای پس گرفتن آن ندارد. برای این کار، او باید بلاک چین را “معکوس” کند، کاری که به مقدار بسیار زیادی قدرت هش نیاز داشته و تقریبا غیر ممکن است.
تعداد زیادی از حملههای دو بار خرج کردن وجود دارد که هدف آنها طرفهایی است که معاملات تأیید نشده را میپذیرند. به عنوان مثال، برای خریدهای کم ارزش، ممکن است یک فروشنده مایل نباشد منتظر بماند تا تراکنشها در یک بلاک گنجانده شود. همچنین مثلا یک رستوران فست فود شلوغ احتمالا امکان انتظار برای تایید نهایی تراکنشها را برای ارائه خدمت به مشریان خود ندارد. بنابراین، اگر کسب و کاری پرداختهای “فوری” را امکان پذیر میکند، خود را در معرض حمله دو بار خرج کردن قرار میدهد. ممکن است شخصی برگر سفارش داده و هزینه آن را پرداخت کند، سپس بلافاصله همان وجه را به آدرس خود بفرستد. با کارمزد بیشتر، تراکنش جدید ابتدا تأیید شده و در نتیجه تراکنش قبلی را باطل میکند.
روشهای مرسوم دو بار خرج کردن بیت کوین
سه روش محبوب دوبار خرج کردن وجود دارد: حمله 51 درصدی، حمله ریس و حمله فینی. در ادامه به اختصار به توضیح هر یک از این حملات میپردازیم.
حمله 51%
هنگامی که یک نهاد یا سازمان واحد، موفق به کنترل بیش از 50٪ نرخ هش شود، این امکان را به دست میآورد تا ترتیب تراکنشها را حذف یا اصلاح کند. چنین حملهای به بیت کوین با توجه به قدرت هش بالای شبکه آن بسیار بعید بوده، اما در شبکههای دیگر رخ داده است.
حمله ریس (Race attack) و دو بار خرج کردن
دو تراکنش متناقض با استفاده از یک دارایی به طور متوالی ثبت میشوند اما فقط یک تراکنش تأیید میشود. مهاجم به این شکل عمل میکند که دو تراکنش ثبت میکند یکی به آدرس طرف معامله و دیگری به آدرس والت خودش با این تفاوت که به تراکنش دوم کارمزد بیشتری اختصاص میدهد تا زودتر انجام شده و معامله دیگر را باطل کند. حمله ریس به گیرندهای نیاز دارد که تراکنش تأیید نشده را به عنوان پرداخت بپذیرد.
حمله فینی (Finney attack) و دو بار خرج کردن
فرد مهاجم، یک تراکنش را در بلاک استخراج شده توسط خود یا ماینر دیگری قرار میدهد، اما آن را به شبکه ارسال نمیکند. در عوض، او همان کوینها را در معامله دیگری خرج کرده و سپس اقدام به انتشار تراکنش استخراج شده میکند. حملات فینی نیاز به توالی خاصی از وقایع داشته و همکاری یک ماینر را میطلبد. مانند حمله ریس، این نوع حمله نیز منوط به پذیرش معاملات تأیید نشده توسط گیرنده است.
دیدگاهتان را بنویسید