از تئوری تا واقعیت: نگاهی به حملات ۵۱ درصد در بلاکچین

سال ۲۰۱۸ دنیای بلاکچین بیش از پیش با حقیقی بودن حملات ۵۱ درصد آشنا شد و تخمین زده میشه حدود ۲۰ میلیون دلار با استفاده از این حملات دزدیده شده باشه، اما در اول سال ۲۰۱۹ بلاکچین نسبتا معروف اتریوم کلاسیک برای ما خبر از سالی پردردسر آورده.

در چند روز اولیه ۲۰۱۹ حدود ۱.۱ میلیون دلار اتریوم کلاسیک دابل اسپنت (Double Spent - دو بار خرج شده) شده و هنوز در تعقیب عاملان و وجه دزدیده شده هستن، اما در اینجا میخوایم نگاهی داشته باشیم به این نوع حملات به نحوی که هر کسی با دانش اولیه از بلاکچین متوجه اون بشه.


اتریوم کلاسیک از الگوریتم مشابه اتریوم (ETHASH) و مکانیزم POW یا Proof Of Work استفاده میکنه که مکانیزم محبوبی در بلاکچین ها هست.

اجازه بدید تا تعریف کلی از مفاهیم لازم بگیم.

بلاکچین، زنجیره بلاک

از اسمش مشخصه، زنجیر! دلیل به کار بردن لفظ زنجیر اینه که در بلاکچین هر بلاک که شامل تراکنش ها هست، مثل یک زنجیر به بلاک قبلی وصله، بلاک قبلی به قبل تری و به همین صورت. بلاک ها یکی پس دیگری بر روی بلاک های قبلی قرار میگیرن و به ازای هر بلاک روی بلاک مورد نظر، یک کانفیرم ثبت میشه و این یعنی اون بلاک و تراکنش هاش معتبر تر هستن. با این حساب حتی با یک تغییر کوچیک در یک بلاک در وسط زنجیره، تمام بلاک های بعد از اون دچار تغییر میشن.

با توجه به این مکانیزم، ماینری نمیتونه ادعا کنه دو تا بلاک قبل تر فلان تراکنش انجام شده یا انجام نشده، چون در این صورت ما ۳ تا بلاک اخیرمون متفاوت خواهند شد و شبکه، بلاکچین ادعا شده اون ماینر رو رد میکنه.

مکانیزم POW یا Proof Of Work

بلاکچین ها راه های مختلفی برای جلو بردن بلاکچین خودشون و ثبت بلاک های جدید دارن که این راه وظایفی مثل جلوگیری از حملات مختلف که باعث ایجاد اخلال در شبکه میشن رو به دوش میکشن. یکی از این راه ها پرهزینه کردن ایجاد این اختلالات و خرابکاری در شبکه هست.

مکانیزم POW که اولین بار در بیتکوین استفاده شد و حالا هم خیلی ارز های مجازی ازش استفاده میکنن همین کار رو میکنه. در این مکانیزم نود ها یا اعضای شبکه باید در فرایندی به نام ماینینگ با هم رقابت کنن تا بتونن بلاک معتبر بعدی رو پیدا کنن و پاداش اونو بگیرن. این فرایند که به اسم ماینینگ شناخته میشه یک فرایند هزینه بر و زمان بره که در اون ماینر ها باید با استفاده از توان پردازشیشون یک سری مسائل پیچیده ریاضی رو حل کنن (منظور مسائلی که شما در دبیرستان حل میکنید نیست! :)، اون های باید هش تعداد زیادی از حالات رو تولید کنن و هشی که معتبر هست رو در شبکه ثبت کنن).

حالا اگر کسی بخواد در شبکه اختلال ایجاد کنه یا یک تراکنش و بلاک نامعتبر رو پخش کنه، باید هزینه زیادی رو صرف کنه. اما آیا این مانعی برای سد کردن راه دزد های سایبری هست؟

تئوری حمله ۵۱ درصد

