وایت پیپر استلار

مقاله‌ای که می‌خوانید وایت پیپر پلتفرم استلار است و مدل جدیدی از اجماع به نام توافق یکپارچه‌‌‌ی بیزانس (FBA) را معرفی می‌‌‌کند. FBA از طریق اعضای حد نصاب، یعنی تصمیمات گرفته شده توسط هر گره که همه با هم حد نصاب سیستم را تعیین می‌‌‌کنند ثبات خود را پیدا می‌‌‌کند. قطعات، سیستم را به هم پیوند می‌‌‌زنند، طوری که تصمیمات مبنی بر همتا کردن و انتقال شبکه، باعث یکپارچگی اینترنت بشوند.

0 213

ما پروتکل اجماع استلار (ACP) که ساختاری برای FBA می‌‌‌باشد را معرفی می‌‌‌کنیم. SCP هم مانند پروتکل‌‌‌های توافق بیزانس، فرضیه‌‌‌ای درمورد رفتار منطقی مهاجمان ارائه نمی‌‌‌کند. SCP بر خلاف مدل‌‌‌های توافقات پیشین بیزانس که لیست متفق‌‌‌القولی از اعضای پذیرفته شده را ارائه می‌‌‌کردند، در پذیرش اعضا آزاد عمل می‌‌‌کند که به رشد طبیعی شبکه کمک خواهد کرد. SCP در مقایسه با الگوریتم‌‌‌های غیرمتمرکز اثبات کار و اثبات سهام، الزامات رایانشی و مالی اندکی دارد و موانع ورود را کاهش داده است و در همین حال پتانسیل‌‌‌های تازه‌‌‌ای برای باز کردن سیستم‌‌‌های مالی پیش‌‌‌ روی شرکت‌‌‌کنندگان را به وجود آورده است.

مفاهیم CCS: امنیت و حریم خصوصی – امنیت توزیع‌‌‌شده‌‌‌ی سیستم، پروتکل‌‌‌های امنیتی

کلیدواژه‌‌‌ها و عبارات دیگر: تلورانس خطای بیزنس، سیستم‌‌‌های غیرهمزمان

1. مقدمه

زیرساخت مالی کنونی چیزی نیست جز ملغمه‌‌‌ای از سیستم‌‌‌های بسته. شکاف‌‌‌های موجود بین این سیستم‌‌‌ها به این معنی‌‌‌ست که هزینه‌‌‌ی تراکنش‌‌‌ها بالاست و پول با سرعت بسیار کم در مرزهای سیاسی و جغرافیایی انتقال پیدا می‌‌‌کند.

ما برای حل این مشکلات به زیرساختی مالی نیاز داریم که از رشد طبیعی و نوآوری‌‌‌ای که از اینترنت دیده‌‌‌ایم حمایت کند و در همین حال متضمن یکپارچگی تراکنش‌‌‌های مالی شود. ما برای تضمین یکپارچگی همیشه بر موانع دشوار ورود متکی بوده‌‌‌ایم. ما به موسسات مالی اعتماد می‌‌‌کنیم و نهایت سعی‌‌‌مان را برای قانون‌‌‌گذاری آنان انجام می‌‌‌دهیم. اما این تضاد آشکاری با هدف ما که رشد طبیعی‌‌‌ست دارد. رشد نیازمند مشارکت‌‌‌کنندگانی جدید و نوآور است که شاید سرمایه مالی و منابع رایانشی ناچیزی در اختیار داشته باشند.

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

این مقاله توافق یکپارچه‌‌‌‌‌‌ی بیزانس (FBA) را معرفی می‌‌‌کند که مدل متسبی برای اجماع جهانی به حساب می‌‌‌آید. در FBA، هر شرکت‌‌‌کننده در مورد دیگران آگاهی دارد و آنان را مهم می‌‌‌شمارد. وی منتظر توافق اکثریت اعضا بر یک تراکنش می‌‌‌ماند. آن اعضای مهم پس از آنکه مشارکت‌‌‌کنندگان دیگر به توافقی رسیدند، به توافق وارد خواهند شد. در نهایت اکثریت شبکه‌‌‌ تراکنشی را که مهاجم بتواند آن را لغو کند می‌‌‌پذیرند. تنها پس از این کار است که شرکت‌‌‌کنندگان یک تراکنش را انجام شده می‌‌‌دانند. اجماع FBA می‌‌‌تواند یکپارچگی یک شبکه‌‌‌ی مالی را تضمین کند. کنترل غیرمتمرکز آن باعث رشد طبیعی می‌‌‌شود.

این مقاله پروتکل اجماع استلار (SCP) را نیز که ساختاری‌‌‌ست برای FBA معرفی می‌‌‌کند. ما ثابت می‌‌‌کنیم که امنیت SCP برای یک پروتکل غیرهمزمان بهینه عمل می‌‌‌کند، چون توافق تحت سناریوی عدم موفقیت گره را تضمین می‌‌‌کند.

ما نشان خواهیم دادکه SCP خالی از هرگونه حالت قفل (که اجماع در آن امکان‌‌‌پذیر نیست) می‌‌‌باشد، مگر اینکه عضوی وابستگی به یک واسطه را ممکن سازد. SCP اولین مکانیزم امن اجماع است که همزمان از چهار ویژگی کلیدی بهره می‌‌‌برد:

  • کنترل غیرمتمرکز. همه می‌‌‌توانند در آن شرکت داشته باشند و قدرتی مرکزی وجود ندارد که اجماع به تایید وی نیازی داشته باشد.
  • تاخیر کم. گره‌‌‌ها در عمل می‌‌‌توانند به همان سرعتی که انسان یک تراکنش بانکی را انجام می‌‌‌دهد به توافق برسد (حداکثر چند ثانیه).
  • اعتماد انعطاف‌‌‌پذیر. کاربران آزادند تا به هر ترکیبی که مناسب می‌‌‌بینند اعتماد کنند. به عنوان مثال، شاید یک نهاد غیرانتفاعی نقشی کلیدی در حفظ صداقت موسسات بزرگ‌‌‌تر داشته باشد.
  • امنیت مجانبی. امنیت در این سیستم بر امضاهای دیجیتال و هش‌‌‌هایی وابسته است که پارامترهای آنان برای محافظت در مقابل خراب‌‌‌کاری‌‌‌ با کامپیوترهای قوی قابل تنظیم هستند.

SCP ورای بازارهای مالی نیز برای تضمین عملکرد صادقانه‌‌‌ی سازمان‌‌‌ها کاربرد دارد. یکی از این موارد مرجع صدور گواهی دیجیتال (CA) می‌‌‌باشد که کلید فضای وب را در اختیار دارند. تجربه نشان داده است که CAها می‌‌‌توانند گواهی‌‌‌های اشتباهی را امضا کنند که در فضای وحشی اینترت به کار گرفته شود. پیشنهادات زیادی برای حل این مشکل از طریق شفافیت گواهی پیشنهاد شده است. شفافیت گواهی به کاربران امکان بررسی سابقه‌‌‌ی گواهی صادر شده برای یک واحد را فراهم می‌‌‌کند و تلاش‌‌‌های صورت گرفته توسط CAها برای تغییر کلیدهای عمومی بدون تایید کلید پیشین را شناسایی می‌‌‌کند. SCP پتانسیل تقویت سابقه‌‌‌ی پاک‌‌‌نشدنی گواهی در مرکز شفافیت گواهی را دارد. درخواست اجماع کلی بر سابقه‌‌‌ی گواهی در بین گروه غیرمتمرکز حسابرسان، لغو و باطل کردن گواهی‌‌‌های پیشتر صادر شده را دشوار می‌‌‌کند.

بخش بعدی درمورد رویکردهای پیشین اجماع سخن می‌‌‌گوید. بخش 3 به تعریف توافق یکپارچه بیزانس (FBA) پرداخته و مفاهیم امنیتی موجود در مدل FBA را پدیدار می‌‌‌سازد. بخش 4 هم انعطاف بهینه شکست در سیستم FBA مورد بحث قرار می‌‌‌گیرد و اهداف امنیتی SCP نیز تعیین می‌‌‌شود. بخش 5 به رای‌‌‌گیری یکپارچه که بخشی‌‌‌ست کلیدی از پروتکل SCP می‌‌‌پردازد. بخش 6 به معرفی خود SCP و اثبات امنیت و عدم وجود قفل‌‌‌شدگی در آن گریزی می‌‌‌زند. بخش 7 به محدودیت‌‌‌های SCP اختصاص داده شده است و در نهایت هم حاوی خلاصه‌‌‌ی نتایج می‌‌‌باشد. پیوست الف برای خوانندگانی که آشنایی کمتری با مفاهیم ریاضی استفاده شده در متن دارند می‌‌‌تواند مفید باشد.

2. کارهای مرتبط

شکل 1 خلاصه‌‌‌ای از تفاوت‌‌‌های SCP با مکانیزم‌‌‌های پیشین اجماع را ارائه می‌‌‌کند. مشهور‌‌‌ترین مکانیزم غیرمتمرکز اجماع، اثبا کار می‌‌‌باشد که توسط بیت‌‌‌کوین توسعه داده شد. بیت‌‌‌کوین رویکردی دوطرفه به مسئله‌‌‌ی اجماع دارد. بیتکوین ابتدا مشوق‌‌‌هایی ارائه می‌‌‌کند تا بازیگرانش درست بازی کنند. و سپس تراکنش‌‌‌ها را از طریق الگوریتم اثبات کار که برای محافظت در مقابل خراب‌‌‌کارانی طراحی شده است که اکثریت قدرت رایانشی سیستم را در اختیار ندارند. بیت‌‌‌کوین تمایل خود به اجماع غیرمتمرکز را بارها نشان داده است.

با این حال الگوریتم اثبات کار محدودیت‌‌‌هایی نیز دارد. اول اینکه باعث هدر رفت منابع می‌‌‌شود؛ طبق برآوردی در سال 2014، بیت‌‌‌کوین چیزی معادل برق مصرفی کل کشور ایرلند برق مصر‌‌‌ف می‌‌‌کند. دوم اینکه انجام صحیح و کامل تراکنش‌‌‌ نیازمند چند دقیقه تا چند ده دقیقه می‌‌‌باشد. مورد بعدی اینکه الگوریتم اثبات کار بر خلاف پروتکل سنتی رمزنگاری، امنیت مجانبی ندارد. با وجود مهاجمان و کسانی که انگیزه‌‌‌ی کافی برای خرابکاری در اجماع دارند، مزیت‌‌‌های کوچک رایانشی هم می‌‌‌توانند فرضیه امنیت را نامعتبر اعلام کنند و امکان بازنویسی سوابق در حملات موسوم به 51 درصد را فراهم کنند. بدتر اینکه مهاجمان که کمتر از 50 درصد نیروی رایانشی شبکه را در اختیار دارند می‌‌‌توانند سیستم را به بازی بگیرند تا پاداش‌‌‌های بی‌‌‌تناسبی را برای کسانی که به آنان می‌‌‌پیوندند اختصاص دهند و به این صورت می‌‌‌توانند کنترل اکثریت سیستم را به دست آورند. از آنجایی که بیت‌‌‌کوین توسط نیروی رایانشی زیادی پشتیبانی می‌‌‌شود، از محافظت در مقابل حملات موسوم به 51 درصد برخوردار است. سیستم‌‌‌های کوچکی که قربانی شده‌‌‌اند به عبرتی برای سیستم‌‌‌های اثبات کار تبدیل شده‌‌‌اند تا بر روی بلاک‌‌‌چین بیت‌‌‌کوین ساخته نشوند.

ویژگی‌‌‌هی مکانیزم‌‌‌های مختلف اجماع
ویژگی‌‌‌هی مکانیزم‌‌‌های مختلف اجماع

شکل 1. ویژگی‌‌‌هی مکانیزم‌‌‌های مختلف اجماع

یکی از جایگزین‌‌‌های اثبات کار، الگوریتم اثبات سهام است که اجماع در آن بر طرفینی وابسته است که به طور همزمان وثیقه گذاشته‌‌‌اند. در این الگوریتم همانند اثبات کار، پاداش‌‌‌ها اعضا را به تبعیت از پروتکل تشویق می‌‌‌کند؛ برنامه‌‌‌هایی هم برای جریمه رفتار در نظر گرفته شده است. الگوریتم اثبات سهام امکان حملات “نبود خطر برای سهام” را به وجود می‌‌‌آورد که در آن طرفینی که پیشتر وثیقه گذاشته‌‌‌اند اما بعد به توافق پایبند نبوده و خودشان پول را خرج کرده‌‌‌اند باید به به عقب برگردند و سابقه‌‌‌‌‌‌ها را از آنجایی که هنوز سهم‌‌‌ها را در اختیار داشتند بنویسند. سیستم برای کاهش چنین حملاتی الگوریتم‌‌‌های اثبات کار و اثبات سهام را ترکیب می‌‌‌کند و یا تامین مالی مجدد سهام را در نقطه‌‌‌ای غیرقابل بازگشت به تاخیر می‌‌‌اندازد.

رویکرد دیگر اجماع توافق بیزانس نام دارد که مهم‌‌‌ترین متغیر آن PBFT می‌‌‌باشد. توافق بیزانس، اجماع را فازغ از رفتار اختیاری برخی از اعضا تضمین می‌‌‌کند. این رویکرد دو ویژگی رضایت‌‌‌بخش دارد. اول اینکه اجماع سریع و بهینه انجام می‌‌‌شود. دوم اینکه واسطه از تملک منابع خارج می‌‌‌شود که امکان کمک نهادهای غیرانتفاعی کوچک به حفظ صداقت سازمان‌‌‌های بزرگ مانند بانک‌‌‌ها یا CAها را فراهم می‌‌‌کند. با این حال طرفین باید در مورد لیست دقیق شرکت‌‌‌کنندگان توافق داشته باشند. باید از مهاجمان نیز در پیوستن چندباره و فراتر رفتن از تلورانس خطای سیستم که حمله‌‌‌ی سیبیل نام دارد جلوگیری کرد. BFT-CUP کاربران ناشناس را وارد می‌‌‌کند اما در همین حال مکانیزم کنترل دسترسی متمرکز ضدسیبیلی را در اختیار خواهد داشت.

عضویت در سیستم توافق بیزانس عموما توسط قدرت مرکزی یا مذاکره‌‌‌ی بسته تعیین می‌‌‌شود. تلاش‌‌‌های پیشین برای غیرمتمرکز کردن دسترسی، موفقیت‌‌‌هایی داشته است. یکی از این رویکردها که متعلق به ریپل است قصد دارد یک نوع لیست عضویت “ابتدایی” ایجاد کند که کاربران خود آن را ویرایش کنند، به این امید که ویرایش کاربران چشمگیر نباشد و توسط تابع بزرگی از اعضا بازتولید نشود. متاسفانه به این دلیل که لیست‌‌‌های مختلف ضمانت امنیتی را غیرمعتبر می‌‌‌کنند، کاربران رغبت چندانی به ویرایش لیست ندارند و نیروی زیادی با تمرکز بر نگه‌‌‌دارنده‌‌‌ی لیست اصلی به پایان می‌‌‌رسد. رویکرد دیگری که متعلق به تندرمینت می‌‌‌باشد، قرار دادن عوضیت بر الگوریتم اثبات سهام می‌‌‌باشد. اما انجام این کار هم بار دیگر اعتماد را به تملک منابع پیوند می‌‌‌زند. SCP اولین پروتکل توافق بیزانسی می‌‌‌باشد که به هر عضوی حداکثر آزادی را در انتخاب نوع ترکیب دیگر شرکت‌‌‌کنندگان مورد اعتماد اعطا می‌‌‌کند.

3. سیستم توافق یکپارچه‌‌‌‌‌‌ی بیزانس

این بخش مدل توافق یکپارچه‌‌‌ی بیزانس (FBA) را معرفی می‌‌‌کند. FBA نیز مانند توافق غیریکپاچه‌‌‌ی بیزانس، مسائل مربوط به به‌‌‌روزرسانی وضعیت تکراری مانند دفتر کل تراکنش یا چارجوب گواهی را پوشش می‌‌‌دهد. گره‌‌‌ها با توافق بر نوع به‌‌‌روزرسانی‌‌‌ها، از وضعیت‌‌‌های تضادبرانگیز و غیر قابل‌‌‌پذیرش جلوگیری می‌‌‌کنند. ما به‌‌‌روزرسانی‌‌‌ها را توسط یک اسلات (slot) منحصر به فرد شناسایی می‌‌‌کنیم که وابسته‌‌‌های درون آپدیت‌‌‌ها از آن گرفته می‌‌‌شوند. به عنوان مثال اسلات‌‌‌ها می‌‌‌توانند در یک لیست مرتب به ترتیب شماره‌‌‌گذاری شوند.

سیستم FBA پروتکل اجماعی که متضمن توافق گره‌‌‌ها بر محتوای اسلات می‌‌‌باشد را اداره می‌‌‌کند. گره v می‌‌‌تواند در هنگامی که به‌‌‌روزرسانی‌‌‌ها را به صورت امن در همه‌‌‌ی اسلات‌‌‌هایی که i بر آن مبتنی است انجام داد، به‌‌‌روزرسانی x را به صورت امن در اسلات i قرار دهد و در نهایت به این باور می‌‌‌رسد که همه‌‌‌ی گره‌‌‌های فعال بر x برای اسلات i توافق دارند. در این نقطه می‌‌‌گوییم v، x را برای اسلات i خارج کرده است. شاید دنیای خارج ارزش‌‌‌های خارج‌‌‌شده را به شکلی غیرقابل بازگشت نشان دهد، بنابرین یک گره نمی‌‌‌تواند بعدا ذهنیت خود را در مورد آنان تغییر دهد.

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

3.1 قطعات حد نصاب

