PHANTOM DOCS
·
ARCHITEKTURA

Szyfrowanie E2E

Tor ukrywa kto z kim rozmawia. Szyfrowanie end-to-end ukrywa co zostało powiedziane. Ta strona opisuje drugą z tych warstw: klucze, wymianę sekretu i forward secrecy.

Co znaczy „end-to-end”

End-to-end oznacza, że wiadomość jest szyfrowana na Twoim urządzeniu i odszyfrowywana dopiero na urządzeniu odbiorcy. Pomiędzy tymi dwoma punktami nikt — żaden węzeł Tor, żaden przekaźnik, żaden serwer — nie ma klucza, którym mógłby ją odczytać. Klucz prywatny nigdy nie opuszcza urządzenia.

W Phantom nie ma serwera pośredniczącego, który „przy okazji” mógłby zajrzeć do treści. Szyfrowanie E2E domyka to od strony kryptografii: nawet gdyby ktoś przechwycił cały ruch, zobaczy wyłącznie szyfrogram.

Tor i E2E rozwiązują dwa różne problemy. Tor chroni metadane trasy i adresy IP. Szyfrowanie E2E chroni zawartość wiadomości. Dopiero razem dają komunikację, w której ani kto, ani co nie wycieka do osób trzecich.

Dwie warstwy, dwa zadania

Łatwo je pomylić, bo obie „szyfrują”. Różnią się jednak tym, co chronią i przed kim.

WARSTWA TOR Szyfruje trasę trzema warstwami (onion routing) i ukrywa adresy IP obu stron. Chroni metadane: kto, kiedy, skąd. Nie zna treści wiadomości.
WARSTWA E2E Szyfruje samą treść kluczem, który ma tylko odbiorca. Chroni zawartość rozmowy. Nie interesuje jej trasa ani adresy — to zadanie Tora.
Warstwa P2P przenosi już zaszyfrowany pakiet między urządzeniami, ale go nie interpretuje. Zobacz Warstwa P2P oraz Tor & onion routing, aby zobaczyć, jak te warstwy się składają.

Signal Protocol pod maską

Phantom opiera szyfrowanie treści na Signal Protocol — tym samym, sprawdzonym i otwartym standardzie, którego używają najlepsze komunikatory E2E. Składa się on z dwóch mechanizmów, które działają razem:

X3DH Extended Triple Diffie-Hellman. Ustala wspólny sekret między dwiema stronami przy pierwszym kontakcie — nawet jeśli odbiorca jest offline.
DOUBLE RATCHET Po nawiązaniu sesji rotuje klucze przy każdej wiadomości. To on daje forward secrecy i odporność na późniejsze przejęcie klucza.

Klucze tożsamości i klucze sesji są oparte na krzywej X25519 (Curve25519). To ten sam rodzaj kryptografii krzywych eliptycznych, który stoi za nowoczesnymi, szybkimi i dobrze zaudytowanymi implementacjami.

Rodzaje kluczy

Signal Protocol nie używa jednego klucza „na wszystko”. Każdy typ ma inną rolę i inny czas życia.

KluczRolaCzas życia
Klucz tożsamościTrwała tożsamość kryptograficzna urządzenia (X25519)Długoterminowy
Signed prekeyPodpisany kluczem tożsamości, wystawiany do nawiązania sesjiRotowany okresowo
One-time prekeysJednorazowe klucze zużywane przy pojedynczym handshakeJednorazowy
Klucze łańcuchaKlucze wiadomości generowane przez Double RatchetPer wiadomość

Klucz prywatny tożsamości powstaje lokalnie przy pierwszym uruchomieniu i nigdy nie jest wysyłany. Powiązanie z adresem .onion opisuje strona Tożsamość .onion.

Jak powstaje wspólny sekret

Zanim poleci pierwsza wiadomość, oba urządzenia muszą uzgodnić sekret, którego nie zna nikt po drodze. X3DH robi to bez konieczności, by obie strony były online w tym samym momencie.

  1. Odbiorca publikuje zestaw kluczy

    Klucz tożsamości, signed prekey i pula one-time prekeys są dostępne, gdy ktoś chce rozpocząć rozmowę — nawet jeśli odbiorca jest chwilowo offline.

  2. Nadawca wykonuje X3DH

    Urządzenie nadawcy łączy własne klucze z kluczami odbiorcy w serii operacji Diffie-Hellmana i wyprowadza z nich wspólny sekret początkowy.

  3. Wspólny sekret zasila ratchet

    Z sekretu (przez HKDF) powstają pierwsze klucze łańcucha. Od tego momentu przejmuje je Double Ratchet.

  4. Treść zostaje zaszyfrowana

    Pierwsza wiadomość jest szyfrowana kluczem sesji i dopiero wtedy trafia do warstwy P2P, a stamtąd przez Tor do odbiorcy.

Nadawca                         Odbiorca
  klucz tożsamości  ─┐        ┌─ klucz tożsamości
  klucz efemeryczny ─┼─ X3DH ─┼─ signed prekey
                     │        └─ one-time prekey
                     ▼
            wspólny sekret (SK)
                     │  HKDF
                     ▼
         klucze łańcucha (Double Ratchet)
                     │
                     ▼
        szyfrogram → P2P → Tor → odbiorca

Double Ratchet i forward secrecy

Gdyby cała rozmowa używała jednego klucza, jednorazowe jego wykradzenie odsłoniłoby całą historię i przyszłość. Double Ratchet temu zapobiega, wymieniając klucz przy każdej wiadomości — stary klucz jest natychmiast wyrzucany.

FORWARD SECRECY Przejęcie dzisiejszego klucza nie pozwala odczytać wcześniejszych wiadomości — te klucze już nie istnieją.
POST-COMPROMISE Po jednorazowym wycieku kolejne obroty ratchetu przywracają bezpieczeństwo następnych wiadomości.
KLUCZ PER WIADOMOŚĆ Każda wiadomość ma własny, jednorazowy klucz treści. Nie da się nim odszyfrować niczego innego.
BEZ MAGAZYNU KLUCZY Nie istnieje centralne miejsce, z którego można by pozyskać klucze wielu rozmów naraz.

Weryfikacja rozmówcy

Szyfrowanie chroni treść, ale nie odpowie samo z siebie na pytanie „czy po drugiej stronie na pewno jest ta osoba?”. Dlatego pary kluczy można zweryfikować bezpośrednio.

Najpewniejsza ścieżka to dodanie kontaktu przez kod QR na spotkaniu — klucz przechodzi bez przepisywania i bez pośrednika, który mógłby go podmienić. Szczegóły opisuje Dodawanie kontaktów.

CZEGO E2E NIE CHRONI Szyfrowanie chroni wiadomość w drodze. Nie ochroni jej na skompromitowanym urządzeniu, gdzie po odszyfrowaniu jest już jawnym tekstem. Bezpieczeństwo endpointu opisuje Model bezpieczeństwa.
Warstwa E2E na poziomie produkcyjnym (pełna implementacja Signal Protocol, forward secrecy i rotacja kluczy per sesja) to cel Fazy 2 roadmapy. Ta strona opisuje docelową architekturę kryptograficzną Phantom.