دوبار خرج کردن (Double Spending) به این معنی است که فردی دارایی دیجیتالی با اطلاعات و مشخصات مشابه را بیش از یک بار، استفاده و خرج کند. این کار امکانپذیر است؛ چراکه کاربران میتوانند به آسانی به بازتولید دادههای دیجیتالی بپردازند. این اتفاق زمانی رخ میدهد که کاربری تراکنشی را دقیقاً مشابه با تراکنش قبلی که در شبکه تأیید شده است ایجاد نماید.
کاملاً مشخص است که امکان رخداد چنین چیزی برای داراییهای فیزیکی و ارزهای فیات وجود ندارد؛ چراکه اگر 5 دلار را برای خرید یک قهوه پرداخته باشید، نمیتوانید مجدداً آن را خرج کنید و مالکیت آن را به فرد دیگری دادهاید.
در مواردی که از کارتهای اعتباری (Credit card) استفاده میکنید نیز، بانک به عنوان شخص واسط تضمین و تأیید میکند که یک دارایی از حساب شما به حساب کاربری فرد دیگری منتقل شده است. در این صورت، مالکیت آن به شخص دیگری منتقل شده و دیگر به آن دارایی دسترسی نخواهید داشت و نمیتوانید مجددا از آن دارایی استفاده نمایید.
در بلاکچین بیت کوین برای مقابله و جلوگیری از چنین مواردی از سیستمهای مالی سنتی الهام گرفته شده است. در این شبکه از یک مکانیسم تأیید با ترتیب زمانی استفاده میشود و اولین تراکنش ثبتشده در نظر گرفته میشود.
اگر از بیت کوین خود یک کپی دیجیتالی تهیه کردهاید و قصد استفاده از آن را دارید، باید بدانید که دیگر قادر نخواهید بود از بیت کوین اصلی خود استفاده کنید.
انواع روشهای حمله دوبار خرج کردن:
- حمله رقابتی (Race attack) :
این اتفاق زمانی رخ میدهد که فروشندگان یک کالا قبل از اینکه تأیید بلاک برای تراکنشها صورت بگیرد، پرداختی را میپذیرند. در چنین شرایطی کاربرانی که قصد دوبار خرج کردن دارایی خود را دارند، دو تراکنش را تقریباً به صورت همزمان انجام میدهند. مقصد یکی از آنها به آدرس فروشنده و مقصد دیگری کیف پول دیگری خواهد بود. - حمله 51 درصدی:
حمله 51 درصدی را با نام حمله جمعی یا حداکثری نیز میشناسند؛ چراکه چنین چیزی تنها در صورتی امکانپذیر است که حملهکنندگان بیش از نیمی از نرخ هش شبکه را در اختیار داشته باشند. این اتفاق زمانی رخ میدهد که یکی از ماینرها یا گروهی از آنها بتوانند بلاکی را زودتر از ماینرهای باقیمانده در شبکه استخراج کنند. - حمله Finney :
این مورد نیز زمانی رخ میدهد که فروشندگان، قبل از تأیید بلاک، تراکنش را انجامشده تصور میکنند. در این روش ماینرها به انتقال دارایی از یک کیف پول به کیف پول دیگری میپردازند، اما بلافاصله آن بلاک را تأیید نمیکنند. سپس سریعاً از کیف پول مبدأ تراکنش دیگری را انجام میدهند و بعد از آن به انتشار بلاکی میپردازند که اطلاعات مربوط به هر دو تراکنش در آن ثبت شده است.