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

تعریف دابل اسپندینگ یا دو بار خرج کردن

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

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

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

دابل اسپندینگ در بیت کوین

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

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

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

رویکرد غیر متمرکز در مقابله با دو بار خرج کردن

اطمینان از اینکه در اکوسیستمی که هیچ هماهنگ‌کننده مرکزی در آن وجود ندارد، نتوان وجوه را دو بار خرج کرد، یقینا چالش بسیار بزرگتری است. قوانین در چنین سیستمی باید به گونه‌ای تنظیم شوند که شرکت‌کنندگان قدرتی برابر داشته و مشوق‌های لازم برای عملکرد درست و به دور از تقلب وجود داشته باشد.

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

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

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

بیایید سناریوی رستوران را در یک سیستم غیر متمرکز مانند بیت کوین دوباره مرور کنیم. کاربر به رستوران برمی‌گردد و این بار بر روی شیشه برچسب “در این رستوران بیت کوین پذیرفته می‌شود” را مشاهده می‌کند. او از غذایی که آخرین بار سفارش داده بود لذت برده، بنابراین دوباره آن را سفارش می‌دهد و هزینه سفارشش 0.005 واحد رمز ارز BTC می‌شود. رستوران آدرس عمومی کیف پول ارز دیجیتال خود را به او داده و وی باید وجه را به آن ارسال کند. کاربر تراکنش را تراکنش را ثبت می‌کند، که اساساً یک پیام امضا شده مبنی بر اینکه 0.005 واحد بیت کوین که در اختیار کاربر بود، اکنون به کیف پول رستوران ریخته شود. اجازه دهید خیلی به جزئیات نپردازیم ولی به‌طور کلی این‌گونه است که، گره‌ها به بررسی دارایی کاربر پرداخته و پس از اطمینان از کافی بودن اعتبار او، تراکنش را در یک بلاک به بلاک چین اضافه می‌کنند.

روش های مرسوم دو بار خرج کردن

به چند روش می‌توان حمله از نوع دوبار خرج کردن یا همان دابل اسپند را در شبکه‌ای بلاک چینی پیاده کرد. سه روش محبوب دو بار خرج کردن که حمله 51 درصدی، حمله ریس و حمله فینی را شامل می‌شود در ادامه به اختصار توضیح خواهیم داد.

حمله ۵۱ درصد (%51 Attack)

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

حمله‌ ریس (Race Attack)

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

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

حمله رقابتی

اما سوال اساسی این است که چه راهکارهایی را می‌توان در مقابل هک Race انجام داد که موفقیت هکرها به شکست تبدیل شود؟ کارشناسان در این خصوص معتقدند که می‌توان با افزایش امنیت شبکه و کاهش زمان تأیید تراکنش‌ها و ایجاد مکانیسم‌هایی برای شناسایی و رهگیری تراکنش‌های متناقض، هکرها را ناکام گذاشت. البته افزایش تعداد تأیید‌ها برای تراکنش‌ها نیز می‌تواند از جمله اقداماتی باشد تا بازیگران مخرب نتوانند تنها با فرستادن تراکنش و با گرفتن تنها یک تأیید، به نتیجه دلخواه خود برسند.

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

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

هال فینی (Hal Finney) یک توسعه‌دهنده آمریکایی نرم افزار بود که نامش به دلیل دریافت اولین تراکنش بیت کوین بر سر زبان‌ها افتاد. در عین حال، او اولین فردی بود که در جریان راه‌اندازی اولیه بیت کوین به طور عمومی صحبت کرد و توانست با دانش و اطلاعاتی که از شبکه بیت کوین داشت، امکان انجام دابل اسپندینگ را روی بیت کوین مطرح کند. این طرح یا به قولی تئوری حمله، بعدها به نام او Finney Hack یا Finney Attack نامگذاری شد.

در حالی که ممکن است در نگاه اول انجام چنین حملات سایبری ساده و قابل انجام به نظر برسد و حتی عده‌ای تلاش کنند تا آن را به دلیل جذابیت و ثروتمند شدن انجام دهند، اما باید بدانید حملاتی نظیر فینی چندان راحت نبوده و هر کسی با منابعی محدود قادر به انجام آن نیست. برای انجام چنین حملاتی، علاوه بر دانش فنی بالا، لازم است که مهاجم یک ماینر باشد و بتواند بلاکی را که تراکنش او در آن تأیید می‌شود، استخراج کند. همچنین، برای پذیرش تراکنشی با صفر تأیید، به یک تاجر (Merchant) یا همان پذیرنده نیاز است. طبیعتاً داشتن این دو شرط بسیار سخت بوده و به راحتی ممکن نیست. با این حال، در تئوری موضوع متفاوت است و بر اساس چهارچوب‌های کلی، حتی اگر فرد متخاصم تسلطی کمتر از ۵۱ درصد بر شبکه هم داشته باشد باز هم می‌تواند با کنار هم قراردادن پارامترهای لازم این حمله را انجام دهد.

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

چگونه می توان از حمله دوبار خرج کردن جلوگیری کرد؟

به طور کلی، به دو روش متمرکز و غیر متمرکز می‌توان از حمله دو بار خرج کردن و دابل اسپند در شبکه‌ای بلاک چینی جلوگیری کرد. در ادامه بیشتر درباره این دو راهکار جلوگیری از دابل اسپندینگ صحبت می‌کنیم.

روش متمرکز

به کار گرفتن روش متمرکز راحت‌تر از روش‌های غیر متمرکز است. در روش تمرکزگرا، یک ناظر سیستم را مدیریت و نحوه صدور و توزیع واحدهای ارزی را کنترل می‌کند. یکی از بهترین روش‌های متمرکز مقابله با مشکل دو بار خرج کردن ارز دیجیتال، 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 دقیقه‌ای ساخت و اضافه کردن یک بلاک جدید به بلاک چین، این کار احتمالا یک ساعت یا بیشتر زمان خواهد برد.

سخن پایانی؛ آیا باید نگران حملات دو بار خرج کردن بود؟

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

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

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

تهیه شده در بیت 24