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