علیرغم اینکه بیت کوین توانسته است با مشکل دوبارخرج کردن مقابله نماید، اما باید بدانید که تمامی ارزهای دیجیتال دیگر از الگوریتم اجماع مشابهی استفاده نمیکنند و این موضوع که بیت کوین توانسته است از کابران در مقابل چنین مواردی محافظت کند، به این معنی نیست که چنین اتفاقی به هیچ وجه و در هیچ یک از ارزهای دیجیتال دیگر امکانپذیر نیست.
دوبار خرج کردن (Double Spending) به چه معنا است؟
دوبار خرج کردن زمانی رخ میدهد که تراکنشی دقیقاً با اطلاعات یک تراکنش دیگری که در شبکه تأیید شده است ایجاد شود. کاملاً مشخص است که امکان رخداد چنین چیزی برای داراییهای فیزیکی و ارزهای فیات وجود ندارد؛ چراکه اگر ۵ دلار را برای خرید یک قهوه پرداخته باشید، نمیتوانید مجدداً آن را خرج کنید و مالکیت آن را به فرد دیگری دادهاید.
در مواردی که از کارتهای اعتباری (Credit card) استفاده میکنید نیز، بانک به عنوان شخص واسط تضمین و تأیید میکند که یک دارایی از حساب شما به حساب کاربری فرد دیگری منتقل شده است. در این صورت، مالکیت آن به شخص دیگری منتقل شده و دیگر به آن دارایی دسترسی نخواهید داشت و نمیتوانید مجددا از آن دارایی استفاده نمایید.
اگرچه با توجه به وجود بلاکچین انجام این امور به سادگی که به نظر میرسد نیست، اما ارزهای دیجیتال داراییهای دیجیتالی هستند که امکان کپی کردن اطلاعات آنها به سادگی امکانپذیر است. از آنجا که هیچ نهاد یا مؤسسۀ متمرکزی بر این حوزه نظارت ندارد، کاربران میتوانند با تکثیر داراییهای دیجیتال به استفاده آنها بپردازند. دارندگان کوینها نیز میتوانند از نسخۀ اصلی یک کوین، یک نسخۀ کپی تهیه کنند و با استفاده از آن، تراکنشهای مورد نظر خود را انجام دهند و نسخۀ اصلی را در کیف پول ارز دیجیتال خود نگه دارند.
بیت کوین چگونه با دوبار خرج کردن مقابله کرده است؟
در بلاکچین بیت کوین برای مقابله و جلوگیری از چنین مواردی از سیستمهای مالی سنتی الهام گرفته شده است. در این شبکه از یک مکانیسم تأیید با ترتیب زمانی استفاده میشود و اولین تراکنش ثبتشده در نظر گرفته میشود.
فرض کنید یکی از دارندگان قصد داشته باشد از یک بیت کوین برای انتقال به چندین فروشنده استفاده کند. برای این کار تمامی تراکنشها به شبکه ارسال و منتظر دریافت تأیید باقی میمانند. اولین تراکنشی که تأیید شود در بلاکچین قرار میگیرد. با اضافه شدن بلاکهای جدید به دفتر کل، تأییدهای بیشتری به آن تراکنش تعلق میگیرد.
دومین تراکنشی که با اطلاعات مشابه به شبکه ارسال میشود، دیگر تأیید نخواهد شد و ماینرها میتوانند تشخیص دهند که این تراکنش با قصد دوبار خرج کردن صورت گرفته است و مشابه تراکنش ثبتشدۀ قبلی است.
حال فرض کنید که هر دوی این تراکنشها به صورت همزمان به شبکه ارسال شوند، در این صورت چه رخ میدهد؟ ماینرها تراکنشی را تأیید میکنند که بیشترین تعداد تأیید را دریافت کرده است و این تراکنش، تنها تراکنشی است که با این اطلاعات در بلاکچین ثبت میشود.
دلیل این امر آن است که ماینرها با استفاده از محاسبات پیچیده و استفاده از توان محاسباتی بالا، تراکنشهای قبلی ثبتشده را بررسی میکنند و از دوبار خرج کردن جلوگیری میکنند. با توجه به اینکه اطلاعات مربوط به خرج کردن نسخۀ کپی در بلاکچین ثبت شده است، امکان استفادۀ آن برای بار دوم وجود ندارد.
نکته منفی و عیب این موضوع این است که زمانبر است. به عنوان مثال اگر فردی کالایی را به فروش رسانده باشد و قصد دریافت هزینۀ آن با بیت کوین را داشته باشد، ممکن است در برخی موارد، چیزی حدود یک ساعت منتظر بماند تا تراکنش مربوطه تأیید شود تا بتواند کالا را به خریدار تحویل دهد.
انواع روشهای حمله دوبار خرج کردن
علیرغم اینکه بسیاری از ارزهای دیجیتال وجود دارند که از الگوریتم اثبات گواه کار استفاده نمیکنند، اما راه حلهایی را برای مقابله با دوبارخرج کردن در نظر گرفتهاند. با این وجود نمیتوان امکان احتمال حمله دوبار خرج کردن را نادیده گرفت. در ادامه به انواع روشهای احتمالی برای Double Spending خواهیم پرداخت.
حمله رقابتی (Race attack)
این اتفاق زمانی رخ میدهد که فروشندگان یک کالا قبل از اینکه تأیید بلاک برای تراکنشها صورت بگیرد، پرداختی را میپذیرند. در چنین شرایطی کاربرانی که قصد دوبار خرج کردن دارایی خود را دارند، دو تراکنش را تقریباً به صورت همزمان انجام میدهند. مقصد یکی از آنها به آدرس فروشنده و مقصد دیگری کیف پول دیگری خواهد بود. در این حالت ممکن است که ماینرها تراکنش مربوط به کیف پول را تأیید کنند و در این صورت، دیگر فرد فروشنده چیزی دریافت نخواهد کرد.
حمله ۵۱ درصدی
حمله ۵۱ درصدی را با نام حمله جمعی یا حداکثری نیز میشناسند؛ چراکه چنین چیزی تنها در صورتی امکانپذیر است که حملهکنندگان بیش از نیمی از نرخ هش شبکه را در اختیار داشته باشند. این اتفاق زمانی رخ میدهد که یکی از ماینرها یا گروهی از آنها بتوانند بلاکی را زودتر از ماینرهای باقیمانده در شبکه استخراج کنند. در حال حاضر با توجه به مواردی همچون سختی استخراج، امکان چنین اتفاقی به خصوص برای رمزارزی شبیه به بیت کوین تقریباً غیرممکن است.
Finney attack
این مورد نیز زمانی رخ میدهد که فروشندگان، قبل از تأیید بلاک، تراکنش را انجامشده تصور میکنند. در این روش ماینرها به انتقال دارایی از یک کیف پول به کیف پول دیگری میپردازند، اما بلافاصله آن بلاک را تأیید نمیکنند. سپس سریعاً از کیف پول مبدأ تراکنش دیگری را انجام میدهند و بعد از آن به انتشار بلاکی میپردازند که اطلاعات مربوط به هر دو تراکنش در آن ثبت شده است.