حملات double spending (خرج دوباره) به اتریوم

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

0 166

ظهور شمار بسیار زیاد استیبل کوین‌های جدید در پلتفرم اتریوم ما را به این سوال واداشت که این پروژه‌ها چه تاثیری بر سلامت شبکه اتریوم خواهند گذاشت. یکی از تاثیرات مزبور متعادل شدن مبالغی است که به ماینرهای اتریوم و در ازای هزینه‌ی تراکنش‌ها پرداخت شده، و علاوه بر این، رفتارهای نادرست تقلب‌آمیز ماینرها را خنثی می‌کند. من بارها سعی کردم درباره این موضوع مطلب بنویسم، ولی هرچه بیشتر درگیر این بحث می‌شدم اولاً بحث پیچیده‌تر می‌شد، ثانیاً نوشتن و خواندن درباره این موضوع کار دشواری است. بنابراین تصمیم گرفتم این مبحث را به چند قسمت کوچک‌تر تقسیم کنم تا راحت‌تر بتوانیم این ریسک را مورد بررسی قرار دهیم. در ابتدا، بگذارید نگاهی به حملات ۵۱ درصد یا double spending در اتریوم داشته باشیم. برای نوشتن این مطلب تحقیقاتی زیادی صورت گرفته ولی همچنان که از روی طرح مورد نظرم به این موضوع می‌پردازیم، اگر در ادامه چیز جدیدی پیدا کنم، ممکن است مطالبم را تغییر دهم. این پست با هدف آموزش و فراهم‌سازی پیش‌زمینه‌ای برای پست‌های بعدی نوشته می‌شود.

وایت پیپر کریگ رایت به سال ۲۰۰۸ بیان‌کننده‌ی ترکیبی از هش‌کَش آدام بَک و فهرستی پیوندی از تراکنش‌های با برچسب بود که در میان گره‌های مشارکت‌کننده در این شبکه توزیع شده بود. دستاوردی که در این تکنیک به دست آمد از طریق ترکیب هزینه‌ای حاصل گردید که از طرف هش‌کَش اعمال شده بود. اشتراک‌گذاری پایگاه داده‌ی کاملی از تراکنش‌های هش‌شده در زنجیره‌ای از دسته‌بندی‌های مختلف میان همه‌ی اعضا می‌تواند آن‌ها را در طول شبکه مرتب کرده و احتمال double spending (یعنی وقتی کاربری متقلب سعی می‌کند یک دارایی دیجیتال را بیش از یک بار ارسال نماید) را از بین ببرد.

وایت پیپر بیت کوین توضیح می‌دهد که پروتکل اثبات کار چگونه هزینه را وارد مکانیزم رای‌گیری می‌کند تا مشخص شود که کدام عضو می‌تواند بلاک معتبر بعدی را به شبکه ارائه کند:

اثبات کار می‌گوید هر CPU می‌تواند یک رای داشته باشد. تصمیم اکثریت بر بزرگ‌ترین زنجیره، که بیشترین مشارکت را در فرآیند اثبات کار داشته، اعمال می‌شود. اگر اکثریت توان CPU توسط گره‌های صادق کنترل شود، زنجیره‌ی صادق به‌سریع‌ترین حالت ممکن رشد می‌کند و سایر زنجیره‌های رقیب را پشت سر می‌گذارد. مهاجم برای دستکاری بلاک‌های قبلی باید اثبات کار را مجدداً برای همه‌ی بلاک‌های بعدی انجام داده و ضمن رسیدن به آخرین وضعیت شبکه، بتواند بر کار گره‌های صادق غلبه کند.

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

