اگر به بحث امنیت رمزارزها علاقهمند باشید، به احتمال زیاد اصطلاح «دوبار خرج کردن» را شنیدهاید. تصور اینکه کسی بتواند تا هرجا که میخواهد ارزهای دیجیتال را کپی کند و با استفاده از ارزهای کپی شده تراکنشهای متعدد انجام دهد، میتواند تا حد زیادی نگران کننده باشد. در این مقاله از آکادمی مزدکس، دوبار خرج کردن را به زبانی ساده تعریف کرده و نهایتا توضیح میدهیم که بیت کوین چگونه این مشکل را حل کرده و چرا نباید در دنیای رمزارزها نگران حمله دوبار خرج کردن باشیم.
دو بار خرجی | دابل اسپندینگ به چه معناست؟
دوبار خرج کردن (Double Spending)، به معنی استفاده چند باره از یک میزان مشخص پول، برای انجام چند تراکنش متفاوت است.
همانطور که انتظار میرود، امکان دوبار خرج کردن اسکناس یا کارتهای بانکی که در اختیار داریم فراهم نیست. چرا که زمانی که با اسکناسی که در کیف خود داشتید یک خرید انجام دهید، تراکنش بلافاصله انجام شده و حالا شما به جای اسکناسی که تا چند دقیقه قبل در اختیار داشتید، صاحب کالایی شدهاید که با آن اسکناس خریداری کردهاید. چنین مسئلهای در ارتباط با کارتهای بانکی که در اختیار داریم نیز صادق است. در واقع به محض اینکه در فروشگاهی کارت میکشیم، بلافاصله مشخص میشود که آیا حساب ما به اندازه مبلغ وارد شده روی دستگاه، موجودی دارد یا خیر، که در صورت وجود مبلغ کافی برای خرید، این تراکنش نیز به سرعت انجام شده و مبلغ مورد نظر از حساب کسر میشود.
بنابر مواردی که گفتیم، مشخص میشود امکان «دوبار خرج کردن» هنگام انجام تراکنشهای مالی از طریق پول نقد و حسابهای بانکی وجود ندارد. اما چه زمانی با ریسک دوبار خرج کردن روبرو هستیم؟
روبرویی با احتمال دابل اسپندینگ
با توجه به اینکه رمزارزها فایلهای دیجیتالی هستند، احتمال کپی کردن آنها برخلاف پول فیزیکی کاملا وجود دارد. بنابراین میتوان چنین گفت که مشکل دوبار خرج کردن با معرفی ارزهای دیجیتال بهوجود آمده است. اما منظور از دوبارخرج کردن در حوزه رمزارزها چیست؟
بهعنوان مثال بیت کوین را در نظر بگیرید. از آنجایی که تراکنشهای این ارز بهصورت آنی انجام نمیگیرند، یک تاخیر وجود دارد. و این تاخیر امکان خرج کردن دوباره بیت کوین را مطرح میکند. منظور از خرج کردن دوباره در ارزهای دیجیتال این است که بهعنوان مثال من یک بار با یک بیتکوین تراکنشی را با فرد «الف» انجام دهم و از آنجایی که تایید تراکنشها آنی نیستند، مجددا با همان بیت کوین تراکنش دیگری را با فرد «ب» انجام دهم. این عمل درست مثل این است که پولی که در دست داشتم را کپی کرده، دوبار خرج کرده باشم. حال باید دید آیا شبکه بیت کوین اجازه چنین اتفاقی را میدهد یا خیر؟
هدف شبکه بیت کوین جلوگیری از دوبار خرج کردن است. این شبکه تمام تراکنشها را پیگیری کرده و دائما موجودی تمام افراد را بروز رسانی میکند تا از حمله دوبار خرج کردن، جلوگیری کند. اما نحوه عملکرد این شبکه در این راستا چگونه است؟
بیت کوین چگونه مشکل دوبار خرج کردن را حل میکند؟
برای درک اینکه چرا نمیتوان یک بیت کوین را دوبار خرج کرد باید بدانیم نحوه عملکرد بلاکچین بیت کوین به چه صورت است. بلاکچین در واقع مشابه یک دفتر کل عمل میکند. دفتری که تمام تراکنشهای انجام شده را از آغاز تا همین امروز در خود ثبت کرده و این فرآیند ثبت تراکنشها همواره ادامه پیدا میکند.
تصور کنید کسی قصد دارد مشابه مثالی که در قسمت قبل مطرح کردیم، با یک بیت کوین دو تراکنش انجام دهد. در ارتباط با تراکنشهایی که با بیت کوین انجام میشود برخلاف برداشت از حساب بانکی نهادی مانند بانک وجود ندارد که بر مانده حساب خریدار یعنی کسی که قصد دارد با بیت کوین تراکنشی انجام دهد، نظارت کرده و از وجود مانده حساب کافی برای انجام تراکنش اطمینان حاصل کند. اما وجود ماینرها مانند یک نهاد نظارتی عمل میکند. در چنین شرایطی، تراکنشها قبل از اینکه قطعی شوند در صف تایید توسط ماینر قرار میگیرند.
در واقع بلاکچین بیت کوین برای تایید تراکنش انجام شده، تراکنشها را از نظر «زمان انجام» مورد بررسی قرار میدهد. یعنی تمام تراکنشهای افراد به ترتیب زمان وقوع مرتب شده و سپس در صف تایید توسط ماینر قرار میگیرد. بنابراین ماینر ابتدا نخستین تراکنشی را که کسی انجام داده بررسی میکند و درصورتی که موجودی کیفپول دیجیتال فرد مورد نظر برای انجام این تراکنش کافی بود، تراکنش گفته شده تایید میشود.
همانطور که در مثال گفتیم، فرض میکنیم فردی قصد داشت با استفاده از همان بیت کوین تراکنش دیگری را نیز انجام دهد. یعنی قصد دوبار خرج کردن داشته است. در چنین شرایطی ماینر که تراکنش قبلی او را بهعلت موجودی حساب کافی تایید کرده بود، تراکنش بعدی را به علت نبود موجودی کافی معتبر نمیشمارد و تراکنش انجام نمیشود. بنابراین شبکه بیتکوین با چنین اقدامی از حمله دوبار خرج کردن جلوگیری میکند.
اگر دو تراکنش کاملا همزمان انجام شده باشند چه اتفاقی میافتد؟
در چنین شرایطی مشابه تمام تراکنشهای دیگر، تراکنشهای تایید نشده وارد گروهی از تمام تراکنشهای تایید نشده دیگر میشوند. سپس در یک بلاک قرار میگیرند و ماینرها مشابه موارد دیگر روی آن کار میکنند. در این حالت برای ماینر تفاوتی ندارد که تراکنش با فرد «الف» انجام شود یا با فرد «ب». تنها نکتهای که اهمیت دارد این است که یا تراکنش «الف» انجام میشود، یا تراکنش «ب». در واقع مهمترین مسئله این است که قرار نیست هر دو تراکنش تایید شده و انجام پذیرند. بنابراین اگر هر کاربری به صورت خواسته یا ناخواسته اقدام به دوبار خرج کردن کند، انتظار نمیرود تاثیر چندانی روی شبکه بیت کوین بگذارد.
نحوه انتخاب ماینر
نحوه انتخاب ماینر از میان تراکنشهای «الف» و «ب» به چه صورت است؟ زمانی که دو تراکنش همزمان به صف تایید توسط ماینر افزوده میشوند، ماینر تراکنشی را معتبر میشمارد که بیشترین میزان تایید را داشته باشد. منظور از تایید این است که شبکه بیت کوین به این توافق رسیده که بیت کوینهای ارسال شده برای مثلا فروشنده «الف» به خود او اختصاص دارد و برای فرد دیگری ارسال نشده بود و بنابراین میتوان آن را جزئی از داراییهای فرد «الف» دانست.
به طور معمول برای تایید تراکنش زمانی حدود ۱۰ دقیقه لازم است تا شبکه ضمن تایید بیت کوین آن را به یک بلاک ضمیمه کند. چنین اقدامی احتمال برگشت خوردن تراکنش را کاهش میدهد. در نظر داشته باشید اگرچه هر کاربر آزاد است که خودش تعداد تایید مورد نیازش را تعیین کند، اما توصیه میشود برای قطعی دانستن تراکنش تا دریافت ۶ تایید صبر کنید.
حال به مثال خود برمیگردیم. اگر فردی به طور همزمان، با یک بیت کوین، با دو فروشنده «الف» و «ب» دو تراکنش انجام داده باشد، کدام تراکنش توسط ماینر تایید شده و قطعی شمرده میشود؟ در چنین شرایطی تراکنشی رسمیت پیدا میکند که بیشترین تعداد تایید را داشته باشد.
انواع روشهای حمله دوبار خرج کردن
همانطور که اشاره شد حمله دوبار خرج کردن زمانی اتفاق میافتد که یک نفر قصد داشته باشد یک بیت کوین ثابت را حداقل دو مرتبه خرج کند. اما این حمله میتواند به روشهای متعددی انجام شود. یکی از این روشها به روش ۵۱٪ معروف است. در ادامه این روش را مورد بررسی قرار میدهیم.
روش حمله ۵۱٪
حمله 51 درصد که از آن با عنوان حمله اکثریت نیز یاد میشود، زمانی اتفاق میافتد که یک نفر یا گروهی از افراد کنترل قدرت هش بیش از 50 درصد یک بلاکچین را بهدست میآورد.
زمانی که کسی این میزان از کنترل را روی شبکه بهدست آورد میتواند جلوی تاییدتراکنشهای جدید را بگیرد و حتی ترتیب این تراکنشها را تغییر دهد! این حمله همچنین با ایجاد امکان بازنویسی بخشهایی از بلاکچین و معکوس کردن تراکنشها، میتواند باعث حمله دوبار خرج کردن شود.
روش حمله مسابقه | The Race Attack
این روش تا حدی مشابه مواردی است که تا اینجا توضیح دادیم. در واقع روش حمله مسابقه از طریق انجام دو تراکنش پی در پی و با فاصله زمانی بسیار اندک انجام میشود. برای درک بهتر مثالی میزنیم. تصور کنید فردی با یک تاجر معاملهای انجام میدهد که طبق آن باید تاجر بهازای دریافت بیت کوین به او کالای مشخصی را تحویل دهد. فرد مورد نظر قصد دارد بدون پرداخت میزان رمز ارز مورد توافق کالاها را دریافت کند. بهخاطر همین هم ابتدا تراکنش مورد نظر را به سمت حساب خود و سپس همان تراکنش را به حساب تاجر انجام میدهد. در چنین شرایطی ماینر اولین تراکنش را معتبر شمرده و تاجر صرفا کالا را تحویل داده بدون اینکه پولی دریافت کرده باشد.
روش حمله نهایی | Finney Attack
فرض کنید کسی که قصد حمله دارد در حال ایجاد یک بلاکچین است و در هر بلاک تراکنشی ایجاد میکند. مثلا از «الف» به «ب» که آدرسهایی هستند که فرد حملهکننده آنها را کنترل میکند. این روش نیز مبتنی بر ارسال رمز ارز به حساب تاجری است که پیش از دریافت قطعی پول اقدام به تحویل کالایی خاص کرده باشد. در واقع این حمله زمانی به موفقیت میرسد که فردی تراکنش تایید نشده توسط ماینر را بپذیرد. در این صورت تراکنش انجام شده به حساب تاجر از درجه اعتبار ساقط شده و فرد حملهکننده موفق به دوبار خرج کردن میشود.
حمله بردار ۷۶ یا حمله تایید | Vector Attack 76
این حمله ترکیبی از حمله نهایی و حمله مسابقه است. در این نوع از حمله که نسبت به سایر موارد کمتر شناخته شده است، هکر از بلاکی که خودش ساخته استفاده میکند تا فروشنده تصور کند تراکنش توسط ماینر تایید شده است.
رویکردهای مقابله با دوبار خرج کردن
رویکرد متمرکز
در این رویکرد علاوه بر اینکه طرفین معامله حضور دارند، طرف سومی نیز به عنوان نهاد ناظر در معامله حضور پیدا میکند تا از انجام صحیح و کامل تراکنش اطمینان حاصل کرده تضمین کند که طرف فروشنده، قطعا پول دریافت میکند.
در نظر داشته باشید مقابله با حمله دوبار خرج کردن به این شیوه بسیار سادهتر از رویکرد غیر متمرکز است که تعریف آن در ادامه میآید.
رویکرد غیرمتمرکز
همانطور که در ابتدای مقاله گفتیم، در معاملاتی که با بیت کوین انجام میشود، هیچ نهاد ناظری وجود ندارد تا مانند رویکرد متمرکز بر نحوه انجام تراکنش نظارت کرده و از انجام صحیح آن اطمینان حاصل کند. نحوه عملکرد این رویکرد به همان صورتی است که در ابتدا مطرح شد. یعنی تراکنشها تا زمانی که توسط ماینر تایید نشوند قطعیت پیدا نمیکنند.
جمعبندی
در این مقاله با مفهومی تحت عنوان «دوبار خرج کردن» یا Double Spending آشنا شدیم که اگرچه در معاملات انجام شده با پول فیزیکی یا کارتهای بانکی نمیتواند مشکلی ایجاد کند اما تراکنشهای انجام شده با بیت کوین را تهدید میکند. این حمله که میتواند به روشهای متعددی انجام شود، عموما با فریب دادن فروشنده از طریق یک تایید یا بلاک جعلی ایجاد شده عمل میکند. در ادامه مطلب سازوکار دفاعی شبکه بیت کوین را برای مقابله با تهدید خرج کردن دوباره مورد بررسی قرار داده و روشهای مختلف حمله به این هدف را مطرح کردیم.
و در انتها دیدیم اگرچه در شبکه بیت کوین نهادی نظارتی برای اطمینان از درستی معاملات و تراکنشها وجود ندارد اما برخورداری از رویکردی جمعی در این شبکه باعث شده احتمال نفوذ به آن بسیار کم باشد.
لینک کوتاه کپی شد https://mazdax.ir/academy/?p=1822