Mange beskriver en VPN som «den som bruker offentlig nøkkel-kryptering» og forestiller seg at hver pakke låses med tjenerens sertifikat. Det bildet er feil på en måte som betyr noe når du leser en konfigurasjonsfil eller et pakkeopptak. Den offentlige nøkkelhalvdelen handler om å bevise hvem motparten er og å bli enige om hemmelig materiale; den symmetriske halvdelen er den som reelt beskytter trafikken, pakke for pakke, gjennom hele sesjonens leveltid.

De to halvdelene har forskjellig leveltid, forskjellige feilmoduser og forskjellige ting som trygt kan publiseres. Når de skilles, slutter spørsmål som «er RSA 2048 svakere enn AES-128» å skape forvirring, siden de aldri var sammenlignbare.

Tre operasjoner som blandes sammen

Offentlig nøkkel-kryptografi er en paraply over minst tre ulike operasjoner. En signatur beviser at eieren av en privat nøkkel har godkjent en bestemt melding. Nøkkelavtale gjør at to parter kan utlede en felles hemmelighet fra verdier de utveksler åpent. Offentlig nøkkel-kryptering skjuler data under en annens offentlige nøkkel, slik at bare den private nøkkelen kan åpne dem.

VPN-håndtrykk bruker for det meste de to første. Et sertifikat er ikke en krypteringsnøkkel; det er en signert erklæring som knytter et navn til en offentlig nøkkel og lar den andre siden avgjøre om den skal stole på nøkkelen den nettopp mottok. Etableringen av TLS 1.3-nøkler bygger for eksempel på (EC)DHE-nøkkelavtale og sertifikatsignaturer, ikke på å kryptere sesjonen med tjenerens offentlige nøkkel.

Hva håndtrykket faktisk frembringer

I et moderne håndtrykk lager hver side et efemært nøkkelpar, utveksler de offentlige halvdelene og beregner en felles hemmelighet som aldri går over ledningen. Hemmeligheten går så gjennom en nøkkelavledningsfunksjon og gir separate nøkler for hver retning, i tillegg til nonce-verdier og IV-materiale som postlaget trenger. WireGuard gjør dette med sin Noise-baserte konstruksjon; TLS 1.3 gjør det med HKDF over håndtrykkstranskriptet.

Den langsiktige legitimasjonen — sertifikat og privat nøkkel, eller en statisk WireGuard-nøkkel — autentiserer utvekslingen. Den signerer eller blandes inn i transkriptet slik at en utenforstående ikke kan fullføre håndtrykket på motpartens vegne. Etterpå utfører legitimasjonen ikke arbeid per pakke. Hvis den gjorde det, ville hver pakke kreve en privatnøkkeloperasjon, og en travel tunnel ville være begrenset av den langsomste operasjonen i stakken.

To sidevirkninger følger. For det første er sesjonsnøklene nye hver gang, så en angriper som senere stjeler den langsiktige nøkkelen, ikke kan dekryptere tidligere innspilte sesjoner så lenge avtalen var efemær. For det andre rammer en lekket sesjonsnøkkel én sesjon, ikke identiteten.

Hvorfor store datamengder bruker symmetriske nøkler

Symmetriske chiffere håndterer volum godt: AES-GCM eller ChaCha20-Poly1305 behandler hver pakke med en nøkkel som allerede ligger i minnet, autentiserer hodet og øker en teller. Mottakersiden kontrollerer nonce og autentiseringstagg og forkaster alt som feiler eller gjentas. Dette er billig nok til å gå i linjehastighet på vanlig maskinvare, og samme konstruksjon gir konfidensialitet og integritet i én gjennomkjøring.

Konstruksjonen er også der de fleste implementasjonsfeilene bor. En gjentatt nonce i GCM bryter både konfidensialitet og autentisitet på én gang, så protokollene avleder nøkler per retning og holder en eksplisitt teller eller epoke. Leser du et pakkeopptak og lengden på chifferteksten tilsvarer klarteksten pluss en fast overheng, er det det symmetriske laget som arbeider, ikke en offentlig nøkkel-operasjon per pakke.

Leveltid, nøkkelrotasjon og fremoverrettet hemmelighold

Sesjonsnøkler skal utløpe. TLS 1.3 lar en KeyUpdate-melding rulle trafikknøklene; WireGuard fornyer en sesjon etter konfigurert tid eller antall meldinger og holder den gamle kort for pakker underveis. OpenVPN forhandler på nytt om nøklene til datakanalen etter en plan, mens reneg-sec styrer intervallet.

Ingen av disse rotasjonene er det samme som å fornye et sertifikat. Et sertifikat kan være gyldig i ett år mens sesjonsnøklene skiftes hvert par minutter, og et sertifikat kan byttes ut uten å berøre nøklene i tunnelen som kjører. Når utløp planlegges, spør hvilket objekt du roterer; svaret avgjør om klientene kobler til på nytt eller bare fornyer nøkler.

Les konfigurasjon og diagnostikk uten å blande objektene

I praksis velger du en komplett protokoll og dens støttede primitiver i stedet for å sette sammen din egen. --tls-crypt-nøkkelen i OpenVPN beskytter kontrollkanalen; datakanalen bruker forhandlede symmetriske chiffere. PrivateKey- og PublicKey-oppføringene i WireGuard er identitetsmateriale, mens transportnøklene avledes internt. Å lese disse feltene som samme slags hemmelighet fører til feil som å lime en offentlig nøkkel der en privat skal ligge.

Hold offentlig materiale atskilt fra privat. Et sertifikat, en offentlig WireGuard-nøkkel og et fingeravtrykk kan trygt deles i en sak. En privat nøkkel, en forhåndsdelt nøkkel og en eksportert sesjonsnøkkel kan ikke. Når styrke sammenlignes, sammenlign innenfor én type: en elliptisk-kurve-identifikator, en RSA-modulusstørrelse og en AES-nøkkelstørrelse måler ulike ting under ulike forutsetninger. TLS 1.3-spesifikasjonen er en nyttig referanse for hvordan de to lagene passer sammen, selv når tunnelen din ikke er TLS.

Relaterte artikler