گره‌‌‌ها در پروتکل اجماع پیام‌‌‌هایی حاوی تاکید بر شرح وظایف اسلات‌‌‌ها تبادل می‌‌‌کنند. فرض ما این است که این تاکیدات را نمی‌‌‌توان جعل کرد، که اگر گره‌‌‌ها توسط کلید عمومی نام‌‌‌گذاری شوند و بر روی پیام‌‌‌ها امضای دیجیتالی بزنند، تضمین خواهند شد. وقتی گره‌‌‌ای از تاکید تعدادی از گره‌‌‌های دیگر بر یک اعلامیه (شرح وظایف) مطلع می‌‌‌شود، فرض می‌‌‌کند که گره‌‌‌های فعال دیگر با آن اعلامیه در تضاد نخواهند بود. ما این تعداد از گره را یک قطعه‌‌‌‌‌‌ی حد نصاب یا یک قطعه می‌‌‌نامیم. گره برای اجازه‌‌‌‌‌‌ی پیشروی در صورت از کار افتادن گره، می‌‌‌تواند چندین قطعه داشته باشد که هر کدام از آنان برای قانع کردن او در مورد یک اعلامیه کافی هستند. سپس سیستم FBA در سطحی بالاتر شامل همکاری گره‌‌‌هایی است که یک یا چند قطعه را انتخاب کرده‌‌‌اند. حالت رسمی‌‌‌تر آن به این شکل است:

