دو بار خرج کردن (Double Spending) در بلاک چین و ارز دیجیتال چیست؟


خطر دو بار خرج کردن یا دابل اسپندینگ (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 دلار اعتبار اضافه می‌کند. قبض‌های استفاده شده اکنون سوزانده شده و اگر رستوران بخواهد پول جدید خود را به همین روش خرج کند، باید قبض‌های جدیدی صادر شود.

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

double spending در ارزهای دیجیتال

رویکرد غیر متمرکز در مقابله با دو بار خرج کردن

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

بزرگترین نوآوری ارائه شده در وایت پیپر بیت کوین، راه حلی برای مشکل دو بار خرج کردن بود. اگرچه از این زاویه به کار ساتوشی ناکاموتو (Satoshi Nakamoto)، خالق Bitcoin، توجه نشده است، اما او ساختار داده‌ای را که اکنون به طور گسترده به عنوان بلاک چین شناخته می‌شود، ارائه داد.

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

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

بیایید سناریوی رستوران را در یک سیستم غیر متمرکز مانند بیت کوین دوباره مرور کنیم. کاربر به رستوران برمی‌گردد و این بار بر روی شیشه برچسب “در این رستوران بیت کوین پذیرفته می‌شود” را مشاهده می‌کند. او از غذایی که آخرین بار سفارش داده بود لذت برده، بنابراین دوباره آن را سفارش می‌دهد و هزینه سفارشش 0.005 واحد رمز ارز BTC می‌شود. رستوران آدرس عمومی والت خود را به او داده و وی باید وجه را به آن ارسال کند. کاربر تراکنش را تراکنش را ثبت می‌کند، که اساساً یک پیام امضا شده مبنی بر اینکه 0.005 واحد بیت کوین که در اختیار کاربر بود، اکنون به کیف پول رستوران ریخته شود. اجازه دهید خیلی به جزئیات نپردازیم ولی به‌طور کلی این‌گونه است که، گره‌ها به بررسی دارایی کاربر پرداخته و پس از اطمینان از کافی بودن اعتبار او، تراکنش را در یک بلاک به بلاک چین اضافه می‌کنند.

دو بار خرج کردن در بیت کوین

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

دو بار خرج کردن د ر بیت کوین

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

روش‌های مرسوم دو بار خرج کردن بیت کوین

سه روش محبوب دوبار خرج کردن وجود دارد: حمله 51 درصدی، حمله ریس و حمله فینی. در ادامه به اختصار به توضیح هر یک از این حملات می‌پردازیم.

حمله 51%

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

حمله ریس (Race attack) و دو بار خرج کردن

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

حمله فینی (Finney attack) و دو بار خرج کردن

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

همان‌طور که مشاهده کردید، پذیرنده‌ای که منتظر تأیید تراکنش بماند، خطر دوبار خرج کردن را تقریبا از بین خواهد برد.

سخن پایانی

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

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

منبع: academy.binance



ثبت نظر
نظرات کاربران (0 نظر)