Dziennik Karola Zalewskiego

Freenet: Wolność zdecentralizowana, życie w darknecie

Zapewne większość z nas wie jaki ma cel lub przynajmniej słyszała o tym, iż istnieje coś takiego, jak projekt Tor. W dużym uproszczeniu jest to oprogramowanie odpowiadające funkcjonalnością serwerom proxy, które ma zapewnić anonimowość osobom korzystającym z Internetu. Dodatkowo umożliwia ono uruchamianie anonimowych usług. O zaletach, wadach i efektywności takiego rozwiązania można byłoby rozmawiać długo. Ważne jest jednak to, że Tor zyskuje na popularności, a coraz więcej osób chce chronić prawo do prywatności i anonimowości. Dlatego warto w tym momencie wspomnieć również o FreeNecie oraz GNUnecie. Programach kojarzonych z Torem, ale funkcjonujących na zupełnie innej zasadzie. Zapraszam Was do świata Internetu w Internecie - do darknetów.

Freenet

Freenet to zdecentralizowany, odporny na próby cenzury system przechowywania danych, którego rozwój został zapoczątkowany przez Iana Clarke w 2000 roku. Realizowany jako projekt o otwartym kodzie źródłowym (licencja GNU GPL), a napisany w języku Java, ma na celu udostępnienie jego użytkownikom narzędzia umożliwiającego anonimową wymianę danymi.

W przeciwieństwie do innych rozwiązań zapewniających anonimowość użytkowników (np. projektu Tor) nie zapewnia on anonimowego dostępu do tradycyjnego Internetu, a jedynie do sieci peer-to-peer złożonej z wielu instancji Freenetu. Każdy użytkownik chcący skorzystać z Freenetu musi w tym celu uruchomić swój własny węzeł komunikacyjny aktywnie uczestniczący w wymianie oraz składowaniu danych. Oznacza to również, iż w trakcie działania węzła udostępnia on pewną część pasma łącza oraz przestrzeni na lokalnym dysku twardym w celu zapewnienia poprawnego funkcjonowania całej sieci.

Dzięki swojej elastycznej konstrukcji pozwala on na jego szerokie wykorzystanie z innymi aplikacjami umożliwiając im anonimowe przechowywanie lub wymianę danych. Komunikacja między lokalnym węzłem Freenetu, a aplikacjami korzystającymi z niego zapewniona jest przez mechanizm gniazdek sieciowych oraz protokół FCPv2 (ang. Freenet Client Protocol version 2). Przykładem takich aplikacji może być oprogramowanie o nazwie FProxy dostarczane standardowo wraz z Freenetem. Umożliwia ono nie tylko pełną kontrolę nad lokalnym węzłem Freenetu z poziomu przeglądarki WWW, ale również pobieranie z sieci Freenet tzw. freesites, czyli stron internetowych przygotowanych specjalnie dla sieci Freenet i opublikowanych w niej. Inne oprogramowanie korzystające z Freenetu to np.:

Dzięki mechanizmowi wtyczek funkcjonalność Freenetu może być rozbudowywana w stosunkowo prosty sposób.

Rodzaje sieci

Istnieją dwa rodzaje sieci tworzonych z wykorzystaniem Freenetu. Są to:

Pierwsze z ww. podejść oparte jest na koncepcji automatycznego wyszukiwania sąsiadów. Po uruchomieniu węzła odnajduje on i łączy się w bezpieczny sposób z innymi poznanymi węzłami. Sam protokół wyszukiwania węzłów nie jest ściśle zdefiniowany, co oznacza, że lista dostępnych węzłów może być pobierana z różnych źródeł zawierających ich spis lub dostarczana przez samego użytkownika. Standardowa instalacja Freenetu uruchamiana w trybie opennet pobiera listę węzłów ze strony projektu Freenet.

W przypadku drugiego podejścia tj. darknetu komunikacja możliwa jest jedynie między węzłami, które przeszły proces uwierzytelniania oraz autoryzacji z wykorzystaniem mechanizmów kryptografii asymetrycznej. W tym celu oba łączące się ze sobą węzły muszą przed podjęciem komunikacji posiadać swoje wzajemne klucze publiczne oraz dane dotyczące położenia i konfiguracji. Lista zaufanych węzłów jest zarządzana ręcznie przed administratora danego węzła. Dzięki takiemu rozwiązaniu możliwe jest ukrycie faktu funkcjonowania Freenetu na danym komputerze oraz zminimalizowanie liczby ataków.

