10.03.2015 Views

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 ...

SHOW MORE
SHOW LESS

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ą,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!