دوبار خرج کردن یا دابل اسپندینگ چیست؟
دوبار خرجکردن یا دابل اسپندینگ چالش اصلی اعتبار یک شبکه بلاکچین و ارزهای دیجیتال مبتنی بر آن است. دوبار خرجکردن با روشهای مختلفی مثل حمله ۵۱ درصدی امکانپذیر است و توسعهدهندگان بلاکچین توانستهاند با گسترش روشهایی مثل الگوریتم اثبات کار، جلوی این حملات را بگیرند و از اعتبار و امنیت شبکه دفاع کنند.
اگر شما بتوانید پولی را دو بار خرج کنید، در واقع امنیت آن پول زیر سؤال میرود. در زمینه پولهای کاغذی، امکان دو بار خرجکردن خیلی کم و در حد غیرممکن است. اما در زمینه ارزهای دیجیتال، دو بار خرجکردن یا دابل اسپندینگ یک معضل و چالش محسوب میشود. دو بار خرجکردن در ارزهای دیجیتال، امنیت شبکه بلاکچین را زیر سؤال میبرد و تا این چالش حل نشده باشد، آن ارز دیجیتال از اعتبار و امنیت کافی برخوردار نیست.
دو بار خرجکردن (Double Spending) چیست؟
دابل اسپندینگ یا دو بار خرجکردن یک نقص منحصربهفرد برای ارزهای دیجیتال است و زمانی رخ میدهد که دو یا چند تراکنش از یک منبع ورودی مشترک رخ دهند. به عبارتی اگر یک ارز دیجیتال را بتوانید دو یا چند بار به کیف پولهای متفاوت منتقل کنید، چالش دابل اسپندینگ در شبکه آن ارز دیجیتال رخ داده است.
منشأ اصلی این چالش از آنجا میآید که ارزهای دیجیتال امکان بازتولید نسبتاً آسانتری نسبت به پول کاغذی دارند. در نتیجه افراد میتوانند طی شرایطی که در شبکه بلاکچین فکری برای آن نشده باشد، یک ارز دیجیتال واحد را دو یا چند بار خرج کنند. این چالش بهصورت مستقیم کاربرد و اعتبار ارزهای دیجیتال را هدف گرفته و تا زمانی که راهحلی برای آن نباشد، نمیتوان به هیچ ارز دیجیتالی اعتماد کرد!
انواع حملات دابل اسپندینگ
دو بار خرجکردن یا دابل اسپندینگ از روشهای مختلفی امکانپذیر است و حمله دابل اسپندینگ با مکانیزمهای متفاوتی انجام میشود. در نتیجه مهم است که شبکههای بلاکچین راهکاری برای هر نوع از این حملهها داشته باشند و بتوانند بهنوعی جلوی هر کدام را بگیرند.
حمله ۵۱ درصدی (51% Attack)
شناختهشدهترین حمله دابل اسپندینگ، حمله ۵۱ درصدی نام دارد. این حمله زمانی رخ میدهد که نهاد یا فردی بتواند بیش از ۵۰ درصد از قدرت هش یا اعتبارسنجی شبکه بلاکچین را در اختیار بگیرد. در این حالت، فرد یا افراد کنترلکننده، میتوانند تراکنشها را به شبکه دیکته کنند و ارزهای منتقلشده را کنترل نمایند. ارزهای جداشده با شبکه بلاکچین کوچکتر در معرض این تهدید قرار دارند. در مقابل، ارزهای دیجیتال بزرگ مثل بیتکوین به دلیل مشارکت تعداد بالای افراد در شبکه و سرعت انجام تراکنشها، چندان در معرض این خطر نیستند
حمله ریس (Race Attack)
حمله ریس که در واقع تراکنشهای تأییدنشده است، زمانی رخ میدهد که یک کاربر تلاش کند تا دو تراکنش سریع ایجاد کند که یکی به گیرنده ارسال شود و دیگری به شبکه بلاکچین. ارزی که به گیرنده ارسال شده به دستش میرسد؛ اما تراکنش ارسال به بلاکچین آن ارز را در اختیار فرستنده قرار میدهد. این حمله در واقع تلاشی برای سوءاستفاده از کندی شبکه یا تأخیر در تراکنشهاست. با جلوگیری از تراکنشهای تأییدنشده بهراحتی میتوان جلوی حمله ریس و دابل اسپندینگ از این طریق را گرفت.
حمله فینی (Finney Attack)
حمله فینی از دیگر حملاتی است که در دسته تراکنشهای تأییدنشده قرار میگیرد. این حمله زمانی رخ میدهد که یک ماینر که میتواند یک بلاک بسازد، به دو آدرس متعلق به خود ارز دیجیتال یکسانی ارسال کند و در همین حین، یک تراکنش دیگر به گیرندهای در بلاک مشابه بفرستد. اگر گیرنده قبل از تأیید تراکنش توسط شبکه، آن را بپذیرد، ارسالکننده در واقع توانسته مقدار ارز دیجیتال ارسالشده را داشته باشد و دوباره خرج کند.
این اتفاق در شبکههای بلاکچین بزرگ نادر است اما میتوان با نپذیرفتن تراکنشهای بدون تأیید شبکه یا استفاده از ولتهایی که به شما اجازه پذیرش چنین ارزهای دیجیتالی نمیدهند، جلوی آن را گرفت. جالب است بدانید که حمله فینی از نام هال فینی، اولین توسعهدهندهای که به این نقص پی برد گرفته شده است.
حمله اکلیپس (Eclipse Attack)
در حمله اکلیپس فرد مهاجم با در کنترل گرفتن ورودی و خروجی یک نود، آن را از ارتباط همتا به همتا (P2P) با نودهای همسایه منع کرده و آن را در یک محیط مصنوعی مسدود میکند. معمولاً نود مورد هدف از این اتفاق مطلع نمیشود و در نتیجه فرد مهاجم میتواند با دستکاری این نود، باعث تأییدشدن تراکنشهای غیرقانونی شود.
انجام این حمله به ارتباط نودها با همدیگر و روش انتخاب نود بستگی دارد. به عبارتی موفقیت حمله اکلیپس به زیرساخت یک شبکه بلاکچین بستگی دارد. برای مثال، استفاده از انتخاب نود اتفاقی، باعث میشود تا حمله اکلیپس با احتمال بالایی به هدف خود نرسد.
راهکار بیتکوین برای مقابله با دابل اسپندینگ چه بود؟
بیتکوین راهکارهای مختلفی را برای جلوگیری از دو بار خرجکردن اجرایی کرده است. این راهکارها در مجموع باعث شدهاند تا حمله دابل اسپندینگ به بیتکوین تقریباً صفر شود. راهکارهایی که بیتکوین برای امنیت خود انجام داده است شامل موارد زیر است:
- مهر زمانی
- الگوریتم اثبات کار
- همکاری نودها
- پاداشها
مهر زمانی برای جلوگیری از دابل اسپندینگ
بلوکها پایه و اساس یک بلاکچین هستند. بلوکها در واقع فایلهایی با زمینههای مختلف به شمار میآیند. ساختار یک بلوک بیتکوین شامل چهار زمینه متفاوت است:
- اندازه بلوک
- شناسه بلوک
- شمارشگر تراکنشها
- تراکنشها
شناسه بلوک شامل نسخه نرمافزار بلاکچین، هش قبلی بلاک، مهر زمانی، هدف دشوار و نانس (عدد یکبارمصرف) میشود. این همان زمینهای است که بیتکوین از آن برای جلوگیری از دو بار خرجکردن استفاده میکند.
مهر زمانی بلوک با ثبتکردن زمان و تاریخ ایجاد بلوک اهمیت پیدا میکند. مهر زمانی بلوک زمانی که درخواستی از سمت بلوک به سمت نودهای دیگر ارسال میشود، به کار میآید. در این هنگام، از مهر زمانی برای پیداکردن طولانیترین زنجیره استفاده میشود تا اگر جداشدگی یا بلوک مشکوکی وجود دارد، شناسایی شود.
الگوریتم اثبات کار (PoW)
یکی از مشهورترین فرایندها در شبکه بیتکوین استفاده از الگوریتم اثبات کار یا Proof of Work است. این مکانیزم از تولید هشهای مختلف از شناسه بلوک با افزایش تدریجی نانس تا پیداکردن یک خروجی برابر یا کمتر از دشواری شبکه تشکیل میشود. نکته مهم اینکه نانس با محدودیت ۴ بایت روبهرو است و این یعنی نهایتاً تا ۴.۵ میلیارد امکان افزایش دارد که این رقم عموماً توسط یک ماینر در کمتر از نیم ثانیه پر میشود.
زمانی که نانس به محدودیت خود برسد، عدد دیگری به نام نانس اضافی استفاده میشود که میتواند تا ۱۰۰ بایت اطلاعات را در خود جای دهد. بین این دو زمینه، ماینرها امکان تولید بیش از ۲ به توان ۹۶ هش را دارند!
در این حالت وقتی یک مشارکتکننده هش با مقدار صحیح را پیدا میکند، بلوک جدید را به شبکه بلاکچین معرفی میکند تا اثبات کار انجام شود. نودهای شبکه بهسرعت میتوانند این بلوک را تأیید کنند و برای این کار کافی است هش پیداشده را با شناسه بلوک تطبیق دهند و مطمئن شوند که هش با مقدار درست پیدا شده است. پس از تأیید، بلوک به شبکه بلاکچین اضافه شده و این فرایند مجدد برای افزودن بلوک جدید باید تکرار شود.
مشارکت در شبکه
راهکار دیگر برای جلوگیری از دابل اسپندینگ در بیتکوین، استفاده از مشارکت شبکهای نودها در این زمینه است. نودهای فعال در شبکه، جدای از تلاش برای پیداکردن هش با مقدار صحیح و معرفی بلوکهای جدید، از قدرت محاسباتی خود برای فراهمکردن امنیت بلاکچین استفاده میکنند.
هر نود قدرت پردازشی خود را به شبکه اضافه میکند. در نتیجه هرچقدر تعداد نودها (فعالین شبکه) بیشتر شود، شبکه سریعتر میشود. با بزرگشدن شبکه، کار برای مهاجمان بهصورت مضاعفی دشوارتر میشود. بهعنوانمثال، در تاریخ ۱ ژوئن ۲۰۲۴ (۱۲ خرداد ۱۴۰۳) تعداد ۱۹۵۳۵ نود دردسترس وجود دارد که نرخ تولید هش آن بالغ بر ۱۰ به توان ۱۸ هش در ثانیه است! چنین رقمی باعث شده تا برای مثال، انجام حمله ۵۱ درصدی از نظر اقتصادی صرفه نداشته باشد و عملاً غیرممکن شود.
پاداش به ماینرها
سیستم پاداش بیتکوین به نحوی طراحی شده است تا با افزایش مشارکتکنندگان و تشویق آنها به فعالیت، با بزرگ کردن شبکه، از دابل اسپندینگ جلوگیری کند. این سیستم مبتنی بر همان الگوریتم اثبات کار است.
پاداشی که برای پیداکردن بلوک جدید در نظر گرفته شده بود، جواب داد و در نهایت مشارکتکنندگان آن آنقدر زیاد شدند که قدرت شبکه به شکل چشمگیری افزایش پیدا کرد و دیگر برای هیچ مهاجمی نمیصرفید که بخواهد کنترل این شبکه را در اختیار بگیرد.
روشهای جلوگیری از حمله دو بار خرجکردن
برای اینکه بهصورت عمومی جلوی دابل اسپندینگ گرفته شود، باید منشأ آن را درک کرد. این اتفاق زمانی رخ میدهد که یک تراکنش بتواند بدون تأیید خاصی به نتیجه برسد و با یک ورودی یکسان، به دو گیرنده ارسال شود. در این حالت، اگر راه تأیید تراکنش سختگیرانه باشد، تا حد زیادی امکان دو بار خرجکردن ارزهای دیجیتال از بین میرود.
بهصورت عمومی دو راهحل برای جلوگیری از دو بار خرجکردن پیشنهاد میشود.
متمرکزکردن تأیید تسویه
راهحل اول برای جلوگیری از دو بار خرجکردن یک ارز، استفاده از یک فرد یا مؤسسه ثالث معتمد است که با تأیید تراکنشها، از تراکنشهای غیرقانونی یا مجدد جلوگیری کند. این همان حالتی است که در اقتصاد متمرکز انجام میشود و این وظیفه در حالت عادی بر عهده مؤسسههای مالی مثل بانکها است. اما در اقتصاد دیجیتال و ارزهای دیجیتال، باتوجهبه ماهیت غیرمتمرکز آنها، نمیتوان از این روش استفاده کرد.
شبکه بلاکچین و مکانیزم اجماع
راهکاری که برای ارزهای دیجیتال وجود دارد، استفاده از یک مکانیزم اجماع و تأیید اعتبار تراکنشهاست. این مکانیزم که بهعنوان اثبات کار (PoW) شناخته میشود، این اطمینان را میدهد تا هر فرد فعالی در این شبکه، تراکنش انجامشده را تأیید کند. برای اینکه از دو بار خرجکردن در چنین حالتی جلوگیری شود، لازم است که شبکه از قدرت پردازش بسیار بالایی برخوردار باشد تا فرد مهاجم امکان حذف یا دستکاری بلوکهای قبلی را نداشته باشد و نتواند یک ارز را دو بار مصرف کند.
جمعبندی
دو بار خرجکردن از چالشهای اصلی اقتصاد غیرمتمرکز و ارزهای دیجیتال است. الگوریتمهای مختلفی برای جلوگیری از دابل اسپندینگ ایجاد شده است که از جمله آنها میتوان به اثبات کار (PoW) اشاره کرد. بااینحال، این خطر همچنان برای شبکههای بلاکچین کوچکتر وجود دارد. با گسترش فعالیت در شبکههای بلاکچین و افزایش قدرت پردازشی شبکهها، بیشتر و بیشتر میتوان به اعتبار ارزهای دیجیتال اعتماد کرد.
سؤالات متداول
دبل اسپندینگ یا دو بار خرج کردن چیست؟
حمله دبل اسپندینگ زمانی رخ میدهد که یک نفر بخواهد از مقدار مشخصی دیجیتال بیش از یک بار استفاده کند، درست مثل این که بخواهید یک اسکناس را دو بار خرج کنید.
چگونه از حمله دابل اسپندینگ جلوگیری میشود؟
برای جلوگیری از دابل اسپندینگ، از مکانیزمهای مختلفی استفاده میشود که فناوری بلاک چین و الگوریتم اجماع مهمترین آنها هستند.