تحمل خطای بیزانس (BFT) چیست؟ مسئله‌ای بنیادی برای رسیدن به اجماع در بلاک چین‌ها

اگر با دنیای بلاک چین و انواع آن‌ها آشنایی داشته باشید، حتما تا به حال اسم خطا بیزانس، تحمل خطا بیزانس (Byzantine Fault Tolerance) و یا BFT را شنده‌اید. در این مقاله قصد داریم در مورد تحمل خطای بیزانسی صحبت کنیم. اگر ماییلید تا در مورد این مفهوم بیشتر بدانید تا انتهای این مقاله با ما همراه باشید.

پس از ایجاد بیت کوین در سال ۲۰۰۹ به‌عنوان سیستمی برای انتقال همتا به همتا ارزهای دیجیتال، انواع بلاک چین به وجود آمده است که اکثر آن‌ها به‌صورت غیرمتمرکز طراحی شده‌اند. این شبکه‌ها از اجتماع تعداد زیادی گره یا نود به وجود آمده‌اند که در تمام جهان پراکنده شده‌اند. تمام این نود‌ها با هم در ارتباط هستند و با ارسال پیام با هم ارتباط برقرار می‌کنند. این غیرمتمرکز بودن نودها باعث مشکلات زیادی خواهد شد، یکی از این مشکلات، رسیدن به اجماع است. رسیدن به اجماع قبل از بیت کوین نیز مورد بحث بوده است. یکی از مهم‌ترین راه‌حل‌هایی که برای این مسئله مطرح شده است، تحمل خطای بیزانس (Byzantine Fault Tolerance) است.

نود (Node) چیست؟ آشنایی با مفهوم نُود یا گره در بلاک چین

مسئله و مشکل ژنرال‌های بیزانس چه بود؟

در سال ۱۹۸۲ مسئله‌ ژنرال‌های بیزانس توسط لزلی لمپورت، مارشال پیز و رابرت شوستاک مطرح شد و بسیاری از افراد و متخصصان را به چالش کشید. هدف اصلی این مسئله رسیدن به اجماع در فضایی غیر ایده‌آل بود. مسئله‌ ژنرال‌های بیزانس به شرح زیر است.

تصور کنید که چندین لشکر از ارتش بیزانس در خارج از یک شهر دشمن اردو زده‌اند و هر لشکر توسط ژنرال خود فرماندهی می‌شود. ژنرال‌ها فقط از طریق پیام‌رسان یا چاپار می‌توانند با یکدیگر ارتباط برقرار کنند. پس از مشاهده دشمن، آنها باید در مورد یک نقشه مشترک تصمیم بگیرند که آیا حمله کنند یا عقب‌نشینی؟ با این حال، برخی از ژنرال‌ها ممکن است خائن باشند و سعی کنند از دستیابی ژنرال‌های وفادار به توافق جلوگیری کنند. تمام ژنرال‌ها با ارسال پیام با هم در ارتباط هستند و هر ژنرال نظر خود را برای دیگران ارسال می‌کند. ژنرال‌های خائن می‌توانند برای هر ژنرال نظر متفاوتی را ارسال کنند، می‌توانند به برخی از ژنرال‌ها پیشنهاد حمله و به برخی عقب‌نشینی را پیشنهاد دهند. باید توجه داشت که اگر برخی از ژنرال‌های وفادار حمله و برخی از آن‌ها عقب‌نشینی کنند؛ شکست خواهند خورد. در این بین ژنرال‌های وفادار باید یک تصمیم واحد بگیرند و با توجه به اینکه هیچ‌کدام نمی‌داند که خائنین چه کسانی هستند، نیازمند سیستمی هستند که به آنها کمک کند تا تصمیم واحدی بگیرند. این سیستم باید شرایط زیر را داشته باشد:

  • همه ژنرال‌های وفادار باید به یک تصمیم مشترک برسند.
  • اگر تعداد خائنین کم باشد، ژنرال‌های وفادار باید بتوانند تصمیم درستی بگیرند.
  • ژنرال‌های وفادار همه آنچه را که الگوریتم می‌گوید، انجام می‌دهند؛ اما خائنان ممکن است هر کاری که بخواهند انجام دهند.
  • این الگوریتم باید آنقدر مستحکم باشد که با وجود خائنین، ژنرال‌های وفادار همگی یک تصمیم مشترک بگیرند.
  • ژنرال‌های وفادار نه‌تنها باید به توافق برسند، بلکه باید بر روی یک برنامه معقول توافق کنند.

