
مقدمه
در مجموعه کریپتو با ویتالیک، هر دفعه با ترجمه یکی از نوشتههای آقای ویتالیک بوترین، یعنی همان خالق شبکه رمز ارز اتریوم با شما همراه هستیم. در این مقاله، بوترین در مورد انواع حملات داخلی گروههای فعال به پروتکل در جریان طراحی مکانیزمی جهت محدود کردن مشکلات گواه اثبات سهام اتریوم “در آن زمان موسوم به Casper بود” توضیحاتی ارائه داده است. ایشان چندین راه حل احتمالی برای حل این حملات پیشنهاد میدهد. این مقاله در تاریخ 16 ماه جولای سال 2017 میلادی منتشر شده است.
حملات ممکن داخلی در بلاکچینها و پاسخ کسپر
دیاگرام زیر قسمتی از اسلایدهایی است که برای ارائهام در دانشگاه کورنل (Cornell) آماده کردم:
اگر یک شکل شماتیک بخواهد فلسفه مشوقهای گنجانده شده در کسپر (طرح Casper یک طرح ابتدایی اتریوم برای میل به گواه اثبات سهام بود که در نهایت تغییرات فراوانی داشت. و در نهایت طرح دیگری جایگزین این طرح شد) را تا حد مطلوبی نشان دهد،به این شکل خواهد بود. بنابراین این شکل توضیح بیشتر نیاز دارد.
نمودار زیر سه گروه، اکثریت، اقلیت و پروتکل (کاربران) و 4 فلش که بیان کننده اقدامات خصمانه احتمالی است را به نمایش میگذارد. در این شکل مشاهده میکنید که اقلیت به اکثریت پروتکل حمله کند و از سوی دیگر اکثریت به اقلیت پروتکل حمله کند. مثالهایی از هر کدام از این اقدامات به شرح زیر است:
اقلیت به پروتکل حمله کند:
نام این حمله فینی “Finney Attack” است. این حمله به نوعی حمله خرج مجدد “Double Spend” است. در این نوع حمله ماینر یک تراکنش را جهت پرداخت هزینه خدمت یا کالایی را آماده میکند و بعد سعی میکند با پیدا کردن بلاکی که حاوی اطلاعات فرستادن آن مبلغ به خودش است (لغو تراکنش پیشین)، بدون اینکه هزینه خاصی پرداخت کند، از آن محصول و یا خدمت بهرهمند بشود. این نوع حمله در زمانی با موفقیت رو به رو خواهد شد که طرف دوم معامله بدون صبر لازم جهت تایید بیشتر تراکنش، کالا یا خدمت خودش را به صورت بی بازگشت ارسال کند.
اقلیت به اکثریت حمله کند:
نام این حمله “Feather Forking” است. در این نوع فورک خفیف یا شبه فورک، دستهای از ماینرها که حداکثر توان پردازش شبکه را در اختیار ندارند. تلاش میکنند تا بتوانند هر بلوکی که حاوی یک تراکنش از آدرس سانسور شده (وارد بلک لیست شده) توسط آن هاست را بازگردانند. (این کار با ایجاد یک بلاک بدون آن تراکنش و ایجاد بلاک صحیح بعدی روی آن تا بتوانند بزرگترین زنجیره را تشکیل دهند)، اما اگر بلاک نامطلوب مورد نظر 2 تایید را دریافت کرد، از تلاش دست بر می دارند.
اکثریت به پروتکل حمله کند:
یعنی همان حمله 51 درصدی.
اکثریت به اقلیت حمله کند:
حمله سانسور شده 51 درصدی، در این نوع حمله گروه خلافکار هیچ گونه بلاکی که متعلق به عضوی از گروه نباشد را نمی پذیرد.
فلسفه وجودی کسپر چیست؟
کل فلسفه وجودی کسپر این بود که بتواند تا حدی روی میزان آسیب وارده شده به قربانیان و هزینه مهاجم در هر چهار نوع حمله تاثیر بگذارد. تمامی تصمیمات مربوط به طراحی کسپر از این فلسفه نشات گرفته بود.
این موضوع با پارادایم ذهنی برای مشخص کردن مشوقها در گواه اثبات کار به طور کلی متفاوت است. باید بدانید که گواه اثبات کار در برابر دو نوع حمله آخری به طور کامل بی دفاع است. دو نوع حمله اول هزینهبر هستند. زیرا مهاجم ریسک گنجانده نشدن بلوکهایش در سیستم بلاکچین و در عین حال از دست دادن در آمدش را به جان میخرد. اما اگر مهاجم اکثریت شبکه را در اختیار داشته باشد چنین حملهای کاملا بدون هزینه است. زیرا مهاجم میتواند مطمئن باشد که زنجیره او همیشه زنجیره اصلی باقی خواهد ماند. در دراز مدت، تنظیم سختی شبکه به گونهای جلو خواهد رفت که درآمد همه ماینرها دقیقا یکسان خواهد بود. و این موضوع به این معنی است که اگر قربانیان پولی را از دست بدهند، مهاجم در طرف دیگر پول را بدست خواهد آورد.
این ویژگی گواه اثبات از این موضوع سرچشمه میگیرد که گواه اثبات سنتی ناکاموتو به شکل کاملا بنیادی به تنبیه هر گونه سرپیچی و همرنگ نشدن با جماعت میپردازد. به بیان دیگر در گواه کار سنتی ناکاموتو اگر به عنوان یک ماینر یک بلوک ایجاد کنید و آن بلوک مورد اجماع قرار بگیرد، شما پاداش دریافت میکنید. و اگر بلوک ساخته شده توسط شما مورد اجماع قرار نگیرد (همسو نباشد) آن وقت مجازات میشوید. (مجازات به شکل مشخصی در پروتکل مورد نظر تعیین نشده است. بلکه هزینه الکتریسیته و سرمایهای که ماینر جهت تولید آن بلوک صرف کرده است و در انتهای کار بی پاداش مانده است خود به گونهای مجازات است)
مجازات در کسپر چگونه است؟
اما کسپر به گونهای طراحی شده که دوگانگی و ایهام را مجازات کند. اگر دو پیام ارسال کنید که با یکدیگر تناقض داشته باشند، در صورتی که یکی از آنها هم مطابق اجماع باشد، به شدت مجازات خواهید شد. در نتیجه اگر حمله بازگردانی قطعیت “Finality Reversion Attack” اتفاق بیافتد. همه کسانی که مسبب آن هستند جریمه خواهند شد و دیگر افراد در امان هستند. اکثریت افراد صرفا با صرف هزینه زیاد قادر به حمله به پروتکل خواهند بود و نمیتوانند کاری کنند که اقلیت پول از دست بدهند.
دو ضلع دیگر مثلث آسیب
وقتی قرار است دو نوع دیگر حمله را بررسی کنیم، اوضاع کمی مشکلتر و پیچیده میشود: خطاهای مربوط به حیات “Liveness” شبکه و سانسور. نقص حیات هنگامی اتفاق میافتد که قسمت بزرگی از اعتبارسنجهای کسپر در شبکه فعال نباشند (به بیان دیگر آفلاین باشند) به گونهای که فرایند اجماع دچار مشکل شود و نتواند به قطعیت برسد. خطای سانسور زمانی اتفاق میافتد که اکثر اعتبارسنجهای کسپر از پذیرش تعدادی از تراکنشها سر باز میزنند. و یا پیامهای مربوط به اجماع را از سایر اعتبارسنجها (قربانیان این حمله) نپذیرند تا آنها از پاداش محروم شوند.
این موضوع پای اساسیترین تضاد را به میان میکشد: معادلسازی خطای گوینده/شنونده “Speaker/Listener Fault Equivalence”
معادلسازی خطای گوینده/شنوند
تصور کنید که شخص ب بیان میکند که پیامی از شخص الف دریافت نکرده است. در این جا دو حالت ممکن است رخ دهد:
1- شخص الف پیام نفرستاده است.
2-شخص ب تظاهر میکند که پیام را نشنیده است.
صرفا با ادعای حرف شخص ب، هیچ راهی برای رسیدن به صحت و سقم این که آیا این اتفاق افتاده است یا نه وجود ندارد. اتفاق متناظر آن در حوزه بلاکچین به این صورت خواهد بود: اگر شما پروتکلی را ببینید که پیامهای 70 درصد از اعتبار سنج های آن در زنجیره گنجانده شده است، اما خبری از 30 درصد باقیمانده نیست. و هیچ چیزی دیگری را هم نمیتوانید ببینید (از دید پروتکل بلاکچین).
در این شرایط راهی وجود ندارد که متوجه شوید آیا مشکل از آفلاین شدن 30 درصد از شبکه است یا اینکه آن 30 درصد توسط 70 درصد غالب سانسور شده اند. اگر قصد داشته باشیم که هر دو این حملات را برای مهاجمین گران سازیم، تنها یک راه وجود دارد و آن اینکه هر دو طرف را جریمه کنیم.
این روش یعنی جریمه کردن هر دو طرف، به هر دو آنها این اجازه را میدهد تا دیگری را به زحمت بیاندازد. اگر جزء گروه اقلیت باشد با آفلاین شدن و اگر جزء گروه اکثریت باشد با سانسور کردن. اما میتوان با استفاده از تحلیل ضریب آسیب “Griefing Factor Analysis” یک محدوده خاص برای میزان سختی این کار تعیین کنیم. باید بدانید که ضریب آسیب معیاری جهت سنجش میزان آسیبی است که شرکت کنندگان در یک فرآیند میتوانند با سوء استفاده از آن، به دیگر کاربران آسیب برسانند.حتی این کار را با علم به داشتن هزینه و یا متحمل شدن آسیب به خود میکنند.
استراتژی ضریب آسیب چیست؟
استراتژی ضریب آسیب در اصل بیان کننده مجموع پول از دست رفته قربانیان تقسیم بر میزان پولی که مهاجمان از دست دادهاند. ضریب آسیب یک پروتکل، بیشتری حد ضریب آسیبی است که ساختار یک پروتکل مشخص به مهاجمان اجازه آن را میدهد.
به عنوان مثال اگر یک پروتکل خاص به شما این اجازه را بدهد که با هزینه 1 دلار به کاربر دیگری 3 دلار ضربه بزنید، ضریب آسیب آن پروتکل برابر 3 است. اگر هیچ گونه راهی برای آسیب زدن به سایر کاربران در یک پروتکل وجود نداشته باشد به این معنی است که ضریب آسیب آن پروتکل صفر است و اگر فرد مهاجم بتواند بدون صرف هزینهای (و یا حتی با به دست آوریدن منفعت طی آن فرایند) به سایر کاربران آسیب برساند در این صورت ضریب آسیب آن پروتکل بی نهایت است.
به طور کلی، هرگاه دوگانگی گوینده و شنونده به وجود بیاید، ضریب آسیب را نمیتوان به زیر 1 محدود کرد. دلیل این موضوع هم کاملا ساده و مشخص است. از آنجاییکه هر دو گروه توان این را دارند که به دیگری آسیب برسانند، اگر گروه 1 بتواند به گروه 2 با ضریب X آسیب برساند، آنگاه گروه 2 هم میتواند با ضریب 1 تقسیم بر X این کار را کند و این 2 ضریب به هیچ وجه نمیتوانند به طور هم زمان هر دو کمتر از 1 باشند.
(مهاجمین) به آسیب وارده به شبکه داشته باشیم، باید روشی جهت اندازهگیری آسیب وارد شده به پروتکل بیابیم.میتوان از این ضریب به نفع خود بهره ببریم، برای مثال، فرض را بر این بگذارید که تعیین ضریب 2 برای حملات گروه اکثریت قابل قبول باشد. در این صورت ضریب آسیب گروه اقلیت 5/0 خواهد بود و بر طبق تشخیص ما، احتمال وقوع حمله از طرف گروه اقلیت بیشتر خواهد بود.
ضریب آسیب 1 را برای حملات محدود پذیرفته شده است. اما برای حملات گسترهتر که منجر به گسسته شدن شبکه مورد نظر میشود، این موضوع باعث میشود تا در زنجیره 1 یک گروه تنبیه شوند و در زنجیره 2، گروه دیگر. با این روش میتوان به بازار و توان پردازشی این اجازه را داد تا زنجیره تحت حمایت خودشان را انتخاب کنند. به همین خاطر هم است که در این نوع ساختار فضای زیادی جهت مصالحه و انتخاب یک گزینه مناسب بر اساس شرایط پیش رو وجود دارد.
این روش یعنی جریمه کردن هر دو طرف دارای یک حسن دیگر هم است. اینکه این اطمینان را میدهد که در صورت آسیب پروتکل، تحت هر شرایطی مهاجم یا مهاجمین هم آسیب میبینند. این موضوع باعث میشود که خارج از کیستی مهاجم، این انگیزه و روحیه وجود داشته باشد که از حملاتی که جریمه آن با آسیب وارد شده به شبکه متناسب است، اجتناب شود. اما اگر تصمیم بگیریم که بخواهیم راهی جهت تعیین اندازه نسبت هزینه مهاجم باید روشی جهت اندازهگیری آسیب وارد شده به پروتکل بیابیم.
مفهوم تابع مطلوبیت پروتکل “Protocol Utility Function”
با بیان این مقدمه حالا میتوان مفهوم تابع مطلوبیت پروتکل “Protocol Utility Function” را معرفی کرد. این فرمول بیان میکند که اوضاع پروتکل مورد نظر چقدر خوب است. حد ایده آل این است که بتوان این فرمول را از درون خود بلاکچین محاسبه کرد. در مورد شبکههای بر پایه گواه اثبات کار، این فرمول میتواند درصد بلاکهای درست شده موجود در زنجیره اصلی باشد.
در کسپر حالت ایده آل پروتکل در حالت اجرای بدون نقص که تمام ایپوچها “epoch” به قطعیت میرسند. و هیچ گونه مشکل امنیتی پیش نخواهد آمد و صفر خواهد بود. برای هر ایپوچ که قطعی نشود مجازات متناسبی در نظر گرفته شده است و در ازای هر قصور امنیتی مجازات سنگینی وجود دارد. اگر بتوان به هر طریقی تابع مطلوبیت پروتکل را تعریف کرد، در آن زمان میتوان مجازات کم کاری ها را تا حد امکان، هم اندازه با زیان وارد شده به پروتکل تعیین کرد.