تعریف (FBAS : (FBAS یا سیستم توافق یکپارچه‌‌‌ی بیزانس یک جفت (V, Q) تشکیل شده از گره‌‌‌های V و تابع حد نصاب

formula
formula

است که نشان‌‌‌دهنده‌‌‌ی یک یا چند قطعه برای هر گره است که در آن یک گره متعلق به همه‌‌‌ی قطعات حد نصاب خود می‌‌‌باشد (مثلا ∀v ∈ V, ∀q ∈ Q(v), v ∈ q)). توجه داشته باشید که 2‌‌‌‌‌‌x توان x می‌‌‌باشد.

تعریف (حدنصاب). یک سری گره U ⊆ V در (FBAS (V,Q اگر U≠ ∅ باشد و u حاوی قطعه‌‌‌ای برای عر عضور باشد. مثلا ∀v ∈ U, ∃q ∈ Qv به طوری که q ⊆ U.

حد نصاب یک سری گره هستند که تعدادشان برای رسیدن به توافق کافی می‌‌‌باشد. قطعه‌‌‌ی حد نصاب زیرمجموعه‌‌‌ی حد نصاب است که یک گره را قانع به توافق خواهد کرد. قطعه‌‌‌ی حد نصاب کوچک‌‌‌تر از یک حد نصاب خواهد بود. سیستم چهارگره‌‌‌ای در شکل 2 را در نظر بگیرید که در آن هر گره یک قطه دارد و فلش آن به سمت دیگر اعضای آن قطعه کشیده شده است. قطعه‌‌‌ی گره {v1{v1 , v2 , v3 برای قانع کردن v1 درمورد اعلامیه کافی است. اما قطعات v2 و v3 شامل v4 هستند و v2 و v3 نخواهند توانست بدون موافقت v4 بر اعلامیه تاکید کنند. بنابرین بدون مشارکت v4 هیچ توافقی ممکن نخواهد بود و تنها حد نصاب حاوی v1 مجموعه‌‌‌ی همه‌‌‌ی گره‌‌‌ها خواهد بود {v1 , v2 , v3, v4}.

توافق سنتی غیریکپارچه‌‌‌ی بیزانس نیازمند پذیرش یک قطعه توسط همه‌‌‌ی گره‌‌‌ها می‌‌‌باشد، یعنی (∀v1 , v2 , Q(v1 ) = Q(v2. به این دلیل که همه‌‌‌ی گره‌‌‌ها یک قطعه را می‌‌‌پذیرند، سیستم‌‌‌های سنتی تمایزی بین قطعات و حدنصاب‌‌‌ها قائل نمی‌‌‌شوند. نکته‌‌‌ی منفی این است که عضویت و حدنصاب باید از پیش تعیین شده باشند

stellar whitepaper
stellar whitepaper

شکل 2. قطعه حد نصاب v1 بدون وجود v4 به حدنصاب نخواهد رسید

stellar whitepaper
stellar whitepaper

شکل 3. نمونه‌‌‌ی ساختار حد نصاب درجه‌‌‌بندی شده

و از عضویت آزاد و کنترا غیرمتمرکز جلوگیری کنند. سیستمی سنتی مانند PBFT به طور معمول دارای گره‌‌‌های 3f + 1 می‌‌‌‌‌‌باشد که هر 2f + 1 آن یک حد نصاب را تشکیل می‌‌‌دهد. F در اینجا حداکثر تعداد شکست‌‌‌های بیزانسی است که سیستم می‌‌‌تواند تحمل کند (یعنی گره‌‌‌ها به صورت دلخواه کار می‌‌‌کنند).

FBA که در این مقاله معرفی شده است، توافق بیزانس را برای ایجاد طیف وسیع‌‌‌تری از تنظیمات تعمیم می‌‌‌دهد. نوآوری کلیدی FBA قادر کردن هر گره v به انتخاب مجموعه‌‌‌ی قطعه‌‌‌ی حد نصاب (Q(v خود می‌‌‌باشد. حد نصاب‌‌‌های وسیع در حد سیستم از تصمیماتی به وجود می‌‌‌آیند که توسط یک گره گرفته می‌‌‌شود. گره‌‌‌ها قطعات را بر اساس شاخص انتخابی خودشان مانند شهرت یا ترتیبات مالی انتخاب می‌‌‌کنند. در برخی از تنظیمات هیچ گره‌‌‌ای دانش کاملی از همه‌‌‌ی گره‌‌‌های موجود در سیستم ندارد، با این حال اجماع امکان‌‌‌پذیر خواهد بود.

3.2 نمونه‌‌‌ها و مباحث

شکل 3 نمونه‌‌‌ای از سیستم درجه‌‌‌بندی شده را نشان می‌‌‌دهد که گره‌‌‌هی مختلف در آن مجموعه‌‌‌های قطعات مختلفی دارند، چیزی که تنها در FBA امکان‌‌‌پذیر است. حلقه‌‌‌ی بالایی که شامل v1, …, v4 است، مانند یک سیستم PBFT با f=1 ساخته شده است، یعنی می‌‌‌تواند 1 شکست بیزانس را تحمل کند تا سه گره دیگر در دسترس باشند و به درستی عمل کنند. گره‌‌‌های v5, …, v8 حلقه میانی را تشکیل می‌‌‌دهند و بر یکدیگر متکی نیستند، بلکه به حلقه بالایی وابسته‌‌‌اند. تنها دو حلقه‌‌‌ی بالایی برای شکل دادن یک قطعه برای گره حلقه میانی مورد نیاز هستند. (حلقه‌‌‌ی بالایی حداکثر یک شکست بیزانس را تاب می‌‌‌آورد، بنابرین دو گره حلفه دیگر می‌‌‌توانند از کار بیافتند چون کل سیستم از کار خواهد افتاد.) گره‌‌‌های v9 و v10 در ردیف برگی قرار دارد که قطعه‌‌‌ی آن شامل دو گره حلقه‌‌‌ی میانی می‌‌‌باشد. توجه داشته باشید که v9 و v10 قطعات متفاوتی مانند {v6 و v5} و {v7 و v8} را انتخاب کنند؛ در غیر این صورت هردوی آنان به طور غیرمستقیم به حلقه‌‌‌ی بالایی وابسته خواهند بود.

stellar whitepaper
stellar whitepaper

شکل 4. نمونه‌‌‌ی ساختار حدنصاب دورانی

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

این ساختار حلقه‌‌‌ای و درجه‌‌‌بندی‌‌‌شده یادآور مسیریابی درون‌‌‌دامنه‌‌‌ای شبکه می‌‌‌باشد. اینترنتی که امروز وجود دارد توسط روابط همتا و تعاملی بین شبکه‌‌‌های همتا فعالیت می‌‌‌کند. هیچ قدرت مرکزی‌‌‌ای مفهوم حلقه‌‌‌ی بالفعل را در ISP دیکته نمی‌‌‌کند. امروزه فایروال‌‌‌ها (firewall) مانع اصلی دسترسی هستند، یعنی دسترسی انتقالی تا حدودی کامل است؛ به عنوان مثال امکان دارد یک فایروال سایت نیویورک تایمز را مسدود کند، اما اگر گوگل را مسدود نکند و گوگل بتواند به آن دسترسی پیدا کند، پس سایت نیویورک تایمز به صورت انتقالی در دسترس است. دسترسی انتقالی استفاده‌‌‌ی کمی برای سایت‌‌‌های اینترنتی دارد، اما وجود آن در اجماع ضروری است؛ نمونه‌‌‌ی معادل آن پذیرش اعلامیه‌‌‌های توسط گوگل تنها درصورت پذیرش آنان توسط نیویورک تایمز می‌‌‌باشد.

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

نمونه‌‌‌ی دیگری که در اجماع متمرکز امکان‌‌‌پذیر نیست، ساختارهای وابسته‌‌‌ی دورانی هستند که نمونه‌‌‌ای از آن در شکل 4 نشان داده شده است. چنین چرخه‌‌‌ای خود به خود به وجود نمی‌‌‌آید بلکه زمانی که گره‌‌‌ها قطعات خود را انتخاب کنند، پایان دادن به چرخه نیز برای سیستم نیز امکان‌‌‌پذیر خواهد شد. نکته‌‌‌ی مهم‌‌‌تر این است که پروتکل FBA در مقایسه با توافق سنتی بیزانس باید با ساختارهای حدنصاب وسیع‌‌‌تری رو در رو شود.

3.3 امنیت و liveness

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

Stellar whitepaper
Stellar whitepaper

شکل 5. نمودار ون شکست گره‌‌‌ها

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

امنیت: دسته‌‌‌ای از گره‌‌‌های موجود در ایک FBAS در صورتی که هیچ‌‌‌کدام از آنان مقادیر متفاوتی را برای یک اسلات منتشر نکنند از امنیت برخوردار خواهند بود.

Liveness: یک گره‌‌‌ی موجود در FBAS در صورتی که بتواند بدون مشارکت گره‌‌‌ شکست خورده‌‌‌ای (خراب-کار) مقادیری را منتشر کند از Liveness بهره می‌‌‌برد.

به گره‌‌‌های درست‌‌‌کاری که هم از امنیت و هم از Liveness بهره می‌‌‌برند، گره صحیح می‌‌‌گوییم. گره‌‌‌هایی که صحیح نباشند شکست خورده‌‌‌اند. همه‌‌‌ی گره‌‌‌های خراب‌‌‌کار شکست می‌‌‌خورند اما گره درست‌‌‌کار نیز توسط انتظار برای دریافت پیام‌‌‌های گره‌‌‌های خراب‌‌‌کار یا توسط مسموم کردن وضعیت خود با پیام‌‌‌های گره‌‌‌های خراب‌‌‌کار می‌‌‌تواند شکست بخورد.

شکل 5 انواع شکست‌‌‌های احتمالی گره‌‌‌ها را نشان می‌‌‌دهد. در سمت چپ شکست‌‌‌های بیزانس وجود دارند، یعنی گره‌‌‌های خراب‌‌‌کار. در سمت راست هم دو نوع گره‌‌‌ی درست‌‌‌کار اما شکست خورده وجود دارند. گره‌‌‌هایی که Liveness ندارند “مسدوده شده” هستند، در حالی که گره‌‌‌های فاقد امنیت را “متفاوت” نام‌‌‌گذاری کرده‌‌‌ایم. حمله‌‌‌ای که امنیت را هدف بگیر بسیار قوی‌‌‌تر از حمله‌‌‌ا‌‌‌یست که Liveness را هدف گرفته است، بنابرین ما گره‌‌‌های متفاوت را به عنوان زیرمجموعه‌‌‌ای از گره‌‌‌های مسدود شده طبقه‌‌‌بندی می‌‌‌کنیم.

تعریف ما از Liveness به دلیل استفاده از کلمه “شاید” به جای “حتما” در مورد انتشار مقادیر توسط گره‌‌‌ها، تعریف ضعیفی است. بنابرین موقعیت پیش‌‌‌گیری دائمی را می‌‌‌پذیرد که اجماع در آن برای همیشه امکان‌‌‌پذیر باقی خواهد ماند، در حالی که شبکه دائما توسط به تاخیر انداختن پیام‌‌‌های جدید با آن مقابله می‌‌‌کند. حالت پیش‌‌‌گیری دائمی در یک سیستم کاملا ناهمگام و قطعی که از کار افتادن گره‌‌‌ها را هم تاب می‌‌‌آورد اجتناب‌‌‌ناپذیر است. خوشبختانه این پیش‌‌‌گیری گذرا است و نشان‌‌‌دهنده‌‌‌ی شکست گره‌‌‌ نیست چون سیستم می‌‌‌تواند همیشه بازیابی شود. پروتکل‌‌‌ها می‌‌‌توانند این مشکل را توسط تصادفی‌‌‌ بودن و یا فرضیات واقع‌‌‌گرایانه در مورد تاخیر پیام کاهش دهند. وقتی کسی بخواهد زمان اجرا را محدود کند و از واسطه‌‌‌هایی که اغلب نیازمند الگوریتم‌‌‌های بهینه‌‌‌ی تصادفی هستند اجتناب کند، این فرضیه‌‌‌های تاخیر کارای بیشتری دارند. البته امنیت نباید به زمان‌‌‌بندی پیام‌‌‌ها بستگی داشته باشد.

4. انعطاف بهینه

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

Stellar white paper
Stellar white paper

شکل 6. FBAS بدون تقاطع حدنصاب

Stellar white paper
Stellar white paper

شکل7. گره‌‌‌ خراب‌‌‌کار v7 می‌‌‌تواند تقاطع حدنصاب را تضعیف کند

این بخش به پاسخ این سوال اختصاص داده شده است: مقدار ⟨V, Q⟩ و زیرمجموعه‌‌‌ی V را که خراب‌‌‌کار است داریم، بهترین امنیت و Livenessی که هر پروتکل توافق بیزانسی فارغ از شبکه می‌‌‌تواند داشته باشد چیست؟ ابتدا تقاطع حدنصاب را معرفی می‌‌‌کنیم، چیزی که بدون آن هیچ تضمینی برای امنیت وجود نخواهد داشت. سپس مفهوم مجموعه‌‌‌های غیرضروری را تعریف می‌‌‌کنیم (مجموعه‌‌‌های از گره‌‌‌های شکست خورده، با این تفاوت که امکان تضمین امنیت و Liveness در آنان وجود دارد).

4.1 تقاطع حدنصاب

یک پروتکل تنها در صورتی می‌‌‌تواند توافق را تضمین کند که قطعات حدنصاب ارائه شده توسط تابع Q، طلاحیت اعتباری که ما آن را به عنوان تقاطع حدنصاب می‌‌‌شناسیم تایید کند.

تعریف تقاطع حدنصاب: اگر دو حدنصاب در یک FBAS یک گره را به اشتراک بگذارند، آن FBAS از تقاط حدنصاب بهره‌‌‌مند خواهد شد؛ به عنوان مثال U1 و U2 , U1 ∩ U2 ≠ ∅.

شکل 6 سیستمی فاقد تقاطع حدنصاب را نشان می‌‌‌دهد که Q در آن دو حدنصاب {v1 , v2 , v3 } و {v4 , v5 , v6 } را می‌‌‌پذیرد که متقاطع نیستند. حدنصاب‌‌‌های منفصل می‌‌‌توانند به صورت مستقل بر اعلامیه‌‌‌ها توافق کنند و توافق سطح سیستمی را نادیده بگیرند. وقتی حدنصاب‌‌‌های زیادی وجود داشته باشند، اگر دو حدنصاب متقاطع نباشند تقاطع حدنصاب شکست خواهد خورد. به عنوان مثال مجموعه‌‌‌ی گره‌‌‌های {v1, …,v6} در شکل 6 حدنصابی است که بر دو حدنصاب دیگر متقاطع است، اما سیستم فاقد حدنصاب باقی مانده است زیرا دو حدنصاب دیگر بر یکدیگر تقاطع ندارند. هیچ پروتکلی نمی‌‌‌تواند امنیت را در غیاب تقاطع حدنصاب تضمین کند، چون این پیکره‌‌‌بندی ی‌‌‌تواند به عنوان دو سیستم FBAS متفاوت که هیچ پیامی رد و بدل نمی‌‌‌کنند عمل کند. با این حال تضمین امنیت حتی با وجود تقاطع حدنصاب، در حضور دیگر گره‌‌‌های خراب‌‌‌کار می‌‌‌تواند غیرممکن باشد. شکل 6 که در آن دو حدنصاب منفصل وجود دارد را با شکل 7 که دو حدنصاب بر یک گره v7 متقاطع هستند و گره v7 نیز خراب‌‌‌کار است مقایسه کنید. اگره گره v7 اعلامیه‌‌‌های متفاوتی به حدنصاب‌‌‌های چپ و راست ارسال کند، تاثیر آن برای حدنصاب‌‌‌های منفصل یکسان است.

در واقع از آنجایی که گره‌‌‌های خراب‌‌‌کار کمکی به امنیت نخواهند کرد، هیچ پروتکلی نمی‌‌‌تواند بدون وجود گره‌‌‌های درست‌‌‌کار که خود از تقاطع حدنصاب بهره می‌‌‌برند امنیت را تضمین کند. جدای از این، در سناریویی بسیار بدتر، گره‌‌‌های خراب‌‌‌کار می‌‌‌توانند هر اعلامیه‌‌‌ی ممکن (متناقضی) را که حدنصاب را کامل کند بسازند. دو حدنصابی که بر گره‌‌‌های خراب‌‌‌کار همپوشانی دارند می‌‌‌توانند به لطف دوگانگی گره‌‌‌های خراب‌‌‌کار دوباره به عنوان دو سیستم FBAS فعالیت داشته باشند. به طور خلاصه، (FBAS (V, Q می‌‌‌تواند توسط مجموعه‌‌‌ای از گره‌‌‌های B ⊆ V در صورتی که ⟨V, Q⟩ پس از حذف گره‌‌‌ها در B از V و از همه‌‌‌ی قطعات موجود در Q تقاطع حدنصاب داشته باشد، جان سالم به در ببرد.

تعریف حذف: اگر ⟨V, Q⟩ یک FBAS باشد و B ⊆ V مجموعه‌‌‌ای از گره‌‌‌ها، پس حذف B از ⟨V, Q⟩ که به صورت V, Q⟩B ⟩نوشته می‌‌‌شود، یعنی کامل کردن⟨ FBAS ⟨V ⧵ B, QB که در آن

{(QB(v) = { q ⧵ B ∣ q ∈ Q(V.

وظیفه همه‌‌‌ی گره‌‌‌های v است که مطمئن شوند (Q(v از تقاطع حدنصاب تخطی نمی‌‌‌کند. یکی از روش‌‌‌های انجام این کار انتخاب قطعات محافظه‌‌‌کار است که منجر به حدنصاب‌‌‌های بزرگ‌‌‌تر شوند. اما یک گره v خراب‌‌‌کار می‌‌‌تواند در مورد مقدار (Q(v دروغ بگوید و یا آن را برای تاکیدات خودسرانه نادیده بگیرد. خلاصه اینکه مقدار (Q(v در صورت خراب‌‌‌کار بودن v معنی نخواهد داشت. به این دلیل است که عامل ضروری امنیت (تقاطع حدنصاب گره‌‌‌های درست‌‌‌کار پس از حذف گره‌‌‌های خراب‌‌‌کار) توسط قطعات گره‌‌‌های خراب‌‌‌کار تحت تاثیر قرار نمی‌‌‌گیرد.

فرض کنید شکل 6 از یک FBAS v1, v2, v3 سه‌‌‌گره‌‌‌ای با تقاطع حد نصاب بدون FBAS شش‌‌‌گره‌‌‌ای تکامل یافته است. وقتی v4, v5, v6 به آنان بپیوندند، از روی سوء نیت قطعاتی را انتخاب می‌‌‌کنند که از تقاطع حدنصاب تخطی کند و هیچ پروتکلی نتواند امنیت V را تضمین کند. خوشبختانه حذف کردن گره‌‌‌ بد برای ⟨V, Q ⟩{ v4, v5, v6} تقاطع حدنصاب را بر می‌‌‌گرداند، یعنی حداقل { v1, v2, v3} می‌‌‌توانند از امنیت برخوردار باشند. توجه کنید که این نوع حذف، حذفی مفهوم به خاطر تشریح امنیت بهینه می‌‌‌باشد. یک پروتکل باید امنیت را برای v1, v2, v3 بدون نیاز به دانستن خراب‌‌‌کاربودن v4, v5, v6 تضمین کند.

4.2 مجموعه‌‌‌های غیرضروری (DSets)

ما تحمل خطای انتخاب قطعه توسط گره را از طریق مفهوم مجموعه‌‌‌های غیرضروری (DSet) می‌‌‌یابیم. امنیت و Liveness گره‌‌‌های خارج از DSet می‌‌‌تواند فارغ از رفتار گره در درون DSet تضمین شود. به عبارت دیگر، اگر یک DSet مفرد در یک FBAS بهینه از نظر انعطاف، با همه‌‌‌ی گره‌‌‌های خراب‌‌‌کار رویارویی کند، شامل گره‌‌‌های شکست خورده هم هست و همه‌‌‌ی گره‌‌‌های خارج از DSet صحیح خواهند بود. به عنوان مثال، در یک سیستم PBFT متمرکز با گره‌‌‌های 3f + 1 و حجم حدنصاب 3f + 1، همه‌‌‌ی fها یا گره‌‌‌های کمتر یک DSet را تشکیل می‌‌‌دهند. از آنجایی که PBFT در واقع به مقدار f شکست بیزانس تاب‌‌‌آوری دارد، استحکام آن بهینه است.

در مثال شکل 3 که کمتر هم معمول است، {v1} یک DSet است، چون یک گره‌‌‌ حلقه بالایی می‌‌‌تواند بدون تاثیرگزاری بر بقیه‌‌‌ی سیستم از کار بیافتد. {v9} نیز یک DSet است چون صحت هیچ گره دیگری بر v9 مبتنی نیست. {v6, …, v9‌‌‌} نیز یک DSet است زیرا چون نه v5 و نه حلقه‌‌‌ی بالا به هیچ کدام از این پنج گره وابسته نیستند. v5, v6} DSet} نیست چون قطعه‌‌‌ایست برای v9 و v10 و بر این اساس اگر خراب‌‌‌کار باشد می‌‌‌تواند به v9 و v10 دروغ بگوید و برای تاکیداتی مخالف با یکدیگر در سیستم قانعشان کند.

برای پیشگیری از یک DSet خراب‌‌‌کار از تاثیرگزاری بر صحت گره‌‌‌های دیگر، دو ویژگی باید گنجانده شود. حذف کردن DSet نمی‌‌‌تواند تقاطع حد نصاب را برای امنیت کاهش دهد. برای Liveness نیز DSet نمی‌‌‌تواند یک حدنصاب فعال برای دیگر گره‌‌‌ها را نادیده بگیرد. این منجر به تعریف زیر می‌‌‌انجامد:

تعریف Dset: اگر ⟨V, Q⟩ یک FBAS باشد و B ⊆ V، می‌‌‌گوییم که B یک مجموعه‌‌‌ی غیرضروری یا DSet است، اگر:

1. (تقاطع حدنصاب برخلاف) B ⟨V, Q⟩B از تقاطع حدنصاب بهره می‌‌‌برد

2. (تقاطع حدنصاب برخلاف B) یا V یا B در ⟨V, Q⟩ حدنصاب است یا B=V می‌‌‌باشد.

در درسترس بودن حدنصاب بر خلاف B، در مقابل سر باز زدن B از پاسخ به درخواست و مسدود کردن پیشرفت گره‌‌‌های دیگر جلوگیری خواهد کرد. تقاطع حدنصاب بر خلاف B، در مقابل عکس حالت بالا عمل خواهد کرد (گره‌‌‌های موجود در B تاکیدات متناقضی انجام دهند که دیگر گره‌‌‌ها را قادر به انتشار مقادیر ناهمگون برای یک اسلات می‌‌‌کند. گره‌‌‌ها باید خطرات موجود در انتخاب قطعات را تعدیل کنند. قطعات بزرگ‌‌‌تر منجر به حدنصاب‌‌‌های بزرگ‌‌‌تر با همپوشانی بیشتر می‌‌‌شوند، یعنی مجموعه‌‌‌های شکست‌‌‌خورده کمتر B تقاطع حدنصاب را در هنگام حذف شدن کاهش می‌‌‌دهند. از سوی دیگر، در قطعات بزرگ‌‌‌تر احتمال وجود گره‌‌‌های شکست‌‌‌خورده‌‌‌ وجود دارد که در دسترس بودن حد نصاب را به خطر می‌‌‌اندازد.

Stellar white paper
Stellar white paper

شکل 8. ویژگی‌‌‌های کلیدی گره FBAS

کوچک‌‌‌ترین DSet شامل گره‌‌‌های خراب‌‌‌کار، شامل گره‌‌‌های درست‌‌‌کار نیز هست و نشان‌‌‌دهنده‌‌‌ی این حقیقت است که یک مجموعه‌‌‌ی بزرگ از گره‌‌‌های خراب‌‌‌کار می‌‌‌توانند باعث از کار افتادن همه‌‌‌ی گره‌‌‌های درست‌‌‌کار شوند. مثلا در شکل 3 کوچکترین DSet حاوی {v5 و v6، {v5, v6, v9, v10 می‌‌‌باشد. مجموعه‌‌‌ی همه‌‌‌ی گره‌‌‌ها، V، همیشه یک DSet است، چون یک FBAS ⟨V, Q⟩ همیشه از تقاطع حدنصاب بر خلاف V بهره می‌‌‌برد و در موارد بخصوصی از دسترسی حدنصاب بر خلاف V بهره‌‌‌مند است. انگیزه‌‌‌ی موارد خاص این است که با وجود گره‌‌‌های خراب‌‌‌کار متعدد، V باید کوچک‌‌‌ترین Dsetی باشد که حاوی گره‌‌‌های خراب‌‌‌کار است و این امر نشان‌‌‌دهنده‌‌‌ی این است که تنها چیزی که پروتکل‌‌‌ها می‌‌‌توانند تضمین کنند شکست سیستم می‌‌‌باشد.

DSetهای موجود در یک FBAS توسط تابع حدنصاب Q، فرضی شناخته می‌‌‌شود. درست‌‌‌کار و خراب‌‌‌کار بودن به رفتار زمان اجرا مانند دستکاری شدن ماشین‌‌‌ها بستگی دارد. DSetهایی که برای ما مهم هستند، آنهایی هستند که همه‌‌‌ی گره‌‌‌های خراب‌‌‌کار را در بر می‌‌‌گیرند چون به تمایز بین گره‌‌‌هایی که باید صحت آنان تایید شود و گره‌‌‌هایی که تضمینشان غیرممکن است کمک می‌‌‌کند. ما به همین هدف اصطلاحات زیر را تعریف می‌‌‌کنیم.

تعریف “سالم”. گره v در یک FBAS در صورتی “سالم” است که مجموعه‌‌‌ی‌‌‌ غیرضروری B حاوی گره‌‌‌های خراب‌‌‌کار وجود داشته باشد و v ∉ B باشد.

تعریف “آلوده”. اگر گره v در یک FBAS سالم نباشد، آلوده است.

گره‌‌‌‌‌‌‌‌‌ی آلوده‌‌‌ی v توسط گره‌‌‌های شکست‌‌‌خورده‌‌‌ی زیادی محاصره شده است تا پیشرفت آن متوقف کرده و یا حالت کنونی‌‌‌اش را مسموم کنند، حتی اگر خود v درست‌‌‌کار باشد. هیچ FBASی نمی‌‌‌تواند صحت گره آلوده را تضمین کند. با این حال، یک FBAS بهینه تضمین می‌‌‌کند که همه‌‌‌ی گره‌‌‌های سالم، صحیح باقی خواهند ماند. شکل 8 ویژگی‌‌‌های کلیدی گره‌‌‌ها را به طور خلاصه آورده است. نظریه‌‌‌های پایین، تحلیل را توسط نشان دادن اینکه مجموعه‌‌‌ی گره‌‌‌های آلوده همیشه در FBAS با تقاطع حدنصاب DSet هستند، آسان‌‌‌تر می‌‌‌کند.

فرضیه 1. فرض می‌‌‌کنیم. U در V, Q⟩ FBAS⟩ حدنصاب باشد، B ⊆ V مجموعه‌‌‌ای از گره‌‌‌ها باشد و U′ = U ⧵ B. اگر U′ ≠ ∅ باشد پس U’ حدنصاب V, Q⟩B ⟩است.

اثبات. به این دلیل که U حدنصاب است، همه‌‌‌ی گره‌‌‌های v ∈ U دارای (q ∈ Q(v هستند، به طوری که q ⊆ U باشد. به این دلیل که U′ ⊆ U است، همه‌‌‌ی v ∈ U′ دارایی یک q ∈ v هستند، طوری که q ⧵B ⊆ U′ باشد. بازنوسی با توجه به حذف ∀v ∈ U′ , ∃q ∈ QB(v) dرا می‌‌‌طلبد، به طوری که q ⊆ U′ که چون U′ ⊆ V ⧵ B می‌‌‌باشد، یعنی U’ در V, Q⟩B⟩دنصاب است.

فرضیه 2. اگر B1 و B2 در V, Q⟩ FBAS⟩ مجموعه‌‌‌ی غیرضروری باشند، از تقاطع حدنصاب بهره می‌‌‌برند، پس B = B1 ∩ B2 نیز یک DSet می‌‌‌باشد.

اثبات. فرض می‌‌‌کنیمU1 = V ⧵ B1 است و U2 = V ⧵ B2 می‌‌‌باشد. اگر U1 = ∅ باشد، پس B1 = V و B = B2 می‌‌‌باشد، پس کار تمام است. به همین شکل، اگر U2 = ∅,، پس B = B1. در غیر این صورت در نظر داشته باشید که دسترسی حدنصاب بر خلاف DSet B1 و B2، U1 و U2 در ⟨V, Q⟩ حدنصاب هستند. این از تعریف “اتحاد دو حدنصاب یعنی یک حدنصاب جدید” گرفته شده است. بنابرین V ⧵ B = U1 ∪ U2 یک حدنصاب است و ما دسترسی حدنصاب بر خلاف B را داریم.

حالا باید تقاطع حدنصاب بر خلاف B را نشان دهیم. فرض می‌‌‌کنیم U‌‌‌a و Ub در V, Q⟩B⟩ دو حدنصاب باشند. فرض می‌‌‌کنیم U = U1 ∩ U2 = U2 ⧵ B1 است. در تقاطع حدنصاب ⟨V, Q⟩، U = U1 ∩ U2 ≠ ∅. اما طبق فرضیه 1، U = U2 ⧵ B1 باید در ⟨V, Q⟩B⟩حدنصاب باشد. حالا فرض کنید که Ua ⧵ B1 و Ua ⧵ B 2 هر دو نمی‌‌‌توانند خالی باشند، مگر اینکه Ua ⧵ B = U a وجود داشته باشد. طبق فرضیه 1، یا Ua ⧵ B1 در V, ⟨Q⟩BB1 = ⟨V, Q⟩B1 حدنصاب است، یا Ua ⧵ B 2 در V, Q⟩B)B2 = ⟨V, Q⟩B )و یا هردو. در حالت اول، توجه کنید که اگر Ua ⧵ در V, Q⟩B1⟩ حدنصاب باشد، پس تقاطع حدنصاب V, Q⟩B1، (U ⧵ B1 ) ∩ U⟩ ≠ ∅ خواهد بود؛ از آنجایی که (Ua ⧵ B 1 ) ∩ U = (Ua ⧵ B 1 ) ⧵ B 2 می‌‌‌باشد، یعنی Ua ⧵ B 2 ≠ ∅ باعث حدنصاب شدن Ua ⧵ B 2 در V, Q⟩B2 ⟩می‌‌‌شود. طبق یک توافق مشابه، Ua ⧵ B 2 باید در V, Q⟩B2⟩ حدنصاب شود. اما تقاطع حدنصاب به ما می‌‌‌گوید که (Ua ⧵ B2 ) ∩ (Ub ⧵ B 2 ) ≠ ∅ می‌‌‌باشد که تنها در صورت Ua ∩ Ub ≠ ∅ امکان‌‌‌پذیر می‌‌‌باشد.

فرضیه 3. در یک FBAS با تقاطع حدنصاب، مجموعه‌‌‌ی گره‌‌‌های آلوده یک DSet است.

اثبات. فرض می‌‌‌کنیم Bmin تقاطع هر DSet است که حاوی همه‌‌‌ی گره‌‌‌های خراب کار می‌‌‌باشد. این از تعریف “سالم” مبنی بر اینکه گره v در صورتی سالم است که v ∉ Bmin باشد. بنابرین Bmin دقیقا مجموعه‌‌‌ی گره‌‌‌های آلوده می‌‌‌باشد. طبق فرضیه 2، DSetها در تقاطع بسته شده‌‌‌اند، بنابرین Bmin نیز یک DSet می‌‌‌باشد.

5. رای‌‌‌گیری یکپارچه

این بخش یک تکنیک رای‌‌‌گیری یک‌‌‌پارچه توسعه داده می‌‌‌شود که گره‌‌‌های FBAS بتوانند از آن برای توافق درمورد اعلامیه استفاده کنند. فرایند توافق بر یک اعلامیه‌‌‌ی a در سطح بالا شامل تبادل پیام بین گره‌‌‌ها می‌‌‌باشد. ابتدا گره‌‌‌ها به a رای می‌‌‌دهند. سپس اگر رای موفقیت‌‌‌آمیز بود، گره‌‌‌ها رای دوم را هم با نظر به موفقیت‌‌‌آمیز بودن رای اول صادر می‌‌‌کنند.

از دید گره‌‌‌ها، دو دور از پیام‌‌‌ها توافق را بر اعلامیه‌‌‌ی a به سه مرحله تقسیم می‌‌‌کنند: ناشناخته، پذیرفته شده، تایید شده. در ابتدا وضعیت a برای گره‌‌‌ی v کاملا ناشناخته است (a می‌‌‌تواند در پایان صحیح یا غلط باشد و یا حتی در وضعیت میانی گیر کند). اگر رای اول موفقیت‌‌‌آمیز باشد، v a را می‌‌‌پذیرد. هیچ دو گره سالمی اعلامیه‌‌‌های متناقض را نمی‌‌‌پذیرند، بنابرین اگر v سالم باشد و a را بپذیرد، a نمی‌‌‌تواند غلط از آب دربیاید.

با این حال به دو دلیل پذیرش a توسط v برای کنش v بر a کافی نخواهد بود. دلیل اول اینکه v a را پذیرفته است به این معنی نیست که همه‌‌‌ی گره‌‌‌های سالم می‌‌‌توانند این کار را بکنند. احتمال دارد a برای دیگر گره‌‌‌ها گیر کند. دلیل دوم اینکه اگر v آلوده باشد، پذیرش a تبدیل به هیچ خواهد شد (یعنی احتمال دارد a در گره‌‌‌های سالم غلط از آب دربیاید). با این حال حتی اگر v آلوده باشد (که خود از آن مطلع نیست)، سیستم به بهره‌‌‌گیری از تقاطع حدنصاب گره‌‌‌های درست‌‌‌کار بهره می‌‌‌برد که در این مورد v برای امنیت بهینه باید تضمین بهتری از a داشته باشد. برگزاری رای‌‌‌گیری دوم باعث پوشش هردوی این مسائل می‌‌‌شود. اگر رای‌‌‌گیری دوم موفقیت‌‌‌آمیز بشد، v به مرحله‌‌‌ی تایید می‌‌‌رسد که در آن می‌‌‌تواند a را صحیح فرض کرده و روی آن دست به اقدام بزند.

بخش‌‌‌های بعدی فرایند رای‌‌‌گیری یکپارچه را با جزییات مطرح می‌‌‌کند. به این دلیل که رای‌‌‌گیری از امکان گیر کردن اعلامیه‌‌‌ها جلوگیری نمی‌‌‌کند، بخش 5.6 به بحث در مورد چگونگی مقابله با آنان پرداخته است. بخش 6 نیز رای‌‌‌گیری یکپارچه را به پروتکل اجماعی تبدیل می‌‌‌کند که از احتمال گیر کردن اسلات‌‌‌ها برای گره‌‌‌های سالم جلوگیری می‌‌‌کند.

5.1 رای‌‌‌گیری با عضویت آزاد

یک گره صحیح در سیستم توافق بیزانس تنها زمانی کار خود بر اعلامیه a را آغاز می‌‌‌کند که بداند دیگر گره‌‌‌های صحیح هیچ‌‌‌گاه بر اعلامیه‌‌‌ی متناقض a توافق نمی‌‌‌کنند. اکثر پروتکل‌‌‌ها با این هدف از رای‌‌‌گیری استفاده می‌‌‌کنند. گره‌‌‌های درست‌‌‌کار تنها در صورت معتبر بودن به a رای می‌‌‌دهند. گره‌‌‌های درست‌‌‌کار هیچوقت رای خود را عوض نمی‌‌‌کنند. بنابرین در توافق متمرکز بیزانس، اگر حدنصاب اکثریت گره‌‌‌های درست‌‌‌کار به آن رای‌‌‌ داده باشد، رای دادن به a کاملا امن است. ما می‌‌‌گوییم که یک اعلامیه به محض اینکه رای‌‌‌های کافی را دریافت کند “تصویب” می‌‌‌شود.

ما در شرایط رای‌‌‌گیری یکپارچه باید رای‌‌‌گیری را برای فراهم کردن عضویت آزاد اتخاذ کنیم. یکی از تفاوت‌‌‌های موجود این است که حدنصاب دیگر با اکثریت گره‌‌‌های درست‌‌‌کار هماهنگی ندارد. با این حال الزام اصلی در خدمت تضمین تقاطع حدنصاب گره‌‌‌های درست‌‌‌کار می‌‌‌باشد که بخش 4.1 پیشتر برای FBA به کار گرفته بود. معنی دیگر عضویت آزاد این است که گره‌‌‌ها باید آنچه یک حدنصاب را به عنوان بخشی از فرایند رای‌‌‌گیری تشکیل می‌‌‌دهد شناسایی کنند. یک پروتکل برای انجام امر شناسایی باید (Q(v را در پیغام رسیده از طرف v مشخص کند.

تعریف رای. گره v رای به اعلامیه‌‌‌ی انتزاعی a می‌‌‌دهد اگر:

1. v تاکید کند که a معتبر است و با همه‌‌‌ی شرایطی که v پذیرفته است همخوانی دارد،

2. v تاکید کند که هیچگاه بر علیه a رای‌‌‌ نداده است، (مثلا رای به اعلامیه‌‌‌ای که با a در تضاد بوده است نداده است) و v هم متعهد می‌‌‌شود هیچگاه در آینده بر علیه a رای ندهد.

تعریف تصویب. اگر همه‌‌‌ی اعضای Ua موافق a رای دهند، حدنصاب Ua هم اعلامیه‌‌‌ی a را تصویب می‌‌‌کند. اگر v عضوی از حدنصاب Ua باشد که a را تصویب می‌‌‌کند، a را تصویب خواهد کرد.

فرضیه 4. دو اعلامیه‌‌‌ی متضاد a و a ̄ نمی‌‌‌توانند هردو در یک FBAS که از تقاطع حدنصاب بهره می‌‌‌برند و هیچ گره خراب‌‌‌کاری ندارند تصویب شوند.

اثبات. فرض کنید حدنصاب U1 a را تصویب کند و حدنصاب U2 a ̄ را. در تقاطع حدنصاب، ∃v ∈ U1 ∩ U2. چنین vای باید به صورت غیرقانونی هم برای a و هم برای a ̄ رای داده باشد و فرضیه‌‌‌ی نبود گره‌‌‌های خراب‌‌‌کار را رد می‌‌‌کند.

فرضیه 5. فرض می‌‌‌کنیم ⟨V, Q⟩ یک FBAS باشد که از تقاطع حدنصاب B بهره می‌‌‌برد و فرض می‌‌‌کنیم B شامل همه‌‌‌ی گره‌‌‌های خراب‌‌‌کار می‌‌‌باشد. فرش می‌‌‌کنیم v1 و v2 دو گره‌‌‌ای هستند که در B حضور ندارند. a و a ̄ هم اعلامیه‌‌‌های متناقض هستند. اگر v1 a را تصویب کند، دیگر v2 نمی‌‌‌تواند a ̄ را تصویب کند.

اثبات. فرض می‌‌‌کنیم که v1 a را تصویب می‌‌‌کند و v2 a ̄ را. طبق تعریف، باید یک حدنصاب U1 حاوی v1 وجود داشته باشد که a را تایید کند و حدنصاب U2 هم حاوی v2 باشد که a ̄ را به تصویب برساند. طبق فرضیه 1، از آنجایی که U1 ⧵ B ≠ ∅ and U2 ⧵ B ≠ ∅ می‌‌‌باشد، هردو باید در V, Q⟩B⟩حدنصاب باشند، یعنی آنان a و a ̄ را در V, Q⟩⟩ تصویب کرده‌‌‌اند. اما V, Q)B )از تقاطع حدنصاب بهره می‌‌‌برد و هیچ گره خراب‌‌‌کاری در آن وجود ندرد، بنابرین فرضیه 4 به ما می‌‌‌گوید که a و a ̄ نمی‌‌‌توانند هر دو تصویب شوند.

فرضیه 6. دو گره سالم در FBAS با تقاطع حدنصاب نمی‌‌‌توانند اعلامیه‌‌‌های متناقض را تصویب کنند.

اثبات. فرض می‌‌‌کنیم که B مجموعه‌‌‌ی گره‌‌‌های آلوده می‌‌‌باشد. طبق فرضیه 3، B یک DSet است. طبق تعریف DSet، ⟨V, Q بر خلاف B از تقاطع حدنصاب بهره می‌‌‌برد. طبق فرضیه 5، دو گره‌‌‌ای که در B نیستند نمی‌‌‌توانند اعلامیه‌‌‌های متناقض را تایید کنند.

5.2 مجموعه‌‌‌های مسدودکننده

Liveness در اجماع متمرکز یک ویژگی حیاتی برای سیستم به شمار می‌‌‌رود. یا یک حدنصاب درست‌‌‌کار وجود دارد و یا یک گره‌‌‌ خراب‌‌‌کار می‌‌‌تواند از پذیرش اعلامیه‌‌‌های جدید توسط سیستم جلوگیری کند. در مقابل، در FBAS، Liveness در بین گره‌‌‌ها متفاوت است. به عنوان مثال، در مثال حدنصاب حلقه‌‌‌ای شکل 3، اگر گره حلقه وسط v6, v7, V8 از کار بیافتد، حلقه‌‌‌ی برگی در حالی که گره v5 به استفاده Liveness ادامه می‌‌‌دهد، مسدود خواهد شد.

Stellar white paper
Stellar white paper

شکل 9. V4 به a ̄ رای داده است که با اعلامیه تصویب شده a تناقض دارد.

پروتکل FBA می‌‌‌تواند Liveness گره v را تنها در صورتی تضمین کند که (Q(v حاوی حداقل یک قطعه‌‌‌ی حدنصاب که تنها گره‌‌‌های صحیح در آن حضور دارند باشد. اگر B شامل حداقل یک عضو از هر قطعه‌‌‌ی v باشد، مجموعه‌‌‌ی B گره‌‌‌های شکست‌‌‌خورده می‌‌‌تواند این ویژگی‌‌‌ را بشکند. ما چنین مجموعه‌‌‌ی B را v-blocking (مسدودسازی v) نام‌‌‌گذاری می‌‌‌کنیم چون قدرت مسدودسازی پیشرفت v را دارد.

تعریف مسدودسازی v. فرض می‌‌‌کنیم v ∈ V یک گره در⟨FBAS ⟨V, Q باشد. مجموعه‌‌‌ی B ⊆ V اگر بر همه‌‌‌‌‌‌ی قطعات v همپوشانی داشته باشد مسدودسازی v نام دارد.

فرضیه 7. فرض می‌‌‌کنیم B ⊆ V مجموعه‌‌‌ای از گره‌‌‌های موجود در ⟨FBAS ⟨V, Q باشد. ⟨V, Q⟩ تنها در صورتی که برای v ∈ V ⧵ B مسدودسازی v نباشد می‌‌‌تواند از تقاطع حدنصاب بهره ببرد.

اثبات. “∀v ∈ V ⧵ B, B مسدودسازی v نیست” دقیقا یعنی (“∀v ∈ V ⧵ B, ∃q ∈ Q(v طوری که q ⊆ V ⧵ B باشد.” طبق تعریف حدنصاب، مورد دومی که ذکر کردیم در صورتی که V⧵B یک حدنصاب باشد یا B = V باشد، تعریف دقیق دسترسی حدنصاب بر خلاف B را بیان می‌‌‌کند.

در نتیجه Dset گره‌‌‌های آلوده برای هیچ گره v سالمی مسدودکننده نیست.

5.3 پذیرش اعلامیه‌‌‌ها

وقتی یگ گره سالم v مطلع می‌‌‌شود که اعلامیه‌‌‌ای را تصویب کرده است، فرضیه‌‌‌ی 6 به v می‌‌‌گوید که دیگر گره‌‌‌های سالم اعلامیه‌‌‌های متناقض را تصویب نمی‌‌‌کنند. این شرایط برای v که a را بپذیرد کافی‌‌‌ست، اما نمی‌‌‌توانیم آن را ضروری بپنداریم. تصویب یک اعلامیه نیازمند رای‌‌‌گیری است و شاید برخی از گره‌‌‌ها به اعلامیه‌‌‌های متناقض رای داده باشند. به عنوان مثال در شکل 9، v4 پیش از اینکه بداند سه گره دیگر به اعلامیه متناقض a رای داده‌‌‌اند به a ̄ رای می‌‌‌دهد. بنابرین v4 نمی‌‌‌تواند اکنون به a رای دهد، اما می‌‌‌خواهیم به آن رای دهد تا با سایر گره‌‌‌ها هماهنگ باشد

نکته کلیدی این است که اگر گره v سالم باشد، پس هیچ مجموعه‌‌‌ی مسدود‌‌‌کننده‌‌‌ی B نمی‌‌‌تواند همه‌‌‌ی گره‌‌‌های آلوده را در بر داشته باشد. حالا فرض کنید که B یک مسدود‌‌‌کننده‌‌‌ی v است و همه‌‌‌‌‌‌ی اعضای B ادعای پذیرش a را دارند. اگر v سالم باشد، حداقل یکی از اعضای B هم باید سالم باشد. و البته اگر v آلوده باشد، a نمی‌‌‌تواند صحیح باشد. اما یگ گره آلوده می‌‌‌تواند هر چیزی را بپذیرد و بر صحت سایر گره‌‌‌های سالم تاثیر نگذارد.

تعریف پذیرش. گره v FBAS در صورتی اعلامیه‌‌‌ی a را می‌‌‌پذیرد که هیچگاه اعلامیه متناقض a را نپذیرفته باشد و مشخص کند که

1. یک حدنصاب U وجود دارد که v ∈ U و همه‌‌‌ی اعضای U یا رای به a داده‌‌‌اند و یا ادعای پذیرش a را دارند؛

2. همه‌‌‌‌‌‌ی اعضای مجموعه‌‌‌ی مسدودسازی v ادعای پذیرش a را دارند.

بنابرین یک گره درست‌‌‌کار نمی‌‌‌تواند رای به اعلامیه‌‌‌ای متناقض بدهد. شماره‌‌‌ی 2 در بالا به گره اجازه می‌‌‌دهد تا به ابتدا به یک اعلامیه رای دهد و سپس یک اعلامیه متناقض را بپذیرد.

stellar white paper
stellar white paper

شکل 10. سناریوهای متمایزکننده‌‌‌ی v2 وقتی که v2 پیام‌‌‌های برجسته را نمی‌‌‌بیند

فرضیه 8. دو گره سالم در یک FBAS که از تقاطع حدنصاب بهره می‌‌‌برند می‌‌‌توانند اعلامیه‌‌‌های متناقض را بپذیرند.

اثبات. فرض می‌‌‌کنیم ⟨V, Q⟩ یک FBAS با تقاطع حدنصاب است، و B هم DSet گره‌‌‌های آلوده. فرض کنید یک گره سالم اعلامیه‌‌‌ی a را پذیرفته است. فرض می‌‌‌کنیم v اولین گره سالمی باشد که a را پذیرفته است/ در نقطه‌‌‌ای که v a را می‌‌‌پذیرد، تنها گره‌‌‌های آلوده‌‌‌ی درون B می‌‌‌توانند ادعای پذیرش آن را داشته باشند. طبق نتیجه‌‌‌ی فرضیه 7، B نمی‌‌‌تواند مسدودکننده‌‌‌ی v باشد، بایدطوری باشد که v از طریق وضعیت 1 a را پذیرفته باشد. بنابرین v حدنصاب U را طوری شناسایی کرده است که همه‌‌‌ی گره‌‌‌ها ادعادی رای به پذیرش a را داشته باشند، و از آنجاییی که v اولین گره سالمی است که aرا پذیرفته است، یعنی همه‌‌‌ی گره‌‌‌های موجود در U\B نیز a را پذیرفته‌‌‌اند. به عبارت دیگر، v a را در V, Q⟩B⟩پذیرفته است. به طور عمومی، هر اعلامیه‌‌‌ای که توسط یک گره سالم در ⟨V, Q⟩ پذیرفته شود، باید در V, Q⟩B⟩به تصویب برسد. به این دلیل که B یک DSet است، V, Q⟩B⟩ از تقاطع حدنصاب بهره می‌‌‌برد. به این دلیل که B شامل همه‌‌‌ی گره‌‌‌های خراب‌‌‌کار است، فرضیه 4 قانون تصویب اعلامیه‌‌‌های متناقض می‌‌‌باشد.

5.4 پذیرفتن کافی نیست

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

5.4.1 امنیت. یک⟨FBAS ⟨V, Q را در نظر بگیرید که تنها حدنصاب موجود در آن رضایت متفق‌‌‌القول می‌‌‌باشد؛ مثلا ∀v, Q(v) = {V}. این گزینه‌‌‌ی محافظه‌‌‌کارانه‌‌‌ای برای امنیت به شمار می‌‌‌رود (تا زمانی که همه موافقت نکرده‌‌‌اند هیچ کاری نکن). اما از آنجایی که همه‌‌‌ی گره‌‌‌ها برای v مسدودکننده هستند، هر گرهی می‌‌‌تواند به تنهایی دیگر گره‌‌‌ها را قانع به پذیرش اعلامیه‌‌‌های سرخود بکند.

مسئله این است که اعلامیه‌‌‌های پذیرفته شده تنها در میان گره‌‌‌های سالم امنیت دارند. اما همانطور که در بخش 4.1 گفته شد، تنها شرایط لازم برای تضمین امنیت، تقاطع حدنصاب گره‌‌‌های درست‌‌‌کار می‌‌‌باشد که شاید حتی در شرایطی که بعضی از گره‌‌‌ها آلوده شوند به کار خود ادامه دهند. زمانی که {Q(v) = {V باشد، تنها Dsetهای موجود ∅ و V هستند، یعنی شکست هر گره باعث آلوده شده کل سیستم می‌‌‌شود. در مقابل، تقاطع حدنصاب بر خلاف B ⊆ V به کار خود ادامه بدهد.

5.4.2 Liveness. محدودیت دیگر اعلامیه‌‌‌های پذیرفته شده این است که سایر گره‌‌‌های سالم نمی‌‌‌توانند آنان را بپذیرند. این امر باعث مسئله‌‌‌ساز شدن اعلامیه‌‌‌های پذیرفته شده برای Liveness می‌‌‌شود. اگر گره‌‌‌ای قصد انجام کار بر روی اعلامیه‌‌‌ای را داشته باشد، گره‌‌‌های دیگر نمی‌‌‌توانند مانند او پیش بروند.

بخش a شکل 10 را در نظر بگیرید، که در آن گره v3 پس از کمک به v1 در تصویب و پذیرش a دچار ازکارافتادگی شده است. v1 a را می‌‌‌پذیرد اما v2 و v4 نمی‌‌‌توانند. از دید v2، موقعیت تصویرسازی شده از بخش b شکل 10 قابل تمایز نیست، که در آن v3 به ā رای‌‌‌ داده است و درست‌‌‌کار است اما در پاسخ دادن کند بوده است، در حالی که v1 خراب‌‌‌کار است و رای ā خود را برای v3 فرستاده است، در حالی که به طور همزمان یک رای a هم برای v2 ارسال کرده است.

V1 برای حمایت از Liveness در سطح پروتکل مانند آنچه در بخش a شکل 10 آمده است، به راهی برای تضمین پذیرش a توسط سایر گره‌‌‌های دیگر پیش از اینکه v1 اقدامی در مورد a انجام دهد نیاز دارد. در این مورد منطقی‌‌‌تر آن است که بگوییم سیستم بر a موافقت دارد.

تعریف موافقت. یک ⟨FBAS ⟨V, Q در صورتی با اعلامیه a موافقت می‌‌‌کند که فارغ از آنچه بعدا رخ دهد، به محض تحویل و پردازش پیام‌‌‌های کافی، همه‌‌‌ی گره‌‌‌های سالم a را بپذیرند.

5.4.3 مقایسه با رای‌‌‌گیری متمرکز. برای دانستن دلیل بروز مسائل بالا در رای‌‌‌گیری یکپارچه، سیستم توافق متمرکز گره‌‌‌های N را با حجم حدنصاب T در نظر بگیرید. چنین سیستمی از دسترسی حدنصاب با fL = N – T با شکست گره کمتر بهره می‌‌‌برد. از آنجایی که هر دو حدنصابی حداقل گره‌‌‌های 2T –T را به اشتراک دارند، تقاطع حدنصاب گر‌‌‌ه‌‌‌های درست‌‌‌کار تا fS = 2T − 1 خطای بیزانس را تحمل خواهد کرد.

سیستم توافق متمرکز بیزانس به طور معمول N = 3f + 1 و T = 2f + 1 را برای به دست آوردنfL = fS = f تنظیم می‌‌‌کند، نقطه تعادلی که امنیت و Liveness در آن تحمل خطای یکسانی را دارند. اگر امنیت مهتر از Liveness باشد، بعضی از پروتکل‌‌‌ها T را زوری افزایش می‌‌‌دهند که fS > fL‌‌‌ باشد. در FBAS به این دلیل که حدنصاب به طور طبیعی افزایش پیدا می‌‌‌کند، سیستم‌‌‌ها نمی‌‌‌توانند تعادل خود ر بیابند و مراقبت از امنیت را در غیاب لاوینس مهم‌‌‌تر می‌‌‌شمارند.

اکنون سیستم متمرکزی را تصور کنید که در آن بعضی از گره‌‌‌های V به دلیل شکست گره و رای‌‌‌های متناقض، نمی‌‌‌توانند اعلامیه a را که توسط دیگران تصویب شده است به تصویب برسانند. اگر v مطلع شود که گره‌‌‌های fS + 1 ادعای تصویب a را کرده‌‌‌اند، v خواهد دانست که یا یکی از آن‌‌‌ها درست‌‌‌کار است و یا همه‌‌‌‌‌‌ی ضمانت‌‌‌های امنیتی فروپاشیده است. در هر صورت، v می‌‌‌تواند بدون کاهش امنیت در مورد a اقدام کند. معادل FBA نیز از مجموعه‌‌‌ی B خواهد شنید که اگر B در آن حذف شود، تقاطع حدنصاب گره‌‌‌های درست‌‌‌کار کاهش خواهد یافت. شناسایی چنین Bای به سه دلیل دشوار است: اول اینکه حدنصاب‌‌‌ها به صورت دینامیک کشف می‌‌‌شوند؛ دوم اینکه امکان دارد گره‌‌‌های خراب‌‌‌کار در مورد قطعات دروغ بگویند و سوم اینکه v تمی‌‌‌تواند کدام گره‌‌‌ها درست‌‌‌کار هستند. ما در عوض رای‌‌‌گیری یکپارچه برای پذیرش a را زمانی که مجموعه‌‌‌ی مسدودسازی v این کار را می‌‌‌کنند تعریف کردیم. مسدودسازی v این مزیت را دارد که به راحتی قابل بررسی است، اما چیزی معادل دریافت fL + 1 در سیستم متمرکز است، زمانی که ما در واقع fS + 1 می‌‌‌خواهیم.

برای تضمین توافق در بین همه‌‌‌ی گره‌‌‌های درست‌‌‌کار در سیستم متمرکز، به گره‌‌‌های fL + fS + 1 نیاز داریم تا تصویب یک اعلامیه را تایید کنیم. اگر بیش مقداری بیش از fL در آن‌‌‌ها از کار بیافتد، دیگر انتظار وجود Liveness را نخواهیم داشت. اگر تعداد fL یا کمتر از کار بیافتند، پس می‌‌‌دانیم که fS + 1 از گره‌‌‌ها برای تصویب اعلامیه باقی خواهند ماند، که دیگر گره‌‌‌های درست‌‌‌کار را هم قانع به این کار می‌‌‌کند. اتکا به fS در مدل FBA هیچ مشابهی ندارد. با این حال جالب است که حجم حدنصاب fL + fS + 1=T، که ارائه دهنده‌‌‌ی رویکرد مشابهی است، امکان دارد با توجیهات پیچیده‌‌‌‌‌‌ی بیشتری کار کند.

به عبارت دیگر، گره‌‌‌های در نقطه‌‌‌ای باید باور داشته‌‌‌ باشند که اعلامیه باید در امنیت به خود متکی باشد. یک سیستم متمرکز دو راه را برای رسیدن به این نقطه برای اعلامیه‌‌‌ی a پیشنهاد می‌‌‌کند: یا ابتدا a تصویب شود، یا از گره‌‌‌های fS + 1 که ادعای تصویب a را دارند برگردند و مشخص کنند اگر همه‌‌‌‌‌‌ی آنان دروغ گفته باشند امنیت حاصل نخواهد شد. FBA از چنین رویکردی برخوردار نیست؛ تنها ابزاری که برای امنیت در میان گره‌‌‌های درست کار دارد تصویب دست اول می‌‌‌باشد. از آنجایی که گره‌‌‌ها هنوز به راهی برای غلبه بر اعلامیه‌‌‌های تصویب شده دارند، ما مفهوم پذیرش را معرفی کردیم اما این تنها تضمین ضعیفی را ارائه می‌‌‌کند که به گره‌‌‌های سالم محدود می‌‌‌شود.

5.5 تایید اعلامیه

ریشه هر دو محدودیت اعلامیه‌‌‌های پذیرفته شده، پیچیدگی در زمان رای S گره‌‌‌های سالم به اعلامیه‌‌‌ a می‌‌‌باشد که در هر صورت تصویب شده است. S از نظر حدنصاب‌‌‌های غیرهم‌‌‌شکل FBA، امکان دارد از تصویب a توسط برخی گره‌‌‌های سالم جلوگیری کند. برای تبدیل v به ابزار پذیرش a بر خلاف رای‌‌‌های مخالف به آن، تعریف پذیرش دارای یک شاخص ثانویه است بر اساس مجموعه‌‌‌های مسدودسازی v می‌‌‌باشد. اما این شاخص دوم ضعیفتر از تصویب می‌‌‌باشد و هیچ تضمینی مبنی بر بهره‌‌‌گیری گره‌‌‌های آلوده تقاطع‌‌‌های حدنصاب ارائه نمی‌‌‌کند.

حالا فرض کنید یک اعلامیه a این ویژگی را دارد که هیچ گره سالمی هیچوقت بر علیه آن رای ندهد. پس دیگر نیازی به صتویب a نداریم و در عوض می‌‌‌توانیم اصرار کنیم که گره‌‌‌ها پیش از اقدام در مورد a مستقیما آن را تصویب کند. ما چنین اعلامیه‌‌‌ای را غیرقابل انکار می‌‌‌خوانیم.

تعریف غیرقابل انکار. اعلامیه a در یک FBAS در صورتی غیرقابل انکار خواهد بود که هیچ گره سالمی هیچگاه نتواند بر علیه آن رای صادر کند.

فرضیه 8 به ما می‌‌‌گوید که دو گره سالم نمی‌‌‌توانند اعلامیه‌‌‌های متناقض را بپذیرند. بنابرین در حالی که برخی از گره‌‌‌های سالم شاید بر علیه a که توسط یک گره سالم پذیرفته شده باشد رای مخالف دهند، عبارت “یک گره سالم a را پذیرفت” غیرقابل انکار می‌‌‌شود. این یعنی صدور رای دوم برای تصویب این حقیقت که یک گره سالم a را پذیرفته است.

تعریف تایید. حدنصاب Ua در FBAS اگر ∀v ∈ Ua باشد و v ادعای پذیرش a را داشته باشد، اعلامیه a را می‌‌‌پذیرد. اگر گره‌‌‌ای درچنین حدنصابی باشد، a را می‌‌‌پذیرد.

گره‌‌‌ها با نوشتن “پذیرش (a)” به عنوان مخفی برای جمله‌‌‌ی “یک گره سالم a ر پذیرفت” اظهرا می‌‌‌کنند که اعلامیه a را پذیرفته‌‌‌اند. تایید a یعنی تصویب “پذیرش (a). گره درست‌‌‌کار v می‌‌‌تواند تنها پس از پذیرفتن a به “پذیرش (a) رای بدهد، چون v نمی‌‌‌تواند فرض کند که همه‌‌‌ی گره‌‌‌های دیگر سالم هستند. اگر خود v آلوده باشد، “پذیرش (a) غلط خواهد بود، چون می‌‌‌تواند منجر به از دست رفتن Liveness v شود، اما گره‌‌‌ آلوده کلا هیچ تضمینی برای وجود Liveness در آن وجود ندارد.

فرضیه بعدی نشان می‌‌‌دهد که گره‌‌‌ها می‌‌‌توانند بدون از دست دادن امنیت بهینه خود بر اعلامیه‌‌‌ها متکی باشند. فرضیه 11 نشان می‌‌‌دهد که اعلامیه‌‌‌های تایید شده با تعریف “توافق” در بخش 5.4.2 همخوانی دارند، یعنی گره‌‌‌ها می‌‌‌توانند بدون به خطر انداختن Liveness گره‌‌‌های درست‌‌‌کار بر اعلامیه‌‌‌ها تایید شده تکیه کنند.

فرضیه 9. فرض می‌‌‌کنیم ⟨V, Q⟩ یک FBAS باشد که از تفقاطع حدنصاب بر خلاف B بهره می‌‌‌برد، و تصور کنید B حاوی همه‌‌‌ی گره‌‌‌های خراب‌‌‌کار می‌‌‌باشد. فرض می‌‌‌کنیم v1 و v2 دو گره‌‌‌ای هستند که در B حضور ندارند. فرض کنید a و a ̄ اعلامیه‌‌‌های متناقض باشند. اگر v1 a را تایید کند، v2 نخواهد توانست a ̄ را تایید کند.

اثبات. ابتدا توجه داشته باشید که “پذیرش (a)” با “پذیرش (a ̄)” تناقض دارد (یعنی هیچ گره درست‌‌‌کاری نمی‌‌‌تواند به هردویشان رای دهد). توجه کنید که v1 باید “پذیرش (a) را برای تایید a تصویب کند. طبق فرضیه 5. V2 نمی‌‌‌تواند “پذیرش (a ̄) را تصویب کند، بنابرین نمی‌‌‌تواند a ̄ را هم تایید کند.

فرضیه 10. فرض کنید B مجموعه‌‌‌ی گره‌‌‌های آلوده در یک ⟨FBAS ⟨V, Q با تقاطع حدنصاب باشد. فرض می‌‌‌کنیم U حدنصابی باشد که حاوی گره سالم (U ⊈ B) می‌‌‌باشد، و S هم هر مجموعه‌‌‌ای باشد، به طوری که U ⊆ S ⊆ V. فرض می‌‌‌کنیم S+ = S⧵B مجموعه‌‌‌ی گره‌‌‌های سالم در S باشد، و S = (V⧵S)⧵B نیز مجموعه‌‌‌ی گره‌‌‌های سالمی باشد که در S حضور ندارند. یا S= ∅ یا ∃V ∈ Sبه طوری که S+ مسدودکننده v باشد.

اثبات. اگر S+ برای v ∈ S مسدودکننده باشد، پس مشکلی نیست. در غیر این صورت، باید نشان دهیم که S = ∅ می‌‌‌باشد. اگر S+ برای هیچ یک از v ∈ Sمسدودکننده نباشد، پس طبق فرضیه 7، یا S= ∅ یا Sدر V, Qحدنصاب هستند. در مورد اول مشکلی وجود ندارد اما در مورد دوم به تناقض برخورد می‌‌‌کنیم: طبق فرضیه 1، U\B در V, QB یک حد نصاب است. از آنجایی که B یک DSet است، V, QB باید از تقاطع حدنصاب بهره‌‌‌مند باشد، یعنی( S ∩ (U ⧵B ≠ ∅. این غیرممکن است چون U ⧵ B) ⊆ S) و S ∩ S = ∅ می‌‌‌باشند.

فرضیه 11. اگر گره سالمی در FBAS ⟨V, Q⟩ با تقاطع حدنصاب، اعلامیه‌‌‌ a را تایید کند، هرآنچه بعدا رخ دهد ، به محض اینکه پیا‌‌‌م‌‌‌های کافی تحویل و پردازش شوند، همه‌‌‌ی گره‌‌‌های سالم a را پذیرفته و تایید می‌‌‌کنند.

Stellar White paper
Stellar White paper

شکل 12. وضعیت احتمالی سیستمی اعلامیه a

اثبات. فرض کنید B DSet گره‌‌‌های آلوده باشد و U ⊈ B تقاطعی باشد که گره‌‌‌ سالم از طریق آن a را تایید می‌‌‌کند. فرض می‌‌‌کنیم گره‌‌‌ها در U \ B پیام “پذیرش a” را منتشر کنند. طبق تعریف، هر گره v فارغ از روش رای دادن آن، پس از دریفات پیام “پذیرش (a) از مجموعه‌‌‌ی مسدودسازی v، دست به پذیرش a خواهد زد. بنابرین احتمال دارد این پیام‌‌‌ها گره‌‌‌های بیشتری را به متقاعد پذیرش a کند. اگر این گره‌‌‌های بیشتر به نوبه‌‌‌ی خود پیام “پذیرش (a) را تا زمانی که فارغ از هرگونه ارتباطی مخابره کنند، دیگر هیچ گره سالمی نتواند a را بپذیرد. اگر در این نقطع S مجموعه‌‌‌ی گره‌‌‌هایی باشد که اعادی پذیرش a را دارند، فرض می‌‌‌کنیم S+ مجموعه‌‌‌ی گره‌‌‌های سالم در S است و Sمجموعه‌‌‌ی گره‌‌‌های سالمی که در S قرار ندارند. S+ نمی‌‌‌تواند برای هیچ‌‌‌کدام از گره‌‌‌های موجود در Sمسدودکننده v باشد، در غیر این صورت گره‌‌‌های بیشتری می‌‌‌توانند a را بپذیرند. طبق فرضیه 10، S= ∅ به این معنی‌‌‌ست که همه‌‌‌ی گره‌‌‌های سالم a را پذیرفته‌‌‌اند.

شکل 11 مسیر طی شده توسط گره v برای تایید a را به طور خلاصه نشان داده است. v بدون هیچ دانشی امکان دارد یا به a و یا به a ̄ متناقض رای بدهد. اگر v یه یک a ̄ رای بدهد، بعدا نمی‌‌‌‌‌‌تواند به a رای بدهد، اما اگر مجموعه‌‌‌‌‌‌ها مسدودکننده‌‌‌ v a را بپذیرند، او نیز می‌‌‌تواند آن را بپذیرد. حدنصاب متعاقب پیام تایید به v اجازه می‌‌‌دهد a را تایید کند که طبق فرضیه 11 یعنی سیستم بر روی a توافق دارد.

5.6 Liveness و خنثی‌‌‌سازی

چالش اصلی اجماع‌‌‌های توزیع‌‌‌شده، چه متمرکز باشد و چه نه، این است که اعلامیه‌‌‌ها می‌‌‌توانند در وضعیتی میانه‌‌‌ای پیش از اینکه سیستم بر روی آنان به توافق برسد گیر کنند. بنابرین یک پروتکل نباید تلاش کند مقادیر منتشر شده را به طور مستقیم تصویب کند. اگر اعلامیه “مقدار اسلات i، x می‌‌‌باشد” گیر کند، سیستم دیگر هیچوقت نمی‌‌‌تواند بر روی اسلات i به توافق برسد و Liveness خود را از دست می‌‌‌دهد. راحل آن گنجاندن دقیق اعلامیه در رای‌‌‌ها می‌‌‌باشد. شکستن گیر یک اعلامیه گیر کرده باعث به وجود آمدن مسئله مهمی به نام محتوای اسلات می‌‌‌شود که برایمان بسیار اهمیت دارد. ما رها کردن قفل یک اعلامیه را خنثی‌‌‌سازی می‌‌‌نامیم.

Stellar White paper
Stellar White paper

شکل 13. آنچه یک گره سالم در مورد وضعیت اعلامیه a می‌‌‌داند

شکل 12 به طور دقیق‌‌‌تر وضعیت بالقوه‌‌‌ای را که اعلامیه‌‌‌ a می‌‌‌تواند در سیستم داشته باشد به تصویر می‌‌‌کشد. سیستم در ابتدا دوظرفیتی است، یعنی ترتیبی از رخدادهای احتمالی وجود دارد که همه‌‌‌ی گره‌‌‌های سالم از طریق آن a را می‌‌‌پذیرند، و ترتیب دیگری وجود دارد که همه‌‌‌ی گره‌‌‌های سالم a را با آن رد می‌‌‌کنند. احتمال رخ دادن یکی از این دو خروجی وجود دارد. اگر هیچ گره سالمی a را رد نکند، می‌‌‌گوییم که سیستم aظرفیتی است. اگر هم هیچ گره‌‌‌ سالمی a را نپذیرد می‌‌‌گوییم سیستم a ̄ظرفیتی می‌‌‌باشد.

در زمانی که یک FBAS از دوظرفیتی بودن به aظرفیتی تغییر پیدا می‌‌‌کند، احتمال بروز یک خروجی که در آن همه‌‌‌ی گره‌‌‌های سالم a را بپذیرند وجود دارد. با این حال شاید این دیگر مسئله نیاشد. یک سیستم چهارگره‌‌‌ای PBFTمانند {v1 ,…, v4}را در نظر بگیرید که سه گره در آن یک حدنصاب را تشکیل می‌‌‌دهند. اگر v1 و v2 به a رای دهند، سیستم aظرفیتی می‌‌‌شود. هیچ سه گرهی نمی‌‌‌توانند یک اعلامیه متناقض را تصویب کنند. با این حال اگر v3 و v4 متعاقبا به تناقض a ̄ با a رای دهند، تصویب a نیز غیرممکن خواهد شد. در این مورد، وضعیت a به طور موقت نامشخص یا “گیر کرده” خواهد بود.

همانطور که در شکل 10 نشان داده شده است، حتی اگر یک گره سالم a را بپذیرد، احتمال دارد سیستم هنوز نتواند به توافق کلی بر a برسد. طبق فرضیه 11، به محض تایید a توسط یک گره سالم، همه‌‌‌ی گره‌‌‌های سالم می‌‌‌توانند در نهایت آن را بپذیرند. بنابرین سیستم بر آن توافق خواهد کرد. شکل 13 آنچه یک گره سالم درمورد وضعیت کلی اعلامیه از وضعیت محلی خود می‌‌‌داند را به طور خلاصه نشان داده است.

یک پروتکل برای حفظ احتمال اجماع باید مطمئن شود که همه اعلامیه‌‌‌ها غیرقابل انکار هستند و بنابرین نمی‌‌‌توانند گیر کنند یا خنثی شوند و در صورت گیر کردن هم فرایند متوقف نمی‌‌‌شود. دو رویکرد محبوب برای تصحیح اعلامیه‌‌‌های قابل خنثی‌‌‌سازی وجود دارد: رویکرد مبتنی بر بازدید که توسط PBFT به کار گرفته شد, و رویکرد مبتنی بر رای که توسط Paxos ابداع شد. شاید فهم رویکرد مبتنی بر رای کمی مشکل باشد. مردم اغلب این دو رویکرد قاطی می‌‌‌کنند و عنوان می‌‌‌کنند این دو الگوریتم یکسان هستند، در حالی که اینطور نیست.

پروتکل‌‌‌های مبتنی بر بازدید، اسلات‌‌‌ها را با افزایش تعداد بازدید با رای‌‌‌ها مرتبط می‌‌‌سازند. اگر اجماع در اسلات i با بازدید n گیر کند، گره‌‌‌ها با توافق بر اینکه بازدید n کمتر از اسلات‌‌‌های معنادار i بوده‌‌‌اند و به سمت تعداد بالاتری می‌‌‌رفته‌‌‌اند، بازیابی می‌‌‌شوند. پروتکل‌‌‌ها مبتنی بر رای، مقادیر موجود در رای‌‌‌ها را به طور خودکار شمار رای‌‌‌های را بالا می‌‌‌برند. اگر یک رای گیر کند، گره‌‌‌ها دوباره با رای بالاتری همان اسلات را امتحام می‌‌‌کنند و مراقب هستند که هیچوقت مقادیری را انتخاب نکنند که با رای‌‌‌های گیر کرده پیشین تناقض داشته باشد.

این کار را باید با رویکرد مبتی بر رای انجام داد چون رها کردن مفهوم گره اولیه‌‌‌ی قابل تمایز یا رهبر را آسان‌‌‌تر می‌‌‌کند. به عنوان مثال، رفتار رهبر می‌‌‌تواند مورد تقلید قرار بگیرد.

SCP: پروتکل توافق یکپارچه بیزانس

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

وقتی گره‌‌‌ای حدس می‌‌‌زند که پورتکل نماینده همگرا شده است، پروتکل رای را به اجرا در می‌‌‌اوردند که از رای‌‌‌گیری یکپارچه برای پاک کردن رای‌‌‌های مربوط به مقادیر ترکیبی استفاده می‌‌‌کند. وقتی گره‌‌‌های سالم برای اجرای رای موافقت می‌‌‌کنند، مقدار مربوط به رای نیز برای اسلات مورد نظر منتشر می‌‌‌شود. وقتی گره‌‌‌ها برای پاک کردن یک رای توافق کردند، مقدار رای غیرمرتبط خواهد شد. اگر یک رای در وضعیتی گیر کند که یک یا چند گره سالم نتوانند آن را پاک کنند، پس با رای بالاتری دوباره سعی خواهند کرد. آنان رای جدید را با مقدار ثابت مرتبط می‌‌‌کنند تا گره‌‌‌ها باور کنند که رای گیر کرده پاک شده است. در نهایت، امنیت از تضمین اینکه همه‌‌‌ی رای‌‌‌های گیر کرده با مقایدر مرتبط پاک شده‌‌‌اند حاصل می‌‌‌شود. Liveness از این واقعیت به وجود می‌‌‌اید که یک رای گیر کرده می‌‌‌تواند توسط انتقال به رای بالاتر خنثی شود.

مابقی این بخش به معرفی پروتکل‌‌‌های نماینده و رای می‌‌‌پردازد. هر کدام از این پروتکل‌‌‌ها ابتدا بر حسب اعلامیه‌‌‌های مفهومی و سپس به عنوان پروتکلی با پیام‌‌‌هایی که نماینده‌‌‌ی مجموعه‌‌‌های اعلامیه‌‌‌های مفهومی هستند تشریح می‌‌‌شوند. بخش 6.3 نیز در نهایت، صحت پروتکل را نشان می‌‌‌دهد. SCP با هر اسلات به طور کاملا مستقل برخورد می‌‌‌کند و می‌‌‌توان بی‌‌‌شمار موارد جداگانه‌‌‌ی پروتکل اجماع یک اسلاته را مشاهده کرد. مفاهیمی همچون مقادیر کاندید و رای‌‌‌ها نیز باید همواره در زمینه‌‌‌ی هر اسلات خاص تفسیر شوند، حتی اگر بیشتر بحث در مورد اسلات نیز ضمنی باشد نه مستقیم.

6.1 پروتکل نماینده

به این دلیل که اسلات‌‌‌ها باید منظم شوند، برخی از کاربردهای SCP تنها یک رای ممکن برای هر اسلات خواهد داشت. به عنوان مقال، هر CA در شفافیت گواهی احتمال دارد مجموعه‌‌‌ی اسلات‌‌‌های خود را داشته باشد و تنها یک گواهی را به ازای هر اسلات امضا کند. با این حال، دیگر کاربردها نیز مقادیر زیادی برای هر اسلات دارند که محدود کردن مقادیر ورودی در آن کمک‌‌‌کننده خواهد بود. راهبرد ما شروع کار با پروتکل نماینده‌‌‌گزینی همگام می‌‌‌باشد که اجماع تحت فرضیه‌‌‌های زمانی خاص را به دست خواهد آورد و خروجی پروتکل نماینده به دروت پروتکل رای همگام را امنیت آن به زمان‌‌‌بندی بستگی ندارد تغذیه می‌‌‌کند. این مرحله ابتدایی همگام را گاهی اوقات تساهل می‌‌‌نامند.

پروتکل نماینده توسط همگام شدن در یک مقدار ترکیبی برای اسلات کار می‌‌‌کند. چگونگی ترکیب مقادیر دقیقا به کاربردها بستگی دارد. شبکه‌‌‌ی استلار از SCP برای انتخاب مجموعه‌‌‌ی تراکنش‌‌‌ها و یک دفتر کل برای هر اسلات استفاده می‌‌‌کند. استلار به منظور ترکیب مقادیر کاندید، مجموعه‌‌‌های تراکنش خود و حداکثر نشان‌‌‌گرهای زمانی آنان را متحد می‌‌‌کند. رویکردهای محتمل دیگر شامل ترکیب مجموعه‌‌‌ها توسط تقاطع یا انتخاب مقدار کاندید با حداکثر هش می‌‌‌باشد.

گره‌‌‌ها مقدار کاندید x را از طریق رای‌‌‌گیری یکپارچه بر نماینده اعلامیه x تولید می‌‌‌کنند.

تعریف کاندید. گره v مقدار x را زمانی که v علامیه نماینده x را تایید کرده باشد در نظر می‌‌‌گیرد؛ مثلا v “پذیرش (nominate x) را تصویب کرده است.

از آنجایی که گره v مقدار کاندیدی ندارد، امکان دارد به نفع نماینده x برای هر مقدار x که از بررسی اعتبار کاربردی عبور کند رای دهد. در واقع v باید مقادیری را که گره‌‌‌های دیگر به عنوان نماینده در می‌‌‌آورند، با محدودیت سایز که درمورد جلوگیری از انفجار کاندیداها در پایین بحث شه است دوباره نماینده کند. به محض اینکه v مقدار کاندید داشته باشد، باید از رای دادن به نماینده x برای هر مقدار x جدید دست بکشد. این گره باید به پذیرش اعلامیه نماینده برای مقادیر جدید ادامه دهد و اعلامیه‌‌‌های نماینده را همانطور که توسط فرایند رای‌‌‌گیری یکپارچه پیچیده شده است تایید کند.

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

1. گره‌‌‌های سالم می‌‌‌توانند حداقل یک مقدار کاندید ایجاد کنند.

2. مجموعه‌‌‌ی مقادیر احتمالی کاندین از رشد بازمی‌‌‌ایستند.

3. اگر یک گره سالم x را به عنوان مقدار کاندید در نظر بگیرد، پس در نهایت همه‌‌‌ی گره‌‌‌های سالم x را به عنوان مقدار کاندید در نظر خواهند گرفت.

اکنون چگونگی دستیابی پروتکل نمایند به سه ویژگی خود را در نظر می‌‌‌گیریم. ویژگی 1 به دلیل غیرقابل انکار بودن اعلامیه‌‌‌های نماینده به دست آمده است. گره‌‌‌ها هیچوقت بر علیه نماینده ‌‌‌کردن یک مقدار مشخص رای نمی‌‌‌دهند و تا زمانی که اولی مقدار کاندید تایید شود، گره‌‌‌های سالم می‌‌‌توانند برای نماینده کردن هر مقداری رای‌‌‌ دهند. تا زمانی که مقدار x از بررسی‌‌‌های اعتبارسنجی کاربردی عبور کند؛ گره‌‌‌های سالم به تاییده نماینده x رای می‌‌‌دهند. ویژگی دوم به این دلیل به دست می‌‌‌آید که به محض این که هر گره سالمی حداقل یکی از مقدیر نماینده را تایید کند (که در زمان بی‌‌‌نهایتی انجام می‌‌‌شود) هیچ گره سالمی به نماینده شدن مقادیر جدید رای نخواهد داد. بنابرین تنها مقداری که کاندید می‌‌‌شود آنهایی هستند که پیشتر از جانب گره‌‌‌های سالم رای دریافت کرده‌‌‌اند. ویژگی سوم آن نیز نتیجه مستقیم فرضیه‌‌‌‌‌‌ی 11 می‌‌‌باشد.

فرایند نماینده‌‌‌گزینی در صورت ترکیب مقادیر موجود در بازی، بهینه‌‌‌تر خواهد شد. بنابرین ما به گره‌‌‌ها اولویت موقتی می‌‌‌دهیم و هر گره را در زمان ممکن وادار به نماینده کردن مقادیر یکسان به عنوان گره دارای اولویت بالاتر می‌‌‌کنیم. به عبارت دیگر، فرض می‌‌‌کنیم H یک تابع هش رمز‌‌‌نگاری باشد که طیف آن به عنوان مجموعه‌‌‌ای از اعداد صحیح {0,…, ℎmax − 1} می‌‌‌باشد. (H امکان دارد SHA-256 باشد که در این مورد ℎmax = 2256 می‌‌‌باشد.) فرض کنید (Gi (m) = H(i, xi−1, m یک تابع هش خاص اسلات برای اسلات i باشد که در آن xi−1 مقدار انتخابی برای پیشروی اسلات از i می‌‌‌باشد. با وجود اسلات i و عدد رند n، هر گره v مجموعه‌‌‌ای از همسایه‌‌‌ها و اولویتی برای هر همسایه را به شکل زیر رایانش می‌‌‌کند.

Stellar White paper
Stellar White paper

N و P مقادیر ثابتی برای تولید دو تابع هش مختلف هستند. وزن تابع (v, v’) به تابع قطعات (Q(v که حاوی v’ می‌‌‌باشد برمی‌‌‌گردد. ما با استفاده از وزن به عنوان احتمال n که n’ در جوار (v, n) پدیدار شود، شانس اینکه گره بدون اعتماد بر یک عدد رند تسلط پیدا کند را کاهش می‌‌‌دهیم.

هر گره v باید در ابتدا یک گره v0 ∈ که در جوار (v, 0) باشد را پیدا کند که اولویت (0, v0) در بین گره‌‌‌های دیگری که با آنان ارتباط برقرار می‌‌‌کند به حداکثر برساند، سپس رای به نماینده شدن مقادیر به عنوان v0 بدهد. v باید در تصمیم‌‌‌گیری درمورد رای به اعلامیه‌‌‌های جدید از تایم‌‌‌آوت استفاده کند. v پس از تایم‌‌‌آوت n باید گره vn ∈ در جوار (v, n) با اولویت حداکثر (n, vn) پیدا کند و به هرچیزی vn رای به نماینده شدن آن داده است رای بدهد.

Stellar White paper
Stellar White paper

شکل 14. وضعیت نماینده‌‌‌گزینی نگه‌‌‌داری شده توسط گره v برای هر اسلات

Stellar White paper
Stellar White paper

شکل 15. پیام در پروتکل نماینده

فرضیه 12. همه‌‌‌ی گره‌‌‌های سالم در نهایت مقادیر ترکیبی یکسانی دارند.

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

6.1.1 پروتکل نماینده‌‌‌گزینی. شکل 14 لیستی از پروتکل‌‌‌های نماینده‌‌‌گزینی را نمایش داده است و عنوان می‌‌‌کند که گره v باید برای هر اسلات وجود داشته باشد. X مجموعه‌‌‌ای از مقادیر x است که v برای آن به نماینده x رای داده است. Y مجموعه‌‌‌ای از مقادیری است که v نماینده x را برای آن پذیرفته است و X پذیش (نماینده x) می‌‌‌باشد. v در نهایت N را نگه می‌‌‌دارد، یعنی آخرین پیام صریح هر گره. همه‌‌‌ی این زمینه‌‌‌ها در مجموعه‌‌‌های خالی شروع شده است. توجه داشته باشید که همه‌‌‌ی سه مجموعه‌‌‌ی X, Y, Z با گذر زمان رشد می‌‌‌کنند (گره‌‌‌ها هیچگاه مقادیر این مجموعه‌‌‌ها را حذف نمی‌‌‌کنند).

شکل 15 پیام تشکیل‌‌‌دهنده‌‌‌ی پروتکل نماینده‌‌‌گزینی را نشان می‌‌‌دهد. به این دلیل که X و Y با گذر زمان رشد می‌‌‌کنند، می‌‌‌توان گفت که کدام یک از پیام‌‌‌های یک گره، فارغ از ترتیب آنان در شبکه، آخرین پیام آن است، چون D نمانیده میانی را تغییر نمی‌‌‌دهد. تنها یک فرایند از را دور (RPC) برای انجام نماینده‌‌‌گزینی کافی است. اگر D یا مقدار نماینده، هش رمزنگاری‌‌‌شده باشند، RPC دوم باید اجازه‌‌‌ی بازیابی هش ذخیره‌‌‌نشده را طبق نیاز فراهم کند.

به این دلیل که گره‌‌‌ها نمی‌‌‌توانند زمان تکمیل پروتکل را بگویند، SCP باید با مقادیر ترکیبی متفاوت در گره‌‌‌های مختلف مقابله کند. سپس گره‌‌‌ها به عنوان بهینه‌‌‌سازی می‌‌‌توانند تلاش کنند تا مقدار ترکیبی نهایی را پیش از داشتن مقدار کاندید پیش‌‌‌بینی کنند. به همین منظور می‌‌‌توان مقدار ترکیبی را به عنوان ترکیب Z در هنگامی که Z ≠ ∅ می‌‌‌باشد فرض کرد و در غیر این صورت ترکیب Y را در هنگام Y ≠ ∅ و در غیر این صورت نیز ترکیب X را در زمان X ≠ ∅. این یعنی گره‌‌‌ی دارای بالاترین اولویت می‌‌‌تواند رای‌‌‌گیری ابتدایی را به عنوان نماینده آغاز کند و اولین پیام رای PRAEPARE خود را در اولین پیام NOMINATE خود به دوش بکشد.

6.2 پروتکل رای

به محض اینکه گره‌‌‌ها مقدار ترکیبی داشته باشند، به پروتکل رای وارد می‌‌‌شوند، پس احتمال دارد نماینده‌‌‌گزینی به به‌‌‌روزرسانی موازی مقدار ترکیبی ادامه دهد. رای b جفت ⟨b = ⟨n, x می‌‌‌باشد که در آن x ≠ ⊥ یک مقدار است و b همه‌‌‌پرسی انتشار x برای اسلات مورد نظر می‌‌‌باشد. مقدار n ≥ 1 شمارشگری‌‌‌ست برای حصول اطمینان از در دسترس بودن تعداد بالاتری از رای. ما از مفهوم Cشکل b.n و b.x برای مشخص کردن شمارشگر و زمینه‌‌‌های رای b استفاده می‌‌‌کنیم، طوری که:

⟨b ⟨= ⟨b.n, b.x باشد. رای‌‌‌های کاملا منظم هستند و b.n از b.x اهمیت بیشتری دارد. یک رای غیرمعتبر 0 = ⟨0, ⊥⟩ برای راحتی کار قرار دارد که از همه‌‌‌ی دیگر رای‌‌‌ها کم‌‌‌تر است و مقدار شمارشگر خاص ∞ نیز از همه‌‌‌ی دیگر شمارشگرها بیشتر است.

ما از ارسال و حذف رای b به عنوان میان‌‌‌بری برای استفاده از رای‌‌‌گیری یکپارچه برای توافق بر اعلامیه ارسال b و حذف b استفاده می‌‌‌کنیم. دستورهای ارسال و حذف برای یک رای متناقض هستند، بنابرین امکان داردگره درست‌‌‌کار تنها به یکی از آن‌‌‌ها رای دهد. در بخش 5 گفتیم که مخالف ارسال b “ارسال b” می‌‌‌باشد، اما حذف b مفهوم مستقیم‌‌‌تری است.

به این دلیل که حداکثر یک مقدار می‌‌‌تواند برای هر اسلات انتخاب شود، همه‌‌‌ی رای‌‌‌های ارسال شده و گیر کرده باید حاوی مقادیر یکسانی باشند. این یعنی اعلامیه ارسال د ر صورتی که بارای‌‌‌های حذف‌‌‌شده کمتری تناقض داشته باشند نامعتبر خواهد بود.

تعریف سازگار. دو گره b1 و b2 سازگار هستند به صورت b1 ∼ b2 نوشته می‌‌‌شوند؛ اگر b1.x = b2.x باشند و ناسازگار، به شکل b1 ≁ b2 نوشته می‌‌‌شوند، اگر b1.x ≠ b2.x. همچنین b1 ≲b2 یا b1 ≳ b2 اگر b1 ≤ b2 و b1 ∼ b2. به همین شکل، b1 ⋦ b2 یا b1 ⋧ b2 یعنی b1 ≤ b2 و b1 ≁ b2.

تعریف آماده. رای b در صورتی که همه‌‌‌ی اعلامیه‌‌‌های مجموعه‌‌‌ی { abort bold ∣ bold ⋦ b } صحیح باشند آماده است.

اگر b به عنوان آماده تایید شود، commit b هم برای رای معتبر خواهد بود که گره‌‌‌ها از طریق اعلامیه abort می‌‌‌توانند رای ‌‌‌دهند. رای دادن یک‌‌‌متربه به این اعلامیه‌‌‌ها آسان است، بنابرین هرجا بنویسیم “ب آماده است”، زمینه‌‌‌ی مناسب به کل مجموعه‌‌‌ی abort پاسخ خواهد داد. گره‌‌‌ها رای‌‌‌ داده، می‌‌‌پذیرند و تایید می‌‌‌کنند که b در صورتی آماده است که به همه‌‌‌ی abortها رای بدهد، بپذیرد و تایید کند.

گره‌‌‌های SCP برای صدور رای b و انتشار مقدار b.x آن، ابتدا از طریق رای‌‌‌گیری یکپارچه به commit b رای می‌‌‌دهد و اطمینان حاصل می‌‌‌کند که همه‌‌‌ی گره‌‌‌های سالم می‌‌‌توانند در نهایت تایید کنند که b آماده است. وقتی گره سالم v، commit b را می‌‌‌پذیرد، یعنی b.x در نهایت انتخاب خواهد شد. با این حال همانطور که در بخش 5.4.1 بحث شد، v باید commit را پیش از اینکه v آلوده شود تایید کند.

6.2.1 پروتکل رای‌‌‌. شکل 16 وضعیت هر اسلات نگه‌‌‌داری شده توسط هر گره را نشان می‌‌‌دهد. گره v مرحله کنونی ؛ رای b کنونی آن؛ دو رای اخیر ناسازگاری که آماده کرده است (p, p’)؛ پایین‌‌‌ترین (c) و بالاترین (h) رای؛ مقداری بعدی z و آخرین پیام دریافت شده از هر گره (M) را ذخیره می‌‌‌کند. رای b، p، p’ و h در درون مرحله کاهش نمی‌‌‌یابند. علاوه بر این، اگر c ≠ 0 باشد (به این معنی که v در تصویب commit c شرکت کرده است)، کد باید از c ≲ ℎ ≲ b اطمینان حاصل کند. این عدم ثبات، تضمین می‌‌‌کند که یک گره می‌‌‌تواند همیشه به صورت قانونی رای به آماده کردن رای کنونی b خود بدهد.

شکل 17 سه پیام پروتکل رای را نشان می‌‌‌دهد. پیام‌‌‌های رای می‌‌‌توانند بر پیام‌‌‌های نماینده‌‌‌گزینی همپوشانی داشته باشند، به طوری که وقتی h = 0 بود، گره در پاسخ به پیام NOMINATE، z را به‌‌‌روزرسانی کند. توجه داشته باشید که “a v accept (a)” همان چیزی است که هر گره باید برای اینکه حدنصاب a را تحت شرایط 1 تعریف پذیرش تایید کند باید تاکیید کند.

Stellar White paper
Stellar White paper

شکل 16. وضعیت رای که توسط گره‌‌‌های v برای هر اسلات حفظ شده است

Stellar White paper
Stellar White paper

شکل 17. پیام‌‌‌های موجود در پروتکل‌‌‌ SCP رای

در زمان مقایسه وضعیت گره‌‌‌ها، برای سهولت کار، زمینه‌‌‌هایی که متعلق به گره‌‌‌های خاص با زیرنوس می‌‌‌باشند را شناسایی می‌‌‌کنیم. اگر v یک گره باشد، پس ما برای مشخص کردن مقادیر b, p, p’ در وضعیت گره v که به همان شکلی که در شکل 16 نشان داده شده است، آن را شکل bv, pv, p’v, … می‌‌‌نویسیم. به همین شکل اگر vm نشان‌‌‌دهنده‌‌‌ی پیام ارسال‌‌‌کننده‌‌‌ی m باشد، و bm, pm, p’m, … مقدار هماهنگ b, p, p’, … را وضعیت v به عنوان m می‌‌‌نویسیم.

هر گره وضعیت رای خود را برای اسلات توسط تنظیم ← PREPARE z ← ⊥, b ← ⟨0, z⟩, M ← ∅ و همه‌‌‌ی زمینه‌‌‌های دیگر (p, p′ , c, ℎ) به رای غیرمعتبر 0 شروع می‌‌‌کند. در حالی که z = ⊥، یک گره می‌‌‌تواند پیام‌‌‌های رای را تنها دریافت کند. به محض اینکه z ≠ ⊥ شود، اگر b.n = 0 باشد، گره⟨b ← ⟨1, z را بری شروع ارسال پیام آغاز می‌‌‌کند. سپس گره‌‌‌ها به طور مکرر به تبادل پیام با همتایان می‌‌‌پردازند. با اضافه شدن پیام تازه دریافت‌‌‌شده‌‌‌ی m به Mv، گره v وضعیت خود را شرح زیر به‌‌‌روزرسانی می‌‌‌کند.

1. اگر = PREPARE و m به v اجازه‌‌‌ی پذیرش رای‌‌‌های جدید با عنوان آماده شده را می‌‌‌دهد و p و p’ را در صورتی که p ⋧ ℎ or p′ ⋧ ℎ سپس c ← 0 به‌‌‌روزرسانی می‌‌‌کند.

2. اگر = PREPARE و m به v اجازه‌‌‌ی تایید رای‌‌‌های جدید بالاتر را بدهد و سپس h را به بالاترین میزان خود بالا ببرد و z ← ℎ.x را تنظیم کند.

3. اگر = PREPARE، c = 0, b ≤ ℎ و p ⋧ ℎ و p’ ⋧ ℎ نباشند و سپس c به پایین‌‌‌ترین رای تنظیم شود و b ≤ c ≲ ℎ به دست آید.

4. اگر = PREPARE باشد و v commit را برای یک یا چند رای بپذیرد، c به پایین‌‌‌ترین میزان هر رای تنظیم شود و سپس h به بالاترین میزان رای به طوری که v همه‌‌‌ی { commit b′ ∣ c ≲ b′ ≲ ℎ } بپذیرند، سپس confirm تنظیم شود. پس از به‌‌‌روزرسانی h نیز z ← ℎ.x تنظیم شود، مگر اینکه ℎ ≲ b ، b ← ℎ را تنظیم کنید.

5. اگر = CONFIRM باشد و پیام‌‌‌های دریافت شده به v اجازه‌‌‌ی پذیرش رای‌‌‌های آماده‌‌‌ی را می‌‌‌دهد و p را به بالاترین رای آماده‌‌‌‌‌‌ی پذیرفته شده مانند p ∼ c را بالا برد.

6. اگر = CONFIRM باشد و v پیام‌‌‌های commit بیشتری دریافت کند یا b را افزایش دهد، سپس h’ را بالاترین رای فرض می‌‌‌کنیم، به وری که v همه‌‌‌ی { commit b ′ ∣ b ≲ b′ ≲ ℎ′ } را بپذیرد. اگر چنین h’ و h>h’ وجود دارد، پس مجموعه‌‌‌ی ℎ ← ℎ ′ را تنظیم ‌‌‌کنید و در صورت لزوم c را به پایین‌‌‌ترین رای، طوری که v همه‌‌‌ی { commit b ′ ∣ c ≲ b′ ≲ ℎ } را بپذیرد.

7. اگر = CONFIRM باشد و v commit c’ را برای هر c’ تایید کند، c و h را به بالاترین و پایین‌‌‌ترین میزان رای تنظیم کرده و EXTENALIZE را تنظیم کرده و c.x را منتشر و نابود کنید.

8. اگر ∈ {PREPARE, CONFIRM} باشد و b . h، پس b h را تنظیم کنید.

9. اگر ∈ {PREPARE, CONFIRM} باشد و ∃S ⊆ Mv باشد به طوری که مجموعه‌‌‌ی فرستندگان {s { Vm′ ∣ m′ ∈ S  مسدودکننده‌‌‌ی v باشد و ∀m′ ∈ S, bm′.n > bv.n باشد، b ← ⟨n, z⟩ را تنظیم کنید که در آن n پایین‌‌‌ترین شمارشگری است که هیچ S در آن وجود ندارد. پیش از به‌‌‌روزرسانی b، مراحل پیشین را تکرار کنید.

در حالی که c = 0 است، پروتکل بالا از رای‌‌‌گیری یکپارچه برای تایید حفظ b استفاده می‌‌‌کند. به محش اینکه c ≠ 0 شود، پروتکل رای‌‌‌گیری یکپارچه را بر روی c’ برای هر c ≲ c′ ≲ ℎ به کار می‌‌‌گیرد. در مرحله CONFIRM به محض اینکه یک گره درست‌‌‌‌‌‌کار commit c را بپذیرد، دیگر هیچوقت commit c’ را برای c′ ≁ c نپذیرفته و تایید نخواهد. به محض تایید commit، انتشار مقدار رای آن با فرض تقاطع حدنصاب، امن خواهد بود.

همه‌‌‌ی پیام‌‌‌های ارسال شده توسط یک گره به شکل ⟨휑, b, p, p′ , ℎ⟩ مرتب خواهند شد که مهم‌‌‌ترین و h کم‌‌‌اهمیت‌‌‌ترین زمینه‌‌‌ها باشند. مقادیر این زمینه‌‌‌ها را همانطور که در شکل 17 نشان داده شده است، می‌‌‌توان از پیام‌‌‌ها تشخیص داد. همه‌‌‌ی پیام‌‌‌های PREPARE پیش از پیام‌‌‌های CONFIRM می‌‌‌آیند، که به نوبه‌‌‌ی خود از تک پیام EXTETNALIZE برای یک اسلات پیشی می‌‌‌گیرد. این ترتیب امکان حصول اطمینان از حضور آخرین‌‌‌ رای‌‌‌های هر گره بدون وابستگی به زمان‌‌‌بندی برای مرتب‌‌‌سازی پیام‌‌‌ها را فراهم می‌‌‌کند، چون احتمال دارد شبکه پیام‌‌‌ها را دوباره مرتب کند.

تعداد کمی از جزییات پروتکل ارزش توضیح دارند. اعلامیه‌‌‌ی PREPARE به شکل(“abort b′ ∨ accept(abort b′ )” مشخص نمی‌‌‌کند که آیا v رای به تایید دستور abort b’ داده است یا نه. این تمایز در تعریف accept (پذیرش) اهمیت چندانی ندارد. بررسی این تمایز به v امکان فراموش کردن رای‌‌‌های قدیمی به مجموع آرا را به محض پذیرش پیام abort می‌‌‌دهد. تنها زمانی که v c را تعدیل می‌‌‌کند زمانی است که c ≠ 0 را پس از پذیرش پیام abort برای هر رای c که به c ≥ b داده شده است تنظیم می‌‌‌کند.

فرضیه 11 الزام انتشار آنچه گره‌‌‌ها پذیرفته‌‌‌اند را ایجاد می‌‌‌کند. این امر دنباله‌‌‌ی تعریف آماده‌‌‌سازی است که در آن دو رای ناسازگای که یک گره به عنوان آماده پذیرفته است، که همه‌‌‌ی رای‌‌‌های پذیرفته شده توسط گره را به عنوان آماده می‌‌‌پندارند. بنابرین گنجاندن p و p’ در هر پیام، تضمین می‌‌‌کند که گره‌‌‌ها بر h (یک رای آماده‌‌‌ی تاییدشده) توافق می‌‌‌کنند. دقت کنید که رای‌‌‌هایی که یک گره به عنوان رای آماده می‌‌‌پذیرد، باید مجموعه‌‌‌ای از آرایی باشند که گره به عنوان آماده تایید کرده است، مرحله 2 هیچوقت نمی‌‌‌تواند h را طوری که ℎ ≁ c ≠ 0 باشد تنظیم کند، همانطور مرحله 1 هم در صورتی که h جدید با c قدیمی ناسازگار باشد c ← 0 را تنظیم می‌‌‌کند.

در زمانی که v پیام EXTERNALIZE را می‌‌‌فرستد، { commit b′ ∣ b′ ≳ c } را پذیرفته است. مهم‌‌‌تر اینکه { commit b′ ∣ c ≲ b′ ≲ ℎ } را تایید کرده است. گره v می‌‌‌تواند بر پذیرش اعلامیه تایید شده را بدون توجه به Q(v) تاکید کند، چون پیشتر مطمئن شده است که یکی از قطعات آن به اتفاق آرا موافق بوده است؛ این ظهور {{v}} را به جای S برای پیام CONFIRM دوم در توضیح EXTERNALIZE می‌‌‌دهد. حذف D امکان کمک پیام ثابت EXTERNALIZE به دیگر گره‌‌‌ها در آینده را فراهم می‌‌‌کند، حتی اگر قطعات حدنصاب با گذر زمان تغییر چشمگیری کرده باشد.

برای تبادل پیام تنها یک RPC نیاز است. آخرین پیام فرستنده اثبات، و آخرین پیام دریافت کننده نیز مقدار برگشتی خواهند بود. همانطور که در NOMINATE نیز صادق است، اگر D یا مقدار x در رای‌‌‌ها، هش رمزنگاری‌‌‌شده باشند، به یک RPC مجزا برای استخراج پیش‌‌‌نمایش هش نیاز داریم.

6.2.2 تایم‌‌‌آوت و به‌‌‌روزرسانی مجموع رای‌‌‌. اگر همه‌‌‌ی گره‌‌‌های سالم با رای b شروع کنند، مراحل 1 تا 9 که در صفحه قبل توضیح داده شد برای تایید commit b و انتشار مقدار b.x کفایت می‌‌‌کنند. متاسفانه اگر پروتکل رای پیش از توافق پروتکل نماینده‌‌‌گزینی شروع به کار کند، احتمال دارد گره‌‌‌ها با مقادیر متفاوتی برای z آغاز به کار کنند. اگر مجموع رای با شکست مواجه شود یا به دلیل عدم پاسخ گره‌‌‌ها معطل شود، گره باید دوابره با رای بالاتری شروع کنند. به همین دلیل گره‌‌‌ها تایمری به را به شرح زیر به کار می‌‌‌گیرند.

الف) گره v با φv ≠ EXTERNALIZE زمانی که ∃S ⊆ Mv در زمان بالاتری تنظیم شود، به طوری که مجموعه‌‌‌ی ارسال کنندگان {U = { vm ∣ m ∈ S حدنصاب باشد و v ∈ U و ∀m ∈ S, bm.n ≥ bv.n باشد.

ب) اگر تایمر به پایان برسد، v رای خود را توسط تنظیم (bv ← (bv.n + 1, zv.

امکان دارد گره‌‌‌های مختلف رای‌‌‌ها را در زمان‌‌‌های مختلفی شروع کنند. با این حال وضعیت (a) تنظیم تایمر در گره v را که در پیش حدنصاب است را به تاخیر می‌‌‌اندازد. در مقابل، مرحله 9 در صفحه‌‌‌ی بعد به گره‌‌‌هایی که دور افتاده‌‌‌اند اجازه می‌‌‌دهد تا بدون انتظار برای تایمرها کار خود را انجام دهند. روی هم رفته، این قوانین برای حصول اطمینان از این نکته است که گره‌‌‌های سالم با وجود تایمرها، با همدیگر بر روی یک رای زمان بگذارند؛ علاوه بر این، این زمان بیشتر شده و به زمان تایمر می‌‌‌رسد. برای حصول اطمینان از طول کافی زمان‌‌‌ها بدون پیش‌‌‌بینی تاخیر، اجرای آن می‌‌‌تواند باعث افزایش تایم‌‌‌آوت به عنوان تابعی از b.n شود.

6.3 صحت

گره SCP نمی‌‌‌تواند تا زمانی که به abort همه‌‌‌ی رای‌‌‌های ناسازگار رای نداده است، به تایید commit b رای دهد. به این دلیل که یک گره درست‌‌‌کار نمی‌‌‌تواند اعلامیه‌‌‌های متناقض را تایید کرده و بپذیرد، فرضیه 5 برای یک ⟨V, Q⟩ متضمن منتشر نکردن مقادیر متناقض توسط مجموعه‌‌‌‌‌‌ی S گره‌‌‌های درست‌‌‌کار می‌‌‌باشد، تا زمانی که S از تقاطع حدنصاب بر خلاف V\S بهره ببرد. اگر V و Q تنها در بین اسلات‌‌‌ها تغییر کنند این امنیت برقرار می‌‌‌باشد، اما اگر در اسلات تغییر کنند چه؟

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

فرضیه 13. فرض می‌‌‌کنیم ⟨V1 , Q1 ⟩, …,⟨VK, QK ⟩ مجموعه‌‌‌ی پیکره‌‌‌بندی‌‌‌هایی باشد که یک FBAS در طول توافق بر یک اسلات تجربه کرده باشد. فرض می‌‌‌کنیم {V = V1 ∪ ⋯ ∪ Vk و Q(v) = { q ∣ ∃j باشد، به طوری که { (v ∈ Vj ∧ q ∈ Qj (v } باشد. فرض می‌‌‌کنیم B ⊆ V مجموعه‌‌‌ای باشد، به طوری که B حاوی همه‌‌‌ی گره‌‌‌های خراب‌‌‌کاری که پیام‌‌‌های غیرقانونی ارسال کرده‌‌‌اند می‌‌‌باشد، بنابرین V \ B احتمالا هنوز حاوی گره‌‌‌های شکست خورده (غیرپاسخگو) است. فرض کنید گره‌‌‌های v1 و v2 درست‌‌‌کار هستند، v1 x1 را برای اسلات منتشر می‌‌‌کند و v2 هم x2 را. اگر ⟨V, Q⟩B از تقاطع حدنصاب بهره ببرد، پس داریم x1 = x2.

اثبات. برای اینکه v1 دست به انتشار x1 بزند بید دستور (⟨accept commit ⟨n1 , x1) را همگام با شبه‌‌‌حدنصاب U1 ⊆ v تصویب کند. به این دلیل می‌‌‌گوییم شبه حدنصاب چون v1 شاید در حدنصاب ⟨VJ , QJ ⟩ برای یک j خاص نباشد، همانطور که علمیات تصویب شاید با پیام‌‌‌هایی که پیکره‌‌‌بندی‌‌‌های چندگانه‌‌‌ای را توسعه داده‌‌‌اند آمیخته شود. علی رغم این، برای اینکه تصویب (∀v ∈ U1 , ∃j, ∃q ∈ Qj (v موفق باشد، باید q ⊆ U1 وجود داشته باشد. این دنباله‌‌‌رو ساخت Q است که به صورت q ∈ Qv می‌‌‌باشد. بنابرین U1 در ⟨V, Q⟩ حدنصاب است. با همین استدلال، شبه حدنصاب U2 باید دستور:

accept(commit ⟨n2⟩), x2 ⟩) را تصویب کرده باشد و U2 هم باید در ⟨V, Q⟩ حدنصاب باشد. با تقاطع حدنصاب V, Q⟩B⟩باید یک v ∈ V ⧵ B وجود داشته باشد، به طوری که v ∈ U1 ∩ U2. طبق فرضیه، v ∉ B نمی‌‌‌تواند ادعای پذیرش مجموعه‌‌‌ رای‌‌‌های ناسازگار را داشته باشد. از آنجایی که v پذیرش commit برای مجموعه رای با x1 و x2 را تایید کرده است، باید به شکل x1 = x2 باشد.

ما برای حفظ Liveness گره v، در هنگام پیکره‌‌‌بندی مجدد ⟨V1 , Q1 ,…,⟨VK , QK ⟩ FBAS در یک اسلات مراقب چند چیز هستیم. ابتدا پیش‌‌‌شرط‌‌‌های امنیتی فرضیه 13 را باید برای v و مجموعه‌‌‌ی گره‌‌‌های v در نظر داشت، چون تخظی از امنیت باعث صدمه دیدن Liveness می‌‌‌شود و فرضیه 11 نیز نیازمند تقاطع حدنصاب می‌‌‌باشد. دوم اینکه مجموعه‌‌‌ی گره‌‌‌های خراب‌‌‌کار موجود در آخرین وضعیت، ⟨VK , QK ⟩، نباید مسدودکننده‌‌‌ی v باشند چون می‌‌‌تواند حدنصاب v را از میان بردارد و آن را از تصویب اعلامیه‌‌‌ها منع کند. در نهایت، وضعیت v نباید هیچوقت توسط مجموعه‌‌‌ی مسدودکننده که ادعای پذیرش اعلامیه را دارند مسموم شود.

اگر B مجموعه‌‌‌ی گره‌‌‌هایی باشد که پیام‌‌‌ غیرقانونی فرستاده‌‌‌اند، گره v را در صورت دارا بودن شرایط زیر کاملا سالم فرض می‌‌‌کنیم:

1. v در آخرین پیکره‌‌‌بندی ⟨VK, QK⟩ سالم باشد،

2. تجمع پیکره‌‌‌بندی‌‌‌های کنونی و پیشین تقاطع حدنصاب داشته باشد،

3. B مسدودکننده v در ⟨VK, QK ⟩ برای 1 ≤ j ≤ k نباشد.

چند فرضیه‌‌‌‌‌‌ی بعدی نشان می‌‌‌دهند که گره‌‌‌های خراب‌‌‌کار نمی‌‌‌توانند گره‌‌‌های سالم را به وضعیت بن‌‌‌بست بکشانند:

فرضیه 14. در یک FBAS با تقاطع حدنصاب، اگر هیچ گره سالمی در مرحله EXTERNALIZE نباشد و گره سالم با رای (n, x) تایمر خود را طبق آنچه در بخش 6.2.2 گفته شد تنظیم کند، هر گره سالم v با داشتن ارتباطات کافی، می‌‌‌تواند پیش از اتمام تایمر، bv ≥ n را تنظیم کند.

اثبات. فرض می‌‌‌کنیم{ S = { v ∣ bv ≥ n  مجموعه‌‌‌ی گره‌‌‌هایی با حداقل n باشد. طبق فرضیه، S شامل یک گره سالم است. علاوه بر این، به این دلیل که آن گره سالم تایمرو خود را تنظیم کرد، S باید شامل یک حدنصاب هم باشد. فرض می‌‌‌کنیم S+ زیرمجموعه‌‌‌ی سالم S باشد و S مجموعه‌‌‌ی گره‌‌‌‌‌‌های سالمی که در S حضور ندارند. طبق فرضیه 10، یا S= ∅ یا S+ برای v ∈ S مسدودکننده v هستند. طبق مرحله 9 در صفحه 48، v مجموعه رای خود را تنظیم می‌‌‌کند تا bv .n ≥ n باشد. در این نقطه، استدلال {S ← S ∪ {v را آنقدر تکرار می‌‌‌کنیم که به S = ∅ برسیم.

فرضیه 15. در صورت وجود تایم‌‌‌آوت کافی، اگر یک گره سالم با b.x = x به مرحله CONFIRM برسد، همه‌‌‌‌‌‌ی گره‌‌‌های سالم در نهایت نابود خواهند شد.

اثبات. اگر گره سالمی به مرحله EXTERNALIZE برسد، دستور commit c را برای برای مجموع رای c تایید کرده است. طبق فرضیه 11، همه‌‌‌‌‌‌ی گره‌‌‌های سالم پس از اینکه در مرحله 7 صفحه 48 نابود شدند، commit c را تایید خواهند کرد.

در غیر این صورت، یک گره سالم در مرحله CONFIRM دستور commit c را پذیرفته است که در آن ⟨c = ⟨n, x می‌‌‌باشد. پیش از این، یک گره سالم که v را تایید کرده است آماده می‌‌‌باشد. طبق فرضیه 11، همه‌‌‌ی گره‌‌‌های سالم در نهایت ℎ ≥ c را خواهند داشت. علاوه بر این، طبق فرضیه ، هیگ گره سالم v تمی‌‌‌تواند abort c را بپذیرد، بنایرین هیچ گره‌‌‌ای نمی‌‌‌تواند هیچ رای p را به عنوان آماده بپذیرد، به طوری که p ⋧ c باشد. بنابرین هر گره سالم پس از برقراری ارتباطات کافی، به صورت دائم دارای ℎ ≳ c خواهد بود. گره یا گره‌‌‌های سالم با پایین‌‌‌ترین سطح b، طبق فرضیه 14 رای‌‌‌های خود را تا نقطه‌‌‌ای که همه‌‌‌ی گره‌‌‌های سالم با تایمر مشخص شمارشگر رای یکسانی را داشته باشند بالا خواهد برد. از آنجایی که z = ℎ.x = x یکسانی نیز دارند، رای‌‌‌های یکسانی هم خواهند داشت. اگر آنان نتوانند پروتکل را به دلیل در دست داشتن گره‌‌‌های بالاتر توسط یک یا چند گره سالم تکمیل کنند، گره‌‌‌‌‌‌های دارای شمار رای بالاتر تایمرهایشان تنظیم نخواهد شد. بنابرین، گره‌‌‌های با شمار رای پایین‌‌‌تر پس از مدتی⟨b ← ⟨b.n + 1, x را تا زمانی که همه‌‌‌ی گره‌‌‌های سالم رای یکسانی داشته باشند و توانایی پروتکل را داشته باشند تنطیم می‌‌‌کنند.

فرضیه 16. گره‌‌‌های سالم فعال در SCP فارغ از سوء رفتار پیشین و با داشتن تایم‌‌‌آوت کافی و دوره‌‌‌هایی که در آن گره‌‌‌های خراب‌‌‌کار نمی‌‌‌توانند پیام‌‌‌های جدید بفرستند، نابود خواهند شد.

اثبات. طبق فرضیه 12، همه‌‌‌ی گره‌‌‌های سالم در نهایت مجموعه‌‌‌های یکسان Z از مقادیر کاندید خواهند داشت. فرض کنید این نقطه گذشته است و همه‌‌‌ی گره‌‌‌های سالم v مقدایر ترکیبی (z = combine (Z یکسانی دارند. اگر هیچ گره سالمی هیچوقت هیچ رای b آماده را بدون b.x = z تایید نکند، پس از حداکثر یک تایم‌‌‌آوت همه‌‌‌ی رای‌‌‌های جدید گره‌‌‌های سالم مقدار z را خواهند داشت و در یک تایم‌‌‌آوت کافی پروتکل را تکمیل خواهند کرد. طبق فرضیه 15، گره‌‌‌ها در صورتی که هیچ گره سالمی از فاز PREPARE پیش‌‌‌تر نرود پروتکل را تکمیل می‌‌‌کنند.

موردی که باقی می‌‌‌ماند این است که یک گره سالم دارای ℎ ≠ 0 می‌‌‌باشد و همه‌‌‌ی گره‌‌‌های سالم φ = PREPARE را دارند. طبق فرضیه 14، هنگامی که گره یا گره‌‌‌های سالم با میزان b.n بالاتر تایمرهایشان را تنظیم می‌‌‌کنند، اگر تایمرها به اندازه کافی طولانی باشند، دیگر گره‌‌‌ها هم به آنان خواهند رسید. علاوه بر این، طبق فرضیه 11، اگر تایمرها به اندازه کافی طولانی باشند، گره‌‌‌ها پیش از تایم‌‌‌آوت بعدی که در آن همه‌‌‌‌‌‌ی گره‌‌‌های سالم b را به مقدار یکسانی بالا برده و پروتکل را تکمیل می‌‌‌کند، بر روی h به توافق خواهند رسید.

فرضیه 16 به ما اطمینان می‌‌‌دهد که هیچ وضعیت بن‌‌‌بستی در SCP وجود نخواهد داشت. با این حال، مجموعه‌‌‌ای از گره‌‌‌ها خراب‌‌‌کار با زمان‌‌‌بندی بسیار خوب می‌‌‌توانند سیستم SCP را توسط تعلیق پیام‌‌‌ها قبضه کنند، به طوری که کسری از گره‌‌‌های سالم، h را پیش از اتمام تایمر و مابقی را پس از آن به‌‌‌روزرسانی می‌‌‌کنند و از توافق گره‌‌‌های سالم بر رای بعدی جلوگیری خواهند کرد. گره‌‌‌ها می‌‌‌توانند توسط حذف گره‌‌‌های خراب‌‌‌کار از قطعات خود از چنین حملاتی در امان باشند و یا بازیابی شوند.

گزینه‌‌‌ی جایگزین دیگر اضافه کردن تصادفی بودن به پروتکل است، به عنوان مثال تغییر مرحله‌‌‌ 2 در صفحه 47 برای به‌‌‌روزرسانی z با احتمال ½. چنین رویکردی با احتمال 1 نابود خواهد شد اما در زمان بدتر مورد انتظار معمول که همه یا اکثر گره‌‌‌ها یا درست‌‌‌کار هستند یا شکست خورده‌‌‌اند.

7. محدودیت‌‌‌ها

SCP تنها زمانی می‌‌‌تواند امنیت را تضمین کند که گره‌‌‌ها قطعات حدنصاب کافی را انتخاب کنند. بخش 3.2 در مورد اینکه چرا چنین انتظار از آنان داریم بحث کرده است. علی رغم این، زمانی که امنیت به پارامتر قابل‌‌‌ پیکره‌‌‌بندی توسط کاربر وابسته باشد، همیشه احتمال تنظیم اشتباه آن توسط افراد وجود دارد.

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

گره‌‌‌های بیزانس امکان دارد قصد فیلتر کردن تراکنش‌‌‌های سمت ورودی SCP را داشته باشند، در حالی خروجی صحیح را تولید می‌‌‌کنند. اگر گره‌‌‌های درست‌‌‌کار همه‌‌‌‌‌‌ی تراکنش‌‌‌ها را بپذیرند، تابع combine موجب اتحاد تراکنش‌‌‌ها می‌‌‌شود و گره‌‌‌های سالم به وجود خواهند آمد، سپس چنین فیلتر کردنی در نهایت نمی‌‌‌تواند تراکنش‌‌‌های قربانی را مسدود کنند، اما می‌‌‌توان آن را به تاخیر بیاندازد.

بنابرین امنیت SCP بهینه است، اما عملکرد و تاخیر ارتباطات آن نه. در موارد رایجی که گره‌‌‌ها پیشتر به مجموع آرای ناسازگار رای نداده‌‌‌اند، امکان کاهش شمار دورهای ارتباطی کاهش وجود دارد. نسخه‌‌‌ی پیشین SCP چنین کاری می‌‌‌کرد اما توضیح پروتکل آن بسیار پیچیده‌‌‌تر بود. ابتدا گره‌‌‌ها را به گرفتن و انتقال مجدد پیام‌‌‌های امضا شده‌‌‌ای که پیشتر توسط گره‌‌‌های شکست خورده ارسال شده‌‌‌ بودند ملزم می‌‌‌کرد. دوم اینکه بررسی تمایز بین رای‌‌‌ها و تایید‌‌‌های اعلامیه‌‌‌های abort در پیام PREPARE دیگر امکان‌‌‌پذیر نبود، بنابرین گره‌‌‌ها می‌‌‌بایست لیست‌‌‌های نامحدود استثناها را به رای‌‌‌های abort خود می‌‌‌فرستادند.

همانطور که در بخش 6.3 بحث شد، SCP می‌‌‌تواند از پیش‌‌‌فرض‌‌‌ دائمی رنج ببرد. یکی از پرسش‌‌‌های پاسخ‌‌‌داده نشده در این مورد این است که آیا سک پروتکل متفاوت بدون وجود امکان تصادفی بودن می‌‌‌تواند با فرض تاخیر ارتباطات محدود، نابودی را تضمین کند اما گره‌‌‌های مقاوم بیزانس که به طور مداوم پیام‌‌‌های بد را به نقطه‌‌‌ای که تایم‌‌‌آوت به پایان می‌‌‌رسد می‌‌‌فرستند. چنین پروتکلی تحت قوانین FLP نیست. با این حال، دو فن اصلی برای تضمین نابودی با فرض تقارن، به طور مستقیم در مدل FLP به کار برده نمی‌‌‌شوند: PBFT رهبری را به شکل کتبی انتخاب می‌‌‌کند که هنگامی که گره‌‌‌ها بر عضویت توافق نمی‌‌‌کنند قابل استفاده نخواهد بود. پروتکل عمومی بیزانس، پیام‌‌‌ها را برای جبران اطلاعات ناهمخوان گره‌‌‌های خراب‌‌‌کار در قطعاتشان تقویت می‌‌‌کند. یک احتمال دیگر هم برای فشار به تصادفی و هماهنگی بودن سیستم در حذف با احتمال 1 وجود دارد، اما زمان کوتاه‌‌‌تری نسبت به پروتکل‌‌‌های تصادفی Ben Or-style دارد. به کار گرفتن فنون سکه عمومی که پروتکل‌‌‌های توافق متمرکز تصادفی بیزانس را سرعت می‌‌‌بخشند، در مدل یکپارچه دشوار است.

اگر یک گره درست‌‌‌کار v دچار مجموعه‌‌‌ی مسدودکننده‌‌‌ی خراب‌‌‌کاری بشود، متاسفانه تغییر قطعات در میانه اسلات برای جبران گره‌‌‌های از کار افتاده، برای Liveness شبکه مشکل‌‌‌ساز خواهد بود. خبر خوب است که فرضیه 13 امنیت را برای هر مجموعه‌‌‌ی S از گره‌‌‌های درست‌‌‌کار که از تقاطع حدنصاب بهره می‌‌‌برند تضمین می‌‌‌کند. خبر بد این است که به‌‌‌روزرسانی Q شاید برای رفع مسدودی گره‌‌‌ها در صورتی که گره‌‌‌های درست‌‌‌کار برای تایید پیام commit فریب داده شوند کافی نیست. گره‌‌‌ها در چنین موقعیتی باید رای‌‌‌های پیشین را مردود کنند که این را تنها با پیوستن دوباره به سیستم با نام‌‌‌های جدید می‌‌‌توانند انجام دهند. امکان دارد راه جدید برای انجام خودکار این بازیابی وجود داشته باشد، همانند شناسایی گره‌‌‌های بازیابی‌‌‌شده توسط سایر گره‌‌‌‌‌‌ها و به‌‌‌روزرسانی اتوماتیک قطعات آنان.

مدل FBA نیازمند تداوم مشارکت در طول زمان می‌‌‌باشد. همه‌‌‌ی گره‌‌‌ها باید به طور همزمان و دائمی خارج شوند، چون شروع مجدد اجماع نیازمند همکاری مرکزی یا توافق انسانی می‌‌‌باشد. در مقابل، سیستم اثبات کاری مانند بیت‌‌‌‌‌‌کوین می‌‌‌تواند تحت چرخش کامل قرار بگیرد و با کوچکترین دخالت انسانی به کار خود ادامه دهد. از سوی دیگر، اگر گره‌‌‌ها برگردند، FBAS می‌‌‌تواند از قطعی طولانی بازیابی شود، در حالی که در اثبات کار این احتمال وجود دارد که مهاجم در طول قطعی بر روی فورک کار کند.

یکی از احتمالات دیگر فشار آوردن به SCP برای تبدیل شدن به واسطه از طریق رای‌‌‌گیری بر شانس‌‌‌های پیکره‌‌‌بندی پارامترها یا به‌‌‌روزرسانی پروتکل یک اپلیکیشن. یکی از راه‌‌‌های انجام این کار نماینده‌‌‌ کردن پیام‌‌‌های مشخصی است که پارامترها را به‌‌‌روزرسانی می‌‌‌کند. مقادیر کاندید می‌‌‌تواند شامل مجموعه‌‌‌ی مقادیر و مجموعه-ی پارامترهای به‌‌‌روزرسانی باشد. یکی از محدودیت‌‌‌های بزرگ این رویکرد ایت است که مجموعه‌‌‌ی گره‌‌‌های خراب‌‌‌کار آنقدر بزرگ است که بتواند سیستم حدنصاب را رد کند اما آنقدر بزرگ نیست که امنیت را کاهش دهد. این که چگونه رای بر پارامتر به شکلی تغییر می‌‌‌کند که نیازمند اجازه‌‌‌ی کل حدنصاب است اما هیچوقت Liveness را به خطر نخواهد انداخت.

8. خلاصه

توافق بیزانس مدت‌‌‌هاست سیستم‌‌‌های توزیع‌‌‌شده را قادر ساخته است تا با بهره‌‌‌روی، امنیت رمزنگاری استاندارد و انعطاف در تمایز مشارکت‌‌‌کنندگان مورد اعتماد به اجماع برسند. بیت‌‌‌کوین اخیرا مفهوم انقلابی اجماع غیرمتمرکز را معرفی کرده است که منجر به سیستم‌‌‌های زیاد و پوشش چالش‌‌‌ها می‌‌‌شود. این مقاله توافق یکپارچه بیزانس (FBA) را معرفی می‌‌‌‌‌‌کند، مدلی برای دست‌‌‌یابی به اجماع غیرمتمرکز در حالی که منافع سنتی توافق بیزانس را حفظ می‌‌‌کند. تمایز کلیدی بین FBA و سیستن پیشین توافق بیزانس این است که FBA حدنصاب را از تصمیمات فردی مشارکت‌‌‌کنندگان می‌‌‌گیرد که اجازه‌‌‌ی رشد طبیعی شبکه همانند رشد اینترنت را می‌‌‌دهد. پروتکل اجماع استلار (SCP) ساختاری‌‌‌ست برای FBA جهت به دست آوردن امنیت بهینه در مقابل مشارکت‌‌‌کنندگان خراب‌‌‌کار.

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.