Publikowanie danych

Freenet działa w oparciu o rozwiązanie podobne do rozproszonej tablicy mieszającej (ang. Distributed Hash Table). Wszystkie dane publikowane z wykorzystaniem Freenetu dzielone są na mniejsze części, kompresowane (opcjonalne działanie) i szyfrowane. Następnie są one wysyłane wraz z nadmiarowymi danymi do kolejnych węzłów. Dzięki temu, iż każda instancja Freenetu posiada własną przestrzeń dyskową (jej rozmiar ustalany jest przez administratora węzła) każdy przesyłany przez nią fragment jest zapisywany w lokalnej bazie. W przypadku przekroczenia dopuszczalnej ilości danych w lokalnej bazie usuwane są dane najrzadziej przesyłane. Ze względu na takie rozwiązanie po zakończeniu publikacji danych w sieci Freenet węzeł, który tego dokonał może zostać odłączony od sieci bez ryzyka tego, iż inne węzły utracą dostęp do opublikowanych danych. W przypadku sieci Freenet nie istnieje możliwość efektywnego usunięcia konkretnych danych z sieci.

Odwoływanie się do danych

Freenet pozwala na odwoływanie się do danych w nim opublikowanych z wykorzystaniem czterech rodzajów kluczy. Są to:

Klucz CHK wykorzystywany jest w celu publikacji danych, które nie będą zmieniać się w czasie. Jest on tworzony na podstawie skrótu SHA-256 zaszyfrowanych już danych. Stanowi on jednocześnie najbardziej podstawowy klucz wykorzystywany we Freenecie i jest wykorzystywany w mechanizmach obsługi innych kluczy. Poniżej znajduje się opis budowy klucza.

CHK@SKROT_DANYCH,KLUCZ_SZYFRUJACY,METADANE

Klucz SSK jest wykorzystywany głównie w przypadku danych, które będą zmieniać się w czasie. Przykładem może być strona internetowa udostępniona z wykorzystaniem mechanizmu freesites. W takim przypadku konieczne jest istnienie mechanizmu, który pozwala zachować anonimowość osoby publikującej dane z jednoczesną możliwością udowodnienia, iż zmiana została dokonana przez tę samą osobę, która wykonała pierwotną publikację. W języku angielskim cechę tę określa się słowem „pseudonymity” powstałym od anglojęzycznych wyrazów pseudonim (ang. pseudonym) oraz anonimowość (ang. anonymity). Stan ten osiąga się poprzez wykorzystanie kryptografii asymetrycznej (2048-bitowy DSA z 256-bitowym M) pozwalającej na wygenerowanie pary kluczy (publicznego i prywatnego). W takim przypadku dane mogą być opublikowane jedynie z wykorzystaniem klucza prywatnego. Poniżej znajduje się opis konstrukcji klucza SSK.

SSK@SKROT_KLUCZA_PUB,KLUCZ_SZYFRUJACY,METADANE/NAZWA/

Klucz KSK został zrealizowany z wykorzystaniem mechanizmu przeznaczonego dla kluczy SSK i umożliwia wygenerowanie adresu danych, który jest łatwy do zapamiętania przez człowieka. Użytkownik publikujący dane podaje jedynie słowo kluczowe, które służy do wygenerowania pary kluczy publiczny/prywatny oraz klucza szyfrującego na potrzeby mechanizmu SSK. Algorytm jest deterministyczny, co oznacza, że każdy kto poda odpowiednie słowo kluczowe będzie w stanie publikować dane z jego wykorzystaniem. Poniżej znajduje się opis konstrukcji klucza KSK.

KSK@SLOWO_KLUCZOWE

Ostatnim rodzajem klucza jest USK. Stanowi on rozwinięcie mechanizmu SSK o możliwość łatwego publikowania nowych wersji danych, odczytu konkretnych ich wersji oraz subskrypcji na nie. Poniżej znajduje się opis konstrukcji klucza USK.