حمله‌ای که در آن مهاجم با انجام کار زنجیره‌ای می‌سازد که باید به بزرگ‌ترین زنجیره موجود تبدیل شود، همان حمله‌ی معروف ۵۱ درصد (یا double spending) است. با توجه به این که بیت کوین و تقریباً همه‌ی بلاک‌چین‌های بدون مجوز، بر آمار و ارقام متکی هستند، مهاجم می‌تواند با کمک توان هشی کمتر از توان هش سایر شبکه، حمله double spending را انجام دهد. در بخش یازدهم وایت پیپر بیت کوین با عنوان «محاسبات» یا Calculations به بحث درباره‌ی آمار و احتمال وقوع این حمله پرداخته می‌شود. در این مطلب از اشاره به جزئیات آن مقاله صرف نظر می‌کنم، ولی این مقاله با کمک مشکل Gambler’s Ruin و Poisson Distribution به اثبات احتمال یافتن بلاک بعدی توسط مهاجمی با احتمال q در بزرگ‌ترین زنجیره با z بلاک می‌پردازد. این محاسبات در مقاله‌ی ساتوشی به شکل زیر آمده است:

formula

در این وایت پیپر مقداری کد زبان C هم دیده می‌شود که خوشبختانه به راحتی توانستم آن را به جاوا اسکریپت تبدیل کنم و در Google Sheets از آن فرمول بسازم.

خلاصه بگوییم، این فرمول خیلی کارآمد است ولی کاملا درست نیست. Ozisik و Levine در سال ۲۰۱۷ آن را تصحیح کردند تا بتوانند بزرگ‌ترین زنجیره را به دست بیاورند. فرمول اصلاح‌شده‌ای که این دو نفر ارائه دادند به صورت زیر است:

formula

من هم با استفاده از این فرمول نسخه‌ی اصلاح‌شده‌ای از کد ساتوشی را نوشتم.

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

اگر می‌خواهید نمایش گرافیکی این اتفاق را ببینید، به تصویر زیر توجه کنید:

نمودار

دقت داشته باشید که در تصویر بالا همه‌ی مقادیر بالای ۰.۵۲۵ خاکستری شده چون فرض می‌کنیم هر زمان که هکر از بقیه‌ی شبکه منابع بیشتری داشته باشد، عملا می‌تواند شبکه را در اختیار بگیرد.

پس تا این‌جا، بیت کوین به عنوان راهکاری برای حل مشکل double spending طراحی شد. این روش مفید است، چون برای ماینر شدن باید هزینه کرد، اما ماینری که منابع کافی برای غلبه کردن بر سایر شبکه را داشته باشد، می‌تواند ماینرهای صادق را کنار زده و double spending انجام دهد.

هدف اتریوم همیشه با هدف بیت کوین فرق داشته، چون اتریوم از همان ابتدا قرار بود ایده‌ی کامپیوتری جهانی را دنبال کند، در حالی که بیت کوین یک پول همتا به همتای الکترونیکی بود.

یکی از تفاوت‌های اصلی شبکه‌ی اتریوم سرعت بسیار بالاتر بلاک‌های آن یا میانگین زمانی است که طول می‌کشد تا ماینرها تراکنش‌ها را در بلاک وارد کنند. این رقم در حال حاضر حدود ۱۴-۱۵ ثانیه است.

قبلاً گفتم که اگر همه چیز برابر باشد، زمان بلاک سریع‌تر به معنای این است که در یک بازه‌ی زمانی مشابه، احتمال این که مهاجم با وجود افزایش تعداد بلاک‌ها (z) بتواند حمله‌ی double spending انجام دهد خیلی کم است.

