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