تئوری حمله ۵۱٪ بر این پایه هست که خرابکار بیش از ۵۰ درصد توان پردازشی شبکه رو در دست داشته باشه. در این حالت اون میتونه کارای زیادی بکنه، از جمله تایید نکردن بلاک ها و تراکنش دیگران و ایجاد لگ در شبکه، اما مسلما کسی هزاران دلار خرج نمیکنه تا کرم بریزه و بخنده، اون برای سود اینکارو میکنه اما چطور؟

تئوری حمله ۵۱٪ در بلاکچین از همون اوایل مطرح بود اما کسی زیاد جدیش نمیگرفت. آخه کدوم خری میاد کلی هزینه کنه تا ۵۱ درصد هش ریت شبکه رو در دست بگیره؟ اصلا ممکنه؟

عصر بلاکچین های کوچک

حرف اون ها تا حدودی درست بود. گرفتن ۵۱ درصد هش ریت ارزی مثل بیتکوین اگر غیرممکن نباشه، خیلی خیلی هزینه بر و البته پر ریسکه. چرا پر ریسک؟ اگر ماینر ها، اکسچنج ها و توسعه دهنده های یک ارز سریع و هماهنگ عمل کنن ممکنه بشه جلوی هکر رو گرفت. اما این اطمینان جایی دچار مشکل میشه، بلاکچین های جدید و کوچیکی که پول زیاد دارن ولی به اندازه کافی بزرگ نیستن...

جدای از این یک تهدید بزرگ دیگه هم وجود داره: ASIC ها

پردازنده هایی که اختصاصا برای حل یک الگوریتم خاص طراحی شدن و توانشون قابل مقایسه با ماینر های معمولی نیست. البته از اون جایی که طراحی این پردازنده ها یک کار میلیون دلاری هست، یک هکر همچین کاری نمیکنه (اصولا نمیتونه!) اما هستن بلاکچین هایی که به تنهایی لو رفتن ۱۰ تا ماینر ASIC الگوریتمشون قبل از عرضه جهانی میتونه بیش از ۵۰ درصد هش ریت اون هارو تقدیم کنه. به همین خاطره که شرکت های تولید کننده این دستگاه ها سیاست های فروش سخت گیرانه و حساسی برای اوایل فروششون دارن و همچنین یکی از دلایلی که توسعه دهندگان ارز ها از ASIC ها فرارین.

به هر حال، بلاکچین های کوچولویی که هش ریت زیادی ندارن ممکنه خیلی راحت قربانی این حملات شن.

حملات Double Spend مبتنی بر حملات ۵۱٪

برگردیم به سوالمون درباره چگونگی سود کردن هکر از این حملات. تا چند سال پیش این دسته حملات به تئوری محدود میشدن اما امسال ما شاهد اجرای عملی اون ها بودیم. خودتون رو آماده کنید تا وارد بخش فنی تر ماجرا و توضیح تئوری ها شیم!

حملات دابل اسپند یا دوبار خرج کردن همونطور که از اسمشون مشخصه، قراره کاری کنن تا هکر دو بار موجودی والتش رو خرج کنه. اول از همه بیاید بررسی کنیم در حالت عادی چرا یک خرابکار نمیتونه این کارو کنه!

در یک تراکنش، موجودی خرج شده از موجودی والت شما کم میشه و این در کل شبکه پخش میشه. همه اعضا و نود های شبکه میدونن که ممد (خرابکار سناریوی ما) آه در بساط نداره در والتش. اما اگر ممد یک نود در شبکه داشته باشه که به بقیه نود ها بگه من ۱۰ بیتکوین ریختم به فلان آدرس در حالی که این مقدارو نداره چه اتفاقی میفته؟ از اونجایی که تراکنش های ممد در بلاک های بلاکچین ثبت شدن هر نود میتونه بفهمه ممد الان در والتش چقدر بیتکوین داره. حالا با اینکه ممد یک تراکنش ساین شده و ظاهرا معتبر رو در شبکه پخش کرده اما از چیزی مایه گذاشته که نداره (بیتکوین) و نود ها این تراکنش رو به عنوان یک تراکنش نامعتبر میشناسن و در هیچ بلاکی هم قرار داده نمیشه که نمیشه.

