Az emberek úgy írják le a VPN-t, mint ami „nyilvános kulcsú titkosítást használ“, majd azt képzelik, hogy minden csomagot a szerver tanúsítványa zár le. Ez a kép olyan módon hibás, ami számít, amikor konfigurációs fájlt vagy csomagrögzítést olvas. A VPN nyilvános kulcsú fele arról szól, hogy bizonyítsa, ki a fél, és megállapodjon titkos anyagban; a szimmetrikus fele az, ami valóban védi a forgalmat, csomagról csomagra, a munkamenet teljes élettartama alatt.

A két félnek különböző élettartama, különböző hibaformái és különböző biztonságosan közzétehető dolgai vannak. Ha szétválasztja őket, az olyan kérdések, mint „gyengébb-e az RSA 2048 az AES-128-nál“, megszűnnek összezavarni, mert soha nem voltak összehasonlíthatók.

Három művelet, amelyet összekevernek

A nyilvános kulcsú kriptográfia ernyő legalább három különböző művelet felett. Az aláírás bizonyítja, hogy a privát kulcs birtokosa jóváhagyott egy adott üzenetet. A kulcsegyeztetés lehetővé teszi két félnek, hogy nyilvánosan kicserélt értékekből közös titkot származtasson. A nyilvános kulcsú titkosítás valaki nyilvános kulcsa alá rejti az adatokat, így csak a privát kulcs nyithatja meg őket.

A VPN-kézfogások többnyire az első kettőt használják. A tanúsítvány nem titkosítási kulcs; ez egy aláírt nyilatkozat, amely egy nevet nyilvános kulcshoz köt, és lehetővé teszi a másik félnek, hogy eldöntse, megbízik-e a most kapott kulcsban. A TLS 1.3 kulcsépítése például (EC)DHE kulcsegyeztetésen és tanúsítvány-aláírásokon alapul, nem a munkamenet szerver nyilvános kulcsával való titkosításán.

Mit állít elő valójában a kézfogás

Egy modern kézfogásban mindkét fél efemer kulcspárt hoz létre, kicseréli a nyilvános feleket, és kiszámít egy közös titkot, amely soha nem megy át a vezetéken. Ez a titok ezután kulcsszármaztatási függvényen halad át, hogy külön kulcsokat állítson elő mindkét irányhoz, valamint a rekordréteg által igényelt nonce-okat és IV-anyagot. A WireGuard ezt Noise-alapú konstrukciójával teszi; a TLS 1.3 pedig HKDF-fel a kézfogás átiratán.

A hosszú távú hitelesítő adat — tanúsítvány és privát kulcs, vagy egy statikus WireGuard-kulcs — hitelesíti ezt a cserét. Aláírja vagy beleolvad az átiratba, hogy egy idegen ne tudja helyettesíteni a felet a kézfogás befejezésekor. Ezután a hitelesítő adat nem végez munkát csomagonként. Ha végezne, minden csomaghoz privátkulcs-művelet kellene, és egy forgalmas alagút a veremben lévő leglassabb művelethez igazodna.

Két mellékhatás következik. Először is, a munkamenet-kulcsok minden alkalommal frissek, ezért a hosszú távú kulcsot később ellopó támadó nem tudja visszafejteni a korábban rögzített munkameneteket, feltéve hogy a megállapodás efemer volt. Másodszor, egy kiszivárgott munkamenet-kulcs egy munkamenetet veszélyeztet, nem az identitást.

Miért használnak a nagy adatmennyiségek szimmetrikus kulcsokat

A szimmetrikus rejtjelek jól kezelik a mennyiséget: az AES-GCM vagy a ChaCha20-Poly1305 minden csomagot egy már memóriában lévő kulccsal dolgoz fel, hitelesíti a fejlécet és növel egy számlálót. A fogadó fél ellenőrzi a nonce-ot és a hitelesítési címkét, és eldobja mindazt, ami meghiúsul vagy ismétlődik. Ez elég olcsó ahhoz, hogy vonalsebességen fusson hétköznapi hardveren, és ugyanaz a konstrukció egy menetben ad bizalmasságot és sértetlenséget.

A konstrukció az a hely is, ahol a legtöbb implementációs hiba él. Az ismételt nonce a GCM-ben egyszerre töri meg a bizalmasságot és a hitelességet, ezért a protokollok irányonként származtatnak kulcsokat, és explicit számlálót vagy korszakot tartanak. Ha csomagrögzítést olvas, és a rejtjelezett szöveg hossza megegyezik a nyílt szöveg plusz fix többlet hosszával, akkor a szimmetrikus réteg dolgozik, nem egy nyilvános kulcsú művelet csomagonként.

Élettartamok, kulcsfrissítés és előretekintő titoktartás

A munkamenet-kulcsoknak le kell járniuk. A TLS 1.3 lehetővé teszi egy KeyUpdate üzenet számára a forgalmi kulcsok gördítését; a WireGuard beállított idő vagy üzenetszám után frissíti a munkamenetet, és rövid ideig megtartja a régit az úton lévő csomagokhoz. OpenVPN ütemezés szerint újratárgyalja adatcsatornája kulcsait, a reneg-sec pedig az intervallumot szabályozza.

Ezek közül egyik gördítés sem ugyanaz, mint egy tanúsítvány megújítása. Egy tanúsítvány egy évig érvényes lehet, miközben a munkamenet-kulcsok néhány percenként változnak, és egy tanúsítvány lecserélhető anélkül, hogy hozzányúlnánk a futó alagút kulcsaihoz. Amikor lejáratot tervez, kérdezze meg, melyik objektumot gördíti; a válasz eldönti, hogy az ügyfelek újra csatlakoznak-e, vagy csak kulcsot frissítenek.

Konfigurációk és diagnosztika olvasása objektumok keverése nélkül

A gyakorlatban egy teljes protokollt és annak támogatott primitíveit választja, nem sajátot állít össze. Az OpenVPN --tls-crypt kulcsa védi a vezérlőcsatornát; az adatcsatorna egyeztetett szimmetrikus rejtjeleket használ. A WireGuard PrivateKey és PublicKey bejegyzései identitásanyagok, míg szállítási kulcsai belsőleg származnak. E mezők azonos fajtájú titokként való olvasása olyan hibákhoz vezet, mint a nyilvános kulcs beillesztése oda, ahová a privát való.

Tartsa a nyilvános anyagot elkülönítve a priváttól. Egy tanúsítvány, egy WireGuard nyilvános kulcs és egy ujjlenyomat biztonságosan megosztható egy ticketben. A privát kulcs, az előre megosztott kulcs és az exportált munkamenet-kulcs nem. Amikor erősségeket hasonlít össze, típuson belül hasonlítson: egy elliptikus görbe azonosító, egy RSA modulusméret és egy AES kulcsméret különböző dolgokat mér különböző feltevések mellett. A TLS 1.3 specifikáció hasznos hivatkozás arra, hogyan illeszkedik a két réteg, akkor is, ha az alagútja nem TLS.

Kapcsolódó cikkek