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

چگونه می‌توان جلوی خطای دو بار خرج کردن را گرفت؟

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

روش متمرکز

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

این مطلب را هم مطالعه کنید: شیوه‌های به کارگیری تمرکزگرایی در دنیای رمزارزها

مرور روش چوم با یک مثال

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

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

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

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

دو بار خرج کردن با روش متمرکز

کسی نباید قادر باشد که به صورت همزمان یک واحد بیت کوین را برای دو شخص متفاوت ارسال کند

مشکل این روش چیست؟

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

این مطلب را هم مطالعه کنید: تفاوت بلاک چین غیرمتمرکز و توزیع شده با سایر شبکه‌های متمرکز چیست؟

روش غیرمتمرکز

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

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

شیوه عملکرد روش غیرمتمرکز

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

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

این مطلب را هم مطالعه کنید: آیا صرافی ‌های غیرمتمرکز، آینده معاملات رمزارز است ؟

مرور مثال قبلی با روش غیرمتمرکز

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

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

هکرها و خرج کردن دوباره

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

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

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

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

این مطلب را هم مطالعه کنید: به‌عقیده برایان بروکس تکنولوژی بلاکچین توانایی کنترل همه چیز را دارد

انواع روش‌های اجرای جمله خرج کردن دوباره

به طور کلی برای سوء‌استفاده از خطای خرج کردن دوباره سه روش وجود دارد:

حمله ۵۱ درصد: وقتی یک فرد یا سازمان، مدیریت بیش از ۵۰ درصد نرخ هش را در اختیار خود داشته باشد، می‌تواند تراکنش‌های انجام گرفته را لغو یا اصلاح کند. احتمال وقوع چنین حمله‌ای در بیت کوین بسیار بعید است. ولی در دیگر شبکه‌ها سابقه داشته است.

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

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

همانطور که می‌بینید، انتظار برای تایید تراکنش‌های صورت گرفته می‌تواند به شکل قابل توجهی موجب کاهش ریسک روبرو شدن با مساله خرج کردن دوباره شود.

این مطلب را هم مطالعه کنید: راهنمایی‌های کاربردی برای کاهش ریسک در تجارت رمزارز

نکته پایانی

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

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

منبع: binance