دنیای ارزهای دیجیتال دنیایی است که در آن هر روز شاهد تحولات جدیدی هستیم و مفاهیم تازهای ظهور میکنند. یکی از این مفاهیم، مفهوم دابل اسپند یا هزینهی مضاعف است که بهعنوان یک چالش بزرگ در برابر اعتماد و امنیت قرار دارد.بر خلاف پول نقد فیزیکی که قابلیت این را ندارد که چند بار خرج شود متأسفانه داراییهای دیجیتال با تهدیدهایی مانند جعل و استفادههای متقلبانه مواجه هستند که به این پدیده دوبار خرج کردن یا دابل اسپندینگ گفته میشود و یک نگرانی اصلی در توسعه ارزهای دیجیتال و شبکههای پرداخت دیجیتال است.
درک اینکه دابل اسپندینگ چیست و چگونه میتوان آن را کاهش داد برای هرکسی که در دنیای فرایندهای مالی دیجیتال فعالیت دارد ضروری است. در این مقاله این موضوع را بررسی میکنیم و همچنین از ریشههای آن، پیامدهای بالقوه و راهحلهایی که برای مبارزه با آن وجود دارد صحبت میکنیم.
آنچه قرار است بخوانید
دو بار خرجکردن (Double Spending) چیست؟
دو بار خرجکردن نوعی سوءاستفاده است که در آن دستکاری کننده، همان رمزارز را بیش از یک بار خرج میکند. در حقیقت شرایط خاص میتواند باعث شود اطلاعات یک تراکنش در بلاکچین تغییر کند. این شرایط به بلوکهای اصلاح شده این اجازه را میدهد تا وارد بلاکچین شوند. اگر این اتفاق بیفتد، شخصی که تغییر را آغاز کرده است میتواند سکههای مصرف شده را دوباره پس بگیرد.
برای درک اینکه این اتفاق چگونه میافتد بگذارید ابتدا دربارهی اینکه بلاکچین چگونه کار میکند صحبت کنیم. هنگامی که یک بلوک ایجاد میشود این بلوک صاحب یک هش یا عدد رمزگذاری شده میشود که شامل مهر زمان، اطلاعات بلوک قبلی و دادههای تراکنش است.
اطلاعات به کمک یک پروتکل امنیتی مانند الگوریتم SHA-256 که بیتکوین از آن استفاده میکند رمزنگاری میشود. هنگامی که اطلاعات بلوک توسط ماینرها و در اجماع اثبات کار تأیید شد، بسته میشود و یک بلوک جدید با مهر زمانی، اطلاعات تراکنش و هش بلوک قبلی ایجاد میشود.
یک بیت کوین به ماینری تعلق میگیرد که دستگاه او هش را تأیید کرده است. برای اینکه کسی دابل اسپند انجام دهد باید یک بلوک مخفی استخراج شود که از بلاکچین واقعی پیشی بگیرد. آنها همچنین احتیاج دارند که زنجیره را پیش از اینکه گیر بیفتند به شبکه معرفی کنند و اگر این اتفاق بیفتد، شبکه بلوک مخفی را بهعنوان آخرین بلوک شناسایی کرده و به زنجیره اضافه میکند. بهاینترتیب شخصی که این کار را انجام داده است و میتواند ارز پایهای که خرج کرده بود را پس بگیرد و دوباره از آن استفاده کند.
بیشتر بخوانید:الگوریتم اثبات کار (Proof of Work) چیست؟ و چه کاربردی دارد؟
انواع حمله دو بار خرج کردن
چندین مدل حملهی دابل اسپند وجود دارد که در ادامه به بعضی از آنها اشاره میکنیم:
حمله فینی (Finney attack)
حملهی فینی نوعی حملهی فریبندهی دابل اسپند است که در آن تاجر منتظر تأیید تراکنش نمیماند. برای مثال یک ماینر از یک کیف پول، وجهی را به کیف پول دیگر میفرستد؛ اما فوراً بلوک را تأیید نمیکند. سپس کاربر خریدی را با کیف پولی که منبع وجه است انجام میدهد و ماینر بلوک استخراج شده قبلی را به شبکه اعلام میکند. بهاینترتیب در حقیقت همان پول دو بار خرج شده است.
حمله ۵۱ درصدی از انواع حمله دابل اسپند
حمله پنجاه و یکدرصدی که به آن حمله اکثریت نیز گفته میشود یک سناریوی فرضی است که در آن بازیگران بد، کنترل بیش از ۵۱ درصد گرههای یک شبکه را به دست میگیرند. این به آنها قدرت کنترل شبکه با استفاده از مکانیسم اجماع اکثریت را میدهد. هرچه شبکه، بزرگتر، پراکندهتر و البته ارزشمندتر باشد انجام این حمله پیچیدهتر میشود.
حمله رقابتی
در این نوع حمله، حملهکننده دو تراکنش متناقض را آغاز میکند و تاجران قبل از دریافت تأییدیه بلوک تراکنش، پرداختها را میپذیرند و بهاینترتیب این روش ممکن میشود. در همان زمان یک تراکنش رقیب به شبکه اعلام میشود و همان مقدار ارز دیجیتال را به حملهکننده برمیگرداند و در نتیجه تراکنش اصلی باطل میشود. در این مثال ماینرها ممکن است تراکنش را در کیف پول تأیید کنند و مانع از دریافت پول توسط تاجر شوند.
چگونه میتوان از حمله Double Spending جلوگیری کرد؟
مکانیسمهای اجماع صدا
دابل اسپند هرگز نمیتواند در یک بلاکچین با مکانیسم اجماع صحیح اتفاق بیفتد. مکانیسمهای اجماع، به ماینرها و اعتبارسنجها این قدرت را میدهد که وظایف خود را برای حفظ یکپارچگی شبکه بهدرستی انجام دهند. منطق و طراحی محکم این مکانیسمها به طور پیشفرض از پیشامدهای عمدی و تصادفیای که به دو بار خرجکردن منجر شوند جلوگیری میکند.
گنجاندن nonce برای جلوگیری از حملات تکراری
نانس یک مقدار رمزنگاری شدهی سخت است که باید قبل از اینکه بلوک استخراج شود، هش شود. مقدار نانس فقط یکبار قابلاستفاده است. این مقدار به ایمنسازی بلاکچین در برابر حملات تکراری کمک میکند؛ زیرا قابلتکرار نیست. در حقیقت نانس یکپارچگی هر بلوک را حفظ میکند.
مهر زمانی (timestamps)
هر تراکنش موفق یک مهر زمانی دارد. مهر زمانی ثابت میکند یک بلوک مشخص در یک زمان مشخص به زنجیره اضافه شده است. یک بلوک از زمانی که مهر زمانی میشود در حقیقت دیگر برگشتناپذیر است. هر تراکنش متناقضی که تلاش کند رمزارز را در یک بلوک دارای مهر زمانی دو بار خرج کند با شکست مواجه میشود.
هزینههای بالای اجرای نودها یا گرهها
دستکاری دو هزینه باعث میشود حملهکننده مجبور باشد یک یا چند گره را مدیریت کند. برای مثال برای حمله ۵۱ درصدی، هکر باید بر بیش از نیمی از گرههای شبکه تسلط داشته باشد. یکی از اصلیترین راههایی که بلاکچین میتواند از دابل اسپند جلوگیری کند این است که اجرای گرهها را پرهزینهتر و دشوارتر کند. برای مثال در اکوسیستم اتریوم برای تبدیلشدن به مدیر گره نیاز به ۳۲ اتریوم یعنی چیزی حدود ۵۴۰۰۰ دلار دارد که این باعث میشود برای هر دابل اسپند هزینهی زیادی تراشیده شود.
نظارت متمرکز
دابل اسپند در سیستم بانکداری سنتی بهندرت اتفاق میافتد؛ زیرا مراجعی وجود دارند که بر هر تراکنش نظارت میکنند و آن را تأیید میکنند. غیرممکن است بتوانید یک دلار را دو بار خرج کنید. بلاکچینها هم میتوانند به کمک بررسیهای امنیتی این خطر را کاهش دهند البته چون در این سیستم هیچ نهاد متمرکزی برای نظارت و تأیید تراکنشها وجود ندارد، بههرحال دابل اسپند اتفاق خواهد افتاد؛ زیرا استفاده از نهاد نظارتی متمرکز ایدهی عدم تمرکز را نقض میکند.
روشهای مقابله بیت کوین با دابل اسپندینگ
بیت کوین بهعنوان ارز پیشگام دنیای ارزهای دیجیتال از روشهای مختلفی برای پرداختن به مسئله هزینه مضاعف و تضمین امنیت و یکپارچگی بلاک چین خود استفاده میکند. در ادامه به تعدادی از این روشهای کلیدی اشاره میکنیم:
- اجماع شبکه غیرمتمرکز: بیتکوین روی یک شبکه غیرمتمرکز از گرهها (رایانهها) عمل میکند که تراکنشها را تأیید و ثبت میکنند. هنگامی که یک تراکنش در شبکه اعلام میشود گرهها با هم کار میکنند تا دربارهی پذیرش یا رد آن به اجماع برسند. این مکانیسم اجماع تضمین میکند که جلوی دابل اسپند گرفته شود.
- تأیید تراکنش: هر تراکنش بیتکوین شامل امضاهای دیجیتالی است که مالکیت سکههای خرج شده را اثبات میکند. این امضاهای دیجیتال توسط گرهها تأیید میشوند تا اطمینان حاصل شود که فرستنده صلاحیت خرجکردن پولها را دارد. اگر یک تراکنش فاقد امضای معتبر باشد یا تلاش کند همان پولها را چند بار خرج کند شبکه آن را رد خواهد کرد.
- دفترکل عمومی (بلاکچین): تمام تراکنشهای بیتکوین در یک دفترکل عمومی به نام بلاکچین ثبت میشود. هنگامی که یک تراکنش تأیید و به بلاکچین اضافه شد، تغییرناپذیر و ضد دستکاری میشود. این شفافیت به هرکسی اجازه میدهد تا تاریخچه هر کوین خاص را ردیابی کند و ببیند آیا آن سکه دوبار خرج شده است یا نه.
- اجماع اثبات کار (Proof-of-Work): این نوع اجماع ماینرها را ملزم میکند تا پازلهای پیچیدهی ریاضی را حل کنند و بلاکهای جدیدی به بلاکچین اضافه کنند. این فرایند که بهعنوان استخراج شناخته میشود تضمین میکند تنها یک سابقه تراکنش معتبر، یعنی زنجیرهای با بیشترین کار محاسباتی، توسط شبکه پذیرفته میشود. تلاشهایی که برای دابل اسپند انجام میشود مستلزم آن است که یک حملهکننده بتواند بیشتر توان محاسباتی شبکه را کنترل کند که این کار بسیار دشوار و گران است.
- مکانیسم تأیید: برای کاهش ریسک دوباره خرجکردن در بیتکوین، توصیه میشود منتظر تأییدهای متعدد تراکنش باشید. هر تأیید نشاندهندهی یک بلوک جدید است که پس از تراکنش به بلاکچین اضافه میشود. هرچه تراکنش تأییدات بیشتری داشته باشد احتمال کمتری وجود دارد که بخشی از یک حمله دوباره خرجکردن باشد. زیرا مهاجم باید چندین بلوک را معکوس کند که به طور فزایندهای غیرعملی است.
- خروجیهای تغییر (Change Outputs): تراکنشهای بیتکوین اغلب شامل خروجیهای تغییر هستند که در حقیقت پولهایی هستند که به فرستنده برگردانده میشوند. این وجوه در تراکنش گنجانده میشوند و با اطمینان از اینکه موجودی باقی مانده به کیف پول فرستنده بازگردانده میشود از دو بار خرجکردن رمزارز جلوگیری میکنند.
- انتشار سریع شبکه: تراکنشهای بیتکوین بهسرعت در سراسر شبکه منتشر میشوند و گرهها اطلاعات مربوط به تراکنشهای جدید را به اشتراک میگذارند. این انتشار سریع، اجرای موفقیتآمیز یک حمله دابل اسپند را برای حملهکننده، چالشبرانگیز میکند.
باید گفت شاید این روشها توانسته است بیتکوین را تا حد زیادی در برابر هزینهی مضاعف بیمه کند، اما مهم این است که بدانید هیچ سیستمی به طور کامل در برابر حملات مصون نیست. در عمل امنیت شبکه بیت کوین و مقاومت آن در برابر دابل اسپند تا حد زیادی به ماهیت غیرمتمرکز شرکتکنندگان و همچنین توان محاسباتی تجمعی که شبکه را ایمن میکند بستگی دارد.
جمعبندی
در حوزهی فعالیتهای مالی دیجیتال، جایی که نوآوری هیچ حد و مرزی را نمیشناسد خطر دو بار خرجکردن یکی از چالشهایی است که در تأمین امنیت تراکنشهای مالی خود با آن روبهرو هستیم. همانطور که گفته شد مکانیسمهای دفاعی قویای در برابر این تهدید وجود دارد و سیستم تا حد زیادی امکان پرداختهای الکترونیکی امن را فراهم کرده است؛ اما بههرحال باید هوشیار بود و درعینحال به هوشیاری سیستم و جامعهی پشت آن هم اعتماد کرد. هرچه بیشتر در این عصر دیجیتال جلو برویم، آگاهی از خطرات و همچنین تدابیر امنیتی در برابر چالشهایی مانند دابل اسپند اهمیت بیشتری پیدا خواهد کرد تا بتوانیم تراکنشهایی ایمن، شفاف و خالی از تقلب داشته باشیم.