البته همه ما می‌دانیم که دنیا آن‌قدرها هم برابر نیست و باید جوانب مختلف را سبک و سنگین کرد. اولین مسئله‌ای که در سال ۲۰۱۵ توسط ویتالیک باترین مطرح شد، مشکل افزایش نرخ Stale است که همزمان با افزایش سرعت بلاک‌ها پیش می‌آید. بلاک‌های Stale زمانی به وجود می‌آیند که دو یا چند ماینر چند بلاک معتبر را به عنوان کاندید به شبکه معرفی می‌کنند تا بلاک بعدیِ بزرگ‌ترین زنجیره شود، اما در نهایت این پیشنهاد پذیرفته نمی‌شود. بلاک‌های Stale می‌توانند نشانه‌ای از خطر double spending باشند، هرچند این اتفاق معمولا به صورت طبیعی رخ می‌دهد. این حقیقت که ماینرهای اقصی نقاط دنیا باید با یکدیگر در ارتباط باشند تا بتوانند بلاک‌ها را به اشتراک بگذارند به معنای این است که باید مقدار زمانی که طول می‌کشد تا بلاک‌ها از طریق شبکه ارسال شوند (انتشار شبکه) را در نظر گرفت. جیمسون لاپ نمودار جالبی از زمان انتشار یک بلاک به ۵۰ و ۹۰ درصد از گره‌های شبکه‌ی بیت کوین رسم کرده که آن را در تصویر زیر می‌بینید:

نمودار

به همین خاطر، بلاک‌های سریع‌تر نسبت به بلاک‌های کندتر به تناوب بیشتری با این مشکل مواجه می‌شوند. برای مقابله با این مسئله، اتریوم راهکاری موسوم به «پاداش‌های آنکل» را برای بلاک‌هایی به وجود آورده که Stale هستند، ولی نهایتاً در بلاک‌چین قرار می‌گیرند.

برای این که درک بهتری از مقیاس این موضوع داشته باشید باید بگویم که من از ماه ژانویه‌ی ۲۰۱۷ تاکنون ۱۰ نمونه از بلاک‌های Stale بیت کوین (تقریباً ۰.۰۳ درصد) را از طریق سایت blockchain.info پیدا کرده‌ام، این در حالی است که این رقم از ماه ژوئن سال ۲۰۱۵ برای اتریوم روزانه چیزی بین ۳.۵ تا ۲۸.۲ درصد بوده، و در نتیجه میانگین آن از ژوئن ۲۰۱۷ حدود ۱۱.۱ درصد محاسبه می‌شود. در تصویر زیر چارت مربوطه را می‌بینید:

چارت

نرخ Stale به خاطر ارتباطی که با حملات double spending دارد به چند دلیل مهم است. اول از همه، نرخ بالای بلاک‌های Stale ماینرها را به شرکت در استخرها و در نتیجه متمرکز شدن تشویق می‌کند تا ریسک بلاک‌های Stale کاهش یابد. دلیل دوم کمی جنبه‌ی روانی دارد؛ شبکه‌ای که به طور خاص برای مقادیر بالای نرخ Stale آماده شده باشد نسبت به بلاک‌های Stale ناشی از حملات double spending واکنش‌پذیری کمتری خواهد داشت. به‌علاوه، «پاداش‌های آنکل» می‌تواند به کاربری که بعداً قرار است حمله کند، اجازه دهد با آزمایش شرایط برای انجام حمله‌ی double spending آماده شود. این کار با اعلام ادعای مالکیت بخشی از بلاک از طریق ثبت بلاک Stale به عنوان پاداش آنکل انجام می‌گیرد.

دلیل سوم این است که بلاک‌های Stale نسبت به توان هش شبکه کارآمدی کمتری دارند. برای توضیح این مسئله ابتدا باید به طور مختصر یادآوری کنم که روش اجماع ناکاموتو چگونه کار می‌کند.

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

در طول زمانی که ماینرها مشغول کار روی بلاک الف و بلاک ب بودند، میزان عملکرد شبکه به نصف رسید. اگر فرض کنیم در هر دقیقه ۴ بلاک معتبر اتریوم به وجود می‌آید (روزانه ۵٫۷۶۰ عدد) و از هر ۹ بلاک یکی از آن‌ها Stale است (تقریباً ۱۱ درصد) و احتمال انتخاب بلاک معتبر بعدی و بلاک آنکل در شرایطی آرمانی و ۵۰-۵۰ قرار دارد، و عمق این انشعاب‌ها هرگز از یک بلاک بیشتر نمی‌شود (یعنی شرایطی نداریم که در آن هر دو بلاک الف و ب بلاک معتبر بعدی را تولید کنند و به کار روی آن‌ها ادامه دهند) توان هش عملیاتی شبکه نسبت به حالتی که در آن هیچ بلاک Stale نداشته باشیم، حدود ۵.۵ درصد کاهش می‌یابد.

