شبکههای بلاکچین همواره با چالشهای فراوانی روبهرو هستند. یکی از قدیمیترین و همچنین مهمترین چالشهایی که حتی قبل از ظهور بیت کوین به عنوان اولین ارز دیجیتال برای شبکههای بلاکچین مطرح میشد، دابل اسپندینگ یا دوبار خرج کردن یک ارز دیجیتال است.
دابل اسپندینگ مشکلی است که در صورت عدم جلوگیری از آن، کل سیستمهای مالی مبنیبر بلاکچین کاربرد خود را از دست میدهند. در ادامه این مطلب ضمن تشریح مفهوم دابل اسپندینگ، جزئیات این مشکل و تکنیکهای جلوگیری از آن را نیز مطرح خواهیم کرد.
فهرست مقاله
Toggleدرک مفهوم دابل اسپندینگ
همانطور که از معادل فارسی دابل اسپندینگ Double spending مشخص است، به حالتی گفته میشود که یک ارز دیجیتال، دوبار خرج شود؛ اما این مشکل چگونه رخ میدهد؟
بهطورکلی یک کریپتوکارنسی، به توکنی گفته میشود که روی یک distributed ledger دارای ارزش است. عبارت distributed ledgerدر فارسی با نام «دفتر کل توزیع شده» ترجمه میشود و به یک دیتابیس غیرمتمرکز اشاره دارد. باتوجه به غیر متمرکز بودن دادههایی که ذخیره شدهاند، میتوان یک ورودی را در distributed ledger تغییر داد و توکنی که خرج شده است را دوباره مصرف کرد؛ این اتفاق، با نام دابل اسپندینگ یا دوبار خرج کردن شناخته میشود.
جلوگیری از دابل اسپندینگ
دابل اسپندینگ برای تمامی رمزارزها بهعنوان خطری جدی شناخته شده و هیچ ارز دیجیتالی وجود ندارد که از این معضل دور باشد؛ زیرا تمامی ارزهای دیجیتال با استفاده از تکنولوژی بلاکچین پیادهسازی میشوند و این تکنولوژی همواره با این مشکل روبهرو است. نکتهای که در این میان وجود دارد، این است که با استفاده از تکنیکهایی بهخصوص میتوان از دابل اسپندینگ جلوگیری کرد که به شرح زیر هستند:
مکانیزم Proof-of-Work
در مکانیزم Proof-of-Work که به اختصار با عبارت PoW نیز شناخته میشود، هر نقل و انتقالی که صورت میگیرد باید توسط چند عضو دیگر شبکه به تایید برسد. این اعضا که بهعنوان ماینرها شناخته میشوند، با حل مسائل پیچیده ریاضی یک بلاک را به بلاکچین اضافه کرده و تعدادی تراکنش را در آن ذخیره میکنند. ذخیره کردن تراکنشها و نگهداری آنها در بلاکچین، باعث میشود که یک فرد پس از انتقال رمزارز به یک آدرس، نتواند مجددا همان رمزارز را به آدرسی دیگر منتقل کند؛ چراکه این کار با اطلاعاتی که در بلاکچین موجود هستند تناقض داشته و بههمینخاطر، تراکنش مورد تایید قرار نمیگیرد. رمزارزهایی مانند بیت کوین از این مکانیزم برای تایید تراکنشها استفاده میکنند.
مکانیزم Proof-of-Stake
یکی از مکانیزمهای جدید که امروزه رمزارزهای زیادی از آن استفاده میکنند، مکانیزم Proof-of-Stake یا به اختصار، PoS است. مزیتی که درمورد این مکانیزم وجود دارد، این است که نسبت به PoW به انرژی بسیار کمتری نیاز داشته و محاسبات پیچیده ریاضی در آن نقشی ندارند. در مکانیزم PoS هریک از دارندگان رمزارز یک بلاکچین میتوانند بهعنوان یک Validator وارد شبکه شوند؛ بدین نحو که تراکنشها را تایید کرده و بلاکهای جدید را به بلاکچین اضافه میکنند.
نکتهای که در این میان وجود دارد، این است که Validatorها باید مقداری رمزارز را بهعنوان وثیقه به شبکه بدهند. دلیل انجام این کار که با نام Staking شناخته میشود، این است که اگر Validator قصد انجام دابل اسپندینگ یا هرگونه عمل خلاف دیگر در شبکه را داشت، این وثیقه ضبط شده و خسارتی که به بلاکچین وارد شده است جبران شود. طبیعی است که Validatorها با مسدود کردن دارایی خود در شبکه، میزان مشخصی سود نیز دریافت میکنند. شبکههایی مانند اتریوم، سیستم PoS را برای تایید تراکنشهای خود درنظر گرفتهاند.
خیر؛ برای این که از یک شبکه بلاکچین در برابر خطر دوبار خرج کردن محافظت کرد، تکنیکهای زیادی ازجمله کریپتوگرافی مورد استفاده قرار میگیرند؛ اما تمامی این تکنیکها، معمولا بهعنوان یک چاشنی در کنار مکانیزمهای PoW و PoS عمل میکنند. تعدادی از آنها به شرح زیر هستند:
تایید چندگانه – Multiple Confirmation
بعد از این که یک بلاک در شبکه بلاکچین به ثبت رسید، اعتبارسنجی آن پایان نمییابد. برای این که این بلاک یه یک بلاک معتبر تبدیل شود، لازم است تا از طرف چند بلاک بعدی نیز مورد تایید قرار بگیرد. این که انجام تراکنش به تایید چه تعدادی از بلاکهای بعدی نیاز داشته باشد، تا حد زیادی به سیاستهای امنیتی بلاکچین بستگی دارد.
تاییدهای غیر متمرکز – Decentralized Consensus
یکی دیگر از متدهایی که بسیاری از بلاکچینها برای حفظ امنیت خود و جلوگیری از دابل اسپندینگ از آن استفاده میکنند، انجام تاییدهای غیر متمرکز است. در این تکنیک هریک از تراکنشهایی که انجام میشوند باید توسط چندین نود مختلف در سراسر شبکه مورد تایید قرار بگیرند. این نودها میتوانند در هرکجای شبکه قرار داشته باشند و بههمینخاطر، از این روش بهعنوان تایید غیر متمرکز یاد میشود.
حملات دابل اسپندینگ
باتوجه به این که بلاکچینها با بهرهگیری از مکانیزمهای PoW و PoS از مشکل دوبار خرج کردن رمزارز جلوگیری کردهاند، بهصورت عادی نمیتوان دابل اسپندینگ انجام داد. فقط درصورتی این کار قابل انجام است که بتوان در عملکرد شبکه اختلال بهوجود آورد یا از عدم آگاهی یک کاربر سواستفاده کرد. هکرهایی که قصد انجام دابل اسپندینگ را دارند از روشهای متعددی برای این کار استفاده میکنند؛ اما خطرناکترین روش که البته انجام آن نیز بسیار دشوار است، در دست گرفتن کنترل ۵۱ درصد از بلاکچین است.
هنگامی که یک کاربر ۵۱ درصد بلاکچین را تشکیل میدهد، بدینمعنا است که بیش از نیمی از تراکنشها را تایید کرده و بلاکها در اختیار وی هستند. در این حالت میتواند بهراحتی برای خود تراکنشهای دابل اسپندینگ ایجاد کرده و آنها را تایید کند. البته این موضوع را باید درنظر داشت که کنترل بیش از ۵۱ درصد از بلاکچین، فقط در حالتی امکانپذیر است که گستردگی شبکه چندان زیاد نباشد. در واقع چنین کاری برای شبکههای بزرگی مانند بیت کوین یا اتریوم عملا غیر قابل انجام است.
دو مورد از حملات مرسوم دیگر که اجرای آنها آسان است اما احتمال موفقیتآمیز بودنشان بسیار کم است، حملات Finney و Race هستند. در حمله Finney یک ماینر ارز دیجیتال یک بلاک را استخراج کرده اما آن را به شبکه ارسال نمیکند. در همین حال، یک تراکنش که دوبار خرج شده است را برای یک گیرنده میفرستد و بعد از این که این تراکنش توسط گیرنده پذیرفته شد، بلاکی که استخراج کرده است را برای شبکه ارسال میکند.
در حمله Race، یک کاربر دو تراکنش همزمان را ارسال میکند که یکی از آنها برای یک گیرنده و یکی از آنها برای ماینرها فرستاده میشود. حمله Race درصورتی موفقیتآمیز است که تراکنشی که برای ماینرها ارسال شده است، زودتر از تراکنشی که برای یک گیرنده عادی فرستاده شده تایید شود.
لازم به ذکر است که حملات Race و Finney نیازی به کنترل ۵۱ درصد شبکه نداشته و توسط یک کاربر یا ماینر عادی نیز قابل انجام است. اصلیترین طعمه این حملات، کاربرانی هستند که با نحوه کارکرد ارزهای دیجیتال آشنا نبوده و تراکنشها را قبل از تایید شدنشان توسط شبکه میپذیرند.
جلوگیری از دابل اسپندینگ بهعنوان یک کاربر ارز دیجیتال
برای دوری از خطر دابل اسپندینگ، لازم است تا بهعنوان یک کاربر معمولی ارزهای دیجیتال نکاتی را درنظر داشت. مهمترین موارد به شرح زیر هستند:
قبول نکردن تراکنشهای تایید نشده
باتوجه به این که اغلب شبکههای بلاکچین امروزی به اندازهای گسترده هستند که نمیتوان بیش از ۵۱ درصد آنها را کنترل کرد و تراکنشهایی تایید شده را به وجود آورد، اغلب کسانی که قصد دارند رمزارز خود را دوبار استفاده کنند، معمولا تراکنشهایی را انجام میدهند که توسط Validatorها به تایید نرسیدهاند. نکتهای که باید آن را درنظر داشت، این است که نباید بههیچوجه تراکنشهایی که مورد تایید قرار نگرفتهاند را پذیرفت.
بعضی از کیف پولهای ارزهای دیجیتال بهطور خودکار تراکنشهایی که توسط شبکه تایید نشدهاند را نمیپذیرند؛ اما بعضی دیگر، حساسیتی روی این موضوع ندارند. پیشنهاد میکنیم که برای اطمینان از این موضوع، حتما تنظیمات کیف پول دیجیتال خود را مورد بررسی قرار دهید.
استفاده از رمزارزهای مرسوم
جلوگیری از دابل اسپندینگ با امنیت بلاکچین رابطهای مستقیم دارد. رمزارزهایی مانند بیت کوین و اتریوم که از مقبولیت بالایی برخوردار بوده و شبکههای پیشرفته و وسیعی را استفاده میکنند، نهتنها برای استفادههای روزمره، بلکه برای سرمایهگذاری نیز بهترین گزینهها بهحساب میآیند. رمزارزهایی که بهتازگی وارد بازار شدهاند و هنوز میزان امنیتشان مورد سنجش قرار نگرفته است، گزینههای خوبی برای انجام تراکنش نیستند.
استفاده از رمزارزهایی با هشریت بالا
هنگامی که در مورد کنترل بیش از ۵۱ درصد شبکه بلاکچین صحبت میشود، در واقع به در دست گرفتن بیش از نیمی از هشریت اشاره شده است. هشریت یک معیار برای سنجش توانایی محاسباتی یک شبکه بهحساب میآید؛ وقتی که هشریت بالا باشد، یعنی توانایی محاسباتی شبکه بالا بوده و پوشش نیمی از آن کاری دشوار یا غیرممکن خواهد بود. بههمینخاطر، بهتر است تا رمزارزهایی را انتخاب کرد که دارای هشریت بالایی هستند.
جمعبندی
در این مطلب سعی کردیم تا یک آشنایی کلی با دابل اسپندینگ و راهحلهای آن را ایجاد کنیم. شبکههای بلاکچین همواره با چالشهای زیادی روبهرو هستند که حلوفصل آنها به دانشی عمیق در این زمینه نیاز دارد. دابل اسپندینگ یا دوبار خرج کردن یکی از قدیمیترین مشکلات بلاکچینها است که امروزه به لطف مکانیزمهای PoWو PoS به بهترین شیوه ممکن برطرف شده است. نکته مهمی که باید به آن توجه داشت، این است که جلوگیری از دابل اسپندینگ فقط به ماینرها و دیگر اعضای تشکیلدهنده بلاکچین مرتبط نشده و کاربران عادی نیز میتوانند با رعایت یکسری نکات، از این اتفاق جلوگیری کنند.