توضیحاتی پیرامون امنیت در بلاکچین

shape
shape
shape
shape
shape
shape
shape
shape
مقدمه

“مشو غره به امروزت، که از فردا نه ای آگه”

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

ممکنه براتون این سوال پیش اومده باشه که حالا اوکی، ما فهمیدیم یک سری انگیزه دارن بزنن، ولی اصلا میتونن همچین کاری کنن؟ میشه به این بلاکچین ها حمله کرد؟ میشه این کار رو کرد (حداقل روی کاغذ!). برای اینکه یک درکی داشته باشید، من دو نمونه از این حملات رو، بررسی میکنم.

  • راستی راستی: من منظورم از حملات، اینجا حمله ها به شبکه های مبتنی بر بلاکچین هست و حملات/مشکلات از جنس زیر، حمله به شبکه (به زعم من!) لحاظ نمی شن!
  1. کار نکردن نسخه آخر بلاکچینیِ ضد فیلترِ تلگرام معرفی شده در گروه فامیلی با کپشن #فوری
  2. حمله به صرافی ها برای دزدین بیت کوین (مثل حمله به بایننس)
  3. عدم امکان بهره بری از والت های خارجی و یا بلوکه شدن حساب ها برای مردم یک سری کشورهای خاص
  4. وجود یک باگ امنیتی در برنامه یک قرارداد هوشمند و استفاده مهاجم از این فرصت و حمله کردن و گرفتن احتمالی دارایی های دیگران (مثل هک دائو)
حمله 51 درصدی

فرض کنید که من فقط یک بیت کوین دارم و به ازای پرداخت یک بیت کوین از شما یک خونه خریدم. بعد دیدم که چه حالی میده کار کردن با این بیت کوین. خوبه که من دوباره برم یه چیز دیگه ای رو با بیت کوین بخرم! بعد می بینم که عه! بیت کوین ندارم. “زهی خیال باطل!”. هرچی داشتیم، دادیم رفت. در همین لحظه یک ایده های شیطانی به ذهنم میرسه و قراره شما قربانی اون ایده ها باشید!

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

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

مثال: فرض کنید تا الان 999تا بلوک تولید شده. همینطور فرض کنید که من در ایران هستم و در ثانیه 100 تونستم بلوک شماره 1000 رو تولید کنم و d هم تو سیستم 10 ثانیه هست. خب من میخوام پس از این پیروزی بزرگ سریع پاشم برم و خیلی سریع این پیروزی (تولید بلاک 1000) رو به گوش جهانیان برسونم. چرا؟ چون من جایزه گرفتم و از قضا جایزه من هم، چیزی نیست در قالب یک تراکنش در همین بلوکی که پیدا کردم و باید این تراکنش در تاریخچه ثبت بشه تا جایزه من معتبر باشه. پس این بلوک باید خیلی سریع برسه به اون سر دنیا، مثلا آمریکا! خب کی این بلوک میرسه آمریکا، ثانیه 1010 (چرا؟!)

از طرفی، اون سر دنیا که ماینرها بیکار نبودن. اونا هم دلشون میخواست جایزه رو ببرن و لذا در این مسابقه تولید بلوک شرکت می کنند. مسابقه ای هم که ماینرها توش شرکت میکنن ذاتا تصادفیه و ممکنه هر لحظه شما برنده بشی. حالا فرض کنید یهو، ناغافل در ثانیه 1002 یک ماینر در آمریکا به اسم HugeDevil تونست این کار رو بکنه. یعنی چی؟ یعنی اینکه اون تونست در ثانیه 1002 بلوک 1000 رو تولید کنه. خب اون چیکار میکنه؟ اونم مثل من خیلی سریع، میاد تراکنش خودش رو تو شبکه پخش کنه تا به گوش جهانیان برسونه.

الان چه اتفاقی افتاد؟ الان جهان ناخواسته وارد یک درگیری بسیار سهمگین بین ایران و آمریکا شد. اینکه ما الان حرف کی رو قبول کنیم و بگیریم بچسبونیم به تاریخچه؟ حالا فرض کنید وسط این دعوا و مرافعه، بقیه دنیا هم میخوان خیلی زود برن سراغ مرحله بعدی مسابقه، تولید بلوک 1001. خب این وسط چیجوری تصمیم می گیرن؟ جهت گیری سیاسی رو مبنای تصمیم گیری میزارن یا چی؟ معمولا اینجا ماینرها چون دنبال جایزه هستن و سرعت عمل هم در مسابقه مهمه، خیلی زود اولین بلوک درستی رو که بهشون رسیده، مبنای تصمیم گیری میزارن و میرن سراغ مرحله بعدی. الان چی شد پس تهش؟ الان شبکه دو تیکه شده. یه تیکه (مثلا 60 درصد شبکه) بلوک 1000 ام رو از من قبول می کنن و یه تیکه شبکه (40 درصد باقی مانده) بلوک HugeDevil رو. لازم به ذکره که فرض بر اینه که همه شبکه روی بلوک 1 تا 999 متفق القول هستند. به این حالت میگیم که اصطلاحا در شبکه فورک (fork) ایجاد شده.

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