حالا اگر به مسئله‌ای برگردیم که توسط ویتالیک باترین مطرح شد، می‌بینیم که او به احتمال دستیابی به «حاشیه‌ی امنیت ضروری» یا اطمینانی می‌پردازد که از بازنویسی نشدنِ تراکنش توسط فرآیند بازآرایی بلاک انتظار می‌رود. چارتی که به نظر من جالب آمد، چارتی است که او در آن فرض می‌کند امنیت لازم میان بلاک‌چین‌های سریع و کند و اطمینان متناسب با زمان برای دستیابی به این حاشیه‌ی امنیت باید یکسان باشد:

chart

ویتالیک نشان داد که اطمینان نسبی برای دستیابی به سطح مناسبی از امنیت در یک بازه‌ی زمانی کوتاه مدت احتمالا در بلاک‌چینی که زمان بلاک‌های آن کوتاه‌تر باشد کمتر است، اما در نهایت آن را پشت سر می‌گذارد.

اگر دوباره به احتمال موفقیت حمله‌ی double spending در بیت کوین توجه کنیم، و این بار احتمال به دست آوردن بلاک بعدی (q) توسط مهاجم را بالاتر در نظر بگیریم، نتیجه به صورت چارت زیر در می‌آید:

چارت

اگر این نمودار را بر اساس زمان با نمودار اتریوم مقایسه کنیم، با توجه به این که زمان بلاک بیت کوین ۶۰۰ ثانیه و زمان بلاک اتریوم ۱۵ ثانیه (یعنی ۴۰ برابر بیشتر از اتریوم) است، چنان‌چه بخواهیم بلاک‌های Stale را در نظر بگیریم (با توجه به این که بیت کوین بلاک Stale ندارد)، اتریوم ۱۱.۱ درصد بلاک Stale دارد. اگر p احتمال انتخاب بلاک بعدی از میان بلاک‌هایی باشد که در میان ماینرهای صادق پخش شده، چارت زیر به دست می‌آید:

نمودار

همان طور که پیش‌بینی شد، به نظر می‌رسد وقتی احتمال کمتری برای تولید بلاک بعدی توسط مهاجم وجود داشته باشد، اتریوم نسبت به حمله‌ی double spending کمتر در معرض خطر خواهد بود. ولی با افزایش احتمال مهاجم، میزان سودآوری موفقیت هم افزایش یافته و در عین حال اطمینان از رسیدن به شمار بیشتری از بلاک‌ها کاهش پیدا می‌کند.

سوال آخر این است: انجام حمله‌ی ۵۱ درصد در اتریوم چقدر هزینه دارد؟

این مقاله تا همین جا هم خیلی طولانی شده، بنابراین از تشریح مفصل پاسخ این سوال می‌گذرم، ولی وبسایت https://www.crypto51.app بر اساس نرخ NiceHash پاسخی برای این پرسش دارد. جواب ساده این است که به ازای هر ساعت حداقل باید ۱۰۰ هزار دلار هزینه کرد. شایان ذکر است که این هزینه برای بیت کوین حدود ۲.۷ برابر رقم مذکور است.

PoW 51% Attack Cost

با توجه به این که متغیرها و محدودیت‌های زیادی در این مسئله دخیل است، نمی‌توانیم به این پاسخ اکتفا کنیم، ولی برای بررسی دقیق این مسئله باید در جایی دیگر این موضوع را بشکافیم.

پس به این نتیجه می‌رسیم که حملات double spending پرهزینه‌اند، و زحمت و تلاش زیادی می‌طلبند. ولی با توجه به شرایط و وضعیت اتریوم، کار مهاجمان حتی از این هم سخت‌تر می‌شود.

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

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.