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.
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:
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.
| Klucz | Rola | Czas życia |
|---|---|---|
| Klucz tożsamości | Trwała tożsamość kryptograficzna urządzenia (X25519) | Długoterminowy |
| Signed prekey | Podpisany kluczem tożsamości, wystawiany do nawiązania sesji | Rotowany okresowo |
| One-time prekeys | Jednorazowe klucze zużywane przy pojedynczym handshake | Jednorazowy |
| Klucze łańcucha | Klucze wiadomości generowane przez Double Ratchet | Per 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.
-
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.
-
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.
-
Wspólny sekret zasila ratchet
Z sekretu (przez
HKDF) powstają pierwsze klucze łańcucha. Od tego momentu przejmuje je Double Ratchet. -
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.
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.