حمله دوبار خرج کردن (Double spending) چیست؟

یکی از شناخته شده‌ترین پدیده‌های منفی در دنیای رمز ارزها دوبار خرج کردن یا Double-spending نام دارد. دوبار خرج کردن مفهومی است که علاقمندان به شناخت دنیای رمز ارز و ورود به این دنیا باید آن را بشناسند. در اینجا قصد داریم ضمن پرداختن به پدیده دوبار خرج کردن با انواع حملات رمز ارز که می‌تواند زمینه‌ساز بروز این مشکل شوند آشنا شویم.

0 105

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

مشکل دوبار خرج کردن در ارزهای فیزیکی (تومان، دلار، یورو و …) وجود ندارد، زیرا هرکسی که با پول فیزیکی سر و کار دارد می‌تواند بی‌درنگ آن را ببیند و لمس کند. برای نمونه فرض کنید آلیس برای خریدن یک فنجان قهوه‌ به قیمت 5 دلار به کافه نزدیک خانه‌اش می‌رود و پس از گرفتن قهوه به کافه‌دار یک اسکناس 5 دلاری می‌دهد. کافه‌دار می‌تواند بی‌درنگ پولی را که آلیس داده لمس کند و ببیند که آیا مبلغ آن درست است یا نه. آلیس نمی‌تواند این 5 دلار را یک بار دیگر بپردازد و در جای دیگری آن را خرج کند.

جلوگیری از دوبار خرج کردن

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

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

بیت کوین از یک مکانزیم اجماع (Consensus) استفاده می‌کند به نام اثبات کار (Proof Of Work) که نیاز به داشتن یک واسطه یا نهاد مرکزی را از بین برده است. در بیت کوین به جای اینکه برای تایید اینکه دوبار خرج کردن در تراکنش‌ها رخ نداده به یک واسطه اعتماد شود، این کار به یک گروه غیر متمرکز از افراد سپرده می‌شود. به این گروه از افراد ماینر یا استخراج‌گر می‌گوییم. افزون بر این، تک تک تراکنش‌های بیت کوین در یک دفتر ثبت به نام بلاک چین ثبت می‌گردد که همگان می‌توانند آن را ببینند و در اختیار داشته باشند. به این ترتیب همه می‌توانند ببینند فردی که می‌خواهد مقداری بیت کوین خرج کند واقعا آن را دارد یا خیر.

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

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

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

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

انواع حملات دوبار خرج کردن

با وجود این رویکرد، به لحاظ تئوری امکان انجام دوبار خرج کردن در برخی موارد وجود دارد. برای نمونه در حملات مسابقه‌ای (race attack)، حملات فینی (Finney attack) و حملات 51% امکان پرداخت بیش از یک بار رمز ارز به وجود می‌آید.

حمله مسابقه‌ای (race attack)

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

حمله فینی (Finney attack)

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

حمله 51%

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

منبع

 

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

ارسال پاسخ

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