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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

88 Rozdział 5. Projekt systemu Pas<strong>to</strong>r<br />

obiektu, dlatego też wszystkie zabezpieczenia musiałyby być zrealizowane <strong>na</strong><br />

poziomie wątku wyko<strong>na</strong>nia, co dodatkowo rzutuje <strong>na</strong> wydajność. Wymagania<br />

zapewnienia bezpieczeństwa moż<strong>na</strong> rozwiązać używając dwóch podejść:<br />

• Weryfikacja typu off-line, tzn. architektura aplikacji powin<strong>na</strong> wykorzystywać<br />

mechanizm wtyczek (ang. plug-in), które dostarczane są z wiadomego<br />

źródła, jako zewnętrzne klasy. Uruchamiane klasy powinny być podpisane,<br />

a ich uprawnienia zależne od polityki bezpieczeństwa. Niestety <strong>to</strong> podejście<br />

ogranicza możliwość przechowania, niektórych obiektów przez węzeł,<br />

gdyż mogą one nie mieć wbudowanej odpowiedniej wtyczki. Wytłumaczenie<br />

powyższej sytuacji wymaga posłużenia się przykładem: Węzeł u chce<br />

umieścić w sieci obiekt klasy A o identyfika<strong>to</strong>rze A id . Wykonuje operację<br />

insert, która przesyła obiekt poprzez sieć do celu, którego identyfika<strong>to</strong>r<br />

jest <strong>na</strong>jbliższy względem A id . Przyjmijmy, że punktem docelowym będzie<br />

węzeł v. Jeżeli v posiada wtyczkę zawierającą plik A.class, <strong>to</strong>używając<br />

deserializacji poprawnie odbierze obiekt A i umieści go w swojej pamięci<br />

trwałej. W przeciwnym razie próba rozpakowania obiektu A nie powiedzie<br />

się i zostanie zgłoszony wyjątek.<br />

• Weryfikacja on-line zakłada, że definicje klas są pobierane w sposób dy<strong>na</strong>miczny<br />

i uruchomienie obiektów odbywa się w przygo<strong>to</strong>wanym i <strong>na</strong>dzorowanym<br />

środowisku (np. piaskownicy). To podejście jest z<strong>na</strong>cznie trudniejsze<br />

do zaimplemen<strong>to</strong>wania, ale nie <strong>na</strong>kłada ograniczeń co do możliwości<br />

przechowywania konkretnych obiektów przez określony węzeł. Wrócę do<br />

poprzedniego przykładu. Węzeł u <strong>na</strong>dal chce przesłać obiekt A do węzła<br />

u. W tym celu u opakowuje A oraz zawar<strong>to</strong>ść pliku A.class w jeden<br />

obiekt Content, którego klasa z<strong>na</strong><strong>na</strong> jest obu węzłom. Po<strong>na</strong>d<strong>to</strong> obiekt Content<br />

implementuje dwie me<strong>to</strong>dy put oraz get, które pozwalają „upakować”<br />

przesyłane obiekty w standardowych tablicach bajtów. Gdy Content dotrze<br />

do v ten rozpakuje <strong>na</strong>jpierw plik A.class i wczyta go używając własnego<br />

SecureClassLoader’a, który ustawi ograniczenia dla tego obiektu.<br />

W początkowej implementacji systemu Pas<strong>to</strong>r zostały użyte elementy weryfikacji<br />

off-line oraz on-line. Obiekty w obecnej implementacji Pas<strong>to</strong>ra wysyłane<br />

są w specjalnym kontenerze Content, ale bez dołączonej definicji klasy. Definicje<br />

pobierane są z wtyczek, które muszą zostać umieszczone w katalogu plugin/<br />

w pliku jar.<br />

Więcej informacji <strong>na</strong> temat bezpieczeństwa w Java 2 czytelnik z<strong>na</strong>jdzie w<br />

książce Li Gonga [Gon99].

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

Saved successfully!

Ooh no, something went wrong!