USK@SKROT_KLUCZA_PUB,KLUCZ_SZYFRUJACY,METADANE/NAZWA/WERSJA/

Podsumowanie

W praktyce Freenet jest najczęściej wykorzystywany w roli systemu do anonimowej komunikacji (FMS) oraz dystrybucji freesites. W takich zastosowaniach sprawdza się naprawdę dobrze ze względu na silne mechanizmy zapewniające anonimowość użytkowników oraz niewielką ilość danych koniecznych do pobrania. W przypadku anonimowej wymiany plików sytuacja wygląda już nieco inaczej. Nacisk na anonimowość sprawia, że mocno cierpi na tym prędkość z jaką pobierane są wszelakie pliki. Ściągnięcie zaledwie gibibajta w ciągu kilku dni działania systemu nie jest wcale niczym niezwykłym.

Bez względu na to zachęcam do zapoznania się z Freenetem. Może się jeszcze kiedyś przydać tam, gdzie nie radzą sobie inne rozwiązania.

Komentarze:

1. rozie dnia 2010-10-03 o 08:17:00 powiedział(a):

Freenet ma kilka wad:
1. Jest napisany w Javie, więc uruchamianie na thin clientach, routerach itp. raczej odpada.
2. W przypadku Opennetu znane są IP komputerów korzystających z Freenetu (darknet rozwiązaniem).
3. Możliwość określenia, jaki dokładnie plik jest udostępniany (jeśli plik jest już znany na systemie, który sprawdza). Co więcej, nie sposób rozróżnić, czy udostępniasz go faktycznie, czy tylko pośredniczysz w transmisji, co teoretycznie może powodować problemy w specyficznych sytuacjach.

AFAIK bawiłeś się też Gnunetem. Będzie opis? Porównanie Freenetu i Gnunetu?

2. Zal dnia 2010-10-03 o 12:28:02 powiedział(a):

Ad 1. Samo to, że został napisany w Javie nie wyklucza go ze stosowania na cienkich klientach. Maszynę wirtualną Javy da się zoptymalizować do wykorzystania w takim trudnym środowisku. Problemem jest jednak to, że sam Freenet wymaga sporych mocy obliczeniowych na obsługę routingu, szyfrowania danych, wyszukiwania ich itp. Do tego należy dorzucić zużycie części pasma łącza oraz przestrzeni dyskowej. Masz rację, nie nadaje się na słabsze maszyny.

Ad 2. Szkoda tylko, że stosowanie darknetu jest dosyć upierdliwą sprawą do użytkownika. Brakuje mi jednak opennetu z mniej jawnym odkrywaniem innych węzłów, niż ma to miejsce w przypadku pobierania informacji z centralnego serwisu :D

Ad 3. Właściwie to z założenia nie miało być podziału na węzły korzystające z sieci i aktywnie w niej uczestniczące tak, jak ma to miejsce w Torze. Ze względu na to, że każdy przesyła dane i nikt nie wie, jakie dane posiada to liczba podejrzanych jest ogromna, a współczynnik sprawstwa w miarę jednakowy dla poszczególnych klientów. Ale racja, w specyficznych realiach to może stanowić problem. Ludzie bywają pomysłowi.

Co do GNUnetu to niewiele z niego korzystałem, ale trochę o nim czytałem. Czy będzie opis? Jak tylko skończę magisterkę :D Ale podstawowe różnice widać na na poziomie następujących rozwiązań:

a) routing - w przypadku GNUnetu możliwe jest zachowanie podobne do tego znanego we Freenecie (na około, bez wiedzy o tym, kto jest nadawcą i odbiorcą) lub opierające się o bezpośrednie połączenie zapewniające szybszy transfer danych,
b) ekonomia - węzły GNUnetu są w stanie spowalniać działanie innych węzłów, gdy te ostatnie dużo danych ściągają, a niewiele dają od siebie (we Freenecie nie ma to miejsca),
c) klucze danych - Freenet dostarcza obecnie 4 typów kluczy (CHK, KSK, SSK, USK), a GNUnet jedynie dwa (CHK i KSK).

Proste porównanie znajdziesz też w FAQ GNUnetu. Ja do realizacji pracy magisterskiej wybrałem Freenet ze względu na całkiem spora liczbę artykułów naukowych z nim związanych oraz wykorzystanie Javy, w której się mniej więcej orientuję (w przypadku konieczności modyfikacji źródeł).

3. rozie dnia 2010-10-03 o 12:42:19 powiedział(a):

Dzięki. Właśnie się chwilę (~1h) pobawiłem Freenetem (jednak kobyła i już wyleciał). Szybkie wrażenia opiszę niebawem. ;-)

Ad 2. Nie musi być centralnego punktu - sama lista peerów może być pobierana od dowolnego pojedynczego peera. Wtedy masz brak centralnego punktu i łatwe pobieranie.

Ad 3. Niezupełnie. Chodzi o to, że możesz wskazać konkretny komputer, który brał udział w udostępnianiu Ci danego zasobu (pytanie na ile jednoznacznie, to nie p2p, że tylko hash z możliwością kolizji, prawda?). W sumie ciekawe, czy pośrednictwo w transmisji się kwalifikuje do udostępniania (pewnie nie, bo wtedy RIAA ścigałaby każdego ISP którego router/proxy WWW brał udział w transmisji).

4. Zal dnia 2010-10-03 o 12:59:07 powiedział(a):

@rozie:

Ad 2. Kojarzę. Z tego, co pamiętam, to w BitTorrencie takie rozwiązanie nazywa się PEX.

Ad 3. Wszystko zależy od klucza. W najprostszym przypadku skrót wyciągany jest z już zaszyfrowanych danych:

CHK@SKROT_DANYCH,KLUCZ_SZYFRUJACY,METADANE

Węzeł po swojej stronie zna jedynie skrót danych. Klucz szyfrujący jest dostarczany przez użytkownika i nie wychodzi poza węzeł na którym został on zastosowany. Istnieje możliwość kolizji, ale nie wiem, jak zachowywały się węzły po jej wykryciu. Same dane znajdujące się na Twoim komputerze (kontener przeznaczony do użytku na węźle) też mogą być zaszyfrowane i zazwyczaj są. Jest kilka polityk szyfrowania tych danych - najbardziej paranoiczna polega na generowaniu hasła jednorazowego w pamięci. Po ponownym uruchomieniu Freenetu stary kontener jest usuwany (hasło i tak zostało utracone) i konstruowany jest nowy kontener. To utrudnia sprawdzenie, czy na danym komputerze znajdował się dany fragment danych.

Jeżeli zaś chodzi o komunikację między węzłami to istnieje kilka mechanizmów mających na celu utrudnienie określenia źródła pochodzenia danych. Wprowadzane są pewne sztuczne opóźnienia w komunikacji między węzłami, a węzły co jakiś czas udają, że danych nie posiadają. Co więcej, dane są kopiowane pomiędzy węzłami w zależności od ich popularności oraz w momencie, gdy ktoś je publikuje. Z tego względu trudno określić nie tylko pierwotnego nadawcę, ale i odbiorcę. A nawet jeżeli udałoby się dobrać do komputera z Freenetem i stwierdzić obecność konkretnych danych to trudno byłoby udowodnić to, iż posiadacz węzła miał złe intencje ;]

5. Pomiędzy bitami dnia 2010-10-08 o 18:48:43 powiedział(a):

Szybki test Freenetu.

Jakoś tak się złożyło, że wpis Zala przypomniał, że zarzuciłem zabawę z Gnunetem którego po prostu nie udało mi się w 5 minut na czuja uruchomić . Postanowiłem przyjrzeć się Freenetowi , który powinien być prostszy i popularnie[...]

6. Anonim dnia 2012-01-02 o 18:22:28 powiedział(a):

wiecie jak połączyć się z darknetem

7. druzyna a dnia 2012-01-15 o 02:47:22 powiedział(a):

przeczytaj ten artykul to bedziesz wiedzial/a co trzeba zrobic.

Dodaj komentarz:

Możesz wykorzystać Markdown. Znaczniki HTML nie działają!

Wysyłając komentarz wyrażasz zgodę na jego publikację na zasadach licencji CC BY-NC-SA 3.0. Jeżeli się na to nie zgadzasz - nie komentuj.


Podgląd komentarza: