Symmetrisk kontra offentlig-nyckel-kryptering i en VPN: vad var och en gör
En VPN autentiserar parter med offentliga nycklar och krypterar sedan paket med härledda sessionsnycklar. Behandla certifikat och trafiknycklar som separata objekt.
Folk beskriver en VPN som „den som använder kryptering med offentlig nyckel“ och föreställer sig sedan att varje paket är låst med serverns certifikat. Den bilden är fel på ett sätt som spelar roll när du läser en konfigurationsfil eller en paketinspelning. VPN:ens offentliga nyckelhalva handlar om att bevisa vem motparten är och att komma överens om hemligt material; den symmetriska halvan är den som faktiskt skyddar trafiken, paket för paket, under hela sessionens livstid.
De två halvorna har olika livstid, olika fellägen och olika saker som säkert kan publiceras. När du skiljer dem åt slutar frågor som „är RSA 2048 svagare än AES-128“ att förvirra, eftersom de aldrig var jämförbara.
Tre operationer som blandas ihop
Kryptografi med offentlig nyckel är ett paraply över minst tre olika operationer. En signatur bevisar att innehavaren av en privat nyckel har godkänt ett visst meddelande. Nyckelöverenskommelse låter två parter härleda en gemensam hemlighet från värden de utbyter öppet. Kryptering med offentlig nyckel gömmer data under någons offentliga nyckel så att bara den privata nyckeln kan öppna dem.
VPN-handskakningar använder mest de två första. Ett certifikat är inte en krypteringsnyckel; det är ett signerat uttalande som binder ett namn till en offentlig nyckel och låter andra sidan avgöra om den ska lita på nyckeln den just fick. Till exempel bygger nyckeluppsättningen i TLS 1.3 på (EC)DHE-nyckelöverenskommelse plus certifikatsignaturer, inte på att kryptera sessionen med serverns offentliga nyckel.
Vad handskakningen faktiskt producerar
I en modern handskakning skapar varje sida ett efemärt nyckelpar, byter de offentliga halvorna och beräknar en gemensam hemlighet som aldrig går över ledningen. Den hemligheten går sedan genom en nyckelhärledningsfunktion och ger separata nycklar för varje riktning, plus nonce-värden och IV-material som postlagret behöver. WireGuard gör detta med sin Noise-baserade konstruktion; TLS 1.3 gör det med HKDF över handskakningens transkript.
Den långsiktiga legitimationen — certifikat och privat nyckel, eller en statisk WireGuard-nyckel — autentiserar det utbytet. Den signerar eller blandar sig in i transkriptet så att en utomstående inte kan slutföra handskakningen i partens ställe. Därefter utför legitimationen inget arbete per paket. Om den gjorde det skulle varje paket kräva en privatnyckeloperation, och en upptagen tunnel skulle begränsas av den långsammaste operationen i stacken.
Två bieffekter följer. För det första är sessionsnycklarna färska varje gång, så en angripare som senare stjäl den långsiktiga nyckeln inte kan dekryptera tidigare inspelade sessioner, förutsatt att överenskommelsen var efemär. För det andra komprometterar en läckt sessionsnyckel en session, inte identiteten.
Varför stora datamängder använder symmetriska nycklar
Symmetriska chiffer hanterar volym bra: AES-GCM eller ChaCha20-Poly1305 behandlar varje paket med en nyckel som redan finns i minnet, autentiserar huvudet och ökar en räknare. Mottagarsidan kontrollerar nonce och autentiseringstagg och kastar allt som misslyckas eller upprepas. Det är billigt nog att köra i linjehastighet på vanlig hårdvara, och samma konstruktion ger konfidentialitet och integritet i en enda genomgång.
Konstruktionen är också där de flesta implementeringsfel bor. En upprepad nonce i GCM bryter konfidentialitet och autenticitet på en gång, så protokollen härleder nycklar per riktning och håller en explicit räknare eller epok. Om du läser en paketinspelning och chiffertextens längd stämmer med klartexten plus ett fast överhäng, är det det symmetriska lagret som arbetar, inte en offentlig-nyckel-operation per paket.
Livstid, nyckelförnyelse och framtida hemlighet
Sessionsnycklar är avsedda att löpa ut. TLS 1.3 låter ett KeyUpdate-meddelande rulla trafiknycklarna; WireGuard förnyar en session efter konfigurerad tid eller antal meddelanden och håller den gamla kort för paket på väg. OpenVPN förhandlar om nycklarna till sin datakanal enligt ett schema, medan reneg-sec styr intervallet.
Ingen av dessa rotationer är detsamma som att förnya ett certifikat. Ett certifikat kan vara giltigt i ett år medan sessionsnycklarna ändras varannan minut, och ett certifikat kan bytas ut utan att röra nycklarna i tunneln som körs. När du planerar utgång, fråga vilket objekt du roterar; svaret avgör om klienterna återansluter eller bara förnyar nycklar.
Läsa konfiguration och diagnostik utan att blanda objekt
I praktiken väljer du ett komplett protokoll och dess stödda primitiver, inte sätter ihop ditt eget. --tls-crypt-nyckeln i OpenVPN skyddar kontrollkanalen; datakanalen använder förhandlade symmetriska chiffer. PrivateKey- och PublicKey-posterna i WireGuard är identitetsmaterial, medan dess transportnycklar härleds internt. Att läsa dessa fält som samma sorts hemlighet leder till fel som att klistra in en offentlig nyckel där en privat ska vara.
Håll offentligt material skilt från privat. Ett certifikat, en offentlig WireGuard-nyckel och ett fingeravtryck är säkra att dela i ett ärende. En privat nyckel, en fördelad nyckel och en exporterad sessionsnyckel är det inte. När du jämför styrka, jämför inom en typ: en elliptisk-kurva-identifierare, en RSA-modulstorlek och en AES-nyckelstorlek mäter olika saker under olika antaganden. TLS 1.3-specifikationen är en användbar referens för hur de två lagren passar ihop, även när din tunnel inte är TLS.