Žmonės apibūdina VPN kaip „naudojantį viešojo rakto šifravimą“ ir tada įsivaizduoja, kad kiekvienas paketas užrakinamas serverio sertifikatu. Šis vaizdas klaidingas taip, kad tai svarbu skaitant konfigūracijos failą ar paketų įrašą. Viešojo rakto pusė VPN yra apie tai, kas yra partneris, įrodymą ir susitarimą dėl slaptos medžiagos; simetrinė pusė yra tai, kas iš tikrųjų saugo srautą, paketas po paketo, per visą sesijos gyvavimo laiką.

Abi pusės turi skirtingą galiojimo laiką, skirtingus gedimo būdus ir skirtingus dalykus, kuriuos galima saugiai paskelbti. Kai jas atskiriate, klausimai kaip „ar RSA 2048 silpnesnis už AES-128“ nustoja klaidinti, nes jie niekada nebuvo palyginami.

Trys operacijos, kurios suplakamos

Viešojo rakto kriptografija yra skėtis bent trims skirtingoms operacijoms. Parašas įrodo, kad privataus rakto savininkas patvirtino tam tikrą pranešimą. Raktų susitarimas leidžia dviem partneriams išvesti bendrą paslaptį iš viešai apsikeistų verčių. Viešojo rakto šifravimas paslepia duomenis po kieno nors viešuoju raktu, kad juos atidaryti galėtų tik privatusis raktas.

VPN rankos paspaudimai daugiausia naudoja pirmąsias dvi. Sertifikatas nėra šifravimo raktas; tai pasirašytas pareiškimas, susiejantis vardą su viešuoju raktu ir leidžiantis kitai pusei nuspręsti, ar pasitikėti ką tik gautu raktu. Pavyzdžiui, TLS 1.3 raktų nustatymas grindžiamas (EC)DHE raktų susitarimu ir sertifikato parašais, o ne sesijos šifravimu serverio viešuoju raktu.

Ką iš tikrųjų sukuria rankos paspaudimas

Šiuolaikiniame rankos paspaudime kiekviena pusė sukuria efemerinę raktų porą, apsikeičia viešosiomis pusėmis ir apskaičiuoja bendrą paslaptį, kuri niekada nepereina laidu. Tada ši paslaptis praeina per raktų išvedimo funkciją, kad būtų sukurti atskiri raktai kiekvienai krypčiai, be to, nonce ir IV medžiaga, kurios reikia įrašų sluoksniui. WireGuard tai daro savo Noise pagrindu sukurtu dariniu; TLS 1.3 tai daro HKDF per rankos paspaudimo transkriptą.

Ilgalaikis prisijungimo duomuo — sertifikatas ir privatusis raktas arba statinis WireGuard raktas — autentifikuoja tą apsikeitimą. Jis pasirašo arba įsimaišo į transkriptą, kad pašalietis negalėtų užbaigti rankos paspaudimo partnerio vietoje. Po to prisijungimo duomuo neatlieka darbo kiekvienam paketui. Jei atliktų, kiekvienam paketui reikėtų privataus rakto operacijos, o užimtas tunelis būtų ribojamas lėčiausios operacijos kamino.

Iš to kyla du šalutiniai poveikiai. Pirma, sesijos raktai kiekvieną kartą nauji, todėl užpuolikas, vėliau pavogęs ilgalaikį raktą, negali iššifruoti anksčiau įrašytų sesijų, jei susitarimas buvo efemerinis. Antra, nutekėjęs sesijos raktas pažeidžia vieną sesiją, o ne tapatybę.

Kodėl dideli duomenų kiekiai naudoja simetrinius raktus

Simetriniai šifrai gerai tvarko apimtį: AES-GCM arba ChaCha20-Poly1305 apdoroja kiekvieną paketą jau atmintyje esančiu raktu, autentifikuoja antraštę ir padidina skaitiklį. Priimanti pusė patikrina nonce ir autentifikavimo žymą bei atmeta viską, kas nepavyksta arba kartojasi. Tai pakankamai pigu, kad veiktų linijos greičiu įprastoje techninėje įrangoje, ir ta pati konstrukcija vienu ėjimu suteikia konfidencialumą ir vientisumą.

Konstrukcija taip pat yra vieta, kur gyvena dauguma diegimo klaidų. Pasikartojantis nonce GCM sugadina konfidencialumą ir autentiškumą vienu metu, todėl protokolai išveda raktus kiekvienai krypčiai ir palaiko aiškų skaitiklį ar epochą. Jei skaitote paketų įrašą ir šifruoto teksto ilgis atitinka atvirą tekstą plius fiksuotą papildomą apkrovą, tai dirba simetrinis sluoksnis, o ne viešojo rakto operacija kiekvienam paketui.

Galiojimo laikas, raktų atnaujinimas ir perspektyvioji slaptumas

Sesijos raktai skirti pasibaigti. TLS 1.3 leidžia KeyUpdate pranešimui sukti srauto raktus; WireGuard atnaujina sesiją po nustatyto laiko ar pranešimų skaičiaus ir trumpai laiko senąjį paketams kelyje. OpenVPN pagal grafiką iš naujo derasi dėl savo duomenų kanalo raktų, o reneg-sec kontroliuoja intervalą.

Nė viena iš šių rotacijų nėra tas pats, kas sertifikato atnaujinimas. Sertifikatas gali galioti metus, kol sesijos raktai keičiasi kas kelias minutes, o sertifikatą galima pakeisti neliečiant veikiančio tunelio raktų. Planuodami galiojimo pabaigą, paklauskite, kurį objektą rotuojate; atsakymas nulemia, ar klientai prisijungs iš naujo, ar tik atnaujins raktus.

Skaityti konfigūracijas ir diagnostiką nemaišant objektų

Praktiškai pasirenkate visą protokolą ir jo palaikomus primityvus, o ne surenkate savąjį. OpenVPN --tls-crypt raktas saugo valdymo kanalą; duomenų kanalas naudoja suderėtus simetrinius šifrus. WireGuard PrivateKey ir PublicKey įrašai yra tapatybės medžiaga, o jo transporto raktai išvedami viduje. Šių laukų skaitymas kaip tos pačios rūšies paslapties veda prie klaidų, pavyzdžiui, įklijuoti viešąjį raktą ten, kur turi būti privatusis.

Laikykite viešą medžiagą atskirai nuo privačios. Sertifikatas, WireGuard viešasis raktas ir piršto atspaudas yra saugūs dalytis biliete. Privatusis raktas, iš anksto bendrinamas raktas ir eksportuotas sesijos raktas nėra. Lygindami stiprumą, lyginkite to paties tipo ribose: elipsės kreivės identifikatorius, RSA modulio dydis ir AES rakto dydis matuoja skirtingus dalykus esant skirtingoms prielaidoms. TLS 1.3 specifikacija yra naudinga nuoroda apie tai, kaip du sluoksniai dera tarpusavyje, net kai jūsų tunelis nėra TLS.

Susiję straipsniai