OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
3.1 Problem bizantyjskich generałów 37<br />
1<br />
x 1<br />
1<br />
3<br />
2<br />
y<br />
2<br />
4<br />
z<br />
4<br />
1<br />
2<br />
2<br />
4 2<br />
4<br />
Krok 1- wymia<strong>na</strong> war<strong>to</strong>sci<br />
1. (1,2,x,4)<br />
2. (1,2,y,4)<br />
3. (1,2,3,4)<br />
4. (1,2,z,4)<br />
Krok 2 – wymia<strong>na</strong> wek<strong>to</strong>rów war<strong>to</strong>sci<br />
1. (1,2,x,4) 2. (1,2,x,4) 3. (1,2,x,4) 4. (1,2,x,4)<br />
(1,2,y,4) (1,2,y,4) (1,2,y,4) (1,2,y,4)<br />
(a,b,c,d) (e,f,g,h) (1,2,3,4) (i,j,k,l)<br />
(1,2,z,4) (1,2,z,4) (1,2,z,4) (1,2,z,4)<br />
Rysunek 3.1: Problem bizantyjskich generałów. Trzech z czterech generałów<br />
jest lojalnych, jeden jest zdrajcą. (a) Krok 1 - <strong>na</strong>stępuje wymia<strong>na</strong> informacji<br />
o liczebności wojska między każdą z par generałów. (b) Krok 2 - generałowie<br />
wymieniają między sobą wek<strong>to</strong>ry zawierające liczebność całej armii.<br />
wznoszących się <strong>na</strong>d doliną. Ich celem jest ustalenie wielkości niebieskiej armii,<br />
tak by określić, czy jest o<strong>na</strong> silniejsza od armii generała czerwonego, gdyż<br />
jedynie połączony atak może przynieść zwycięstwo. Generałowie mogą komunikować<br />
się między sobą, ale tylko rozłącznie, czyli tylko z jednym w tej samej<br />
chwili, używając niezawodnych ka<strong>na</strong>łów komunikacyjnych. Niestety między generałami<br />
z<strong>na</strong>jduje się jeden zdrajca, który został przekupiony przez czerwonego<br />
generała.<br />
W pierwszym kroku wszyscy k generałowie przesyłają parami <strong>na</strong>wzajem<br />
liczebność swoich armii, tak, że każdy z nich po zakończeniu wymiany otrzymuje<br />
wek<strong>to</strong>r war<strong>to</strong>ści, w którym i-ta ze współrzędnych odpowiada wielości armii i-<br />
tego generała. Jeżeli zażyłoby się tak, iż i-ty z generałów odmawia przesłania<br />
stanu armii w i-tym polu wprowadza się specjalną pustą war<strong>to</strong>ść, np. NULL.<br />
Kolejny krok polega <strong>na</strong> wymianie wek<strong>to</strong>rów między generałami, tak, że ostatecznie<br />
każdy z nich będzie posiadał k − 1 wek<strong>to</strong>rów odebranych oraz jeden<br />
własny. Jeżeli istnieje względ<strong>na</strong> większość takich samych war<strong>to</strong>ści w i-tym<br />
elemencie w każdym z wek<strong>to</strong>rów, <strong>to</strong> generał uz<strong>na</strong>je tą war<strong>to</strong>ść za prawdziwą.<br />
Na rysunku 3.1 przedstawiono sytuację, gdy jeden z generałów próbuje oszukać<br />
pozostałych trzech. Przesyła w pierwszej kolejności do każdego z nich różne<br />
war<strong>to</strong>ści liczebności swojej armii. W drugim kroku przesyła dowolne wek<strong>to</strong>ry,<br />
jako uzyskane po pierwszej turze. Każdy z generałów posiada armię wielkości<br />
odpowiadającej jego numerowi, czyli 1, 2, 3 oraz 4 liczoną w kilo-żołnierzach.<br />
W wyniku działania tego algorytmu każdy z lojalnych generałów posiada <strong>na</strong>stępujący<br />
wek<strong>to</strong>r war<strong>to</strong>ści: (1,2,NULL,4).<br />
Łatwo zauważyć, który z generałów okazał się być nielojalny, jed<strong>na</strong>k gdyby<br />
postępował on konsekwentnie, podając wszystkim lojalnym generałom taką samą,