دو بار خرج کردن در بلاکچین چگونه اتفاق میافتد؟
حمله دوبار خرج کردن (Double spending) یکی از بزرگترین خطرات و ریسکهای بلاکچینها و داراییهای دیجیتالی به حساب میآید. دوبار خرج کردن به این معنا است که موجودی یک ارز دیجیتال، دو یا چند بار مصرف شود که به این اختلال “حمله دوبار خرج کردن” گفته میشود. اگر فردی در یک سیستم پرداختی، یک دارایی ثابت را برای دو یا چند بار خرج کند، آن سیستم پرداختی دچار اختلال شده است و در نتیجه هیچ دارایی در آن سیستم پرداختی دیگر ارزش ذاتی نخواهد داشت. آیا میدانید کدام پروژه برای اولین بار مشکل دوبار خرج کردن در داراییهای دیجیتالی را حل کرد؟ در ادامه مقاله با ما همراه باشید تا به بررسی کامل دوبار خرج کردن در بلاکچین بپردازیم.
بیت کوین، اولین راه حل برای جلوگیری از حمله دوبار خرج کردن
درحالی که اکثر مردم، بیت کوین را به عنوان اولین پول دیجیتالی میشناسند، ولی قبل از بیت کوین هم تلاشهایی برای ایجاد پول و داراییهای دیجیتال صورت گرفته بود اما هیچ کدام موفق نشده بودند.
برتری بیت کوین نسبت به بقیه داراییهای دیجیتالی در آن است که توانست از حمله دوبار خرج کردن جلوگیری کند، موضوعیای که قبل از بیت کوین هیچ دارایی دیجیتالی توان جلوگیری کردن از آن را نداشت. در ادامه مقاله به نحوه رخ دادن و چگونگی جلوگیری از حمله دوبار خرج کردن خواهیم پرداخت و در آخر، یک نکته امنیتی مهم را بررسی خواهیم کرد که دانستن آن برای افرادی که در حوزه رمزارزها فعالیت میکنند، اجباری است.
دوبار خرج کردن چگونه اتفاق میافتد؟
برای درک راحتتر اصطلاح دوبار خرج کردن، بهتر است آن را به صورت یک مثال ساده توضیح دهیم. فرض کنید فردی (فرد مهاجم) ۱ واحد BTC دارد و قصد خرج کردن آن را دارد؛ مهاجم ۱ واحد BTC که کل داراییاش است را طی تراکنش A برای فرد A ارسال میکند. سپس وقتی این تراکنش در انتظار تایید است و هنوز تایید نشده تا دارایی انتقال پیدا کند، مجدد همان یک واحد BTC را طی تراکنش B برای فرد دیگری (فرد B) ارسال میکند. اگر یک سیستم پرداختی توان جلوگیری از دوبار خرج کردن را نداشته باشد، آن سیستم هر دو تراکنش را قبول میکند و به راحتی مورد حمله قرار میگیرد. در نتیجه اگر یک سیستم پرداختی توانایی جلوگیری از این حمله را نداشته باشد، داراییهای سوار بر بستر آن سیستم، فاقد ارزشی خواهد شد.
چگونه میتوان از دوبار خرج کردن جلوگیری کرد؟
ارزهای دیجیتال به کمک بلاکچین و با استفاده از الگوریتمهای رمزنگاری و دفتر کل، از حمله دوبار خرج کردن جلوگیری میکنند. دفتر کل، تراکنشها را در خود ثبت میکند و تمام تراکنشهای تایید شده و زمان دقیق تایید شدن هر کدام را ثبت میکند و مشخص میکند که کدام تراکنش زودتر تایید شده است. پس به همین دلیل اگر مهاجم قصد دوبار خرج کردن یک دارایی را داشته باشد و یک دارایی را توسط دو تراکنش مختلف به استخر تراکنشهای تایید نشده انتقال دهد، بلاکچین فقط تراکنشی را قبول میکند که زودتر تایید شده است و تراکنش بعدی مهاجم را رد میکند (منظور از تراکنش، یکی از دو تراکنشی است که توسط مهاجم انجام شده و همزمان در انتظار تایید در استخر تراکنشهای تایید نشده هستند).
اگر این دو تراکنش همزمان تایید شوند چه اتفاقی میافتد؟ آیا حمله دوبار خرج کردن اتفاق میافتد؟
اگر هر دو تراکنش همزمان تایید شوند چه اتفاقی میافتد؟
ماینرهای زیادی در شبکه بیت کوین در حال تایید تراکنشها و استخراج بلاکها هستند و یک فضای رقابتی شدیدی در میان استخرهای ماینینگ وجود دارد. این موضوع باعث میشود تا گاهی اوقات یک بلاک همزمان توسط دو ماینر استخراج شود، در واقع در این شرایط همزمان دو بلاک متفاوت، به جای یک بلاک ایجاد شده است و این امکان وجود دارد که هر دو تراکنش، هر کدام در بلاک مختلف توسط دو ماینر مختلف، همزمان تایید شده باشند.
ولی این دو بلاک همزمان به بلاکچین اضافه نمیشوند، درواقع روند ماینینگ باید ادامه پیدا کند و دید بیشتر ماینرها بر طبق تاییدیههای کدام یک از این دو بلاک پیش میروند. تاییدیههای بلاکی که توسط ماینرهای بیشتری مورد مقبولیت قرار گیرد، به زنجیره بلاکچین اضافه خواهد شد. در صورتی که هر دو بلاک به یک میزان مورد مقبولیت قرار گیرند مجدد بلاکچین دو شاخه میشود و شاخهای که در نهایت بتواند پیروز شود، به زنجیره بلاکچینی اضافه میشود و شاخه برنده نامیده میشود و شاخه دیگر نامعتبر نامیده میشود.
از بین این دو تراکنش که توسط آنها یک دارایی، به دو نفر ارسال شده بود، تراکنشی مورد تایید قرار میگیرد که در شاخهی برنده قرار دارد، و تراکنش دیگر رد میشود. در نهایت دارایی به آدرس ذکر شده در تراکنش برنده انتقال پیدا میکند.
روشهای کلاهبرداری از طریق دوبار خرج کردن
بالاتر توضیح دادیم که چگونه امکان دارد یک دارایی واحد توسط یک نفر، طی دو تراکنش جدا به دو آدرس مختلف ارسال و هر دو تراکنش همزمان توسط ماینرهای مختلف تایید شوند و چگونه در نهایت یکی از آنها تایید نهایی خواهد گرفت. شما فرض کنید فرد مهاجم، یک دارایی را طی تراکنش A برای مخاطب خود ارسال کرده و قبل از تایید تراکنش، همان دارایی را برای خود نیز ارسال کرده است و همزمان این دو تراکنش توسط دو ماینر مختلف تایید شدهاند. در این صورت باید دید در نهایت تایید کدام ماینر (کدام بلاک) توسط دیگر اجزای شبکه، بیشتر مورد مقبولیت قرار میگیرد و در نهایت کدام تراکنش تایید و کدام رد خواهد شد؟ این امکان وجود دارد که تراکنشی که در آن مهاجم دارایی را برای مخاطب ارسال کرده بود، رد شود و تراکنشی که در آن دارایی را برای خودش ارسال کرده بود مورد تایید قرار گیرد و در واقع مخاطب متضرر شود و دارایی به خود مهاجم بازگردد.
یک نکته مهم امنیتی
برای دور ماندن از این ریسک (متضرر شدن توسط فرد مهاجم) باید صبر کنیم تا تراکنش، تایید ۶ بلاک بعد از خود را نیز دریافت کند (که تقریباً یک ساعت طول میکشد) تا از نهایی شدن تراکنش مطمئن شویم چون امکان تداوم دو شاخهای بلاکچین تا بیش از ۶ بلاک تغریباً غیر ممکن است و در نهایت تا ۶ بلاک، یکی از شاخهها، مورد مقبولیت نهایی قرار خواهد گرفت. البته احتمال رخ دادن خود همین اتفاق و دو شاخه شدن بلاکچین خیلی پایین و نادر است.
جمعبندی
هر دارایی دیجیتالی برای با ارزش شدن نیاز دارد تا از حمله دوبار خرج کرد جلوگیری کند. در حمله دوبار خرج کردن، مهاجم یک دارایی را برای دوبار خرج میکند؛ دارایی که توسط یک فرد دو یا چند بار خرج شود، هیچ ارزش ذاتی ندارد. بیت کوین اولین دارایی دیجیتالی بود که راه حلی برای جلوگیری از حمله دوبار خرج کردن ارائه داد و همچنان موفق بوده است. بیت کوین این مشکل را با کمک دفتر کل توزیع شده حل کرد.