Symmetrinen vs. julkisen avaimen salaus VPN:ssä: mitä kumpikin tekee
VPN todentaa vastapuolet julkisilla avaimilla ja salaa sitten paketit johdetuilla istuntoavaimilla. Käsittele varmenteita ja liikenneavaimia eri objekteina.
Ihmiset kuvaavat VPN:ää „julkisen avaimen salausta käyttäväksi“ ja kuvittelevat sitten jokaisen paketin lukittavan palvelimen varmenteella. Tämä kuva on väärä tavalla, jolla on merkitystä, kun luet asetustiedostoa tai pakettikaappausta. VPN:n julkisen avaimen puolisko koskee sen todistamista, kuka vastapuoli on, ja salaisen materiaalin sopimista; symmetrinen puolisko on se, mikä todella suojaa liikennettä, paketti paketilta, koko istunnon ajan.
Kahdella puoliskolla on eri elinjakset, eri vikatilat ja eri asiat, joita voit turvallisesti julkaista. Kun erotat ne, kysymykset kuten „onko RSA 2048 heikompi kuin AES-128“ lakkaavat hämmentämästä, koska ne eivät koskaan olleet vertailukelpoisia.
Kolme toimintoa, jotka usein sekoitetaan
Julkisen avaimen kryptografia on sateenvarjo ainakin kolmen erillisen toiminnon yllä. Allekirjoitus todistaa, että yksityisen avaimen haltija on hyväksynyt tietyn viestin. Avainsopimus antaa kahden vastapuolen johtaa yhteinen salaisuus arvoista, jotka he vaihtavat julkisesti. Julkisen avaimen salaus piilottaa tiedot jonkun julkisen avaimen alle niin, että vain yksityinen avain voi avata ne.
VPN-kättelyt käyttävät enimmäkseen kahta ensimmäistä. Varmenne ei ole salausavain; se on allekirjoitettu lausuma, joka sitoo nimen julkiseen avaimeen ja antaa toiselle osapuolelle mahdollisuuden päättää, luottaako juuri saamaansa avaimeen. Esimerkiksi TLS 1.3:n avainten luonti perustuu (EC)DHE-avainsopimukseen ja varmenteen allekirjoituksiin, ei istunnon salaamiseen palvelimen julkisella avaimella.
Mitä kättely oikeastaan tuottaa
Nykyaikaisessa kättelyssä kumpikin osapuoli luo efemeerisen avainparin, vaihtaa julkiset puoliskot ja laskee yhteisen salaisuuden, joka ei koskaan kulje johdinta pitkin. Tämä salaisuus ajetaan sitten avainten johdantofunktion läpi, jotta syntyy erilliset avaimet kummallekin suunnalle sekä noncet ja IV-materiaali, joita tietuelohko tarvitsee. WireGuard tekee tämän Noise-pohjaisella rakenteellaan; TLS 1.3 tekee sen HKDF:llä kättelyn transkriptin yli.
Pitkäaikainen tunniste — varmenne ja yksityinen avain tai staattinen WireGuard-avain — todentaa tuon vaihdon. Se allekirjoittaa tai sekoittuu transkriptiin, jotta vieras ei voi suorittaa kättelyä vastapuolen sijasta. Sen jälkeen tunniste ei tee työtä pakettia kohden. Jos tekisi, jokainen paketti tarvitsisi yksityisavaintoiminnon, ja vilkas tunneli rajoittuisi pinon hitaimpaan toimintoon.
Siitä seuraa kaksi sivuvaikutusta. Ensinnäkin istuntoavaimet ovat joka kerta tuoreet, minkä vuoksi hyökkääjä, joka myöhemmin varastaa pitkäaikaisen avaimen, ei voi purkaa aiemmin tallennettuja istuntoja, edellyttäen että sopimus oli efemeerinen. Toiseksi vuotanut istuntoavain vaarantaa yhden istunnon, ei identiteettiä.
Miksi suuret tietomäärät käyttävät symmetrisiä avaimia
Symmetriset salausalgoritmit käsittelevät volyymia hyvin: AES-GCM tai ChaCha20-Poly1305 käsittelevät jokaisen paketin avaimella, joka on jo muistissa, todentavat otsikon ja kasvattavat laskuria. Vastaanottava puoli tarkistaa noncen ja todennusmerkin ja hylkää kaiken, mikä epäonnistuu tai toistuu. Se on tarpeeksi halpaa linjanopeuteen tavallisella laitteistolla, ja sama rakenne antaa luottamuksellisuuden ja eheyden yhdellä kierroksella.
Rakenne on myös paikka, jossa suurin osa toteutusvirheistä elää. Toistuva nonce GCM:ssä rikkoo luottamuksellisuuden ja aitouden kerralla, joten protokollat johtavat avaimet suunnittain ja pitävät yllä eksplisiittistä laskuria tai epookkia. Jos luet pakettikaappausta ja salatekstin pituus vastaa selkotekstiä plus kiinteä yläkustannus, symmetrinen kerros on työssä, ei julkisen avaimen toiminto pakettia kohden.
Elinjaksot, avainten uusiminen ja eteenpäin suuntautuva salaisuus
Istuntoavaimet on tarkoitettu vanhenemaan. TLS 1.3 sallii KeyUpdate-viestin liikenneavainten pyörittämiseen; WireGuard uusii istunnon määritetyn ajan tai viestimäärän jälkeen ja pitää vanhaa hetken matkalla oleville paketeille. OpenVPN neuvottelee datakanavansa avaimet uudelleen aikataulun mukaan, ja reneg-sec ohjaa väliä.
Mikään tuosta pyörittämisestä ei ole sama kuin varmenteen uusiminen. Varmenne voi olla voimassa vuoden, kun taas istuntoavaimet vaihtuvat muutaman minuutin välein, ja varmenne voidaan vaihtaa koskematta käynnissä olevan tunnelin avaimiin. Kun suunnittelet vanhenemista, kysy mitä objektia pyörität; vastaus ratkaisee, yhdistävät kä asiakkaat uudelleen vai vain uusivatko avaimet.
Asetusten ja diagnostiikan lukeminen objekteja sekoittamatta
Käytännössä valitset täydellisen protokollan ja sen tuetut primitiivit, et kokoa omaasi. OpenVPN:n --tls-crypt-avain suojaa ohjauskanavaa; datakanava käyttää neuvoteltuja symmetrisiä salauksia. WireGuardin PrivateKey- ja PublicKey-merkinnät ovat identiteettimateriaalia, kun taas sen siirtoavaimet johdetaan sisäisesti. Näiden kenttien lukeminen samanlaisena salaisuutena johtaa virheisiin, kuten julkisen avaimen liittämiseen sinne, minne yksityinen kuuluu.
Pidä julkinen materiaali erillään yksityisestä. Varmenne, WireGuardin julkinen avain ja sormenjälki ovat turvallisia jakaa tiketissä. Yksityinen avain, jaettu avain ja viety istuntoavain eivät ole. Kun vertailet vahvuuksia, vertaile tyypin sisällä: elliptisen käyrän tunniste, RSA-moduulin koko ja AES-avaimen koko mittaavat eri asioita eri oletuksilla. TLS 1.3 -spesifikaatio on hyödyllinen viite siihen, miten kaksi kerrosta sopivat yhteen, vaikka tunnelisi ei olisi TLS.