تصور کنید سیستمی متشکل از دهها یا حتی هزاران کامپیوتر در سراسر جهان باید بر سر یک موضوع واحد به توافق برسند. حال اگر برخی از این کامپیوترها دچار نقص فنی شوند یا حتی بدتر، توسط عوامل مخرب کنترل شوند و اطلاعات نادرست ارسال کنند، چه اتفاقی میافتد؟ اینجاست که مفهوم حیاتی تحمل خطای بیزانس (Byzantine Fault Tolerance - BFT) وارد میدان میشود. BFT به توانایی یک سیستم توزیعشده برای ادامه کارکرد صحیح و رسیدن به اجماع، حتی در حضور گرههای معیوب یا خائن، اشاره دارد. این مفهوم، سنگ بنای بسیاری از شبکههای غیرمتمرکز امروزی است و درک آن برای هر کسی که به فناوریهای نوین علاقهمند است، ضروری است.
مسئله ژنرالهای بیزانسی: ریشه یک چالش بزرگ
برای درک عمیق BFT، ابتدا باید با مسئلهای کلاسیک در علوم کامپیوتر آشنا شویم: مسئله ژنرالهای بیزانسی. این مسئله که در سال ۱۹۸۲ توسط لزلی لمپورت، رابرت شاستاک و مارشال پیز ارائه شد، یک تمثیل قدرتمند برای چالشهای ارتباطی در سیستمهای توزیعشده است.
سناریوی مسئله چیست؟
چندین لشکر از ارتش بیزانس در حال محاصره یک شهر دشمن هستند. هر لشکر توسط یک ژنرال فرماندهی میشود. این ژنرالها باید برای یک حمله هماهنگ یا عقبنشینی مشترک به توافق برسند. تصمیم آنها باید یکسان باشد؛ حمله ناهماهنگ به شکست قطعی منجر خواهد شد.
مشکل اصلی اینجاست:
-
ارتباط غیرمستقیم: ژنرالها فقط میتوانند از طریق پیکها با یکدیگر ارتباط برقرار کنند.
-
حضور خائنها: برخی از ژنرالها ممکن است خائن باشند. یک ژنرال خائن میتواند پیامهای متناقضی به ژنرالهای مختلف ارسال کند. برای مثال، به یک ژنرال پیام «حمله» و به دیگری پیام «عقبنشینی» بفرستد تا هماهنگی را برهم بزند.
-
پیکهای غیرقابل اعتماد: حتی پیکها نیز ممکن است در مسیر دستگیر شوند یا پیامشان تغییر کند.
هدف اصلی، طراحی یک الگوریتم یا پروتکل است که به ژنرالهای وفادار اجازه دهد با وجود حضور خائنها، به یک تصمیم واحد و صحیح دست پیدا کنند. راهحل این مسئله نشان میدهد که برای رسیدن به اجماع در حضور f ژنرال خائن، حداقل به 3f + 1 ژنرال کل نیاز است. به عبارت دیگر، سیستم تنها زمانی میتواند خطای بیزانسی را تحمل کند که کمتر از یکسوم شرکتکنندگان آن مخرب یا معیوب باشند.

