فهرست مطالب
- دابل اسپندینگ چیست ؟
- روشهای دابل اسپندینگ چیست ؟
- روش مقابله با خرج مضاعف یا دابل اسپندینگ چیست ؟
- آیا احتمال دابل اسپندینگ در شبکه بیت کوین وجود دارد ؟
- برای جلوگیری از دابل اسپندینگ به چه نکاتی باید توجه کرد؟
- جمعبندی
یکی از شرایط اولیه برای کاربردی شدن یک ارز، توانایی آن در جلوگیری از «دابل اسپندینگ» (Double-Spending) یا خرج چندباره ارزها است. دابل اسپندینگ در دنیای واقعی اتفاق نمیافتد اما در فضای دیجیتال قضیه کمی متفاوت است. پول در فضای دیجیتال به صورت کد ایجاد میشود و انتقال پول به معنی ثبت تراکنشها در شبکه است.
شبکه بیت کوین به عنوان اولین رمز ارز شناخته شده، توانسته است با استفاده از ساختار بلاک چین، الگوریتم اجماع اثبات کار و تکنیکهای رمزنگاری، امکان دابل اسپندینگ و خرج مضاعف بیت کوین را با درصد اطمینان بسیار بالایی حل کند به گونهای که تا به امروز مشکل دابل اسپندینگ در این شبکه مشاهده نشده است. در ادامه به طور مفصل با بررسی نحوه کار شبکه بیت کوین به سوال دابل اسپندینگ چیست پاسخ میدهیم.
دابل اسپندینگ چیست ؟
«دابل اسپندینگ» یا «خرج مضاعف» یکی از مشکلات اساسی ایجاد ارز دیجیتال قبل از توسعه تکنولوژی بلاک چین و ایجاد بیت کوین بود. اگر مدیریت سیستم انتقال پول به صورت متمرکز باشد، تراکنشها قبل از نهایی شدن به سیستم متمرکز ارسال میشوند. سیستم متمرکز با مراجعه به اطلاعات تراکنشهای قبلی کاربر، امکان انجام تراکنش را تایید میکند و پس از آن تراکنش نهایی میشود. بنابراین، اگر سیستم متمرکز درست کار کند، امکان دابل اسپندینگ وجود نخواهد داشت.
در فضای غیرمتمرکز و توزیع شده، پیچیدگی مساله افزایش مییابد زیرا یک نهاد واسط برای ثبت تراکنشها وجود ندارد و مجموعهای از کاربران از سراسر جهان که همدیگر را نمیشناسند و به هم اعتماد ندارند، مدیریت این سیستم را بر عهده دارند. در چنین سیستمی، کاربر میتواند با پول محدود خود، چندین تراکنش ثبت و دارایی خود را چند بار مصرف کند. اگر چنین اتفاقی بیفتد، اعتبار سیستم غیرمتمرکز از بین میرود. به همین دلیل، یکی از اصلیترین ویژگیهای یک سیستم غیرمتمرکز کارا، مقاومت آن در برابر دابل اسپندینگ است.
سیستم طراحی شده برای تولید و استفاده از ارزهای دیجیتال باید بهگونهای باشد که کاربران قادر به خرج دوباره یا چندباره ارزهای دیجیتال خود نباشد زیرا اگر کاربران امکان خرج مضاعف یک ارز را داشته باشند، آن ارز دیگر ارزشی نخواهد داشت. دابل اسپندینگ به ریسک استفاده دوباره یا چندباره از ارزهای دیجیتال گفته میشود که به طور مستقیم با فرآیند ثبت تراکنشها در ارتباط است.
بهترین روش برای پاسخ دادن به سوال دابل اسپندینگ چیست بررسی سوال بیت کوین چگونه کار می کند و بررسی این مفهوم در شبکه بیت کوین است. در بلاک چین بیت کوین نحوه ثبت تراکنشها به این شکل است که کاربران تراکنشهای خود را به شبکه ارسال میکنند. پس از تایید امکانپذیری انجام این تراکنشها با استفاده از تاریخچه بلاکهای قبلی و تایید صحت ارسال کننده با امضای دیجیتال، تراکنشها در ممپول یا استخر حافظه جمعآوری میشوند.
ماینرها با جمعآوری اطلاعات تراکنشها و تلفیق آنها با مهر زمانی و هش بلاک قبلی، کار ایجاد بلاک را در الگوریتم اجماع آغاز میکنند. پس از پیدا کردن جواب معادله بلاک توسط یکی از کاربران و تایید آن توسط مابقی ماینرها، بلاک مورد نظر تایید و به بلاک چین اضافه میشود. کاربر برنده، پاداش استخراج بلاک را به دست میآورد و ماینرها دوباره کار ساخت بلاک را با اطلاعات جدید آغاز میکنند.
کار ثبت بلاک در شبکه بیت کوین در حدود ده دقیقه زمان نیاز دارد. در این مدت ماینرها با حل معادله ریاضی هر بلاک به دنبال رسیدن به پاسخ آن و دریافت پاداش شبکه هستند. بنابراین، اگر کاربری به دنبال خرج مضاعف بیت کوینهای خود باشد باید بتواند کاری کند که به صورت همزمان دو تراکنش با مقاصد مختلف در شبکه بلاک چین ثبت شود. در بخش بعد به سوال روش انجام دابل اسپندینگ چیست پاسخ میدهیم و راهکارهای شبکه بیت کوین برای جلوگیری از آن را بررسی میکنیم.
روشهای دابل اسپندینگ چیست ؟
در بخش قبل به سوال دابل اسپندینگ چیست پاسخ دادیم و اتفاقاتی که ممکن است در یک شبکه ارز دیجیتال برای یک تراکنش رخ بدهد را بررسی کردیم. اگر روال عادی ثبت تراکنشها در شبکه بیت کوین طی شود و کاربران برای تایید تراکنشهای انجام شده به مدت زمان لازم که در حدود شش بلاک است صبر کنند، احتمال دابل اسپندینگ صفر است. علاوه بر عدم صبر کردن کاربران برای تایید تراکنشها، گاهی اوقات عدم درستکاری ماینرها در شبکه نیز میتواند منجر به دابل اسپندینگ شود. در ادامه، سه حمله اصلی که در شبکه بلاک چین میتواند منجر به دابل اسپندینگ شود را بررسی میکنیم.
ارتباط حمله 51 درصد با دابل اسپندینگ چیست ؟
«حمله 51 درصدی» (Attacks %51) یکی از اصلیترین حملات مطرح در تکنولوژی دفتر کل توزیع شده است. در این تکنولوژی، تصمیم نهایی تایید و ثبت تراکنشها در شبکه، توسط اکثریت فعالان شبکه گرفته میشود. بنابراین، اگر اکثریت کاربران شبکه همدست شوند، میتوانند بلاکهای مورد نظر خود را به شبکه اضافه کنند که این راه را برای خرج مضاعف رمز ارزها باز میکند.
در این حالت کاربران میتوانند با ایجاد بلاکهای جدید شامل تراکنشهای دلخواه خود، یک زنجیره جانبی ایجاد کنند که طول آن بیشتر از زنجیره اصلی است و از این طریق دابل اسپندینگ انجام دهند. اگرچه از نظر تئوری این اتفاق ممکن است برای تمامی شبکههای با الگوریتم اجماع اثبات کار رخ دهد و برای شبکههایی که توان پردازشی بالایی ندارند، قبلا اتفاق افتاده است اما احتمال این اتفاق برای شبکه بیت کوین به دلیل تعداد زیاد ماینرها و توان پردازشی بالای موجود در شبکه تقریبا صفر است.
به دست آوردن توان پردازشی 51 درصدی شبکه بیت کوین به سرمایه زیادی نیاز دارد و به کار گرفتن آنها نیازمند مصرف انرژی بالایی است. حتی با فرض به دست آوردن این توانایی، فعالیت خرابکارانه در شبکه منجر به ریزش ارزش بیت کوین و هدر رفتن انرژِی کاربر میشود. احتمال حمله 51 درصدی در شبکههای با الگوریتم اثبات سهام کمتر از شبکههای با الگوریتم اثبات کار است زیرا حمله به شبکه در حکم از بین رفتن ارزش رمز ارز شبکه است و کاربر حمله کننده، بیشترین تعداد رمز ارزهای شبکه را در اختیار دارد و با از بین رفتن شبکه، بیشترین ضرر را متحمل میشود.
ارتباط حمله مسابقه با دابل اسپندینگ چیست ؟
از مطالب بخش قبل متوجه شدیم که ارتباط حمله 51 درصد با دابل اسپندینگ چیست و چگونه این حمله در شبکههای بلاک چینی انجام میشود. یکی دیگر از حملات مطرح برای دابل اسپندینگ «حمله مسابقه» (Race Attack) است که در بخشهای قبلی توضیحات مفصلی در مورد آن دادیم. هدف از حمله مسابقه این است که کاربر دو تراکنش به شبکه ارسال کند اما تراکنش دوم در شبکه ثبت شود. برای انجام این کار، کاربر تراکنش دوم را با هزینه کارمزد بیشتر و به آدرسی که در کنترل خودش قرار دارد، ارسال میکند.
در این حالت تراکنش دوم به جای تراکنش اول در فهرست تراکنشهای ماینرها قرار میگیرد و تراکنش اول در شبکه ثبت نمیشود. در این حمله کاربر زمانی موفق به خرج مضاعف میشود که پیش از تایید و ثبت تراکشن در شبکه، کاربر دریافت کننده را مجاب به قبول ثبت تراکنش و دریافت کالا و خدمات کند. در غیر اینصورت، با تایید تراکنش دوم، تراکنش اول حذف میشود و کاربر از حمله آگاه میشود.
ارتباط حمله فینی با دابل اسپندینگ چیست ؟
«حمله فینی» (Finney Attack) سومین نوع حمله ممکن برای دابل اسپندینگ در شبکههای بلاک چینی است. در این روش، یک ماینر تراکنش مد نظر خود را بدون اینکه به شبکه ارسال کند، از قبل ماین میکند. پس از ماین، ماینر در یک تراکنش دیگر، دارایی خود را خرج میکند و به شبکه ارسال میکند. بلافاصله پس از ارسال تراکنش به شبکه، ماینر بلاک از قبل ماین شده را به عنوان بلاک جدید برنده به شبکه معرفی میکند.
در چنین حالتی، ماینرها بلاک قدیمی که شامل تراکنش اصلی مد نظر کاربر بود را تایید و به شبکه ارسال میکنند و شبکه دوم برای بلاک بعد میماند و نامعتبر میشود. در این حالت نیز برای موفق بودن حمله، کاربر دریافت کننده تراکنش باید قبل از تایید نهایی تراکنش، کالا و خدمات مورد نظر ماینر را در اختیار او قرار داده باشد وگرنه با گذشت زمان بلاک غیرمعتبر شناخته میشود و حمله بی نتیجه خواهد ماند. در بخش بعدی به سوال روش مقابله با دابل اسپندینگ چیست پاسخ میدهیم.
روش مقابله با خرج مضاعف یا دابل اسپندینگ چیست ؟
کار ثبت تراکنشها در شبکه بیت کوین با اجماع ماینرها بر درستی اطلاعات ثبت شده در بلاک انجام میشود. بنابراین، برای خرج مضاعف بیت کوینها، باید دو تراکنش به صورت همزمان در شبکه ثبت شود. فرض کنید کاربری یک بیت کوین در حساب معاملاتی خود دارد. او بیت کوین خود را ابتدا در یک تراکنش به فرد A و بار دیگر و در تراکنش جدید به فرد B ارسال میکند.
این دو تراکنش هر دو در ممپول شبکه بیت کوین ذخیره میشوند زیرا صحت اطلاعات اضافه شده با ممپول تنها توسط اطلاعات بلاکهای تایید شده در بلاکهای قبلی انجام میشود. در چنین شرایطی ماینرهای بیت کوین تعدادی از تراکنشهای موجود در شبکه را (تا اندازه 1 مگابایت) انتخاب و بلاک جدید خود را با طی کردن فرآیند هشینگ میسازند.
با توجه به این که اطلاعات حساب کاربران در اختیار ماینرها است، ماینرها در این مرحله میتوانند تشخیص دهند که پس از تایید بلاک قبلی، کاربر تنها یک بیت کوین در اختیار داشت و در این دو تراکنش میخواهد بیش از یک بیت کوین خرج کند. بنابراین، ماینرها تنها یکی از تراکنشها را به شبکه اضافه میکنند و تراکنش دوم به کل حذف میشود.
از آنجایی که ماینرهای بیت کوین هر کدام به طور مستقل تراکنشهای موجود در ممپول بیت کوین را به لیست تراکنشهای بلاک خود اضافه میکنند، ممکن است یک ماینر تراکنش اول و ماینر دیگری تراکنش دوم را به لیست تراکنشهای خود اضافه کرده باشد. پس از ایجاد بلاک، ماینرها در طی یک فرایند رقابتی با قرار دادن مقادیر نانس متفاوت، به دنبال حل معادله شبکه هستند.
هر کاربری که بلاک را زودتر ماین کند و بلاک ماین شده توسط دیگر ماینرها تایید شود، برنده رقابت شناخته میشود. بلاک تهیه شده توسط ماینر برنده به شبکه بلاک چین اضافه میشود که ممکن است شامل تراکنش اول یا دوم باشد اما به طور همزمان نمیتواند شامل دو تراکنش باشد. حتی اگر ماینری خود دو تراکنش را به بلاک خود اضافه کند و برنده رقابت شود، در مرحله تایید توسط دیگر ماینرها، اطلاعات تراکنشها غیرمعتبر شناخته میشوند و ماینر برنده شناخته نمیشود.
بنابراین، کاربر در شبکه بیت کوین میتواند دو تراکنش خرج مضاعف را به شبکه ارسال کند اما از میان آنها تنها یکی از تراکنشها به شبکه اضافه میشود. معمولا تراکنش اول به دلیل ارسال زودهنگام در لیست تراکنشهای بیشتر ماینرها قرار میگیرد و شانس ثبت شدن در بلاک چین را دارد اما در صورتی که کاربر کارمزد بیشتری برای تراکنش دوم در نظر گرفته باشد، ماینرها برای کسب سود بیشتر از کارمزد تراکنشها، تراکنش دوم را در اولویت قرار میدهند و به این واسطه تراکنش اول حذف میشود.
با توجه به توضیحات داده شده، میتوان گفت اگر کاربر تراکنش دوم را به آدرسی که در اختیار دارد ارسال کند و تراکنش دوم در شبکه ثبت شود، در این حالت دابل اسپندینگ انجام شده است. البته شرط انجام دابل اسپندینگ این است که کاربر دریافت کننده تراکنش اول، پیش از اینکه منتظر تایید تراکنش باشد، کالا یا خدمات خود را به مشتری ارائه کرده باشد. بنابراین، به طور کلی میتوان گفت امکان دابل اسپندینگ در شبکه بیت کوین وجود ندارد مگر در شرایطی که کاربر تراکنش ثبت نشده در بلاک چین را به عنوان تراکنش قطعی در نظر بگیرد.
دابل اسپندینگ در اثر فورک شبکه
یک حالت خاص دیگر دابل اسپندینگ مربوط به ایجاد دو تراکنش توسط کاربر است که در آن تراکنش اول کاربر توسط ماینر A و تراکنش دوم توسط ماینر B در لیست تراکنشها قرار میگیرد و اتفاقا هر دو این ماینرها به صورت همزمان به جواب بلاک میرسند. در این حالت مساله فورک موقت ایجاد میشود. منظور از فورک ایجاد دو زنجیره موازی در یک بلاک چین است. در ساختار بلاک چین وجود چند زنجیره پذیرفتنی نیست و زنجیرهای که بیشترین طول را دارد به عنوان زنجیره اصلی شناخته میشود.
در این شرایط که دو بلاک به صورت همزمان توسط دو ماینر به شبکه اضافه میشود، برخی از ماینرها زنجیره ایجاد شده توسط ماینر A و برخی دیگر زنجیره ایجاد شده توسط ماینر B را تایید میکنند و بلاک بعدی خود را بر اساس آن میسازند. در این حالت، هر دو زنجیره به صورت موقت معتبر است اما با ساخت بلاک بعدی روی یکی از زنجیرهها، زنجیره دیگر غیرمعتبر میشود و کلیه تراکنشهای موجود در آن بیاعتبار شده و به ممپول برمیگردند و پس از بررسی دوباره، به بلاکهای جدید اضافه میشوند.
اگر فرض کنیم زنجیره با تراکنش دوم، به عنوان زنجیره نهایی ثبت شده است، تراکنش اول به ممپول برمیگردد و ماینرها با بررسی حساب کاربر به این نتیجه میرسند که امکان ثبت این تراکنش در شبکه وجود ندارد و تراکنش نامعتبر میشود و دابل اسپندینگ انجام میشود.
مساله ایجاد دو زنجیره موازی به صورت همزمان، اتفاق نرمالی نیست اما همچنان امکان رخ دادن آن وجود دارد. بنابراین، در برخی مواقع با وجود ثبت یک تراکنش در یکی از بلاکهای تایید شده بلاک چین، ممکن است به دلیل ایجاد زنجیره موازی، بلاک نامعتبر شود و دابل اسپندینگ اتفاق بیفتد. ایجاد دو زنجیره همزمان میتواند به صورت اتفاقی در بلاک بعدی هم ادامه دار باشد.
یعنی دو ماینر به طور همزمان در ادامه زنجیرههای ایجاد شده توسط ماینرهای A و B، دو بلاک به صورت همزمان ایجاد کنند و هر دو زنجیره ادامه داشته باشد. این اتفاق در تئوری میتواند تا ابد رخ بدهد اما از نظر احتمالاتی پس از تایید شش بلاک، به طور قطع میتوان گفت که تراکنشهای ثبت شده به تایید نهایی رسدهاند و امکان غیرمعتبر شدن بلاک وجود ندارد. بنابراین، قطعیترین روش جلوگیری از دابل اسپندینگ در شبکه بیت کوین منتظر ماندن برای تایید شش بلاک متوالی است که به حدود یک ساعت زمان نیاز دارد.
آیا احتمال دابل اسپندینگ در شبکه بیت کوین وجود دارد ؟
شبکه بیت کوین در مقابل دابل اسپندینگ بسیار مقاوم و قوی است. ساختار زنجیرهای بلاکها و نیاز شبکه به مصرف انرژی و انجام محاسبات برای اضافه کردن بلاک جدید به بلاک چین، باعث شده است که امکان هر نوع دابل اسپندینگ در شبکه از بین برود. تا به امروزه حتی یک مورد از دابل اسپندینگ در شبکه بیت کوین ثبت نشده است با این حال، امکان دابل اسپندینگ برای کاربرانی که منتظر تایید نهایی تراکنشها توسط شبکه نمیمانند، وجود دارد.
بنابراین، بهتر است در تراکنشهای بیت کوین همواره صبر کنید تا بلاکی که تراکنش شما در آن وجود دارد، به تایید نهایی برسد و سپس معامله خود را نهایی کنید. برای مبالغ خیلی بالا، قرار گرفتن بلاک مورد نظر در شبکه نیز کافی نیست و باید تا زمان ثبت شدن شش بلاک صبر کنید تا امکان ایجاد زنجیرههای موازی در بلاک چین و غیرمعتبر شدن بلاک شما به صفر برسد.
برای جلوگیری از دابل اسپندینگ به چه نکاتی باید توجه کرد؟
در شبکههاب بلاک چینی روشهای مختلفی برای دابل اسپندینگ وجود دارد. برای جلوگیری از سواستفادههای مرتبط با این موضوع کاربران باید منتظر نهایی شدن تراکنشهای خود در شبکه باشند. زمان نهایی شدن در شبکههای بلاک چینی مختلف متفاوت است. به عنوان مثال، در شبکه بیت کوین این زمان حدود یک ساعت و پس از ثبت شش بلاک در شبکه است. در بسیاری از بلاک چینهای جدید این زمان در حد چند ثابنه است. بنابراین، برای جلوگیری از دابل اسپندینگ در هنگام خرید و فروش ارزهای دیجیتال باید به نهایی شدن تراکنش در شبکه بلاک چین دقت کنید.
جمعبندی
خرج مضاعف یا دابل اسپندینگ به فرآیند خرج دوباره یا چندباره توکنهای ارز دیجیتال گفته میشود. این مساله با استفاده از راهکارهای درست ثبت اطلاعات و تعیین الگوریتمهای اجماع مناسب در شبکههای بلاک چینی حل شده است. در این مقاله علاوه بر پاسخ به سوال دابل اسپندینگ چیست سوالاتی مانند روش های دابل اسپندینگ چیست و روش مقابله با دابل اسپنیدنگ چیست بررسی شدند.
در صورتی که کاربران نکات امنیتی مربوط به انتظار تا زمان تایید تراکنشها را رعایت کنند و قدرت ماینرها توزیع شده باشد، دابل اسپندینگ به هیچ وجه در شبکه بیت کوین امکان پذیر نخواهد بود. در مقاله بعدی به بررسی مفهوم هشینگ و توابع هش میپردازیم تا پازل بررسی الگوریتم اجماع و انواع آن کامل شود.
نظر خود را با ما به اشتراک بگذارید