مسئله ژنرالهای بیزانس (The Byzantine Generals problem)، اولین بار در یک مقاله مرتبط با علوم کامپیوتری در سال 1982 منتشر شد. مشکلی که در مقاله مورد بحث قرار گرفته این بود که سیستمهای رایانهای قابل اعتماد باید بتوانند در حضور مؤلفههای معیوب که ممکن است اطلاعات متناقض را به قسمتهای مختلف سیستم ارسال کنند، بهطور مؤثر عمل نمایند.
هنگامی در مورد شبکههای غیرمتمرکز رایانه صحبت میکنیم، این مسئله حادتر میشود. بهعنوان یک آزمایش تصور کنید که ارتش بیزانس یک شهر دشمن را محاصره کرده است. ارتش در چندین واحد سازماندهی شده است. هر واحد توسط یک ژنرال فرماندهی میشود و همه آنها باید با یک برنامه هماهنگ عمل کنند. بااینحال آنها دور از یکدیگر قرار گرفتهاند و تنها وسیله ارتباط از طریق ارسال پیام است.
برای پیچیدهتر کردن مسئله، احتمالاً یک یا چند ژنرال خائن وجود دارد. حضور ژنرالهای خائن به این معنی است که میتوانند پیامهای گمراهکنندهای را برای اختلال در هرگونه برنامه هماهنگی، اعم از حمله یا عقبنشینی ارسال کنند.
برای یافتن راهحل موفقیتآمیز این معضل، ارتش بیزانس باید راه خود را برای اقدام هماهنگ از یک یا چند روش پیدا کند. برای دستیابی به این هدف، ارتش بیزانس به یک الگوریتم نیاز دارد تا بهطور مؤثر در جهت هماهنگی بیشتر عمل کنند. بدین ترتیب ژنرالهای وفادار از آن پیروی کرده و خیانتکاران نتوانند اخلالی در این روند ایجاد نمایند.
اکنون که با مشکل آشنا شدید، بیایید راهحل آن را ببینیم. این الگوریتم تحمل خطای بیزانس نامیده میشود. در طول سالهای اخیر چندین راهحل تئوری ارائه شده که شامل نظریه (تئوری) بازیها و ریاضیات است.
اولین پیادهسازی عملی الگوریتم تحمل خطای بیزانس با اثبات کار (proof-of-work) بیت کوین انجام شد. در مورد مثال مطرح شده، ژنرالها در شبکه بیت کوین نقش گرهها را دارند که “ماینر” نیز نامیده میشوند. هر گره در شبکه یک نقطه اتصال است که میتواند دادهها را از طریق شبکه دریافت، ارسال، ایجاد و ذخیره کند؛ به عبارت دیگر، گرهها نقاط اتصالی هستند که یک شبکه را تشکیل میدهند.
در تصویری که بهطور سنتی برای نمایش یک بلاکچین استفاده میکنیم، هر رایانهای یک گره جداگانه است. همه آنها به هم متصل هستند و میتوانند دادههایی را به یکدیگر ارسال، دریافت، ایجاد و ذخیره کنند. در زمینه الگوریتم تحمل خطای بیزانس، مفهوم مهم این است که گرههای ماینینگ فرض میکنند به هیچ کسی در شبکه نمیتوان اعتماد کرد.
اثبات کار باعث اتفاق نظر در شبکه میشود، حتی در صورت وجود گرههای غیر سازگار؛ یعنی حتی اگر برخی از ژنرالهای بیزانس نیز وجود داشته باشند که به نفع ارتش عمل نکنند، میتوان اقدامات هماهنگ را همچنان انجام داد.
این مکانیسم در بیت کوین چگونه کار میکند؟
بیت کوین یک شبکه همتا به همتا است که در آن کلیه فعالیتها توسط کاربران از طریق نرمافزار و سختافزار مناسب انجام میشود. این فعالیتها شامل انجام معاملات، دریافت معاملات و تأیید و انتقال آن است.
اکنون باید مفهوم «ماینینگ» را معرفی کنیم که احتمالاً بسیاری از شما شنیدهاید. ماینینگ فعالیتی است که توسط مشارکت کنندگان شبکه انجام شده و شامل اثبات کار است. برای ماینری که با موفقیت این اثبات کار را در ابتدا برای هر بلاک جدید انجام داده باشد، کوینهای جدید به عنوان پاداش اعطا میشود.
اثبات کار به تعداد زیادی محاسبات سنگین نیاز دارد که توسط یک کامپیوتر با هدف حل معماهای هش انجام میشود. این همان معماهایی است که در ابتدا توضیح داده شد و این امکان را فراهم میکند که شبکه عملکرد خود را داشته باشد و به تبادل پیامهای معامله با سایر شرکتکنندگان در شبکه ادامه دهد.
بیایید به پیچ و مهرههای این مکانیسم نگاهی بیندازیم تا دریابیم که چگونه کار میکند. البته در ابتدا بیایید ببینیم ماینرها چگونه بلاکهای جدیدی ایجاد میکنند.
در ابتدا گرههای ماینینگ دادههای تراکنش جدید را جمعآوری میکنند. با دریافت چنین دادههایی، هر گره بهطور مستقل هر تراکنش را در برابر لیست طولانی از پارامترها بررسی مینماید. از جمله این پارامترها میتوان به پیگیری منبع پول دیجیتالی که خرج میشود، چک کردن پرداخت مجدد وجه یکسان (پرداخت دوبل) و بررسی اینکه کل حجم معاملات در محدوده مجاز 0 تا 21 میلیون بیت کوین است، اشاره کرد.
نرمافزار بیت کوین نصبشده روی گره، کارهای بررسی و موازنه کردن با سایرین را انجام میدهد. معاملات تأیید شده در استخرهای معامله جمع میشوند که به آنها استخر استخراجی (memory pools) یا mempool نیز گفته میشود.
ازآنجاکه ماینرها با یکدیگر به رقابت میپردازند تا اولین کسی باشند که یک بلاک معتبر جدید را به دست آورند، آنها باید اطمینان حاصل کنند که معاملات موجود در mempool قبلاً در بلاکهای قبلی درج نشده است.
پس از جمعآوری و تنظیم معاملات تأیید شده در یک بلاک کاندید، ماینرها نیاز به ساخت هدر بلاک دارند که شامل چند مؤلفه مهم است. ازجمله آنها میتوان به خلاصهای از تمام دادههای تراکنش در بلاک کاندید، پیوندی به بلاک قبلی در زنجیره که به عنوان بلاک والدین نیز شناخته میشود، بازه زمانی که زمان ایجاد بلوک را نشان میدهد و یک اثبات کار معتبر اشاره کرد.
خلاصه آنچه در یک بلاک معین اضافه شده است، از طریق توابع هش انجام میگردد و دادهها را به گونهای پردازش میکند تا منجر به یک کد شناسایی منحصربهفرد استاندارد شود. به این کد شناسایی “اثر انگشت دیجیتال” نیز گفته می شود. در این روش سیستم برای هر بلاک از تراکنشها یک شناسه منحصربهفرد دارد. نمونههایی از هدرهای بلاک در وبسایتهای blockexplorer.com و blockchain.info قابل مشاهده است.
درست زیر عدد بلوک، یک رشته الفبای عددی (alphanumeric) طولانی به نام BlockHash یا Hash قرار دارد. الفبای عددی از حروف و اعداد تشکیل شده است. این یک نوع رمزگذاری داده است و نتیجه خروجی پردازش دادههای هدر بلاک از طریق تابع هش رمزنگاری بیت کوین به دست میآید.نام این تابع هش SHA 256 است که مخفف الگوریتم هش امن (Secure Hash Algorithm) میباشد.
یک تابع هش میتواند هر نوع داده با هر اندازه را به یک رشته با طول ثابت خلاصه کند که میتواند به عنوان یک اثر انگشت دیجیتال یا شناسه منحصربهفرد قلمداد شود. بعلاوه این توابع هش رمزنگاری فقط در یک جهت کار میکنند.
هنگامی که خروجی را داشته باشیم، نمیتوانیم به راحتی عملکرد تابع را برعکس کنیم، یعنی خروجی را داده و دادههای ورودی را در انتهای دیگر به دست آوریم. برای نشان دادن اینکه معکوس کردن یک تابع به چه معناست، چهار عملیات ریاضی اساسی را در نظر بگیرید. جمع و تفریق توابع معکوس یکدیگرند و ضرب و تقسیم نیز توابع معکوس یکدیگر هستند.
ما همیشه میتوانیم معادلاتی با این توابع بسازیم تا هر متغیر ناشناختهای را پیدا کنیم. به عنوان مثال:
3 * X = 15
X = 15 / 3 = 5
بسیاری از توابع ریاضی میتوانند به همین صورت حل شوند، هرچند این مورد در ارتباط با توابع هش رمزنگاری نیست. تنها روشی که یک متغیر تصادفی ناشناخته را میتوان در مجموعه دادههای ورودی یک تابع رمزنگاری یافت، امتحان مقادیر مختلف ناشناخته یک به یک، با دادن همه پارامترهای شناخته شده به منظور یافتن این است که چگونه کار میکند.
این اساساً یک رویکرد بروت فورس (brute force) در تلاش برای استفاده از ترکیبات احتمالی است. این کار شامل همه محاسباتی است که یک کامپیوتر برای یافتن راهحل پازل رمزنگاری باید انجام دهد.