اما اگر ممد ۵۱ درصد هش ریت شبکه رو در دست داشته باشه چی؟ آیا میتونه از نداشته هاش در بلاک مایه بذاره؟ جواب بازم منفی هست، اما یک راه پیچیده تر وجود داره...

تئوری حمله Double Spend با در دست داشتن ۵۱٪ هش ریت شبکه

همونطور که گفته شد، هر بلاک در بلاکچین به بلاک قبلیش متصله و بهش وابسته هست. پس نمیشه تراکنش ممد رو از چند بلاک قبلی حذف کرد چون باید یک بلاک جدید بدون تراکنش کم شدن ۱۰ بیتکوینش ساخت و در این صورت کل بلاک های بعدی هم تغییر میکنن.

اما حمله به این صورته که اول ممد باهوش ما، ۱۰ بیتکوینش رو در یک صرافی به ناصر میفروشه و در ازاش ریال میگیره، همه چیز درست و قانونی!

تراکنش کم شدن ۱۰ بیتکوین ممد در بلاکچین ثبت میشه. ممد ۵۱ درصد هش ریت شبکه رو داره و میتونه سریع تر از بقیه ماین کنه. ممد از همون بلاکی که تراکنش کم شدن پولش درش هست خرابکاریشو شروع میکنه. اون یک بلاک مشابه بلاک موردنظر بدون تراکنش کم شدن پولش رو ماین میکنه و از اونجا همزمان با بقیه شبکه سعی میکنه تراکنش های عادی شبکه رو بر روی بلاک دستکاری شدش ماین کنه. همونطور که قبلا گفتیم، چون یک تراکنش بلاک ممد با شبکه فرق داره، پس تمام بلاک های بعدی ممد روی بلاک دستکاری شدش هم با بلاک های اصلی شبکه متفاوت خواهند بود حتی اگر تمام تراکنش هاشون درست و مشابه باشه. از اینجا ممد در واقع یک زنجیر متفاوت با شبکه اصلی رو ماین میکنه و در واقع روی یک فورک خصوصی از بلاکچین کار میکنه.

ممد در حال ماین بلاکچین خودش
ممد در حال ماین بلاکچین خودش

به طور عادی وقتی یک ماینر بلاک درست رو ماین میکنه، خرکیف و خوشحال به سرعت بلاکش رو در شبکه منتشر میکنه تا بقیه تاییدش کنن و پاداشش رو بگیره، اما از اونجایی که زنجیره ممد با زنجیر اصلی شبکه فرق داره ممد اینکارو نمیکنه چون نود های شبکه اکثرا همون زنجیری که دارن رو قبول دارن، اما اینجا یک مشکل وجود داره.

در شبکه وقتی یک زنجیر معتبر (معتبر یعنی طبق مشخصات و الگوریتم و ... همون بلاکچین ماین شده) و بلند تر توسط یکی از نود ها منتشر میشه، قانون اینه که زنجیر بلند تر معتبره و همه باید اونو قبول داشته باشن. یادتون هست که ممد میتونه سریع تر ماین کنه؟ یک جایی زنجیره ممد از زنجیر اصلی شبکه بلند تر میشه، یعنی اگر در شبکه آخرین بلاک ۵۰ هست، زنجیره ممد ۵۱ بلاک معتبر داره. اینجا ممد سریعا بلاکچین خودشو که تا الان منتشر نکرده بود در شبکه منتشر میکنه و طبق قانون، تمام اعضای شبکه باید بلاکچین ممد رو به رسمیت بشناسن.

