Ljudi opisuju VPN kao „onaj koji koristi šifrovanje javnim ključem“ i zatim zamišljaju da je svaki paket zaključan sertifikatom servera. Ta slika je pogrešna na način koji je važan kada čitate konfiguracionu datoteku ili snimak paketa. Javna polovina VPN-a služi da dokaže ko je partner i da se dogovori tajni materijal; simetrična polovina je ona koja zaista štiti saobraćaj, paket po paket, kroz ceo život sesije.

Dve polovine imaju različit životni vek, različite režime otkaza i različite stvari koje se mogu bezbedno objaviti. Kada ih razdvojite, pitanja poput „da li je RSA 2048 slabija od AES-128“ prestaju da zbunjuju, jer nikada nisu bila uporediva.

Tri operacije koje se mešaju

Kriptografija javnog ključa je kišobran nad najmanje tri različite operacije. Potpis dokazuje da je vlasnik privatnog ključa odobrio određenu poruku. Dogovor o ključu omogućava dvema stranama da izvedu zajedničku tajnu iz vrednosti koje razmenjuju javno. Šifrovanje javnim ključem skriva podatke pod nečijim javnim ključem, tako da ih samo privatni ključ može otvoriti.

VPN rukovanja uglavnom koriste prve dve. Sertifikat nije ključ za šifrovanje; to je potpisana izjava koja vezuje ime za javni ključ i omogućava drugoj strani da odluči da li da veruje ključu koji je upravo dobila. Na primer, uspostavljanje ključeva u TLS 1.3 zasniva se na dogovoru o ključu (EC)DHE i potpisima sertifikata, a ne na šifrovanju sesije javnim ključem servera.

Šta rukovanje zaista proizvodi

U modernom rukovanju svaka strana pravi efemerni par ključeva, razmenjuje javne polovine i izračunava zajedničku tajnu koja nikada ne prelazi preko žice. Ta tajna zatim prolazi kroz funkciju izvođenja ključeva i daje odvojene ključeve za svaki smer, uz nonce vrednosti i IV materijal koji zapisni sloj traži. WireGuard to radi svojom konstrukcijom zasnovanom na Noise; TLS 1.3 to radi HKDF-om nad transkriptom rukovanja.

Dugoročna akreditacija — sertifikat i privatni ključ ili statički WireGuard ključ — autentifikuje tu razmenu. Ona potpisuje ili se meša u transkript, tako da stranac ne može da završi rukovanje na mestu partnera. Posle toga akreditacija ne obavlja rad po paketu. Da obavlja, svaki paket bi tražio operaciju privatnim ključem, a zauzet tunel bi bio ograničen najsporijom operacijom u steku.

Slede dve nuspojave. Prvo, sesijski ključevi su svaki put novi, pa napadač koji kasnije ukrade dugoročni ključ ne može da dešifruje ranije snimljene sesije, pod uslovom da je dogovor bio efemeran. Drugo, procureli sesijski ključ kompromituje jednu sesiju, ne identitet.

Zašto velike količine podataka koriste simetrične ključeve

Simetrične šifre dobro podnose obim: AES-GCM ili ChaCha20-Poly1305 obrađuju svaki paket ključem koji je već u memoriji, autentifikuju zaglavlje i uvećavaju brojač. Prijemna strana proverava nonce i oznaku autentifikacije i odbacuje sve što ne prođe ili se ponovi. To je dovoljno jeftino za rad brzinom linije na običnom hardveru, a ista konstrukcija daje poverljivost i integritet u jednom prolazu.

Konstrukcija je i mesto gde živi većina grešaka u implementaciji. Ponovljeni nonce u GCM kvari poverljivost i autentičnost odjednom, pa protokoli izvode ključeve po smeru i drže eksplicitni brojač ili epohu. Ako čitate snimak paketa i dužina šifrovanog teksta odgovara otvorenom tekstu plus fiksni dodatak, radi simetrični sloj, a ne operacija javnim ključem po paketu.

Životni vek, obnavljanje ključeva i tajnost unapred

Sesijski ključevi treba da isteknu. TLS 1.3 dozvoljava da poruka KeyUpdate zavrti ključeve saobraćaja; WireGuard obnavlja sesiju posle podešenog vremena ili broja poruka i kratko drži stari ključ za pakete na putu. OpenVPN ponovo pregovara ključeve svog podatkovnog kanala po rasporedu, a reneg-sec kontroliše interval.

Nijedna od tih rotacija nije isto što i obnavljanje sertifikata. Sertifikat može da važi godinu dana dok se sesijski ključevi menjaju svakih nekoliko minuta, a sertifikat može da se zameni bez diranja ključeva tunela koji radi. Kada planirate istek, pitajte koji objekat rotirate; odgovor odlučuje da li će se klijenti ponovo povezati ili samo obnoviti ključeve.

Čitanje konfiguracija i dijagnostike bez mešanja objekata

U praksi birate kompletan protokol i njegove podržane primitive, a ne sastavljate svoj. Ključ --tls-crypt OpenVPN-a štiti kontrolni kanal; podatkovni kanal koristi pregovorene simetrične šifre. Unosi PrivateKey i PublicKey WireGuard-a su materijal identiteta, dok se njegovi transportni ključevi izvode interno. Čitanje tih polja kao iste vrste tajne vodi do grešaka poput lepljenja javnog ključa tamo gde pripada privatni.

Držite javni materijal odvojeno od privatnog. Sertifikat, javni WireGuard ključ i otisak prsta su bezbedni za deljenje u tiketu. Privatni ključ, unapred podeljeni ključ i izvezeni sesijski ključ nisu. Kada poredite snagu, poredite unutar jednog tipa: identifikator eliptične krive, veličina RSA modula i veličina AES ključa mere različite stvari pod različitim pretpostavkama. Specifikacija TLS 1.3 je korisna referenca o tome kako se dva sloja uklapaju, čak i kada vaš tunel nije TLS.

Povezani članci