دابل اسپند (اسپندینگ) یا دو بار خرج کردن ارز دیجیتال چیست؟
تاریخ انتشار : ۱۴۰۰/۰۴/۰۱
آخرین بروزرسانی : ۱۴۰۰/۰۸/۰۸

حدود 12 دقیقه
دانیال حجاری
دابل اسپندینگ مشکلی در سیستم ارز دیجیتال و به معنی دو بار (دو مرتبه) خرج کردن یک وجه است. دابل اسپند امنیت بلاک چین را کاملا زیر سوال میبرد.
دابل اسپندینگ یا دابل اسپند در شبکه ارزهای دیجیتال را اینطور تصور کنید؛ با پرداخت نقدی، کالایی را خریداری کنیم، سپس اسکناسهای پرداخت شده را از فروشنده دزدیده و دوباره با آنها کالای دیگری خریداری کنیم! اگر کاربر بتواند در یک سیستم رمز ارزی، مبلغ یکسانی را دو بار خرج کند، در عمل آن را به بازی گرفته و امنیتش را زیر سوال برده است. هرگز نمیتوان به چنین سیستمی اعتماد کرد، چرا که ممکن است بعد از دریافت مبلغی پول، آن را از دست بدهید! فاجعهبار است!
دابل اسپند یا دو بار خرج کردن چیست؟
دوبار خرج کردن پتانسیلی در سیستمهای پولی دیجیتال است و زمانی رخ میدهد که منبع مالی مشابهی برای دو گیرنده متفاوت به صورت همزمان فرستاده شود. بدون اقدامات و راه حلهای جدی برای مقابله با چنین اتفاقی، پروتکل مالی تضعیف خواهد شد؛ کاربران هیچوقت مطمئن نیستند پول ارسال شده برای آنها، پیشتر جای دیگری هم خرج شده است یا خیر.
وقتی صحبت از ارز دیجیتال میشود (منظور پول در گردش در سیستمهای مالی الکترونیکی)، باید اطمینان حاصل کرد که روشی برای کپی کردن واحدهای پولی در آن شبکه وجود ندارد. مثلا اگر یک کاربر بتواند از 10 واحد دارایی خود 10 مرتبه کپی بگیرد، یعنی بدون پشتوانه پولش را به 100 واحد رسانده است. این دقیقا مشابه زمانی است یک کاربر 10 واحد پول خود را همزمان برای چند نفر ارسال و با موفقیت دابل اسپندینگ میکند. پس در سیستمهای مالی دیجیتال باید مکانیزمی وجود داشته باشد تا از بروز چنین رفتاری یعنی دابل اسپند جلوگیری کند.
دابل اسپندینگ در بیت کوین
بیت کوین طوری طراحی شده که (حداقل تا وقتی پروتکل طبق انتظار مورد استفاده قرار بگیرد) در مقابل حملات دو بار خرج کردن مقاوم است. مقابله بیت کوین با دابل اسپندینگ به صورتی است که وقتی کاربران تراکنش را ایجاد و تا زمان تایید آن در یک بلاک منتظر میماند، راهی برای معکوس کردن عملیات وجود ندارد. به عبارتی بعد از ثبت کامل تراکنش در بلاک چین، دیگر امکان لغو کردن آن وجود ندارد. در صورت آشنایی کامل با ساختار بلاک چین میدانید که معکوس کردن یک تراکنش ثبت شده در پایگاه دادهای از این نوع، نیازمند هش ریت نجومی است. در عمل هیچ فرد، شرکت یا سازمانی این مقدار هش ریت در اختیار ندارد.
با این حال تعداد انگشت شماری از حملات دابل اسپندینگ وجود دارند که هدفشان طرفهای پذیرنده تراکنشهای تایید نشده است. در مقادیر کم، برای مثال، فروشنده ممکن است مایل به انتظار تا زمان قرارگیری تراکنش در یک بلاک نباشد. به عنوان نمونه یک رستوران شلوغ، قادر نیست تا زمان تایید شدن نهایی یک خرید در شبکه منتظر بماند، اما در صورت پذیرش بیت کوین باید این کار را انجام بدهد، چرا که نگران دابل اسپند است.
مشاغلی که پرداخت فوری با بیت کوین را امکانپذیر میکنند، در عمل خود را در برابر ریسک مواجهه با دو بار خرج کردن یا همان دابل اسپندینگ قرار دادهاند. تصور کنید یک نفر در رستوران ساندویچ سفارش دهد، هزینه آن را بپردازد و سریعا آن مبلغ را دوباره به آدرس دیگری متعلق به خود بفرستد. با پرداخت کارمزد بالاتر برای تراکنش دوم، اولویت آن در صف پردازش افزایش پیدا میکند و زودتر تایید میشود. در نتیجه تراکنش اول با دابل اسپند خریدار باطل خواهد شد.
روشهای دابل اسپند
به چند روش میتوان حمله از نوع دوبار خرج کردن یا همان دابل اسپند را در شبکهای بلاک چینی پیاده کرد. در ادامه با این روشها آشنا خواهیم شد.
حمله ۵۱ درصد (%51 Attack)
وقتی یک فرد، گروه، سازمان و در کل یک موجودیت خاص موفق میشود کنترل بیش از 50 درصد هش ریت شبکه را در اختیار بگیرد، این حمله رخ داده است. حملهکننده میتواند ضمن تغییر توالی تراکنشها، یک سری تراکنشهای غیر واقعی را در بلاکها بگنجاند و خود به لطف داشتن اکثریت قدرت شبکه، آنها را تایید کند. این نوع حمله در بیت کوین بسیار غیر محتمل است، اما تاکنون در برخی شبکههای غیر متمرکز مبتنی بر بلاک چین رخ داده است. در چنین شرایطی، ترتیبدهنده حمله قادر به دو بار خرج کردن وجهی مشابه است و با دابل اسپند همه چیز را به نفع خودش تمام خواهد کرد.
حمله ریس (Race Attack)
تصور کنید دو تراکنش متناقض به طور متوالی در شبکه پخش میشوند و منتظر تایید میمانند. هر دو تراکنش با استفاده از وجهی یکسان ایجاد شدهاند، اما میدانیم در نهایت یکی از آنها تایید و در بلاک چین ثبت خواهد شد. هدف مهاجم بیاعتبار کردن پرداخت به وسیله تایید کردن تراکنش به نفع خود است (ارسال همان مبلغ مورد استفاده برای خرید، به آدرسی متعلق به خود). در این روش، یک گیرنده باید پذیرای تراکنشهای تایید نشده (ثبت نشده در بلاک چین) باشد. مثال خرید ساندویچو دابل اسپند در آن را به یاد آورید.
حمله فینی (Finney Attack)
در این روش، یک مهاجم بدون اینکه شبکه را مطلع کند، تراکنشی را در یک بلاک استخراج شده جای میدهد. حال تراکنش دیگری با همان دارایی مشابه انجام میدهد و سپس بلاک استخراج شده قبلی را به شبکه اعلام میکند. به این ترتیب پرداخت نامعتبر میشود. البته در این روش باید یک سری توالی کارها رعایت شود. علاوه بر آن، به همکاری یک ماینر و پذیرش تراکنش تایید نشده توسط گیرنده (مثل اتفاقی که در حمله ریس میافتد) نیاز داریم.
روشهای مقابله با دابل اسپندینگ
به طور کلی، به دو روش متمرکز و غیر متمرکز میتوان از حمله دو بار خرج کردن و دابل اسپند در شبکهای بلاک چینی جلوگیری کرد. در ادامه بیشتر درباره این دو راهکار جلوگیری از دابل اسپندینگ صحبت میکنیم.
روش متمرکز
به کار گرفتن روش متمرکز راحتتر از روشهای غیر متمرکز است. در روش تمرکزگرا، یک ناظر سیستم را مدیریت و نحوه صدور و توزیع واحدهای ارزی را کنترل میکند. یکی از بهترین روشهای متمرکز مقابله با مشکل دو بار خرج کردن ارز دیجیتال، eCash متعلق به دیوید چائوم (David Chaum) دانشمند آمریکایی علوم رایانه و رمزنگاری است.
وی در مقالهای با نام «امضاهای کور برای پرداختهای غیر قابل ردیابی» (Blinds Signatures for Untraceable Payments) که در سال 1982 میلادی منتشر شد، توضیح میدهد که بانکها میتوانند برای صدور داراییهای دیجیتال مشابه پول نقد (قابلیت بینام بودن و تبادل نظیر به نظیر را دارند)، از امضاهای به اصطلاح «کور» استفاده کنند. این امضا از دابل اسپندینگ جلوگیری میکند.
در این روش، اگر کسی بخواهد مثلا 100 دلار به صورت اعتبار دیجیتالی دریافت کند، باید ابتدا بانک را مطلع کند. به شرط داشتن موجودی در حساب خود، گیرنده وجه یک عدد تصادفی تولید خواهد کرد. فرض کنید فردی پنج عدد تولید کرده و هر عدد به ازای 20 دلار معتبر است. این اعداد رندوم میتوانند در واقع شماره سریال هر قبض 20 دلاری در نظر گرفته شوند. گیرنده باید اعداد رندوم را با افزودن یک فاکتور کور به هر یک، مبهم و برای بانک غیر قابل شناسایی کند، به طوری که بانک قادر به ردیابی واحدهای مشخص نباشد. حال با فرستادن چنین اطلاعاتی برای بانک، بانک فقط میداند که فرد تقاضا دارد 100 دلار از حساب او کسر شده و به ازای این مبلغ، پنج قبض با همان «سریالهای کور شده» که هرکدام 20 دلار ارزش دارند برای او با امضا و تایید بانک صادر شوند. پس از صدور قبضها، صاحب حساب میتواند به رستوران یا هر مکان دیگری برود و مثلا برای پرداخت 40 دلار، دو قبض ارائه کند. به این روش بانک میتواند از دو بار خرج کردن و دابل اسپند وجهی مشابه جلوگیری کند.
در زمان پرداخت، فاکتور کورکننده و غیر قابل شناساییکننده را میتوان از قبض حذف کرد. به این ترتیب عدد تصادفی مرتبط با هر قبض نقدی دیجیتال، مشخص خواهد شد. این عدد، به عنوان یک شناسه منحصربهفرد برای هر واحد عمل میکند (شبیه یک شماره سریال). فردی که به رستورات رفته، دو قبض 20 دلاری را به رستوران میدهد. حال صندوقدار از بانک میخواهد حسابش را با مقادیر این دو قبض شارژ کند. این کار باید به سرعت انجام شود، تا مشتری نتواند جای دیگری این قبوض را خرج کند. بانک امضا و تایید خود را که قبلا روی قبوض گذاشته بود چک میکند و اگر همه چیز درست باشد، آنها را میسوزاند و به حساب رستوراندار 40 دلار اعتبار میدهد. صاحب رستوران در صورت تمایل به خرج کردن این مقدار پول به شکلی مشابه، باید دوباره همین مراحل را طی کند.
روش eCash برای تراکنشهای خصوصی ممکن است کاربردی باشد، ولی روشی متمرکز به شمار رفته و بانک در آن تبدیل به نقطه مرکزی شکست میشود؛ قبضی که صادر میشود به خودی خود هیچ ارزشی ندارد، مگر این که خود بانک آن را قبول کند و در ازایش دلار تحویل بدهد. در این روش مشتری باید همیشه به بانک اعتماد کند و این دقیقا مشکلی است که رمز ارزها در پی حل آن هستند. به همین دلیل برای مقابله با دابل اسپندینگ یا همان دو بار خرج کردن ارز دیجیتال اغلب از روشهای غیر متمرکز استفاده میکنند. دابل اسپند روی کاغذ با این روش قابل جلوگیری است، اما در عمل کار دشواری است و از طرفی اساسی رمز ارزها (عدم تمرکز) را زیر سوال میبرد.
روش غیر متمرکز
جلوگیری از دوبار خرج کردن پول وقتی هیچ نهاد نظارتی وجود ندارد، کار به مراتب سختتری است. مشارکتکنندگان در شبکه غیر متمرکز، که همه با هم برابر هستند و قدرت یکسانی (از نظر نحوه کنترل و تصمیمگیری، نه هش ریت) دارند، باید حول یک سری قوانین که از کلاهبرداری جلوگیری و کاربران را تشویق به رفتار صادقانه میکنند، با هم هماهنگ باشند. در تکنولوژی بلاک چین به عنوان یک بستر غیر متمرکز، با استفاده از روشهای اشتراکگذاری اطلاعات به صورت نظیر به نظیر و همچنین رمزنگاری کلید عمومی، با مشکل دابل اسپندینگ مقابله میشود.
بزرگترین خلاقیت معرفی شده در وایت پیپر بیت کوین، روشی است که (علاوه بر داشتن مزایای بیشمار) با دو مرتبه خرج کردن یا همان دابل اسپند مقابله میکند. اگر چه ساتوسی ناکاماتو در این مقاله مستقیما به واژه «بلاک چین» اشاره نکرد، ولی ساختار دادهای که شرح داد را ما حالا به این نام میشناسیم.
یک بلاک چین، پایگاه دادهای با ویژگیهای منحصربهفرد است. مشارکتکنندگان در شبکه (یا همان نودها) از یک نرم افزار خاص استفاده میکنند که به وسیله آن میتوانند دیتابیس خود را با دیگران در شبکه همگامسازی کنند. این نحوه کار به کل شبکه (اعضای آن) اجازه میدهد به تاریخچه تراکنشهای ثبت شده از اولین بلاک (Genesis Block) تا جدیدترین بلاک دسترسی داشته باشند و بتوانند به حسابرسی وضعیت بپردازند. وقتی بلاک چین این گونه برای عموم قابل رویت باشد (حتی برای کاربران خارج شبکه، که یک نود بیت کوین نیستند)، شناسایی و جلوگیری از فعالیتهای مجرمانه و کلاهبرداری آسان میشود. یکی از انواع کلاهبرداریها که به لطف ساختار متفاوت و خاص بلاک چین از وقوع آن جلوگیری میشود، دو بار خرج کردن مقدار یکسانی از یک ارز دیجیتال است.
وقتی یک کاربر تراکنشی را در شبکه برادکست میکند، آن تراکنش فورا به بلاک چین اضافه نمیشود. این معامله باید از طریق فرآیند ماینینگ، ابتدا در یک بلاک قرار بگیرد. بلاک به زبان ساده، مجموعهای است که مقادیری دیتا در خود نگه میدارد. در پایگاه داده بلاک چینی، همانطور که از نامش پیداست، با زنجیرهای از بلاکهای متصل به هم مواجه هستیم که هر بلاک، مقداری دیتا شامل میشود. به عبارتی دیگر، دیتا در قالب بلاکها دستهبندی میشوند. در شبکه رمز ارزها نظیر بیت کوین، این دیتا همان تراکنشها هستند.
وقتی بلاک حاوی تراکنش به پایگاه داده اضافه شد، آنگاه کاربر سمت دریافتکننده در آن تراکنش میتواند معامله را انجام شده و معتبر بداند. در غیر این صورت، خطر از دست دادن مبلغ آن تراکنش وجود دارد، چرا که فرستنده میتواند با ثبت تراکنشی جدید، همان مبلغ را دوباره خرج یا به عبارتی دابل اسپند کند.
وقتی تراکنشی تایید میشود، از آن جایی که مالکیت آن مقدار وجه به یک کاربر (یک آدرس) نسبت داده شده است، امکان خرج کردن مجددش سلب میشود. اکنون کل شبکه از این وضعیت مطلع است و آن را تایید میکند. به همین دلیل بسیاری پیشنهاد میکنند قبل از اینکه یک تراکنش را به عنوان پرداخت قبول کنید، حتما منتظر چندین تایید بمانید. هر بلاکی که بعد از بلاک حاوی تراکنش شما بسته میشود، قدرت مورد نیاز برای دستکاری زنجیره و دابل اسپندینگ را به شدت افزایش میدهد.
به مثال رستوران برمیگردیم. فردی به رستوران رفته و با توجه به پذیرش بیت کوین در آنجا، تصمیم میگیرد هزینه را با تراکنشی رمز ارزی پرداخت کنید. فرض کنید هزینه وعده وی 0.005 بیت کوین شده است. صاحب رستوران آدرس عمومی خود برای دریافت BTC را به مشتری ارائه میکند. مشتری یک تراکنش در شبکه برادکست خواهد کرد. این تراکنش در عمل یک پیغام امضا شده است و اعلام میکند 0.005 بیت کوین که موجودی ارسالکننده بودهاند، از این به بعد به دریافتکننده تعلق دارند.
بدون ورود به جزئیات، هر فردی با دسترسی به تراکنش امضا شدهی مشتری سناریوی بالا میتواند مدعی داشتن آن مقدار بیت کوین شود. در نتیجه مجوز ارسال آنها به آدرس مورد نظرش را کسب میکند.
همانطور که در بالا اشاره کردیم، تراکنشی معتبر است که در یک بلاک تایید شده (و اضافه شده به بلاک چین) قرار گرفته باشد. قبول تراکنشهای تایید نشده شبیه قبول 40 دلار در سیستم eCash بدون نقد کردن سریع قبضها در یک شعبه از بانک است، چرا که در این فاصله زمانی، پرداختکننده فرصت دارد تا همان مبلغ را در مکان دیگری نیز خرج و دابل اسپند کند.
پیشنهاد شده که دریافتکننده، تا تایید حداقل 6 بلاک منتظر بماند و سپس پرداخت را قبول کند. با توجه به متوسط زمان 10 دقیقهای ساخت و اضافه کردن یک بلاک جدید به بلاک چین، این کار احتمالا یک ساعت یا بیشتر زمان خواهد برد.
سخن پایانی درباره مشکل دابل اسپند
فراهم بودن بستر انجام دابل اسپندینگ به کاربر یک سیستم پولی الکترونیکی این امکان را میدهد تا سیستم را به بازی بگیرد و برای سود شخصی، از آن سواستفاده کند. در اینجا فرد قادر به دو بار خرج کردن مبلغی یکسان خواهد بود. در سیستمهای قدیمی، مقابله با این مشکل یک دغدغه اساسی بود. در نظر داشته باشید این پتانسیل مختص سیستمهای رمز ارزی بلاک چینی نیست و از سالهای دور و زمان ظهور اولین سیستمهای پولی الکترونیکی و دیجیتالی وجود داشته است.
امضاهای کور، روشی مبتکرانه و اولیه برای رفع مشکل دابل اسپندینگ در سیستمهای مالی دیجیتالی متمرکز بود. بعد از آن، با ظهور فناوری بلاک چین و ایجاد مکانیزم اثبات کار، بیت کوین به عنوان یک سیستم پولی غیر متمرکز متولد شد. در اینجا با تکیه بر تکنولوژی بلاک چین باگ امکان دابل اسپندینگ تا حد زیادی برطرف شد.
منبع: Binance Academy
از 1 تا 5 چه امتیازی به این مطلب میدهید؟
نظر خود را بنویسید