مسئله ژنرال بیزانس چیست؟
در ادامه آموزش های بیت کوین به اینجا می رسیم،برای توضیح داستان ژنرال بیزانس ابتدا به عکس فوق دقت کنید. تصور کنید که گروهی از ژنرالهای بیزانس وجود دارند و میخواهند به یک شهر حمله کنند. آنها با دو مشکل بسیار متفاوت روبرو هستند
- ژنرالها و ارتش آنها بسیار از یکدیگر فاصله دارند، بنابراین رهبری متمرکز غیرممکن است، که این امر حمله هماهنگ را بسیار سخت میکند.
- این شهر دارای یک ارتش عظیم است و تنها راهی که آنها میتوانند پیروز شوند این است که همه به یکباره به شهر حمله کنند.
به منظور برقراری هماهنگی موفقیت آمیز، ارتشهای سمت چپ قلعه با پیامی که میگوید «چهارشنبه حمله کنید» یک پیام رسان را به ارتشهای سمت راست قلعه میفرستند. با این وجود، تصور کنید ارتشهای سمت راست برای حمله آماده نشدهاند و میگویند «نه. جمعه حمله کنید» و پیام رسان از طریق شهر به ارتشهای سمت چپ میفرستند. اینجاست که با مشکل روبرو هستیم. اتفاقات مختلفی میتواند برای پیام رسان بیچاره رخ دهد. او ممکن است توسط ارتش شهر اسیر شود، به خطر بیفتد، کشته شود و توسط یک پیامرسان دیگر جایگزین شود. این امر باعث میشود که ارتش اطلاعاتی کاملاً دستکاری شده دریافت کند که ممکن است منجر به یک حمله بدون هماهنگی شود.
این داستان اشارات روشنی به بلاکچین نیز دارد. زنجیره یک شبکه عظیم است. چگونه میتوان به آنها اعتماد کرد؟ اگر شما به کسی از کیف پول خود 4 اتر میفرستید، چگونه مطمئن میشود که کسی در شبکه نمیخواهد آنرا دستکاری کند و 4 را به 40 اتر تغییر دهد؟
ساتوشی ناکاموتو با اختراع پروتکل اثبات کار، توانست مسئله جنرال ژنرال بیزانس را حل کند. این پروتکل اینگونه کار میکند. فرض کنید ارتش در سمت چپ میخواهد پیام «دوشنبه حمله کنید» را به ارتش سمت راست ارسال کند، آنها مراحل خاصی را طی میکنند.
- ابتدا، آنها «نانس» را به متن اصلی اضافه میکنند. این نانس میتواند هر مقدار مبنای شانزده تصادفی باشد.
- پس از آن، آنها متن همراه با نانس را هش کرده و نتیجه را میبینند. فرض کنید، ارتشها تصمیم گرفتهاند که فقط پیامهایی را به اشتراک بگذارد که در صورت هش شدن، نتیجه حاصل شده با 5 صفر آغاز شود.
- در برآورده شدن شرایط هش، آنها پیام رسان را به همراه هش پیام ارسال میکنند. اگر این شرایط برآورده نشود، آنها همچنان مقادیر را به طور تصادفی تغییر میدهند تا نتیجه مطلوب را بدست آورند. این عمل بسیار خسته کننده و وقت گیر است و قدرت محاسباتی زیادی را به خود میگیرد.
- اگر پیام رسان در شهر گرفتار شود و پیامش دستکاری شود، با توجه به ویژگیهای تابع هش، خود هش به شدت تغییر میکند. اگر ژنرالهای سمت راست، مشاهده کنند که پیام هش شده با مقدار صفر مورد نظر شروع نمیشود، میتوانند حمله را لغو کنند.
با این حال، یک راه گریز وجود دارد.
هیچ تابع هشی 100 درصد عاری از تداخل نیست. چه میشود اگر شهر پیام را دریافت کند، آن را دستکاری کرده و تا زمانی که نتیجه مطلوب داری تعداد لازم 0 را بدست آورد، به تغییر نانس در پیام ادامه دهد؟ این کار بسیار وقت گیر خواهد بود اما باز هم ممکن است. برای مقابله با این امکان، ژنرالها میخواهند از قدرت اعداد استفاده کنند.
فرض کنید، به جای اینکه فقط یک ژنرال در سمت چپ به یک ژنرال در سمت راست پیام ارسال کند، 3 ژنرال در سمت چپ وجود دارند که برای کسانی که در سمت راستشان هستند پیام ارسال میکنند. برای انجام این کار، آنها میتوانند پیام مورد نظر خود را ایجاد کرده و پیام جمعی را هش کرده و سپس یک نانس را به هش حاصل اضافه کرده و دوباره آن را هش کنند. این بار، آنها پیامی را میخواهند که با شش صفر شروع شود.
بدیهی است که این کار بسیار وقت گیر خواهد بود، اما این بار اگر پیام رسان در شهر گرفتار شود، میزان زمان مورد نیاز برای دستکاری پیام جمعی و پیدا کردن نانس متناظر با هش بسیار بیشتر خواهد شد. حتی ممکن است این کار سالها طول بکشد. بنابراین، به عنوان مثال اگر به جای یک پیام رسان، ژنرالها چندین پیام رسان را ارسال کنند، هنگامی که شهر در نیمههای مراحل محاسباتی قرار دارد، مورد حمله و نابودی قرار میگیرد.
ژنرالهای سمت راست کارشان آسان است. تنها کاری که باید انجام دهند این است که پیام را با نانس صحیحی که به آنها داده میشود، هش کنند و ببینید که آیا هش مطابقت دارد یا خیر. هش کردن یک رشته بسیار آسان است. این کار در واقع فرایند پشت اثبات کار است.
- فرایند یافتن نانس برای هش هدف باید بسیار دشوار و وقت گیر باشد.
- با این حال، روند بررسی نتیجه برای اینکه ببینیم هیچ دستکاری رخ نداده است، باید بسیار ساده باشد.
برای مطالعه بیشتر