تحمل خطای بیزانسی یا BFT یکی از مهمترین مفاهیم در بلاک چین و شاید کمتر شناخته شده ترین مفاهیم است. اما بدون آن، فناوری بلاک چین امکان پذیر نخواهد بود.
واژه خطای بیزانسی از مسئله ژنرال های بیزانسی (PGB) گرفته شده است. این مشکل منطقی به طور خلاصه فرض میکند که بازیگران باید روی یک استراتژی هماهنگ برای جلوگیری از شکست فاجعهبار سیستم توافق کنند . اما این احتمال وجود دارد که در داخل سیستم بازیگرانی وجود داشته باشند که ممکن است قابل اعتماد نباشند. با توجه به این واقعیت، سیستم باید مکانیسم هایی ایجاد کند که تضمین کند این عوامل مخرب نمی توانند بدون درمان منجر به شکست شوند. ایجاد این مکانیسمها دقیقاً همان سازوکارهایی هستند که شکستهای بیزانس را تحمل میکنند.
شاید ساده به نظر برسد، اما واقعیت بسیار متفاوت است. دستیابی به تحمل خطای بیزانسی یکی از دشوارترین چالش ها در محاسبات است. تا جایی که اولین طرحی که آن را به طور رضایت بخشی حل کرد، بیت کوین ، ساتوشی ناکاموتو بود. این یک نقطه عطف است که تاکنون با فناوری بلاک چین همراه بوده است.
تحمل خطای بیزانسی ، توانایی یک سیستم کامپیوتری توزیع شده برای مقاومت در برابر خطاهای بیزانسی است.
این خطاها می توانند عبارتند از:
- خطا های اجماع.
- خطا های اعتبار سنجی
- خطا در تأیید داده ها
- نقص در پاسخ پروتکل در برابر موقعیت های شبکه.
این تحمل به توانایی شبکه، برای ایجاد مکانیسم رضایت مرتبط است. هدف از این کار دادن یک پاسخ منسجم به خرابی سیستم است.
تحمل خطای بیزانس چگونه کار می کند؟
تحمل خطای بیزانسی با تعریف مجموعهای از قوانین کار میکند که اجازه میدهد مشکل ژنرالهای بیزانسی را به روشی رضایتبخش حل کند. دستیابی به این امر پیچیده است، زیرا این نوع خطاها به معنای محدودیت نیستند. این وضعیت مشکل را پیچیده تر و مقابله با آن را دشوارتر می کند. با این حال، در بسیاری از سیستم های کامپیوتری این تحمل یک الزام است. بنابراین، برای دستیابی به این هدف، یک سیستم تحمل خطای بیزانسی باید حداقل موارد زیر را برآورده کند:
- هر فرآیندی باید با وضعیت نامشخص (نه بله، نه خیر) شروع شود. در این مرحله، شبکه یک سری از مقادیر قطعی قابل اعمال برای فرآیند را پیشنهاد می کند.
- برای به اشتراک گذاشتن دارایی ها، ابزار ارتباطی باید تضمین شود. این به منظور نمایش ایمن پیام ها الزامی است. این رسانه همچنین در خدمت برقراری ارتباط و شناسایی صریح طرفین خواهد بود.
- در این مرحله، گره ها مقادیر را محاسبه می کنند و به یک حالت تصمیم گیری می شوند (بله یا خیر). گره Cada باید حالت خود را ایجاد کند، که بخشی از یک فرآیند کاملاً قطعی است.
- پس از تصمیم گیری، واحدی با بیشترین تعداد تصمیم به نفع جمع آوری کرده و برنده می شوند.
این چهار مورد، عملکرد اساسی یک الگوریتم تحمل خطا بیزانسی را تعریف می کند.
توضیح دقیق تر
مورد فوق مطمئناً می تواند کمی پیچیده باشد. بنابراین، توضیح سادهتری که برای بلاک چین اعمال میشود، به شرح زیر است :
بیایید تصور کنیم که یک فرد یک تراکنش بیت کوین را انجام می دهد.
گره Cada در شبکه، شروع به کامپایل تراکنش در حالت نامشخص (TX تایید نشده) می کند. تایید آن تراکنش از طریق کار ماینینگ انجام می شود. (پروتکل اجماع ما). فرآیند استخراج تأیید می کند که هش تراکنش صحیح است و آن را در یک بلوک گنجانده است.
این فرآیند تأیید محاسباتی فشرده است و تنها با ابزارهای قطعی امکان پذیر است. با هر تأیید جدید (وضعیت تصمیم گیری) تراکنش که توسط اکثریت شبکه ارائه می شود،می توان مطمئن شد که تراکنش معتبر است.
موارد استفاده از تحمل خطای بیزانس
تحمل خطای بیزانسی توانایی حل مشکلات مختلف را دارد. در میان این موارد، ما در مورد برخی از مرتبط ترین آنها صحبت خواهیم کرد تا کمی بیشتر در مورد کاربرد گسترده آنها بدانیم :
مورد شماره ۱: استفاده در کامپایلرهای نرم افزار
کد منبع Un compiler یکی از پیچیده ترین ابزارهای محاسباتی است که می توانیم بشناسیم. کامپایلرها توانایی تبدیل کد منبع یک برنامه را به یک باینری با قابلیت اجرا توسط کامپیوتر دارند. این بدان معنی است که آنها چیزی نزدیک به زبان انسانی (مانند C / C ++ یا Go) را به زبان ماشین یا باینری تبدیل می کنند.
در میان همه اینها، کامپایلرها توانایی خود را در برنامه های فرعی مختلف برای انجام اقدامات زیر اجرا می شود:
- کد منبع را به معماری پردازنده مورد نظر ترجمه کنید. به عنوان مثال، ما می توانیم تصمیم بگیریم که آیا برای x86-32 (کامپیوتر) یا ARM (موبایل) کامپایل کنیم. در این مثال، x86-32 را انتخاب می کنیم.
- پارامترها را با قابلیت های نسل پردازنده هدف تنظیم کنید. نکته ای که باید در نظر داشت، این است که کدهای نسل بالاتر در نسل قبلی اجرا نشود. در این مرحله تصمیم گرفته شد برای نسل سوم Core i2 کدنویسی شود.
- شروع به کامپایل کردن کد می کند و تمام برنامه های فرعی آن را به کد ماشین تبدیل می کند. به موازات آن، اپلت ها تصمیم می گیرند که کجا می توانید بهینه سازی کنید و چه بهینه سازی هایی را برای کد خود اعمال کنید. نتیجه نهایی این است که برنامه ما کامپایل شده و آماده اجرا است.
در این فرآیند، تحمل خطای بیزانسی حیاتی است، زیرا موارد زیر را تضمین می کند:
- اپلت ها به درستی پارامترها و بهینه سازی ها را برای معماری و نسل انتخابی اعمال می کنند. عدم انجام این کار منجر به خطا و شکست خواهد شد.
- اعمال بهینه سازی ها باید مطمئن شوید که آنها به معنای تکراری بودن داده ها نیستند. اما بازنویسی در سطح باینری نیز نباید بر عملکرد قطعات باینری تأثیر بگذارد. در این مرحله، تحلیل خطای بیزانسی ضروری است و کامپایلرها باید بتوانند آن را تحلیل کنند.
مورد شماره ۲: سیستم های ذخیره سازی داده ها
یکی دیگر از موارد استفاده از تحمل خطای بیزانسی، سیستم های ذخیره سازی داده است. بسیاری از سیستم های پایگاه داده و حتی سیستم های فایل آن را برای بهبود قابلیت اطمینان داده های ذخیره شده پیاده سازی می کنند. یک مثال از این سیستم فایل ZFS است. این سیستم بایگانی قادر به تکرار هش پیشرفته، تکرار، حذف مجدد، تصحیح خطا، مدیریت و ذخیره سازی برای حجم زیادی از داده ها است.
برای رسیدن به این هدف، ZFS از طرحهای تحمل خطا بیزانسی استفاده میکند تا اطمینان حاصل کند:
- عدم حذف فرآیندهای ابتدایی برای پردازش داده های ذخیره شده با ذخیره شدن در سیستم فایل. به عنوان مثال، اعمال هش بر روی داده ها و ابرداده ها، فشرده سازی، تصحیح خطاها یا حذف مجدد آن ها.
- هیچ گام نامطلوبی در پردازش داده ها برداشته نمی شود. به عنوان یک de-duplication که منجر به از دست رفتن داده ها در سیستم می شود. یا رفع اشکالی که اطلاعات را خراب می کند.
- همه فرآیندهای ایجاد، خواندن و نوشتن در ساختارهای تودرتو ZFS آنها از این نوع تکنیک ها استفاده می کنند تا اطمینان حاصل کنند که همیشه سازگار هستند.
به لطف همه اینها، ZFS داده های ذخیره شده در ساختار خود را به روشی امن نگه می دارد. به همین دلیل است که به عنوان امن ترین و پیشرفته ترین سیستم فایل در دنیای محاسبات شناخته می شود.
مورد شماره ۳: سیستم های اویونیک
این مورد در سیستم مدیریت اطلاعات هواپیما استفاده می شود. سیستمی که در زمان واقعی (real time) کار می کند و دارای تحمل خطای بیزانسی است.
هر یک از حسگرهای هواپیما با سیستم های فرماندهی و کنترل ارتباط برقرار می کنند که اطلاعات را در زمان واقعی ارائه می دهند. خرابی یک حسگر نباید در هیچ زمانی به معنای خرابی فاجعه بار برای هواپیما باشد. برای رسیدن به این هدف، از تحمل خطا بیزانسی استفاده شده است. به این منظور داده های حسگر یا سیستم های آسیب دیده جبران و باعث ایمن نگه داشتن هواپیما می شود.
در واقع، در این مرحله استفاده از تحمل خطا بیزانسی کاملاً یک چالش است. با توجه به تعداد سیستم ها و سناریوهای مختلف برای رسیدگی. اویونیک باید از مواردی مانند پیکربندی مجدد، تکرار، خرابی کل سیستم ها آگاه باشد و همچنان در برابر این نوع خرابی مقاومت نشان دهد. در حالی که مقاومت ۱۰۰% غیرممکن است، مهندسان و برنامه نویسان در این زمینه کار فوق العاده ای انجام می دهند.
مورد شماره ۴: پروتکل های اجماع بلاک چین
پروتکل های اجماع بر روی بلاک چین مانند PoW در برابر شکست های بیزانسی تحمل می کنند. اینها اجازه می دهد تا در یک شبکه توزیع شده تحت شرایط بیزانس به یک اجماع رسید. وقتی ساتوشی ناکاموتو بیت کوین را طراحی کرد، این نوع تحمل را در نظر گرفت. برای انجام این کار، او یک سری قوانین ایجاد کرد و پروتکل توافقی PoW را برای ایجاد نرم افزار با تحمل خطای بیزانسی اعمال کرد. با این حال، این تحمل ۱۰۰٪ نیست.
با وجود این، PoW ثابت کرده است که یکی از امن ترین و قابل اعتمادترین پیاده سازی ها برای شبکه های بلاک چین است. از این نظر، الگوریتم اجماع اثبات کار، طراحی شده توسط ساتوشی ناکاموتو، توسط بسیاری به عنوان یکی از بهترین راه حل ها برای شکست های بیزانسی در نظر گرفته می شود. PoS و DPoS به نوبه خود، به طور کامل در برابر خطاهای بیزانسی تحمل نمی کنند، به همین دلیل است که معمولاً با سایر اقدامات امنیتی تکمیل می شوند.




