U prošlom tekstu prošli smo tri tisuće godina povijesti šifri i stali na rečenici da milijarde ljudi danas u džepu nose enkripciju o kakvoj vojske nisu mogle sanjati. Danas idemo pogledati što se točno dogodi u tih par milisekundi između trenutka kad stisneš “pošalji” i trenutka kad poruka stigne na drugi telefon.
Bez matematike. Obećajem — ni jedne formule.
Problem: tvoja poruka putuje preko tuđih računala
Kad pošalješ poruku, ona ne ide s tvog telefona ravno na telefon primatelja. Ide na server tvrtke koja drži aplikaciju, tamo se spremi (barem dok je primatelj ne preuzme), pa tek onda dalje. Svaka poruka koju si ikad poslao prošla je kroz tuđe računalo.
Tu se odmah treba raščistiti jedna česta zabuna. Skoro sav promet na internetu danas je šifriran — onaj lokot u browseru (HTTPS) znači da nitko na putu, recimo na WiFi-ju kafića, ne može čitati što šalješ. Ali to je transportna enkripcija: štiti cijev, ne sadržaj. Poruka stigne na server — i tamo se otključa. Tvrtka je može pročitati, zaposlenik je može pročitati, haker koji provali na server je može pročitati, i svatko sa sudskim nalogom je može zatražiti.
End-to-end enkripcija (E2EE) mijenja točno tu stvar: poruka se zaključa na tvom uređaju, a ključ za otključavanje postoji samo na uređaju primatelja. Server u sredini i dalje prenosi poruku — ali vidi samo nečitljivu masu znakova. Ne “ne smije” je pročitati. Ne može. Ni kad bi htio, ni kad bi morao.
Ključevi: trik s otvorenim lokotom
Dobro, ali kako se dva telefona koja se nikad nisu “srela” dogovore oko tajnog ključa — preko servera kojem ne vjeruju? To je onaj problem razmjene ključeva koji je mučio kriptografe tisućama godina, i riješen je tek 1976.
Rješenje se najlakše objasni bez ijednog bita. Zamisli da svatko od nas ima hrpu otvorenih lokota i jedan jedini ključ koji ih otvara. Lokote dijelim svima — objesim ih na oglasnu ploču, baš me briga tko ih uzme. Ključ ne dajem nikome, nikad.
Želiš mi poslati tajnu poruku? Uzmeš moj lokot s ploče, staviš poruku u kutiju, zaključaš je mojim lokotom — i pošalješ. Od tog trenutka ni ti je više ne možeš otvoriti. Poštar je ne može otvoriti. Otvoriti je mogu samo ja, jedinim ključem koji postoji.
To je asimetrična kriptografija: lokot je javni ključ, ključ je privatni ključ. U aplikacijama tu “oglasnu ploču” igra server — na njemu stoje javni ključevi svih korisnika. I zato server smije biti nepovjerljiv: na njemu su samo lokoti, a lokotom se ništa ne otključava.
U praksi se ovim trikom dogovori zajednička tajna, a same poruke onda šifrira brza simetrična šifra (AES iz prošlog teksta). Asimetrična kriptografija otvara vrata; simetrična nosi teret.
Double ratchet: novi ključ za svaku poruku
Da je tu kraj, već bi bilo pristojno. Ali moderni protokoli — prije svega Signalov protokol, koji pokreće Signal, WhatsApp i Messenger — idu bitno dalje, jer pristojno nije dovoljno kad ti protivnik može ukrasti telefon.
Prvo, dogovor ključeva radi i kad je primatelj offline: svaki uređaj unaprijed ostavi na serveru svežanj jednokratnih javnih ključeva (zovu se prekeys), pa ti možeš “uzeti lokot s ploče” i poslati prvu poruku i u tri ujutro dok primatelj spava.
Drugo — i ovo je genijalan dio — ključ se ne koristi dvaput. Mehanizam koji se zove double ratchet (dvostruka zapinjača) iz svake poruke izvede novi ključ za sljedeću, a stari nepovratno baci. Zapinjača se, kao na biciklu, vrti samo naprijed — iz današnjeg ključa ne možeš izračunati jučerašnji.
Posljedice su goleme. Ukrade li netko ključeve s tvog telefona danas, jučerašnje poruke ostaju zaključane — ključevi kojima su bile šifrirane više ne postoje nigdje (to se zove forward secrecy). A čim razmijeniš par novih poruka, zapinjača se odvrti dalje i napadač ispada iz razgovora (post-compromise security). Usporedi to s Enigmom, koja je pala jer se obrazac ključeva dao pogoditi — moderna aplikacija promijeni ključ češće nego ti trepneš.
Signal je nedavno u tu zapinjaču ugradio i post-kvantni sloj, pripremajući se za računala koja još ne postoje. O tome smo pisali u prošlom tekstu, a bit će još.
Kako znaš da je lokot stvarno moj?
Ostaje jedna rupa, i poštena aplikacija ti je ne skriva. Javne ključeve dijeli server. A što ako zloćudni server tebi podvali svoj lokot umjesto mojeg? Tvoje poruke tada otključava on, čita ih, ponovno zaključava mojim lokotom i šalje dalje — a nas dvoje ništa ne primjećujemo. To je napad “čovjek u sredini” (man-in-the-middle).
Zato ozbiljne aplikacije nude verifikaciju: Signal to zove safety number, WhatsApp “sigurnosni kod”. To je otisak ključeva vašeg razgovora — usporedite ga uživo ili preko drugog kanala, i ako se brojke slažu, u sredini nema nikoga. Malo tko to radi, i to je u redu za dogovor oko roštilja. Ali ako ikad razgovaraš o nečemu stvarno osjetljivom, tih trideset sekundi verifikacije je razlika između “vjerujem serveru” i “provjerio sam”.
Što E2EE ne štiti (i gdje ljudi stvarno stradaju)
Sad ono što ti većina tekstova o “vojnoj enkripciji” neće reći. E2EE štiti sadržaj poruke na putu. Sve ostalo je izvan njezinog dosega, i praktički svi stvarni upadi u “šifrirane” razgovore događaju se baš tamo:
Krajnje točke. Poruka se na tvom ekranu prikazuje otključana — mora, inače je ne bi mogao pročitati. Netko tko ti uzme otključan telefon, pogleda preko ramena ili ti ubaci špijunski softver čita sve, i najjača šifra svijeta tu ne pomaže. Sjeti se lekcije iz povijesti: šifre ne padaju na matematici, padaju na krajevima.
Sigurnosne kopije. Ovo je najpodmuklija rupa. WhatsApp razgovor je end-to-end šifriran — a onda se navečer cijeli spremi u backup na Google Drive ili iCloud, koji nije nužno end-to-end šifriran osim ako to sam eksplicitno ne uključiš. Godinama su istrage “šifrirane” razgovore čitale jednostavno — iz backupa. Provjeri tu postavku danas; ozbiljno, ovo je najkorisnija rečenica u cijelom tekstu.
Metapodaci. Server ne vidi što pišeš, ali može vidjeti tko s kim, kada, koliko često i koliko dugo. Za onoga tko te promatra, to je često vrednije od sadržaja — obrazac “zvao odvjetnika, pa banku, pa tri sata poruke sa suprugom u dva ujutro” priča priču i bez ijedne pročitane riječi. Aplikacije se jako razlikuju po tome koliko metapodataka uopće čuvaju, i to je tema koja zaslužuje svoj tekst.
Druga strana. I najbanalnije: primatelj može tvoju poruku screenshotati, proslijediti ili naglas pročitati. E2EE je matematika, ne čarolija povjerenja.
Zaključak
Kad sljedeći put pošalješ poruku, znaš što se dogodilo: tvoj telefon je uzeo primateljev javni lokot, zapinjača je izvrtjela svježi ključ samo za tu poruku, server je prenio nečitljivu masu i poruka se otključala tek na drugom kraju. Matematika u toj priči je izvanredna i, koliko znamo, drži.
Ali drži samo svoj dio. Otključan telefon, nešifriran backup i metapodaci ostaju tvoja briga — i zato se sljedeći put bavimo pitanjem koje mi ljudi najčešće postavljaju: po čemu se Signal, WhatsApp i Matrix stvarno razlikuju, kad svi koriste “istu” enkripciju. (Mala najava: razlika nije u šifri.)