این مسئله ژنرال‌های بیزانس بود که در سال ۱۹۸۲ مطرح شد. شاید در نگاه اول این مسئله بسیار ساده به نظر برسد؛ اما با زیاد شدن تعداد ژنرال‌ها این مسئله پیچیده خواهد شد. اکنون به‌جای ژنرال‌ها، نودها را جایگزین کنید. فرض کنید که هزاران نود در تمام دنیا پراکنده شده‌اند و این نودها ممکن است معیوب، خرابکار و… باشند. حال باید با وجود این عدم اطمینان به دیگر نودها در شبکه به یک اجماع رسید. در ضمن زمان فراموش نشود؛ باید در کوتاه‌ترین زمان به اجماع دست‌ یافت.

لزلی لمپورت ثابت کرد که اگر تعداد ۳M + ۱ گره به‌درستی کار می‌کنند، می‌توان به اجماع دست‌ یافت. M تعداد گره‌های معیوب است. به زبانی دیگر اگر در یک سیستم تعداد گره‌های معیوب کمتر از یک‌سوم کل گره‌ها باشد، می‌توان به اجماع دست‌ پیدا کرد.

صرافی ارز دیجیتال پول نو

تحمل خطا بیزانس (Byzantine Fault Tolerance) چیست؟

تحمل خطا بیزانس یا تحمل خطای بیزانسی به ویژگی یک سیستم گفته می‌شود که قادر است با توجه به مشکلاتی که در مسئله ژنرال‌های بیزانس به آن اشاره شد، به بهترین اجماع دست پیدا کند؛ به عبارتی دیگر یک سیستم BFT می‌تواند به کار خود ادامه دهد، حتی اگر برخی از گره‌های موجود در شبکه از کار بیفتند یا به‌طور مخرب عمل کنند.

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

  • تحمل خطای بیزانس عملی (Practical Byzantine Fault Tolerance)
  • توافق فدرال بیزانس (Federated Byzantine Agreement)
  • تحمل خطا بیزانس تفویض شده (Delegated Byzantine Fault Tolerance)
  • اثبات کار (POW)
  • اثبات سهام (POS)

تحمل خطای بیزانسی عملی (pBFT) چیست؟

تحمل خطای بیزانسی عملی یا pBFT در سال ۱۹۹۹ توسط باربارا لیسکوف (Barbara Liskov) و میگل کاسترو (Miguel Castro) در مقاله‌ای با همین نام منتشر شد. pBFT در واقع یک پاسخ به مسئله‌ ژنرال‌‌های بیزانس بود که باعث به وجود آمدن سیستم‌های توضیع شده‌ بسیاری شده است. برای درک بهتر pBFT به تصویر زیر دقت کنید.

مدل عملکرد pBFT
  1. ابتدا کلاینت C درخواست خود را به یک گره ارسال می‌کند و اگر پس از مدت مشخصی جوابی دریافت نکرد، دوباره اقدام به ارسال در خواست خود به یک گره دیگر می‌کند. این عمل را آنقدر تکرار می‌کند تا درخواستش را یک گره سالم دریافت کند. به گره‌ای که درخواست را از کلاینت C دریافت می‌کند گره لیدر می‌گوییم.
  2. گره لیدر در خواست کلاینت را امضا و به تمام گره‌های موجود در شبکه ارسال می‌کند.
  3. تمام گره‌های سالم (در این مثال گره ۳ یک گره معیوب است) پس از دریافت درخواست اقدام به انجام تقاضای کلاینت C می‌کنند.
  4. پس از انجام تقاضا کلاینت C پاسخ درخواست آن توسط هر گره امضا و به دیگر گره‌ها ارسال می‌شود.
  5. حال هر گره پس از دریافت پاسخ دیگر گره‌ها و مشاهده پاسخی با بیشترین تعداد یک پیام تاییدیه برای دیگر گره‌ها ارسال می‌کنند.
  6. اگر گره‌ها بیش از دو سوم تعداد گره‌ها پیام تایید دریافت کنند، درخواست کلاینت C را تایید نهایی و پاسخ را برای کلاینت C ارسال می‌کنند.