تحمل خطای بیزانس (BFT) چگونه در عمل کار میکند؟
تحمل خطای بیزانس، راهحل عملی مسئله ژنرالهای بیزانسی در سیستمهای کامپیوتری است. در یک شبکه توزیعشده مانند بلاکچین، هر کامپیوتر یا «گره» (Node) نقش یک ژنرال را ایفا میکند. این گرهها باید بر سر وضعیت کلی شبکه، مانند ترتیب و صحت تراکنشها، به توافق برسند. BFT مجموعهای از الگوریتمها و پروتکلها را فراهم میکند که به گرههای صادق اجازه میدهد با وجود گرههای بیزانسی (گرههایی که اطلاعات نادرست ارسال میکنند یا آفلاین هستند) به اجماع دست یابند.
الگوریتمهای کلیدی اجماع BFT
الگوریتمهای اجماع BFT مکانیزمهایی هستند که قوانین رسیدن به توافق را مشخص میکنند. این الگوریتمها معمولاً شامل چندین مرحله ارتباطی بین گرهها هستند تا از صحت و یکپارچگی اطلاعات اطمینان حاصل شود. در ادامه به برخی از مشهورترین آنها میپردازیم.
۱. تحمل خطای بیزانس عملی (Practical Byzantine Fault Tolerance - PBFT)
PBFT که در سال ۱۹۹۹ توسط میگل کاسترو و باربارا لیسکوف معرفی شد، یکی از اولین و تأثیرگذارترین الگوریتمهای BFT بود. این الگوریتم برای سیستمهای ناهمزمان (Asynchronous) طراحی شده و میتواند تا زمانی که تعداد گرههای خائن کمتر از یکسوم کل گرهها باشد، به اجماع برسد.
مراحل اصلی کارکرد PBFT:
-
پیش-آمادهسازی (Pre-prepare): یک گره به عنوان «رهبر» (Primary) انتخاب میشود و یک بلوک از تراکنشها را به سایر گرهها (Replicas) پیشنهاد میدهد.
-
آمادهسازی (Prepare): گرههای دیگر پس از دریافت پیشنهاد، آن را در شبکه پخش میکنند تا ببینند آیا سایر گرهها نیز همان پیشنهاد را از رهبر دریافت کردهاند یا خیر.
-
تعهد (Commit): اگر یک گره به اندازه کافی پیام «آمادهسازی» از دیگران دریافت کند (که نشاندهنده توافق اولیه است)، وارد مرحله تعهد شده و پیام تعهد خود را برای همه ارسال میکند.
-
پاسخ (Reply): زمانی که یک گره به تعداد کافی پیام تعهد دریافت کرد، به این نتیجه میرسد که شبکه به اجماع رسیده است. در این مرحله، تراکنش را اجرا کرده و نتیجه را به کلاینت ارسال میکند.
این فرآیند چندمرحلهای تضمین میکند که حتی اگر رهبر خائن باشد و پیامهای متفاوتی ارسال کند، گرههای صادق متوجه این عدم هماهنگی شده و میتوانند یک رهبر جدید انتخاب کنند.
۲. تندرمینت (Tendermint)
تندرمینت یک الگوریتم اجماع BFT مدرن است که در بلاکچینهایی مانند کازماس (Cosmos) استفاده میشود. این الگوریتم فرآیند PBFT را با مکانیزمهای رأیگیری سادهسازی کرده است. در تندرمینت، یک «پیشنهاددهنده» (Proposer) برای هر دور انتخاب میشود تا یک بلوک جدید را پیشنهاد دهد. سپس سایر گرهها که «تأییدکننده» (Validator) نامیده میشوند، در دو مرحله رأیگیری (Pre-vote و Pre-commit) شرکت میکنند. اگر بیش از دوسوم تأییدکنندگان در هر دو مرحله به توافق برسند، بلوک نهایی و به زنجیره اضافه میشود. این ساختار منظم و مبتنی بر دور، سرعت و کارایی بالایی را فراهم میکند.
۳. سایر الگوریتمهای BFT
-
HoneyBadgerBFT: اولین پروتکل اجماع BFT ناهمزمان (Asynchronous) که برای محیطهای واقعی طراحی شده و میتواند با سرعت شبکه سازگار شود.
-
Stellar Consensus Protocol (SCP): الگوریتمی که در شبکه استلار (Stellar) به کار میرود و به جای توافق کل شبکه، بر اساس توافق گروههای کوچکتر و قابل اعتماد (Quorum Slices) عمل میکند.
چرا BFT برای بلاکچین و سیستمهای غیرمتمرکز حیاتی است؟
اهمیت BFT در توانایی آن برای ایجاد اعتماد در یک محیط بیاعتماد نهفته است. در یک شبکه متمرکز (مانند یک بانک)، یک مرجع مرکزی وجود دارد که مسئول تأیید تراکنشها و حفظ امنیت است. اما در شبکههای غیرمتمرکز، هیچ مرجع مرکزی وجود ندارد. BFT این خلأ را با ایجاد یک سیستم قدرتمند برای دستیابی به توافق جمعی پر میکند.
-
امنیت در برابر حملات: BFT شبکهها را در برابر حمله ۵۱٪ (در مدلهای خاص) و سایر حملات مبتنی بر ارسال اطلاعات غلط محافظت میکند. اگر یک مهاجم کنترل کمتر از یکسوم گرهها را در اختیار بگیرد، نمیتواند تراکنشهای جعلی را تأیید کند یا تاریخچه بلاکچین را تغییر دهد.
-
قابلیت اطمینان و در دسترس بودن (Liveness): سیستمهای BFT تضمین میکنند که شبکه حتی در صورت خرابی یا آفلاین شدن بخشی از گرهها، به فعالیت خود ادامه دهد و تراکنشهای جدید را پردازش کند. این ویژگی برای کاربردهایی که نیاز به در دسترس بودن دائمی دارند، حیاتی است.
-
نهایی شدن سریع تراکنشها (Fast Finality): برخلاف الگوریتم اثبات کار (Proof-of-Work) در بیتکوین که در آن تأیید یک تراکنش ممکن است زمانبر باشد، بسیاری از الگوریتمهای BFT نهایی شدن قطعی را ارائه میدهند. یعنی وقتی یک تراکنش تأیید شد، دیگر قابل بازگشت نیست. این ویژگی برای کاربردهای مالی و تجاری بسیار مهم است.