Main chain is the longest chain

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

حالا ممکنه چندتا سوال پیش اومده باشه براتون.

  1. خب ممکنه هیچکی از اون یکی جلو نزنه! واقعیت اینه که هرچی جلوتر میریم به صورت نمایی احتمال این رویداد کم میشه و دیگه از یه جایی به بعد تقریبا میشه و صفر و می تونیم (تقریبا) با اطمینان خاطر بگیم که بالاخره یکی میزنه جلو.
  2. حالا تو این مثال خاص کی می بره اول کار؟ یه قاعده و آنالیزی وجود داره (که بخشی اش در مقاله خود بیت کوین هم اومده) که اون گروهی که توان پردازشیش بیشتر هست (یا معادلا بیش از 50 درصد توان محاسباتی موجود در شبکه رو داره)، موفق میشه. مثلا تو این مثال خاص گروه منتسب به من، برنده میشن.
  3. خب اگه اینجوریه که اونی که بیشتر توان محاسباتی داره برنده میشه، پس چرا همون اول نمیریم سراغ اون؟ ببینید اون ماینرهای پرتلاشی که اون وسط هستند که از بالا به شبکه نگاه نمی کنن! تو خود سیستم دارن عرق میریزن و تراکنش ماین میکنن. یک بلوکی اومد براشون، اگه درست بود میدن به بغلی و سریع میرن سراغ بلوک بعدی. دیگه درگیر کدوم قوی تره و اینا نمیشن. اصلا نمی تونن بشن!
  4. خب اگه دقیقا 50-50 شدن چی؟ با توجه به ماهیت پویای شبکه بیت کوین، احتمال اینکه اولا دقیقا 50-50 بشه و ثانیا تا ابد هم بمونه و ثالثا این دوتا گروه لحظه به لحظه، گام به گام با هم پیش برن و هی همینجور همزمان بلوک بعدی رو تولید کنن، خیلی نزدیک به صفره. اصلا شما فرض کن صفره مشکلی پیش اومد بیا یقه منو بگیر!

خب اینهمه مقدمه طولانی گفتیم، چه ربطی به ایده شیطانی دوم داشت؟ ربطش اینه که تنها راه حل برای اینکه شما تراکنش رو از تاریخچه حذف کنی، اینه که بری و یه فورک ایجاد کنی.

بزارید یکم دقیقتر بگم تا واضحتر بشه. فرض کنید تراکنش من به شما در بلوک 1812 ثبت شده. تراکنش دوم تو بلوک رو ببینید. اون از من به شماست. و تا الان هم 1813 تا بلوک ماین شده.

حمله 51 درصدی

من برای اینکه بتونم این تراکنش رو حذف کنم، باید کل بلوک 1812 و 1813 رو حذف کنم. یعنی یک زنجیره ای از بلوک ها پیشنهاد بدم که توش این دوتا بلوک نباشند.

سوال: آیا میتونم زنجیره متشکل از بلوک های 1 تا 1811 رو بدم؟ خیر. چون زنجیره بالا طولش بیشتره و طبق قاعده بقیه اون رو انتخاب میکنن. پس چیکار کنم؟ باید برم از بلوک های قبلی فورک بزنم و تو این زنجیره های جدید این تراکنش رو حذف کنم. خب فورک رو از کجا بزنم بهتره؟ از بلوک 1 یا بلوک2 یا چی؟ برای اینکه شانسم بیشتر باشه  برای متقاعد کردن شبکه و زودتر بتونم یک زنجیره با طول بیشتر تولید کنم، باید برم سراغ بلوک 1811 و از اونجا فورک بزنم، مثل شکل.

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

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

حمله ماینینگ (ارزکاوری) خودخواهانه:

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

One cpu one vote

بازم یعنی چی؟ یعنی اینکه مثلا اگر شما 10 درصد توان محاسباتی شبکه رو داری، و اگه ما بیایم یه تعداد نسبتا زیادی بلوک رو (مثلا 1000) تاش رو بررسی کنیم، 10 درصد اون بلوک ها مال شماست (100 تاش، طبق مثال). یعنی 10 درصد جایزه ها برای شما میشه. حالا یسری ها ممکنه به سهم خودشون راضی نباشند. میخوان مثلا اگه 40 درصد توان محاسباتی شبکه مال ایناس، بتونن بیشتر پول در بیارن. میشه همچین کاری کرد؟ راه مقابله باهاش هست؟ من وارد این قضیه فعلا نمیشم (بعدا اگه خدا بخواد در موردش می نویسم) ولی اگه دوست داشتین این مقاله رو نگاه کنید.

 

در ادامه ان شاالله پیرامون امنیت در شبکه های بلاکچینی بیشتر خواهم نوشت.

نویسنده :حنظله اکبری نودهی

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *