PHANTOM DOCS
·
ARCHITEKTURA

Tor & onion routing

Szczegółowe omówienie jak Phantom używa sieci Tor do routowania ruchu — dlaczego to robimy, jak działa onion routing i co widzi (a czego nie widzi) każdy węzeł na trasie.

Dlaczego Tor

Tradycyjne komunikatory (WhatsApp, Telegram, Signal) łączą się z centralnym serwerem. Nawet jeśli treść wiadomości jest szyfrowana — serwer widzi kto pisze do kogo, kiedy i jak często. To są metadane i są często cenniejsze niż sama treść rozmowy.

Phantom eliminuje ten problem. Zamiast serwera pośredniczącego, wiadomości wędrują bezpośrednio między urządzeniami — przez sieć Tor. Sieć Tor ukrywa adres IP nadawcy i odbiorcy, co oznacza że żaden węzeł pośredni nie wie jednocześnie kto wysyła i kto odbiera.

Tor nie szyfruje treści wiadomości — od tego jest Signal Protocol (Szyfrowanie E2E). Tor chroni metadane: kto z kim rozmawia, kiedy i skąd.

Czym jest onion routing

Onion routing (routing cebulowy) to technika anonimizacji ruchu sieciowego. Nazwa pochodzi od warstw szyfrowania — każdy węzeł na trasie "zdejmuje" jedną warstwę, jak łuskę cebuli, ale widzi tylko tyle informacji, ile potrzebuje do przekazania pakietu dalej.

Zanim wiadomość opuści Twoje urządzenie, Phantom szyfruje ją trzykrotnie — kluczem każdego z trzech węzłów na trasie. Każdy węzeł odszyfrowuje jedną warstwę i przekazuje pakiet do następnego. Żaden z nich nie zna pełnej trasy.

Twoja wiadomość WARSTWA 3 — WĘZEŁ WEJŚCIOWY Węzeł 1 zdejmuje tę warstwę. Zna Twój IP — nie zna odbiorcy. WARSTWA 2 — WĘZEŁ ŚRODKOWY Węzeł 2 zdejmuje tę warstwę. Nie zna ani nadawcy, ani odbiorcy. WARSTWA 1 — PUNKT SPOTKANIA Węzeł 3 zdejmuje tę warstwę. Zna adres .onion — nie zna Twojego IP. RDZEŃ — WIADOMOŚĆ (Signal) Zaszyfrowana E2E. Żaden węzeł jej nie czyta. Warstwy znikają jedna po drugiej — tak jak w sieci Tor. Każdy węzeł widzi tylko swoją warstwę. onion layers
Twoje urządzenie szyfruje wiadomość trzema warstwami:

┌─────────────────────────────────────────┐
│ Warstwa 3 (klucz węzła wejściowego)     │
│  ┌──────────────────────────────────┐   │
│  │ Warstwa 2 (klucz węzła środk.)  │   │
│  │  ┌───────────────────────────┐   │   │
│  │  │ Warstwa 1 (klucz węzła   │   │   │
│  │  │           wyjściowego)   │   │   │
│  │  │  ┌────────────────────┐  │   │   │
│  │  │  │ zaszyfrowana       │  │   │   │
│  │  │  │ wiadomość (Signal) │  │   │   │
│  │  │  └────────────────────┘  │   │   │
│  │  └───────────────────────────┘   │   │
│  └──────────────────────────────────┘   │
└─────────────────────────────────────────┘

Trasa wiadomości w Phantom

Każda wiadomość wysłana przez Phantoma przechodzi przez dokładnie trzy węzły Tor (tzw. obwód / circuit), zanim dotrze do odbiorcy. Oto pełna trasa:

Telefon A NADAWCA 1 GUARD WIDZI IP nadawcy NIE WIDZI odbiorcy, treści 2 MIDDLE WIDZI nic konkretnego NIE WIDZI nadawcy, odbiorcy 3 RENDEZV. WIDZI adres .onion NIE WIDZI IP nadawcy, treści Telefon B ODBIORCA DOSTARCZONO Signal odszyfrowuje Tylko odbiorca czyta PODSUMOWANIE ANONIMOWOŚCI Węzeł 1 — zna skąd, nie zna dokąd Węzeł 2 — nie zna nikogo (najbezpieczniejszy) Węzeł 3 — zna dokąd, nie zna skąd Treść — zaszyfrowana cały czas (Signal) message flow
Telefon A                    Sieć Tor                      Telefon B
─────────                    ────────                      ─────────
[piszesz wiadomość]
[Signal Protocol szyfruje]
[Tor opakowuje 3 warstwy]
        │
        ▼
   Tor SOCKS5
   127.0.0.1:9050
        │
        ▼
  ┌─────────────┐
  │  Węzeł 1    │   Entry Guard — zna Twój IP
  │  (wejście)  │   nie zna odbiorcy ani treści
  └──────┬──────┘
         │
         ▼
  ┌─────────────┐
  │  Węzeł 2    │   Middle Relay — nie zna nikogo
  │  (środkowy) │   przekazuje pakiet dalej
  └──────┬──────┘
         │
         ▼
  ┌─────────────┐
  │  Węzeł 3    │   Rendezvous Point — zna adres .onion
  │  (spotkanie)│   nie zna Twojego IP
  └──────┬──────┘
         │
         ▼
  [Hidden Service .onion]    ← Telefon B nasłuchuje
  [Signal Protocol odszyfrowuje]
  [odbiorca czyta wiadomość]

Co widzi każdy węzeł

To kluczowa kwestia. Żaden pojedynczy węzeł nie widzi jednocześnie nadawcy i odbiorcy. Oto co wie każdy z nich:

Węzeł 1 — Entry Guard (strażnik wejścia)

Wie: Twój adres IP (bo łączysz się z nim bezpośrednio).

Nie wie: do kogo piszesz, co piszesz, ani jaki jest adres .onion odbiorcy. Widzi tylko zaszyfrowany pakiet i adres węzła 2.

Węzeł 2 — Middle Relay (przekaźnik środkowy)

Wie: skąd przyszedł pakiet (węzeł 1) i dokąd go wysłać (węzeł 3).

Nie wie: ani Twojego IP, ani adresu .onion odbiorcy, ani treści. Jest to najlepiej chroniony węzeł na trasie — nie zna nikogo.

Węzeł 3 — Rendezvous Point (punkt spotkania)

Wie: adres .onion odbiorcy (bo to on dostarcza pakiet do Hidden Service).

Nie wie: Twojego IP — widzi tylko że pakiet przyszedł od węzła 2.

W klasycznym Tor (np. przeglądanie stron www) węzeł 3 to "exit node" — widzi ruch wychodzący do internetu. W Phantomie nie ma exit node'a, bo komunikacja odbywa się w całości wewnątrz sieci Tor (Hidden Service → Hidden Service). To oznacza dodatkową warstwę ochrony.

Hidden Service — każde urządzenie to serwer

W tradycyjnych komunikatorach Twój telefon jest klientem, a centralny serwer — serwerem. W Phantomie każde urządzenie jest jednocześnie klientem i serwerem.

Przy pierwszym uruchomieniu Phantom generuje parę kluczy ED25519. Z klucza publicznego deterministycznie powstaje adres .onion — to Twój "numer telefonu" w sieci Phantom. Na przykład:

x7wqibd4zmbxojl5ayfkm3r7n2e6c4hp.onion

Twoje urządzenie rejestruje ten adres w sieci Tor i zaczyna nasłuchiwać na przychodzące połączenia. Gdy ktoś chce do Ciebie napisać, łączy się z Twoim adresem .onion przez Tor — bez znajomości Twojego IP.

SIEĆ TOR 3 węzły w każdym kierunku PHANTOM Online Cześć! Hej :) Telefon A SERWER KLIENT a4kx...9m2p.onion ED25519 PHANTOM Online Cześć! Hej :) Telefon B SERWER KLIENT x7wq...ojl5.onion ED25519 IP UKRYTE IP UKRYTE ZERO SERWERÓW Połączenie bezpośrednie Każdy telefon jest jednocześnie klientem i serwerem — nie ma "centrum" hidden service

Jak to działa na Androidzie

Phantom uruchamia Tora wewnątrz aplikacji używając biblioteki tor-android (Guardian Project). Tor startuje w tle i wystawia lokalny proxy SOCKS5 na porcie 9050. Cały ruch aplikacji jest kierowany przez ten proxy.

// Uproszczony schemat uruchamiania Tor na Androidzie

1. Phantom startuje → uruchamia tor-android w tle
2. Tor tworzy katalog Hidden Service:
   /data/hidden_service/hostname → Twój adres .onion
   /data/hidden_service/hs_ed25519_secret_key → klucz prywatny
3. Tor wystawia SOCKS5 na 127.0.0.1:9050
4. Phantom nasłuchuje na 127.0.0.1:8080
5. Tor mapuje: adres.onion:8080 → 127.0.0.1:8080

Łączenie z innym urządzeniem

Gdy chcesz wysłać wiadomość, Phantom łączy się z adresem .onion odbiorcy przez proxy SOCKS5. Połączenie przechodzi przez 3 węzły Tor, a odbiorca widzi je jako przychodzące na swój lokalny port 8080.

// Połączenie z odbiorcą przez Tor

Twój telefon
    → SOCKS5 proxy (127.0.0.1:9050)
    → Tor (3 węzły)
    → x7wqibd4zmbxojl5ayfkm3r7n2e6c4hp.onion:8080
    → telefon odbiorcy (127.0.0.1:8080)

Obwód Tor (circuit)

Obwód (circuit) to konkretna trasa przez 3 węzły, wybrana dla danego połączenia. Phantom pozwala zobaczyć aktualny obwód w interfejsie aplikacji — modal TOR pokazuje kraje i latencję każdego węzła.

Rotacja obwodu

Obwody nie są stałe. Tor automatycznie rotuje je co około 10 minut. Phantom dodatkowo pozwala ręcznie wymusić nowy obwód (przycisk "Nowy obwód" w modalu TOR). Nowy obwód oznacza nową trasę — inne węzły, inne kraje, inny "odcisk" ruchu.

Rotacja obwodu pomaga przeciwdziałać analizie ruchu (traffic analysis). Jeśli ktoś monitoruje węzeł 1, po rotacji ruch znika — bo teraz płynie przez inny węzeł wejściowy.

Obwód A (aktualny):
  Guard: DE (Frankfurt, 23ms) → Middle: CH (Zurych, 41ms) → RP: IS (Reykjavik, 89ms)

[kliknięcie "Nowy obwód"]

Obwód B (nowy):
  Guard: NL (Amsterdam, 18ms) → Middle: RO (Bukareszt, 55ms) → RP: CA (Montreal, 112ms)
Szczegółowe informacje o odczytywaniu obwodu w aplikacji: Odczyt obwodu Tor.

Hidden Service v3 — szczegóły techniczne

Phantom używa Hidden Service w wersji 3 (v3), która jest obecnym standardem sieci Tor. Główne cechy:

Klucze i adres

Adres .onion v3 ma 56 znaków (v2 miał 16). Jest generowany z klucza publicznego ED25519 plus suma kontrolna i numer wersji. To oznacza że:

adres.onion = base32( klucz_publiczny_ed25519 [32B]
                    + checksum [2B]
                    + version [1B] )

Razem: 35 bajtów → 56 znaków base32

Klucz ED25519 daje 128-bitowe bezpieczeństwo (odporność na ataki brute-force). Złamanie adresu .onion v3 metodą siłową jest obliczeniowo niemożliwe przy obecnej technologii.

Protokół spotkania (Rendezvous Protocol)

Gdy ktoś chce się połączyć z Twoim Hidden Service, nie łączy się bezpośrednio z Twoim węzłem. Zamiast tego:

1. Odbiorca (Hidden Service) publikuje deskryptor w DHT sieci Tor
   → deskryptor zawiera "introduction points" (węzły kontaktowe)

2. Nadawca pobiera deskryptor z DHT
   → wie teraz przez jakie węzły może się skontaktować

3. Nadawca wybiera Rendezvous Point (węzeł spotkania)
   → łączy się z nim i czeka

4. Nadawca wysyła do Introduction Point:
   "powiedz odbiorcy żeby przyszedł do Rendezvous Point X"

5. Introduction Point przekazuje tę prośbę do odbiorcy

6. Odbiorca łączy się z Rendezvous Point
   → nadawca i odbiorca "spotykają się" w tym węźle
   → zaczynają komunikację

Cały ten proces jest automatyczny i trwa 1–3 sekundy. Użytkownik widzi jedynie wskaźnik połączenia w interfejsie.

Dwie warstwy ochrony

Phantom łączy dwie niezależne warstwy bezpieczeństwa. Każda chroni inny aspekt komunikacji:

┌──────────────────────────────────────────────────────┐
│  Warstwa 1: Signal Protocol                          │
│  ─────────────────────────────                       │
│  Chroni: TREŚĆ wiadomości                            │
│  Jak: szyfrowanie end-to-end (AES-256-GCM)          │
│  Efekt: nawet jeśli ktoś przechwyci pakiet,          │
│         nie odczyta wiadomości                       │
├──────────────────────────────────────────────────────┤
│  Warstwa 2: Tor Hidden Service                       │
│  ─────────────────────────────                       │
│  Chroni: METADANE (kto z kim rozmawia)               │
│  Jak: onion routing przez 3 węzły                    │
│  Efekt: nawet jeśli ktoś monitoruje sieć,            │
│         nie wie kto z kim rozmawia                   │
├──────────────────────────────────────────────────────┤
│  Razem                                               │
│  ─────                                               │
│  Nikt nie wie ANI co piszesz, ANI do kogo            │
└──────────────────────────────────────────────────────┘

To podejście nazywamy "defense in depth" — nawet jeśli jedna warstwa zawiedzie (np. zostanie złamany Signal Protocol), druga nadal chroni Twoje metadane. I odwrotnie.

Brak exit node'a — dlaczego to ważne

W klasycznym użyciu Tor (np. Tor Browser) ruch wychodzi z sieci Tor przez tzw. exit node i trafia do zwykłego internetu. Exit node widzi nieszyfrowany ruch (chyba że strona używa HTTPS) — to znany punkt ryzyka.

Phantom nie używa exit node'ów. Komunikacja odbywa się w całości wewnątrz sieci Tor: Hidden Service → Hidden Service. Ruch nigdy nie opuszcza sieci Tor.

Tor Browser (klasyczny):
  Twój PC → Guard → Middle → Exit Node → internet → serwer
                                  ↑
                            widzi ruch (ryzyko!)

Phantom (Hidden Service ↔ Hidden Service):
  Telefon A → Guard → Middle → Rendezvous ← Middle ← Guard ← Telefon B
                                    ↑
                              nie widzi treści
                              nie ma exit node'a

To eliminuje cały wektor ataku związany z exit node'ami — podsłuch, podmiana treści, analiza ruchu wychodzącego.

Czego Tor nie chroni

Tor jest potężnym narzędziem anonimizacji, ale nie jest magiczny. Ważne jest rozumienie granic ochrony:

Timing attacks (ataki czasowe)

Jeśli adversary kontroluje zarówno węzeł wejściowy jak i punkt spotkania (Rendezvous Point), może skorelować czas wysyłania i odbierania pakietów. To pozwala z pewnym prawdopodobieństwem ustalić kto z kim rozmawia — nawet bez odczytywania treści. Rotacja obwodów częściowo mityguje ten atak.

Analiza wzorców ruchu

Nawet zaszyfrowany ruch ma kształt — rozmiar pakietów, częstotliwość, pora dnia. Globalny obserwator (np. agencja rządowa monitorująca duże fragmenty internetu) teoretycznie może korelować wzorce ruchu wchodzącego i wychodzącego z sieci Tor.

Bezpieczeństwo urządzenia

Tor chroni komunikację w tranzycie. Nie chroni urządzenia. Jeśli Twój telefon jest skompromitowany (malware, stalkerware, fizyczny dostęp) — atakujący czyta wiadomości bezpośrednio na ekranie, zanim trafią do Tora.

Więcej o ograniczeniach i modelu zagrożeń: Model zagrożeń i Znane ograniczenia.

Latencja i wydajność

Routing przez 3 węzły Tor dodaje latencję. Typowe opóźnienie w sieci Tor to 200–800ms w jedną stronę, w zależności od lokalizacji węzłów i obciążenia sieci.

W praktyce oznacza to:

Wysłanie wiadomości tekstowej:    0.3 – 1s
Nawiązanie nowego połączenia:     1 – 3s (Rendezvous Protocol)
Wysłanie zdjęcia (100 KB):       2 – 5s
Rotacja obwodu:                   1 – 2s

To wolniej niż Signal czy WhatsApp (które mają <100ms dzięki centralnym serwerom), ale cena za pełną anonimizację metadanych. Phantom priorytetyzuje bezpieczeństwo ponad szybkość — i jest transparentny co do tego kompromisu.

Phantom vs inne komunikatory — warstwa sieciowa

                    Serwer          Ochrona IP       Ochrona metadanych
                    ──────          ──────────       ──────────────────
WhatsApp            centralny       brak             brak
Telegram            centralny       brak             brak
Signal              centralny       częściowa*       częściowa*
Briar               brak (P2P+Tor)  Tor              Tor
Session             zdecentraliz.   onion routing    częściowa
Phantom             brak (P2P+Tor)  Tor HS↔HS        Tor HS↔HS

* Signal używa "Sealed Sender" do ukrycia nadawcy od serwera,
  ale serwer nadal zna odbiorcę i czas dostarczenia.