Folk beskriver en VPN som „en, der bruger offentlig-nøgle-kryptering“ og forestiller sig så, at hver pakke låses med serverens certifikat. Det billede er forkert på en måde, der betyder noget, når du læser en konfigurationsfil eller en pakkeoptagelse. Den offentlige halvdel af en VPN handler om at bevise, hvem parteren er, og aftale hemmeligt materiale; den symmetriske halvdel er det, der faktisk beskytter trafikken, pakke efter pakke, gennem hele sessionens levetid.

De to halvdele har forskellige levetider, forskellige fejltilstande og forskellige ting, du sikkert kan offentliggøre. Når du skiller dem ad, holder spørgsmål som „er RSA 2048 svagere end AES-128“ op med at forvirre, fordi de aldrig var sammenlignelige.

Tre operationer, der bliver slået sammen

Offentlig-nøgle-kryptografi er en paraply over mindst tre forskellige operationer. En signatur beviser, at indehaveren af en privat nøgle har godkendt en bestemt besked. Nøgleaftale lader to parter udlede en fælles hemmelighed fra værdier, de udveksler offentligt. Offentlig-nøgle-kryptering skjuler data under nogens offentlige nøgle, så kun den private nøgle kan åbne det.

VPN-håndtryk bruger mest de to første. Et certifikat er ikke en krypteringsnøgle; det er en signeret erklæring, der binder et navn til en offentlig nøgle, og som lader den anden side afgøre, om den skal stole på den nøgle, den netop har fået. TLS 1.3-nøgleetablering bygger for eksempel på (EC)DHE-nøgleaftale plus certifikatsignaturer, ikke på at kryptere sessionen med serverens offentlige nøgle.

Hvad håndtrykket faktisk producerer

I et moderne håndtryk genererer hver side et efemært nøglepar, udveksler de offentlige halvdele og beregner en fælles hemmelighed, der aldrig krydser ledningen. Den hemmelighed køres derefter gennem en nøgleafledningsfunktion for at producere separate nøgler til hver retning samt de nonces og det IV-materiale, postlaget har brug for. WireGuard gør dette med sin Noise-baserede konstruktion; TLS 1.3 gør det med HKDF over håndtrykkets transskription.

Den langvarige legitimation — certifikat og privat nøgle eller en statisk WireGuard-nøgle — autentificerer den udveksling. Den signerer eller blandes ind i transskriptionen, så en fremmed ikke kan fuldføre håndtrykket i parterens sted. Derefter udfører legitimationen ikke arbejde pr. pakke. Hvis den gjorde, ville hver pakke kræve en privatnøgleoperation, og en travl tunnel ville være begrænset af den langsomste operation i stakken.

To bivirkninger følger. For det første er sessionsnøglerne friske hver gang, hvilket er grunden til, at en angriber, der senere stjæler den langvarige nøgle, ikke kan dekryptere tidligere optagne sessioner, forudsat at aftalen var efemær. For det andet kompromitterer en lækket sessionsnøgle én session, ikke identiteten.

Hvorfor store datamængder bruger symmetriske nøgler

Symmetriske cifre håndterer volumen godt: AES-GCM eller ChaCha20-Poly1305 behandler hver pakke med en nøgle, der allerede er i hukommelsen, autentificerer headeren og øger en tæller. Modtagersiden kontrollerer nonce og autentificeringstagg og dropper alt, der fejler eller gentages. Det er billigt nok til at køre med linjehastighed på almindeligt hardware, og samme konstruktion giver fortrolighed og integritet i ét gennemløb.

Konstruktionen er også der, hvor de fleste implementeringsfejl bor. En gentaget nonce i GCM bryder fortrolighed og ægthed på én gang, så protokoller udleder nøgler pr. retning og holder en eksplicit tæller eller epoke. Hvis du læser en pakkeoptagelse, og ciffertekstens længde svarer til klarteksten plus et fast overhead, er det det symmetriske lag, der arbejder, ikke en offentlig-nøgle-operation pr. pakke.

Levetider, nøglefornyelse og fremadrettet hemmeligholdelse

Sessionsnøgler skal udløbe. TLS 1.3 tillader en KeyUpdate-besked at rulle trafiknøglerne; WireGuard fornyer en session efter en konfigureret tid eller beskedantal og beholder den gamle kortvarigt til pakker undervejs. OpenVPN forhandler sine datakanalnøgler igen efter en tidsplan, med reneg-sec der styrer intervallet.

Ingen af den rotation er det samme som at forny et certifikat. Et certifikat kan være gyldigt i et år, mens sessionsnøglerne skifter hvert par minutter, og et certifikat kan udskiftes uden at røre den kørende tunnels nøgler. Når du planlægger en udløbsdato, så spørg, hvilket objekt du roterer; svaret afgør, om klienter genopretter forbindelsen eller blot fornyer nøgler.

Læs konfigurationer og diagnostik uden at blande objekter

I praksis vælger du en komplet protokol og dens understøttede primitiver, ikke at sammensætte din egen. OpenVPN's --tls-crypt-nøgle beskytter kontrolkanalen; datakanalen bruger forhandlede symmetriske cifre. WireGuard's PrivateKey- og PublicKey-poster er identitetsmateriale, mens dens transportnøgler udledes internt. At læse de felter som samme slags hemmelighed fører til fejl som at indsætte en offentlig nøgle, hvor en privat hører til.

Hold offentligt materiale adskilt fra privat. Et certifikat, en offentlig WireGuard-nøgle og et fingeraftryk er sikre at dele i en ticket. En privat nøgle, en forud delt nøgle og en eksporteret sessionsnøgle er det ikke. Når du sammenligner styrker, sammenlign inden for en type: en elliptisk-kurve-identifikator, en RSA-modulusstørrelse og en AES-nøglestørrelse måler forskellige ting under forskellige antagelser. TLS 1.3-specifikationen er en nyttig reference til, hvordan de to lag passer sammen, selv når din tunnel ikke er TLS.

Relaterede artikler