مقایسه الگوریتمهای اجماع BFT
برای درک بهتر تفاوتها، در جدول زیر سه الگوریتم اجماع BFT محبوب را با یکدیگر مقایسه میکنیم:
| ویژگی | تحمل خطای بیزانس عملی (PBFT) | تندرمینت (Tendermint) | اثبات کار (Proof-of-Work) - برای مقایسه |
| نوع تحمل خطا | بیزانسی (مخرب) | بیزانسی (مخرب) | بیزانسی (مخرب) |
| حداکثر خطای قابل تحمل | کمتر از ⅓ گرهها | کمتر از ⅓ گرهها | کمتر از ۵۱٪ قدرت هش |
| سرعت نهایی شدن | سریع و قطعی | سریع و قطعی | کند و احتمالی |
| مقیاسپذیری | محدود (مناسب برای شبکههای کوچک تا متوسط) | متوسط (بهتر از PBFT) | بسیار بالا (تعداد گرهها نامحدود) |
| مصرف انرژی | بسیار کم | کم | بسیار بالا |
| ارتباطات | پیچیدگی ارتباطی بالا (O(n2)) | پیچیدگی ارتباطی بالا (O(n2)) | ساده (پخش بلوک) |
| کاربردهای اصلی | بلاکچینهای خصوصی (Hyperledger Fabric) | بلاکچینهای عمومی (Cosmos) | ارزهای دیجیتال (Bitcoin, Ethereum 1.0) |
محدودیتها و چالشهای BFT چیست؟
با وجود تمام مزایا، سیستمهای BFT با چالشهایی نیز روبرو هستند که استفاده از آنها را در برخی سناریوها محدود میکند.
-
پیچیدگی ارتباطی: اکثر الگوریتمهای BFT نیازمند ارتباطات گسترده بین گرهها هستند. در هر مرحله از اجماع، گرهها باید پیامهای زیادی را برای یکدیگر ارسال و دریافت کنند. این موضوع با افزایش تعداد گرهها به یک گلوگاه تبدیل شده و مقیاسپذیری شبکه را محدود میکند. به همین دلیل، سیستمهای BFT معمولاً برای شبکههایی با تعداد اعضای محدود (مانند بلاکچینهای خصوصی یا کنسرسیومی) مناسبتر هستند.
-
آسیبپذیری در برابر حملات Sybil: در یک حمله Sybil، یک مهاجم تعداد زیادی گره جعلی ایجاد میکند تا قدرت رأیگیری خود را افزایش دهد و کنترل شبکه را به دست بگیرد. سیستمهای BFT باید با مکانیزمهای دیگری مانند اثبات سهام (Proof-of-Stake) ترکیب شوند تا از این نوع حملات جلوگیری کنند.
-
نیازمندی به شناسایی اعضا: بسیاری از الگوریتمهای BFT کلاسیک (مانند PBFT) نیازمند این هستند که تمام گرههای شرکتکننده در فرآیند اجماع از قبل مشخص و شناختهشده باشند. این ویژگی آنها را برای شبکههای عمومی و بدون نیاز به مجوز (Permissionless) که هر کسی میتواند به آن بپیوندد، نامناسب میسازد.
نتیجهگیری: ستون فقرات اعتماد در دنیای دیجیتال
تحمل خطای بیزانس از یک مسئله نظری جذاب به یک فناوری بنیادی در ساخت سیستمهای توزیعشده امن و قابل اعتماد تبدیل شده است. این مفهوم به ما اجازه میدهد تا سیستمهایی بسازیم که میتوانند در برابر خطاها و حملات داخلی مقاومت کنند و یکپارچگی خود را حفظ نمایند. از بلاکچینهای قدرتمندی که میزبان اقتصادهای دیجیتال هستند گرفته تا سیستمهای کنترل پرواز و رایانش ابری، BFT نقشی حیاتی در تضمین عملکرد صحیح و قابل پیشبینی این فناوریها ایفا میکند. با پیشرفت روزافزون دنیای دیجیتال، اهمیت توانایی دستیابی به اجماع در شرایط عدم قطعیت، بیش از پیش آشکار خواهد شد و BFT همچنان به عنوان یکی از کلیدیترین راهحلها در این مسیر باقی خواهد ماند.
سوالات متداول (FAQ)
تحمل خطای بیزانس (BFT) به زبان ساده چیست؟
تحمل خطای بیزانس (BFT) مانند یک سیستم رأیگیری بسیار امن در یک گروه است که برخی از اعضای آن ممکن است دروغ بگویند یا اشتباه کنند. BFT تضمین میکند که حتی با وجود این اعضای غیرقابل اعتماد، گروه همچنان میتواند به یک تصمیم درست و مشترک برسد، به شرطی که تعداد اعضای صادق به اندازه کافی زیاد باشد (معمولاً بیش از دو سوم).
تفاوت اصلی بین اثبات کار (PoW) و BFT چیست؟
تفاوت اصلی در نحوه دستیابی به اجماع و نهایی شدن تراکنشهاست. اثبات کار (PoW) مانند یک رقابت است که در آن ماینرها برای حل یک معما با هم رقابت میکنند و برنده بلوک بعدی را اضافه میکند؛ این فرآیند بسیار انرژیبر است و نهایی شدن تراکنشها احتمالی است. اما BFT یک فرآیند ارتباطی و رأیگیری مستقیم بین گروهی از اعتبارسنجها است که به نهایی شدن سریع و قطعی تراکنشها با مصرف انرژی بسیار کمتر منجر میشود.
آیا بیتکوین از BFT استفاده میکند؟
بله، اما به روشی متفاوت. الگوریتم اثبات کار (Proof-of-Work) بیتکوین یک راهحل احتمالی برای مسئله ژنرالهای بیزانسی است. به این معنا که با گذشت زمان و اضافه شدن بلوکهای جدید، احتمال بازگشت یک تراکنش به صورت نمایی کاهش مییابد و به صفر نزدیک میشود. در مقابل، الگوریتمهای BFT کلاسیک مانند PBFT راهحلهای قطعی ارائه میدهند؛ یعنی پس از توافق، تراکنش بلافاصله نهایی میشود.
BFT در چه زمینههایی به جز بلاکچین کاربرد دارد؟
BFT کاربردهای گستردهای در سیستمهایی دارد که نیازمند هماهنگی و قابلیت اطمینان بالا هستند. برخی از این کاربردها عبارتند از:
-
سیستمهای هوانوردی و فضایی: برای هماهنگی بین کامپیوترهای مختلف در یک هواپیما یا فضاپیما.
-
رایانش ابری (Cloud Computing): برای تضمین یکپارچگی دادهها در پایگاههای داده توزیعشده.
-
سیستمهای کنترل صنعتی: برای هماهنگی بین سنسورها و عملگرها در یک کارخانه هوشمند.
چرا در الگوریتمهای BFT باید بیش از دو سوم گرهها صادق باشند؟
این شرط ریاضی برای جلوگیری از بنبست و تضمین اجماع ضروری است. اگر شبکه به دو بخش مساوی از گرههای صادق و خائن تقسیم شود (مثلاً ۵۰-۵۰)، ممکن است هرگز به توافق نرسند. آستانه ⅔ تضمین میکند که همیشه یک اکثریت قاطع از گرههای صادق وجود دارد که میتوانند تصمیم گرههای خائن را نادیده گرفته و به یک نتیجه واحد برسند.