باید توجه داشته باشید که هرکدام از این مراحل دارای یک بازه زمان محدود است، یعنی گره‌ای نتواند در زمان مناسب پاسخ دهد یا پاسخ نامناسب دهد، یک گره معیوب محسوب می‌شود. شبکه بلاکچینی زیلیکا (Zilliqa) از این روش اجماع بهره‌ می‌برد.

توافق تعهد بیزانس (Federated Byzantine Agreement)

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

تحمل خطا بیزانس تفویض شده (Delegated Byzantine Fault Tolerance)

در Delegated Byzantine Fault Tolerance گره‌هایی به‌عنوان نماینده تمام گره‌های شبکه انتخاب می‌شوند و گره‌ها به این نمایندگان رای داده و بهترین این نمایندگان را برای رسیدن به اجماع انتخاب می‌کنند. حال دیگر نیازی نیست که تمام گره‌ها به روش مشابه pBFT به اجماع دست یابند، بلکه فقط باید نمایندگان مانند مراحل بیان شده در pBFT به اجماع رسیده و پاسخ مورد کلاینت‌ها را ثبت و تایید می‌کنند. نئو (NEO) یک بلاک چین است که برای رسیدن به اجماع از این روش استفاده می‌کند. تفاوت تحمل خطا بیزانس تفویض شده با توافق تعهد بیزانس این است که در تحمل خطا بیزانس تفویض شده گره‌ها فقط به تعداد محدودی از گره‌ها می‌توانند رای دهند اما در توافق تعهد بیزانس گره‌ها می‌توانند هر گره‌ای را به عنوان نماینده انتخاب کنند.

ارز دیجیتال نئو چیست؟ با رقیب چینی اتریوم بیشتر آشنا شوید

اثبات کار (POW) یک پاسخ به مسئله ژنرال‌های بیزانس

اثبات کار یا POW یکی از پاسخ‌های جذاب به مسئله ژنرال‌های بیزانس است. ساتوشی ناکاموتو با ایجاد بیت کوین به این مسئله پاسخ جالبی داد. در سیستم‌هایی که با POW کار می‌کنند، رسیدن به اجماع نیاز به پردازش‌های پیچیده دارد و این موضوع باعث شده که برای گره‌های معیوب مقرون به‌صرفه نباشد که در اکوسیستم خرابکاری کنند. شاید نتوان اثبات کار را یک پاسخ عالی برای مشکل بیزانس دانست؛ اما می‌توان گفت که یکی از امن‌ترین پاسخ‌هایی است که تا به حال به این مسئله داده شده است.

اثبات سهام (POS) یک پاسخ به مسئله ژنرال‌های بیزانس

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

جمع‌بندی

رسیدن به اجماع از گذشته‌های دور مورد بحث بوده است و راه‌ حل‌های زیادی نیز برای این مسئله به وجود آمده است. یکی از مسائل مهم در دنیای رایانه، مسئله ژنرال‌های بیزانس است که باعث ایجاد راه‌حل‌های برای رسیدن به اجماع در بین گره‌ها شده است. در این مقاله سعی کردیم به بررسی مسئله ژنرال‌های بیزانس، تحمل خطا بیزانس (Byzantine Fault Tolerance)، پاسخ به مسئله ژنرال‌های بیزانس و… بپردازیم. ممنون که ما را تا انتهای این مقاله همراهی کردید.

نظرات کاربران

.دیگران نشانی ایمیل شما را نخواهند دید

بخش‌های ستاره‌دار را حتما پر کنید.

 

Subscribe
Notify of
guest
0 تمام دیدگاه‌ها
Inline Feedbacks
نمایش تمام دیدگاه‌ها
0
سوال دارید؟ همین حالا بپرسید...x