ممد در واقع توی تمامی بلاک هایی که جدا از شبکه ماین کرده میتونه هر تراکنشی رو تغییر بده، اما از اونجایی که بچه خوبی هست فقط تراکنش های خودشو که از والتش موجودی کم شده حذف میکنه و وقتی شبکه این بلاکچین رو به رسمیت شناخت، ممد دوباره ۱۰ بیتکوینشو داره. در اینجا اون ۱۰ بیتکوینی که ممد به ناصر داده بود و در ازاش ریال گرفته بود از بلاکچین و والت ناصر غیب میشه و ناصر در واقع بابت هیچی به ممد پول داده.

ممد در بلاکچین خودش تراکنش کم شدن پولش رو حذف کرده
ممد در بلاکچین خودش تراکنش کم شدن پولش رو حذف کرده
ممد زنجیر خودشو که طولانی تره منتشر میکنه
ممد زنجیر خودشو که طولانی تره منتشر میکنه
بلاکچین ممد توسط نود ها به رسمیت شناخته میشه و زنجیر قبلی باطل میشه
بلاکچین ممد توسط نود ها به رسمیت شناخته میشه و زنجیر قبلی باطل میشه

سوال! خب چرا ممد تو بلاکچین خودش از والت قلی که خیلی پولداره به والت خودش ۱۰۰ بیتکوین نمیریزه؟ جواب این سوال به درک از سیستم بلاکچین بر میگرده. هر تراکنشی که انجام میشه توسط صاحب اون والت امضا میشه و این امضا توسط بقیه اعضای شبکه قابل تاییده اما قابل جعل نیست تا زمانی که به کلید خصوصی اون والت دسترسی وجود نداشته باشه.

اینجا ممد دوباره سریعا اون ۱۰ بیتکوین رو خرج یا منتقل میکنه و در واقع اون ۱۰ بیتکوین رو دوبار خرج کرده!

اگر یادتون باشه گفتم از نظر تئوری امکان باطل کردن دزدی ممد وجود داره اما چجوری؟

اگر سریع این حمله تشخیص داده شه و اکسچنج های بزرگ تراکنش هارو ببندن و ماینر ها کارشون رو متوقف کنن، تراکنش و بلاک کمتری در شبکه ایجاد میشه و میشه همه اعضا رو با یک فورک، به بلاکچین اصلاح شده برگردوند تا موجودی ممد به ناصر برسه و تراکنش های بعدی هم دستنخورده به بلاکچین اضافه شن. برای این کار بلاک اصلاح شده و تمام بلاک های بعد از اون باید دوباره ماین شن و این به اون معناست که هرچی بیشتر از حمله بگذره و بلاک های بیشتری ماین شن، امکان اصلاح اون غیر ممکن تر میشه (همینجورشم در بلاکچین های بزرگ و سریع نزدیک به غیر ممکنه)

نکات و نتیجه گیری پایانی

۱.همونطور که مشخصه هرچی ممد سرمایه اولیه بیشتری بذاره، بیشتر سود میکنه.

۲.این حمله دلیل مهمیه برای اینکه چرا POW مناسب بلاکچین های کوچیک نیست و نباید زیاد بهشون اعتماد کرد.

۳.متاسفانه راه های چندان کاربردی برای جلوگیری از این حمله در بلاکچین های مستعد وجود نداره به جز مهاجرت به مکانیزم های دیگه مثل POS و غیره.

۴.شاید خیلی هاتون بدونید، ماین کردن در هش ریت بالا و نزدیک بهم تا حدی به شانس بستگی داره، به همین خاطر ممکنه کسی حتی با در دست داشتن ۳۵ درصد هش ریت شبکه بتونه از زنجیره اصلی جلو بزنه اما این حتمی نیست و از اونجایی که خرابکار اول باید خرج کنه بعد حمله رو انجام بده، چندان به ریسکش نمی ارزه!

به نظر من بلاکچین و ارز های مجازی راه طولانی برای رسیدن به بلوغ کافی در پیش دارن...

امیدوارم این مقاله براتون مفید بوده باشه!